C语言程序设计实验指导答案.docx
《C语言程序设计实验指导答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导答案.docx(24页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验指导答案
实验二:
变量类型与输入输出
1.a=34,a=53,b=1234,b=4660☆
因为0x1234超出了字符类型的表示范围,因此打印的结果看起来奇怪。
2.输入:
a回车
输出:
****ch1=a,97****
****ch2=
10,****
解释ch2的输出:
由于输入a回车,因此ch2的值就接受了这个回车,而回车的ascii码的值等于10,因此出现这种结果。
如果要修改,需要在ch2=getchar()之前加入一句:
getchar();☆☆☆
3.把scanf(“%d”,a)改为scanf(“%f”,&a)
4.把scanf(“%f”,&a)改为scanf(“%lf”,&a),因为a是double类型的。
☆☆☆
5.42
42
123.540000
123.540000
1.235400e+002
1.235400e+002
6.正确的形式:
a=3.12,b=9.0c=10.0注意的事项是在scanf()中,””中的内容按照原样输入,尽管在实践中没有按照此题那样进行类似输入。
7.此题不用看
8.#include
#definePI3.14159
intmain()
{
doubleradius,high,volume;
printf("pleaseinputtheradiusandhigh!
");
scanf("%lf%lf",&radius,&high);
volume=PI*radius*radius*high;
printf("thevolumeis:
%lf",volume);
return0;
}
9#include
intmain()
{
inti;
printf("pleaseinputthevalue!
");
scanf("%d",&i);
printf("%u,%o,%x",i,i,i);//分别以无符号、八进制、十六进制
return0;
}
10#include
intmain()
{
charch;
printf("pleaseinputthecharacter!
");
scanf("%c",&ch);
printf("itsASCIIcodeis:
%d",ch);/*字符型就是短整形因此用%d格式控制就可打印
asciicode*/
return0;
}
1112easy忽略
实验三:
运算符与表达式
1.输出:
a=2,b=1,i=2,这是因为++放在后面是“先使用后自加”。
☆☆☆☆☆
2.输出:
f=5.750000,(int)f=5,这是因为利用了强制类型转换(int)
3.输出:
a=3,b=2,c=3,d=3
解释:
a和b值不同的原因是在给a赋值的时刻,2,3是用括号包围的,而b没有,而逗号表达式的值等于最后面的那个值。
☆☆☆☆☆
4.输出:
-264原因是首先执行a-=a*a也就是a=12-(12*12)=-132,然后a+=a因此变为-264☆☆
5.输出:
a=2,b=0,c=2,d=1这是因为在执行b=a++&&c++时,由于首先使用a的当前值为0,而在“&&”运算符中当左侧的操作数为0时会发生“短路”现象,即不再计算右侧的”c++”直接就可以判定b=0,因此在这一步中c的值并没有发生变化,而运算完此步a=1。
而在下一步d=a++||++c中,同样会发生短路现象,因为此时首先利用a的当前值1直接就可以判定d=1,而不再执行++c☆☆☆☆☆
6.输出:
3,18
输出:
3,3还是逗号运算符和赋值运算符的问题☆☆☆☆☆
7.把s=1/2*a*b改为s=1.0/2*a*b千万不要忘了在c语言中1/2=0☆☆☆☆☆
8.easy!
9.#include
intmain()
{
charch;
printf("pleaseinputthelowercharacter!
");
ch=getchar();
ch-=32;
putchar(ch);
return0;
}
101112easy!
!
实验四:
顺序结构程序设计
1.其中的两处错误发生在:
scanf(“%d”,r)应该改为scanf(“%f”&r);另外一处发生在语句s=3.14*r*r和语句scanf(“%d”,r)次序颠倒,因为一个变量只有先有值之后才能使用。
2.执行结果为3,5,8,-858993444,因为d没有赋初值因此打印出一个看起来非常奇怪的值。
☆☆☆☆
3.输出7
4.输入27输出27,这是因为ch1=’2’,ch2=’7’
输入27输出4,这是因为ch1=’2’,ch2=’‘(空格),而空格的ascii码为32,’0’的ascii码为48因此算出结果为4
5输出1,1☆
6.输出6,7,只需要知道++的前缀和后缀的区别即能做出此题。
☆☆☆☆
7.sum=d1+d2+d3+d4+d5;
avg=(float)sum/5;/*需要强制类型转换*/
8.#include
intmain()
{
inta,b,c,max;
printf("pleaseinputthevaluesofa,bandc!
");
scanf("%d%d%d",&a,&b,&c);
max=a>b?
a:
b;
max=max>c?
max:
c;
printf("themaxvalueofa,bandcis:
%d",max);
return0;
}
9.#include
#include
intmain()
{
doublea,b,c,alpha;
printf("pleaseinputthevaluesoftwoedgesandangle");
scanf("%lf,%lf,%lf",&a,&b,&alpha);
c=sqrt(a*a+b*b-2*a*b*cos(alpha));
printf("thevalueofthirdedgeis%f",c);
return0;
}
本程序用到sqrt和cos函数,它们位于头文件,因此在使用它们之前首先要包含此头文件。
另外,cos函数接受的弧度,而不是角度。
10
程序如下:
#include
intmain()
{
doubleF,C;
printf("pleaseinputtheFahrenheit!
");
scanf("%lf",&F);
C=(double)5/9*(F-32);
printf("theCelsiusis:
%f",C);
return0;
}
本程序中要注意因为整数相除仍为整数,因此5/9永远为0,为了得到正确的结果,首先进行强制类型转换。
☆☆☆☆☆
实验五:
选择结构程序设计
1.2easy忽略
3.-1此题简单
4.判定一个数位于一个区间,绝对不能出现60<=score<70的情况应该(score>=60&&score<70)
此程序修改为:
#include
voidmain()
{
intscore;
if(score>=90&&score<=120)
printf(“优”);
elseif(score>=80&&score<90)
printf(“良”);
elseif(score>=70&&score<80)
printf(“中”);
elseif(score>=60&&score<70)
printf(“及格”);
else
printf(“不及格”);
}
5.注意switchcase中的“fallthrought”现象,也就是在没有break的情况下,程序根据匹配的入口一直向下执行,知道碰到break或者}终止。
修改时只需要在每个case后面的printf语句后面加上break即可。
☆☆☆☆☆
6.else为if(b>0)的分支,应该改为:
#include
intmain()
{
inta=2,b=-3;
if(a>0)
if(b>0)
printf("a,b>0");
else
printf("a>0,b<0");
else
printf("a<0");
return0;
}
7.#include
intmain()
{
charc;
c=getchar();
if(c>='a'&&c<='z')
c-=32;
elseif(c>='A'&&c<='Z')
c+=32;
else
c=c;
putchar(c);
return0;
}
注意在此程序中有两点容易发生错误:
第一if(c>='a'&&c<='z')写成if(‘a’<=c<=’z’)。
第二就是if(c>='A'&&c<='Z')语句前应该加else,如果不加else,可以考虑当输入小写字符if(c>='a'&&c<='z')满足,执行c-=32此时c变成大写字母,再继续判断if(c>='A'&&c<='Z')又满足执行c+=32又回到小写。
☆☆☆☆☆
8if(a==5)
9添加的代码为if((x>=0&&x<=5)||x>=10)
10easy
11easy!
但是要注意a=0&&b!
=0时,此时有一个根。
12#include
intmain()
{
intbirthYear,age;
printf(“pleaseinputtheyearofyourbirth!
”);
scanf(“%d”,&birthYear);
age=2006-birthYear;
age=age>=0?
age:
12-(-age%12);
switch(age%12)
{
case0:
printf(“属狗”);
break;
case1:
printf(“属鸡”);
break;
case2:
printf(“属猴”);
break;
case3:
printf(“属羊”);
break;
case4:
printf(“属马”);
break;
case5:
printf(“属蛇”);
break;
case6:
printf(“属龙”);
break;
case7:
printf(“属兔”);
break;
case8:
printf(“属虎”);
break;
case9:
printf(“属牛”);
break;
case10:
printf(“属鼠”);
break;
case11:
printf(“属猪”);
break;
}
return0;
}
13#include
intmain()
{
intscore;
printf("pleaseinputthescore!
");
scanf("%d"