软考程序员辅导:程序员C语言新人常见问题.docx
上传人:春景****23 上传时间:2024-09-12 格式:DOCX 页数:7 大小:12KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

软考程序员辅导:程序员C语言新人常见问题.docx

软考程序员辅导:程序员C语言新人常见问题.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

软考程序员辅导:程序员C语言新人常见问题1、程序画面一闪而过#includeintmain(void){intiSignal;/*定义变量表示信号灯的状态*/printf(“theRedLightis0,theGreenLightis1”);/*输出提示信息*/scanf(“%d”,&iSignal);/*输入iSignal变量*/if(iSignal==1)/*使用if语句进行判断*/{printf(“theLightisgreen,carscanrun”);/*判断结果为真时输出*/}if(iSignal==0)/*使用if语句进行判断*/{printf(“theLightisred,carscan’trun”);/*判断结果为真时输出*/}return0;}解析:在XP以上的系统用win-tc,dev-cpp等IDE编译运行此程序时,无论输入什么数字,结果都是一闪而过,因为程序执行完语句后就直接退出了。解决方案:这里有几个办法(1)在程序开头加上#include然后在程序末尾加上system(“pause”);此方法仅适用于MS-DOS,windows,不适用于*nix等系统(2)在需要暂停的地方加入一个或两个get);这种方法,实质上并不是暂停程序,而是让程序等待用户输入若干个回车。但是效果和暂停是相同的。(3)在程序开头加上#include在需要暂停的地方加入一个getch();,原理和上一种差不多。在win-tc里用得比较多。2、if,for,while的判断后直接跟;例如:#includeintmain(void){inta;scanf(“%d”,&a);if(a==123);////错误,if(a==123)后面不应加上;,而应该紧跟着////{printf();}代码{printf(“ccc”);}else{printf(“ddd”);}get);return0;}#includeintmain(void){intn,i;printf(“pleaseinputanumber>2:”);scanf(“%d”,&n);for(i=2;i{if(n%i==0)break;}if(iprintf(“%dnotasushu”,n);elseprintf(“%disasushu”,n);return0;}解析&解决方案:见注释3、漏头文件,main函数格式不规范。例如:main(){inta;scanf(“%d”,&a);printf(“input%d”,a);}解析:这段程序没有带上头文件stdio.h。即漏写了#include。如果仅有scanf,printf函数的话,stdio.h是可以省略并可以正确运行的,但是这是非常不好的习惯。而main()这种写法,C89标准勉强充许这种形式,C99标准是不允许的。而voidmain(),至今仍未有任何标准考虑接受它。但是有些编译器的确允许。当然,这种写法广为流行,应该和老谭的书关系非常大。解决方案:用到的头文件应该用include包含进去。main()函数应该写成intmain(void)这种形式,在main()函数尾部加上return0;即#includeintmain(void){inta;scanf(“%d”,&a);printf(“input%d”,a);return0;}拓展:C语言中内存分配问题C语言的位字段是个比较有意思的特性。它的目的是在一个机器字中保存多个对象(每个对象占据若干bit),从而节省内存资源,同时又避免复杂的位运算。在此不再讨论位字段的具体语法,下面将研究位字段的存储特性。先说含有多个字段(field)的字(word)所占空间的规律——含有多个字段的字的大小是所有字段的类型中的最长的那个的倍数。但要确定究竟是最长类型的几倍则比较复杂,这要看是否需要考虑类型对齐问题(即一个字段能否跨越两个最长类型)。例1:structword{charfield1:1;charfield2:2;intfield3:4;};前两个字段都是char类型,第三个是int类型,所有类型中最长的是int类型。所以字的大小是int类型长度(即4字节)的倍数。而sizeofword的结果是4字节(即int的1倍),这是因为word的三个字段总共7位(1+2+4),小于int的32位,且不需考虑类型对齐问题。例2:structword{charfield1:1;charfield2:2;intfield3:30;};与上例一样,所有类型中最长的是int类型。所以字的大小是int类型长度(即4字节)的倍数。而sizeofword的结果是8字节(即int的2倍),这是因为word的三个字段总共33位(1+2+30),需要两个int的64位才能装下,且不需考虑类型对齐问题。例3: