经过上次晚交作业导致没分以后

我再也不敢晚交作业了

今天就把这次作业先写了

homework Part 1

1. 理解C++变量的作用域和生命周期

a) 用少于10行代码演示你对局部变量的生命周期的理解

#include<stdio.h>
int fun()
{
int a;
a=;
printf("局部变量的a值%d\n",a);
return a;
}
int main()
{
int a=;
fun();
a++;
printf("主函数的a值%d\n",a);
}

写了这样一段函数

运行结果

在fun函数中定义了一个int a

但是他的生命周期仅限于fun函数中

在main中定义一个a以后

调用fun函数

由于离开了fun的生命周期

最后的printf输出main的a的值的时候是a=4,然后a++的运算即是5

fun中的函数也不受到main中a=4的影响

互不干涉

homework Part 2

2. 理解堆和栈,两种内存的申请和释放的方式

a) 用少于30行代码演示你对堆和栈两种内存申请方式的理解

我写下了这段代码

#include "iostream.h"
int main()
{
int size;
float sum1=;
float sum2=;
int *heapArray;
int stackArray[];
cout <<"请输入元素个数:";
cin >>size;
heapArray=new int[size];//创建堆内存数组
cout <<"请输入各元素:" <<endl;
for (int i=;i<size;i++)
{
cin >>heapArray[i];
stackArray[i]=heapArray[i];
sum1=sum1+heapArray[i];
sum2=sum2+stackArray[i];
}
cout <<"这些数的平均值为(堆内存)" <<sum1/size <<endl;
cout <<"这些数的平均值为(栈内存)" <<sum2/size <<endl;
delete [] heapArray;
return ;
}

运行结果

我对堆内存和栈内存的理解

堆内存是需要手动释放的

而栈内存是我们平时常用的方法

对于堆内存,程序员可以根据自己的需要来创建内存大小,并且由自己管理内存

缺点也显而易见,容易产生内存泄露

而栈内存需要事先定义好,由系统来控制他的释放,不自由

用百度上别人打的一个比喻

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

homework Part 3

理解unique_ptr和shared_ptr

在课上,我觉得老师已经讲的十分清楚了

不知道我理解的对不对

unique_ptr是一对一的指针模式

shared_ptr是多对一的指针模式

所谓unique_ptr就是一个指针对应一个地址

这个地址的数据不能由新的指针指向

相当于unique_ptr与对应的那个地址的数据绑定了

当unique_ptr失效的时候,对应绑定的数据也同时被释放

而shared_ptr就是多个指针对应一个地址

这个数据由多个指针指向

每多一个指针,系统内部计数器+1

当删除指针的时候,系统内部计数器-1

当系统内部计数器到达0时

最后一个shared_ptr对应的数据被删除

homework Part 4


#include <stdio.h>
#include <string.h>
#include <stdlib.h>


char ch;
char token[100]={0};


void retract(FILE *file)
{
 fseek(file,-1,SEEK_CUR);
}


void catToken()
{
 token[strlen(token)] = ch;
}


void clearToken(){                          
 memset(token,0,sizeof(token));
}


int isLetter()
{
 if((ch>='a' &&ch<='z')||(ch>='A'&&ch<='Z')||ch<0)
  return 1;
 else return 0;
}


int isDigit()
{
 if (ch>='0'&&ch<='9')
  return 1;
 else return 0;
}


int isColon()
{
 if (ch==':')
  return 1;
 else return 0;
}


int isDivi()
{
 if (ch=='/')
  return 1;
 else return 0;
}


int isPeriod()
{
    if (ch=='.')
        return 1;
    else return 0;
}
int isSpace()
{
 if (ch==' ')
  return 1;
 else return 0;
}
int isNewline()
{
 if (ch=='\n')
  return 1;
 else return 0;
}
int isTab()
{
 if (ch==' ')
  return 1;
 else return 0;
}
int is__()
{
 if (ch=='-')
  return 1;
 else return 0;
}
int is_()
{
 if (ch=='_')
  return 1;
 else return 0;
}


int getsym(FILE *file)


{
 clearToken();
 ch=fgetc(file);
 while(isSpace() || isNewline()|| isTab())  ch = fgetc(file);
 while(isColon() || isDivi()|| isPeriod())  ch = fgetc(file);
    while(isLetter()||is_()||is__()||isDigit())
  {catToken();
  ch=fgetc(file);
        if (ch==EOF) break; }
}


int main()
{
 FILE *read;
 FILE *write;
 int count=1;
 char fname[100] = {0}; 
 printf("请输入文件名\n");
 gets(fname);
 read =fopen(fname,"r");     
 write =fopen("cut.txt", "w" );
    if((read=fopen(fname,"r"))!=NULL)
    {
  getsym(read); 
  fprintf(write,"%s\n",token);
  while(!feof(read))
  { 
            getsym(read); 
   fprintf(write,"%s\n",token);    
    
  }
        
    }
 else
 {
  printf("error.\n");
 }
 return 0;
}


运行结果

HTTP

SITE

中文识别

这个程序是由我的编译作业词法分析程序改编过来的,算是代码重用啦~

homework-08 C++课程课后思考与练习的更多相关文章

  1. CentOS7入门到精通实战课程课后习题

    Linux自动化运维系列①: CentOS7入门到精通实战--->传送门 http://edu.51cto.com/course/13055.html 01.系统入门课后习题 1.口述一个命令执 ...

  2. 关于Python课程的思考和意见

    老师您好,我是信息管理与信息系统专业的一名学生,由于专业原因,我在大一下学期第一次接触Python,并因为它简洁的语言和强大的函数库所吸引,刚好在选课时得知学校有开python选修课,就慕名而来. 首 ...

  3. 清华EMBA课程系列思考之三 -- 中国经济与金融

    清华EMBA的第三次课,大家都已经渐渐了解了课程系列的基本节奏,也逐步适应了思考的基本思路,本次课程涉及到的全部内容都非常专业.闲话少述,直入主题了. 李稻葵教授部分: -- 清华大学经济管理学院弗里 ...

  4. java课程课后作业190425之一维数组最大子数组(界面实现)

    题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...

  5. Java课程课后作业190309之连续最大子数组

    老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在 ...

  6. java课后思考问题(一)

    1.一个Java类文件中真的只能有一个共有类吗? 一个Java类文件中只能有一个公有类 2.请使用Eclipse或javac检测一下以下代码,有错吗? 在Java中,可以将一个类定义在另一个类里面或者 ...

  7. 清华EMBA课程系列思考之六 -- 比較文明视野下的中华领导智慧、企业管理与经济解析

    告别马年的最后一缕阳光,踏着猴年的钟声,度过了温馨的春节,已然开启了新学期的第一堂课.看题目其貌不扬,但一旦进入课堂,已然聚精会神.唯恐掉队,就请大家跟我一起进入四天的心路修炼旅程,開始我们的新一期思 ...

  8. JAVAWEB第一节课的课后思考

    第一开发一个网站需要的一些技术 至少熟悉一种建站程序.(html,javascript等等)对空间和域名的知识有一定的了解.有一些美工基础(例如ps设计等等).对编程有一些了解.HTML的代码知识基本 ...

  9. java课程课后作业190616之个人学期总结

    在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...

随机推荐

  1. MFC中快速应用OpenCV教程

    论坛上看到非常经典的VS2008 + OpenCV 2.0下的配置过程: (这里用的是opencv2.0) 1. 文件 | 项目 | MFC | MFC应用程序 |(新名称如MFCtest)|next ...

  2. (三)CSS高级语法

    选择器分组 可以对选择器进行分组,被分组的选择器可以分享相同的声明,用逗号将需要分组的选择器分开.例如: h1,h2,h3,h4,h5,h6 { color: green; } 继承以及其问题一般,子 ...

  3. android.content.Context 含义及使用

    Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Con ...

  4. nand flash 扇区的管理以及初始化

    (1)首先需要了解NAND FLASH的结构.如图: 以镁光MT29F4G08BxB Nand Flash为例,这款Flash(如上图)以4个扇区(sector)组成1个页(page),64个页(pa ...

  5. Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程

    最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...

  6. Base64 Encoding / Decoding in Node.js

    Posted on April 20th, 2012 under Node.js Tags: ASCII, Buffer, Encoding, node.js, UTF So how do you e ...

  7. Catalan数推导(转载)

    Raney引理: 设整数序列A = {Ai, i=1, 2, …, N},且部分和Sk=A1+…+Ak,序列中所有的数字的和SN=1,在A的N个循环表示中,有且仅有一个序列B,满足B的任意部分和Si均 ...

  8. ASP.NET线程相关配置

    1.(maxWorkerThreads * CPU逻辑数量)-minFreeThreads 比如2个CPU默认配置maxWorkerThreads=100,minFreeThreads=176,则同时 ...

  9. BZOJ3850: ZCC Loves Codefires

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3850 题解:类似于国王游戏,推一下相邻两个元素交换的条件然后排个序就可以了. 代码: #inc ...

  10. html5客户端跨域访问php服务端数据

    客户端代码: var param = $.param( { feed:JSON.stringify({ content:'abcd' }) } ); $http({ url: 'http://61.1 ...