C实验参考答案(湖北民族学院计算机c语言课后习题答案)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验二基本数据类型、运算符及表达式1.分析以下程序,判断输出结果,然后上机运行程序验证结果。(1)#includestdio.hmain(){intsum=1;sum=sum+100;printf(SUM=%d\n,sum);}输出结果为:101(2)改正后的程序为:#includestdio.hmain(){charch1,ch2;ch1='b';//不能把字符串b赋给字符变量ch2=ch1-32;printf(%c%d%c%d\n,ch2,ch2,ch1,ch1);}(3)#includestdio.hmain(){inta=10,b=3;printf(%d\n,(a=a-1,b+a,b+2));}输出结果为5,(a=a-1,b+a,b+2)作为一个逗号表达式。(4)#includestdio.hmain(){inta=5,b=3,c=4;a*=a+=3;b=++c;c=b++;a=b+++c;printf(\n%d,%d,%d,a,b,c);}输出结果为:11,7,5(5)程序改正为:#includestdio.hmain(){inta=1,b=2,c=3,logic;logic=a+bc&&b=c;printf(logic=%d\n,logic);logic=a=b+c||b==c;printf(logic=%d\n,logic);logic=!(ac)+b!=1&&(a+c)/2;printf(logic=%d\n,logic);}输出结果为:logic=0logic=0logic=12.以下程序可能有多处错误,请改正并调试运行程序。(1)#includestdio.h#includeHIGH10//改为:#includeHIGH10main(){inta=5;//可再定义一个变量bHIGH*=HIGH;//HIGH是宏名,不能被赋值,可改为:b=HIGH*HIGH;printf(\n%d,%d,a,HIGH);//输出a,b的值}改正后的程序为:#includestdio.h#defineHIGH10main(){inta=5,b;b=HIGH*HIGH;printf(\n%d,%d,a,b);}输出结果为:5,100(2)此程序功能为将输入的华氏温度转换成摄氏温度,公式为c=5/9·(f–32)。#includestdio.hmain(){floatc,f;scanf(%f,f);//输入时,变量要用&取地址c=(5/9)·(F–32);//5/9是为0的,要变成实数。F没有定义,定义的是fprintf((F=%f,C=%f\n,f,c);//多了一个左括号}改正后的程序为:#includestdio.hvoidmain(){floatc,f;scanf(%f,&f);c=(5.0/9)*(f-32);printf(F=%f,C=%f\n,f,c);}(3)此程序功能是求:y=)ln()sin(xaax。#includestdio.h#includemath.hmain(){inta;doublex,y;Scanf(%d%f,&a,&x);//scanf不能大写,x的类型是double,格式化字符应该用%ldy=SIN(sqr(ax)+LN(a+x);//sin函数不能大写,sqr应该为sqrt,ax应为a*a,LN不是有效的函数名,要求自然对数用的是log(),另外括号不匹配printf(Y=%f\n,y);//y的类型是double,格式化字符应该用%ld}程序改正后为:#includestdio.h#includemath.hmain(){inta;doublex,y;scanf(%d%lf,&a,&x);//scanf不能大写y=sin(sqrt(a*x)+log(a+x));//sin函数不能大写,ax应为a*a,LN不是有效的函数名,要求自然对数用的是log(),另外括号不匹配printf(Y=%lf\n,y);}3.此程序用于说明数据类型转换,调试运行该程序,然后回答下列问题。①此程序中定义了哪几种数据类型的变量?②指出程序中哪处为自动类型转换,哪处为强制类型转换。③变量c按字符形式输出后,该字符是什么?它是ASCII码字符吗?④对变量x的输出结果给予解释。#includestdio.hmain(){intw,x;floatf1,f2=1.23456789E9;charc=227;unsignedinty=65535;w=23.4567;f1=(float)w;x=y;printf(w=%d,f1=%f,f2=%f\n,w,f1,f2);printf(c=%c,y=%u,x=%d\n,c,y,x);}分析:(1)程序中定义了int,float,charunsigned四种数据类型的变量。(2)f1=(float)w;这一句是强制类型转换,w=23.4567;x=y;用的是自动类型转换(3)变量C按字符输出的是?,不是ASCII字符。(4)结果的解释略实验三顺序结构程序设计1.分析以下程序,判断输出结果,然后上机调试验证结果。(1)main(){inta,b;charc,d;scanf(%d%d,&a,&b);scanf(%c%c,&c,&d);printf(%d,%d,%c,%c\n,a,b,c,d);}运行时输入:3456ab回车再次运行时,输入:34,56,a,b回车看一看运行结果。程序改正为:#includestdio.h//头文件一定要包含voidmain(){inta,b;charc,d;scanf(%d%d,&a,&b);scanf(%c%c,&c,&d);printf(%d,%d,%c,%c\n,a,b,c,d);}分析:当输出为3456ab时,第一个scanf语句中的a,b变量接收了34和56两个数值,字符ab由第二个scanf语句的变量c,d接收。(2)改正后的程序为:#includestdio.hvoidmain(){intx=34;floaty=45.98;printf(%6d,%6.2f,x,y);}(3)#includestdio.hvoidmain(){printf(\n);printf(%10s%10s\n,china,Beijing);printf(%-10s%-10s\n,china,Beijing);printf(%10.3s\n,china);}分析:%10s输出时右对齐,%-10s输出时左对齐,%10.3s表示输出时只输出3个字符(4)#includestdio.hvoidmain(){intk=-1;printf(k=%d\n,k);printf(k=%o\n,k);printf(k=%x\n,k);printf(k=%u\n,k);}分析:计算机在做运算的时候,是用补码参与运算的。int型的数据在VC里是用四个字节表示的。变成补码后再做相应格式的输出。(5)main(){inta,c;unsignedd;floatb,e;a=3.5+3/2;b=23;c='\xe0';d=-1;e=2.555555555;printf(\n%d,%f,%x,%u,%f,a,b,c,d,e);}分析:和上题一样,是个补码的应用。(6)#includestdio.hmain(){inti=97;charch='a';putchar(i);putchar('\n');putchar(ch);}分析:输出aa(7)#includestdio.hmain(){intch;ch=getchar();putchar(ch);}分析:从键盘上接收一个字符,显示一个。2.以下程序可能有多处错误,请改正并上机调试。(1)输入三角形的三条边的长,求三角形的面积(假设输入的三边长能构成一个三角形)。main(){floata,b,c,s,area;//应该定义成double型scanf(%f,%f,%f,&a,&b,&c);s=1/2*(a+b+c);//1/2的值是0,要变成实数area=sqrt(s*(s-a)*(s-b)*s-c));//括号不匹配。用了数据函数sqrt要包含math.h头文件printf(a=%7.2f\nb=%7.2f\nc=%7.2f\narea=%7.2f\n,a,b,c,area);}改正后的程序为:#includestdio.h#includemath.hvoidmain(){doublea,b,c,s,area;scanf(%lf,%lf,%lf,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(a=%7.2lf\nb=%7.2lf\nc=%7.2lf\narea=%7.2lf\n,a,b,c,area);}(2)从键盘输入圆的半径的值,计算圆的周长和面积。main(){floatr,c,area;scanf(%f,&r)c=2r*PI;//2*rarea=r*r*PI;//PI要定义成宏再用。printf(r=%f\n,r);printf(c=%.2f\n,c);printf(area=%10.2f\n,area);}改正后的程序为:#definePI3.14159#includestdio.hvoidmain(){floatr,c,area;scanf(%f,&r);c=2*r*PI;area=r*r*PI;printf(r=%f\n,r);printf(c=%.2f\n,c);printf(area=%10.2f\n,area);}(3)略(4)略3.编程题(1)编程序计算平面上任意两点之间的距离。#includestdio.h#includemath.hvoidmain(){floatx1,y1,x2,y2,c;printf(请输入第一个点的座标:);scanf(%f,%f,&x1,&y1);printf(请输入第二个点的座标:);scanf(%f,%f,&x2,&y2);c=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf(两点距离为:%f,c);}(2)从键盘上输入一个小写字母,用大写字母输出。#includestdio.hvoidmain(){charc;scanf(%c,&c);c-=32;printf(%c,c);}#includestdio.hvoidmain(){charc;getchar(c);c-=32;putchar(c);}(分别用getchar()和scanf()输入,用putchar()和printf()输出)实验四:选择结构程序设计参考答案1.分析以下程序,判断输出结果,然后上机调试验证结果.(1)输出结果为:2,2,2分析:因为j++||k++的左边为真,所以不管右边的表达式的值为真还是为假,结果都是为真,所以不会执行k++这个表达式.k的值不会加1.同理,i++会执行.所以i的值会加1.(2)输出结果为:1,0,7分析:同上,还是考查的逻辑运算符的运算规则的知识点.(3)输出结果为:3分析:ok1的值是1,非0即为真.!ok1即为假.所以x--就不会执行,会执行else下面的语句,再按照同样的分析进行.(4)输出结果为:@#&分析:a的值为2,a0为真,真值即为1,所以从case1:入口进行,同理b10也为真,即为1.也从下面的case1:进入.就先输出@,然后碰到break,退出这个switch后,返回上一个switch.但是没有break,所以执行case0:后面的语句,同理会输出#,完了后再输出&(5)输出结果为:PassFail分析:当x值为3的时候,从case3:入口进行,输出Pass后没有break语句,继续执行case2:后面的语句输出Fail.到了最后就退出了switch结构.不要认为还会回去执行default语句.所以我们一般把defaul

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功