homework-08 C++课程课后思考与练习
经过上次晚交作业导致没分以后
我再也不敢晚交作业了
今天就把这次作业先写了
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++课程课后思考与练习的更多相关文章
- CentOS7入门到精通实战课程课后习题
Linux自动化运维系列①: CentOS7入门到精通实战--->传送门 http://edu.51cto.com/course/13055.html 01.系统入门课后习题 1.口述一个命令执 ...
- 关于Python课程的思考和意见
老师您好,我是信息管理与信息系统专业的一名学生,由于专业原因,我在大一下学期第一次接触Python,并因为它简洁的语言和强大的函数库所吸引,刚好在选课时得知学校有开python选修课,就慕名而来. 首 ...
- 清华EMBA课程系列思考之三 -- 中国经济与金融
清华EMBA的第三次课,大家都已经渐渐了解了课程系列的基本节奏,也逐步适应了思考的基本思路,本次课程涉及到的全部内容都非常专业.闲话少述,直入主题了. 李稻葵教授部分: -- 清华大学经济管理学院弗里 ...
- java课程课后作业190425之一维数组最大子数组(界面实现)
题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...
- Java课程课后作业190309之连续最大子数组
老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在 ...
- java课后思考问题(一)
1.一个Java类文件中真的只能有一个共有类吗? 一个Java类文件中只能有一个公有类 2.请使用Eclipse或javac检测一下以下代码,有错吗? 在Java中,可以将一个类定义在另一个类里面或者 ...
- 清华EMBA课程系列思考之六 -- 比較文明视野下的中华领导智慧、企业管理与经济解析
告别马年的最后一缕阳光,踏着猴年的钟声,度过了温馨的春节,已然开启了新学期的第一堂课.看题目其貌不扬,但一旦进入课堂,已然聚精会神.唯恐掉队,就请大家跟我一起进入四天的心路修炼旅程,開始我们的新一期思 ...
- JAVAWEB第一节课的课后思考
第一开发一个网站需要的一些技术 至少熟悉一种建站程序.(html,javascript等等)对空间和域名的知识有一定的了解.有一些美工基础(例如ps设计等等).对编程有一些了解.HTML的代码知识基本 ...
- java课程课后作业190616之个人学期总结
在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...
随机推荐
- URAL 1957 Wrong Answer 暴力
Wrong Answer 思路: 1.先枚举4的全排列,即球赛的所有可能结果,一共4!=24种情况 2.对于每种情况,DFS 未确定的比赛 的结果,判断这种情况是否可达. 剪枝: 1.对于每种全排列, ...
- [Codeforces670A]Holidays(数学,构造)
题目链接:http://codeforces.com/contest/670/problem/A 题意:给n天,问这n天最少和最多有多少个休息日,不用区分平闰年. 这题写几个例子,YY一下就构造出来解 ...
- LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
题目链接 非原创 原创地址:http://blog.csdn.net/jingqi814/article/details/26117241 题意:输入n座山的信息(山的横坐标,高度,山底宽度),计算他 ...
- MSSQL大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- UVa 11400 Lighting System Design
题意: 一共有n种灯泡,不同种类的灯泡必须用不同种电源,但同一种灯泡可以用同一种电源.每种灯泡有四个参数: 电压值V.电源费用K.每个灯泡的费用C.所需该种灯泡的数量L 为了省钱,可以用电压高的灯泡来 ...
- 最受Web前端开发者欢迎的五大开发工具
工其事,必利于器.好的开发工具毋容置疑会帮助Web前端开发者事半功倍,51CTO在上期主办的技术沙龙<大型网站PHP开发之道> 对现场的百余位Web开发者做了问卷调查,后经51CTO调研小 ...
- 使用Spring时遇到的bug及解决
1.myeclipse中Spring 不给提示 解决:(1)window – preferences – myeclipse – files and editors – xml – xml catal ...
- HDU 5312 Sequence (规律题)
题意: 一个序列的第n项为3*n*(n-1)+1,而 n>=1,现在给一个正整数m,问其最少由多少个序列中的数组成? 思路: 首先,序列第1项是1,所以任何数都能构成了.但是最少应该是多少?对式 ...
- FFMPEG 库移植到 VC 需要的步骤
在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步.(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http: ...
- svn强制提交备注信息
当我们用tortoisesvn,提交代码时,有很多人不喜欢写注释的,代码版本多了,根本搞不清,哪个版本改了什么东西?所以如果加一些注释的话,我们看起来,也方便很多.所以在提交的时候,我会强制要求,写注 ...