当前位置:文档之家› C语言程序设计实验指导答案

C语言程序设计实验指导答案

c-=32; else if(c>='A' && c<='Z')
c+=32; else
c=c; putchar(c); return 0; } 注意在此程序中有两点容易发生错误:第一 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 又回到小写。☆☆☆☆☆ 8 if(a==5) 9 添加的代码为 if((x>=0 && x<=5)|| x>=10) 10 easy 11 easy!但是要注意 a=0&&b!=0 时,此时有一个根。 12 #include<stdio.h>
解释: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 的当前值
printf(“优”); else if(score>=80 && score<90)
printf(“良”); else if(score>=70 && score<80)
printf(“中”); else if(score>=60 && score<70)
printf(“及格”); else
printf(“不及格”); } 5. 注意 switch case 中的“fall throught”现象,也就是在没有 break 的情况下,程序根据匹配 的入口一直向下执行,知道碰到 break 或者}终止。修改时只需要在每个 case 后面的 printf 语句后面加上 break 即可。☆☆☆☆☆ 6. else 为 if(b>0)的分支,应该改为: #include<stdio.h> int main() {
int a=2,b=-3; if(a>0)
if(b>0) printf("a,b>0");
else printf("a>0,b<0");
else printf("a<0");
return 0; } 7. #include<stdio.h> int main() {
char c;
4
c=getchar(); if(c>='a' && c<='z')
把 i++换成++i 输出:-1 6. #include<stdio.h> void main() {
为 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<stdio.h>
int main()
{
char ch;
6
case 6: printf("合格"); break;
default: printf("不及格");
} return 0; }
实验六:循环结构程序设计(一) 1. easy! 2. 输出 0 3. 循环次数:无限次 for(;;)代表无限次循环 4. 输出:-2-1 ☆☆☆☆☆还是考后缀和前缀的问题 5. 输出:-1 0
实验二:变量类型与输入输出
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.0 c=10.0 注意的事项是在 scanf()中,””中的内容按照原样输入, 尽管在实践中没有按照此题那样进行类似输入。 7. 此题不用看 8. #include<stdio.h> #define PI 3.14159 int main() { double radius,high,volume; printf("please input the radius and high!"); scanf("%lf%lf",&radius,&high); volume=PI*radius*radius*high; printf("the volume is:%lf",volume); return 0; } 9 #include<stdio.h> int main() { int i; printf("please input the value!"); scanf("%d",&i); printf("%u,%o,%x",i,i,i);//分别以无符号、八进制、十六进制 return 0; }
int main() {
int birthYear,age; printf(“please input the year of your birth!”); scanf(“%d”,&birthYear); age=2006-birthYear; age=age>=0?age:12-(-age%12); switch(age%12) {
case 0: printf(“属狗”); break;
case 1: printf(“属鸡”); break;
case 2: printf(“属猴”); break;
case 3: printf(“属羊”); break;
case 4: printf(“属马”); break;
case 5:
5
printf(“属蛇”); break; case 6: printf(“属龙”); break; case 7: printf(“属兔”); break; case 8: printf(“属虎”); break; case 9: printf(“属牛”); break;
s=3.14*r*r 和语句 scanf(“%d”,r)次序颠倒,因为一个变量只有先有值之后才能使用。
2. 执行结果为 3,5,8,-858993444,因为 d 没有赋初值因此打印出一个看起来非常奇怪的值。
☆☆☆☆
3. 是因为 ch1=’2’,ch2=’7’ 输入 2 7 输出 4,这是因为 ch1=’2’,ch2=’(‘ 空格),而空格的 ascii 码为 32,’0’的 ascii 码为 48 因此算出结果为 4
3
行强制类型转换。 ☆☆☆☆☆
实验五:选择结构程序设计 1.2 easy 忽略 3. -1 此题简单 4. 判定一个数位于一个区间,绝对不能出现 60<=score<70 的情况 应该 (score>=60 && score<70) 此程序修改为:
#include<stdio.h> void main() { int score; if(score>=90 && score<=120)
5 输出 1,1 ☆ 6. 输出 6,7 ,只需要知道++的前缀和后缀的区别即能做出此题。☆☆☆☆ 7. sum=d1+d2+d3+d4+d5;
avg=(float)sum/5; /*需要强制类型转换*/ 8. #include<stdio.h> int main() {
int a,b,c,max; printf("please input the values of a,b and c!"); scanf("%d%d%d",&a,&b,&c); max=a>b?a:b; max=max>c?max:c; printf("the max value of a,b and c is:%d",max); return 0; } 9. #include<stdio.h> #include<math.h> int main() {
相关主题