同步练习册总答案(修改过)_第1页
同步练习册总答案(修改过)_第2页
同步练习册总答案(修改过)_第3页
同步练习册总答案(修改过)_第4页
同步练习册总答案(修改过)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 概 述练习题答案一、单项选择题12345678910ABBADCACBD111213141516DABBAD二、填充题1. 机器语言 问题的2. 源程序 解释 编译 目标可执行程序3. 大小写英文字母(52个) 数字(10个) 键盘符号(33个) 转义字符4. 5. 保留字6. 自定义 字符序列7. 由字母或下划线开头的字母、数字、下划线组成的一串符号8. 常量 变量 运算符 函数调用 表达式 保留字 9. 数据定义 赋值 函数调用 表达式 流程控制 复合 空 其他10. 1 主 主11. /* */第2章 基本数据类型和运算练习题答案一、单项选择题12345678910ABACBCA

2、DCA11121314151617181920CBBCCADBAC21222324252627282930ADACBCABDA31323334353637383940BCDBDACBDD414243444546CDBBDC二、填充题1 2 12 非0 0 1 0 3 #define 符号常量 常量4 动态 auto5 unsigned double char6 存储类型符 数据类型符 变量名1=初值1变量名n=初值n ;7 内部变量或是外部变量 内部变量或外部变量 存储类型 8 外部参照型 自动型 寄存器型 静态型 自动型 寄存器型 静态型 9 + && 1011110000

3、111 0 (a>b>c a>b 为 1 1>c 假为 0 )121 (先求 !a 为 0 0<b 为真 1 )131.0 (x/y 为0 整除)14(1) 5 (2) 5 (3) 3 15(20<x&&x<30)|(x<-100) 16a/(b*c) 17关系 算术 条件 赋值 逗号 第3章 順序结构、选择结构和循环结构的程序设计练习题答案一、 单项选择题12345678910BACCDBBDDC11121314151617181920AADCABAAAC21222324252627282930BDCDAD二、填充题1. 顺序

4、循环2. 等价3. switch 循环4. 结束本次循环5. 26, 13, 19 6. if(a>b)y=2;printf(“*y=%dn”,y);elsex=1; printf(“*x=%dn”,x); 。7. 108. (k%3=0) | (k%7=0)9. int (n!=0) i+1 j+1 scanf(“%d”,&n) 10. (x%i=0) 三、程序分析题1. 10,4,3 2. 1 3. 8 5 2 4. 3 1 -1 5. ABABCDCD 四、程序设计题1. 解:mian() float c,f; printf(“输入华氏温度(F): n”); scanf(“

5、%f”,&f); c=5.0*(f-32)/9; printf(“对应的摄氏温度(C)=%fn”,c);2. 解:main() int a; printf(“输入整数: n”); scanf(“%d”,&a); if(a>=0) printf(“0n”);else printf(“-1n”);3. 解:main() float x,y; printf(“输入数x: n”); scanf(“%f”,&x); if(x<=1) y=x; else if(1<x&&x<10) y=2*x-1; else y=3*x-11; printf

6、(“y=%fn”,y);4. 解:main() float x,y,z,t; printf(“输入三个单精度数x,y,z: n”); scanf(“%f,%f,%f”,&x,&y,&z); t=x; if(y<t) t=y; if(z<t) t=z; printf(“其中最小数=%fn”,t);4. 解:main() int i,j,k; for(i=1;i<=9;i+)for(j=0;j<=9;j+) for(k=0;k<=9;k+) if(i*i*i+j*j*j+k*k*k=1099) printf(“各位数字的立方和等于1099的整数

7、是:%dn”,i*100+j*10+k); 6. 解:main() int i,a,p=0,n=0,z=0; printf(“输入10个整数(用空格分开):n”); for(i=1;i<=10;i+) scanf(“%d”,&a); if(a>0) p+; else if(a<0) n+; else z+; printf(“正数的个数=%dn”,p); printf(“负数的个数=%dn”,n); printf(“ 零的个数=%dn”,z);7. 解:main() e=x; while(x>1e-6) n=1;for(i=1;i<=m;i+) n=n*i;

8、 m+; x=1.0/n; e=e+x; printf(“e=%fn”,e);8. 解: main() int r=1; double x=1,y=0; while(x>1e-6) x=1.0/(r*r+1); printf("x=%fn",x); y=y+x; r+; printf("y=%fn",y); 9. 解:main(0 int i; for(i=0x20;i<=0x6f;i+) printf(“十进制数值=%d, 对应字符=%cn”,i,i);10. 解:main() int i; for(i=1;i<=100;i+)if(

9、i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);else printf(“i=%3d i*i=%4dn”,i,i*i); i=1; while(i<=100) if(i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);else printf(“i=%3d i*i=%4dn”,i,i*i);i+; i=1; doif(i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);else printf(“i=%3d i*i=%4dn”,i,i*i);i+; while(i<=100);9. 解: “辗转相除法”算法如下

10、:(1) 将两数放备份a,b。(2) 将两数中大的那个放在m中,小的放在n中。(3) 求出m被n除后的余数r。(4) 若余数r为0则执行步骤(7);否则执行步骤(5) 。(5) 把除数(n中的)作为新的被除数(放m中),把余数(r中的)作为新的除数(放n中)。(6) 重复步骤(3)(4)直到r为0,(7) 输出 n 即为最大公约数(8) 原数(在备份a,b中)相乘除最大公约数即为最小公倍数。#include <stdio.h>void main() int m,n,a,b,r,t; printf("输入个正整数:"); scanf("%d,%d&quo

11、t;,&m,&n); a=m; b=n; if (m>0 && n>0) if(m<n) t=m;m=n;n=t; r=m%n; while(r!=0) m=n; n=r; r=m%n; printf("%d和%d的最大公约数为%dn",a,b,n); else printf("输入了负数!n"); printf("%d和%d的最小公倍数为%dn",a,b,a*b/n); return;12. 解: #include <stdio.h> void main() int a,

12、n,s,i,t; printf("输入a和n的值:"); scanf("%d,%d",&a,&n); printf("a=%d,n=%d:n",a,n); t=a; for(i=1,s=0;i<=n;i+) s=s+t; t=t*10+a; printf("a+aa+aaa+.+aa.a=%dn",s); return;13. 解: #include <stdio.h> void main() int i,j,k,a; printf("水仙花数是:n"); fo

13、r (i=1;i<=9;i+) for(j=0;j<=9;j+) for(k=0;k<=9;k+) a=i*100+j*10+k; if(a=i*i*i+j*j*j+k*k*k) printf("%dn",a); return; 14. 解: #include <stdio.h> void main() int n, s=0;printf(“输入一个正整数:”); scanf(“%d”,&n);do s+=n%10; n/=10;while (n>0);printf(“各位数之和是:%dn”,s);return; 15. 解:设今

14、天的挑子数为y,昨天的挑子数为x 则有:y=x-(x/2+1) x=2*(y+1) 从第 10 天 y=1 起 求出x,把x又当成今天(y=x)求昨天(x),这样向前推9天,即为第一天的挑子数。#include <stdio.h>void main() int i,x, y=1; for(i=1;i<10;i+) x=2*(y+1); y=x; printf(第一天共摘下桃子数为:%dn”,x); return;第4章 数 组练习题答案一、 单项选择题12345678910BCDABDDBCC1112131415CADCC二、填充题1. 类型 0 越界 整型表达式2. 连续

15、数组名 地址3. 0 6 4. 0 0 5. d 0 6. 310 a1 7. #include <stdio.h> #include <string.h> 8. &ai i%9 printf(“%3dn”,ai) 9. k=p 10. &x ai i- i!=0 11. k i<j 12. i 9-i i 9 0 i 9 9 (i!=j)&&(j!=9-i) printf(“n”) 13. A-65B-65c0123.25 0000.0该程序利用了字符的ASCII码和整数的对应方法,数组c的下标为0到25,当输入为ca=A则ca-

16、65=0,c0的值加1,依此类推。而输出时ci的下标i + 65正好又是相应的字母。 0 ca!=# 1 scanf(“%c”,&ca) 65 14. ci中放除16后的余数 把ci中的余数作b下标,取相应的字符 如:n=254 n%16 余 14 n=n/16 n=15 n%16 余 15 n=n/16 n=0b012345678910111213141516 0123456789ABCDEF0c0123.63 1415 d=c1=15 取 b15=F d=c0=14 取 b14=E 结果输出 FE n%base bd 三、程序分析题1. 该程序从键盘输入一行字符放在字符数组中,然后

17、输出。 2. 该程序从输入的10个字符串中找出最长的那个串并显示长度。3. 该程序的功能是从键盘输入10个字符串,从小到大排序并输出。4. 运行结果,输出3x3矩阵的主对角线和辅对角线的元素之和。 18 105. 把矩阵a转置放到矩阵b6. 运行结果输出: * * * * *7. 运行结果把3x3矩阵a和b对应元素相加到矩阵c,输出矩阵c。8. 程序边定义边赋值的方式定义了一个字符数组str。它包括22个字符(注意'1' 和'11'分别代表一个特定字符)及末尾由系统自动加入的串结束标志'0',。程序利用for循环逐个读出str数组中的字符赋给字符

18、变量c,再由内嵌的switch语句根据c的值来控制具体输出的字符。直到读到字符串结束标志'0'为止。 (1) 循环是从k=2开始,首先读取的是str中的第三个字符S。循环体内除switch语句外,还有一条语句:putchar('*'); (2) continue语句要跳过循环体内尚未执行的语句,结束本次循环;break语句则仅仅跳出switch语句,仍要执行循环体中的语句。 (3)当从str中读取的字符与case中所有常量表达式的值都不相等时,执行default后的语句,原样输出字符,并跳过putchar('*') 结束本次for循环,(如第三个

19、S,第一个W,I,T,C,H,第三个W,M和P均属此)。 (4)当读到字符L时,与case中的L相等,执行continue,结束本次for循环。没有输出。 (5)当读到字符1时,与case中的1相等,执行break语句,跳出switch,输出一个字符*。 (6)当读到字符'1'(第一次出现的)时,代表一个8进制的1,与case中的1相等,执行while循环。在while循环中,首先执行c=str+k,取下一个字符'11',它既不等于'1'又不等于'0',while循环继续执行,取出'W'。同理,再次执行while循

20、环,取出字符'1',从而结束while循环,滑向下一个case,输出字符'#',顺序执行到continue,结束本次for循环。 (7)当读到大写字母A时,与case中的'A'相等,输出一个小写字母a,并结束本次for循环。 经以上分析可知,程序输出结果为:SWITCH*#WaMP*四、程序设计题1 解: #include <stdio,h>void main() float a10,x; int i; for(i=0;i<10;i+) scanf(“%f”,&x); ai=x; for(i=0,x=0;i<10;

21、i+) x=x+ai; x=x/10.0; printf(“平均值=%fn”,x); return ;2. 解: #include <stdio,h>void main() int a10,x,i; for(i=0;i<10;i+) scanf(“%d”,&ai); for(i=0;i<5;i+) x=ai; ai=a9-i; a9-i=x; for(i=0;i<10;i+) printf(“%d ”,ai); printf(“n”); return ;3解: /* 算法: 数组a33 a00 a01 a02 a10 a11 a12 a20 a21 a22

22、 */ #include <stdio.h> void main() float a33,sum1=0,sum2=0; int i,j; for (i=0;i<3;i+) for (j=0;j<3;j+) scanf("%f",&aij); for (i=0;i<3;i+) for (j=0;j<3;j+) printf("%f ",aij); printf("n"); for (i=0;i<3;i+) sum1=sum1+aii; for (i=0;i<3;i+) sum2=s

23、um2+ai3-i-1; printf("主对角线的和是sum1=%fn",sum1); printf("辅对角线的和是sum2=%fn",sum2); return; 4 解:#include <stdio,h>#include <string.h>void main() char a40,b40,c80; int i,j; printf(“分二行输入两个字符串:n); gets(a) gets(b); for(i=0;ai!=0;i+) ci=ai; for(j=0;bj!=0;j+) ci+j=bj; cj=0; puts(

24、c); return;5 解:#include <stdio.h>#define N 10 void main() float xN,t,x0=0,s=0; int i; for(i=0;i<N;i+) scanf(“%f”,&t), xi=t; for(i=0;i<N;i+) x0=x0+xi; x0=x0/N; for(i=0;i<N;i+) s=s+(xi-x0)*(xi-x0); printf(“s=%fn”,s); return;6 解:#include <stdio.h>main() int a35,i,j,max,min,maxl

25、,maxh,minl,minh; for(i=0;i<3;i+) for(j=0;j<5;j+) scanf(“%d”, &aij); max=min=a00; for(i=0;i<3;i+) for(j=0;j<5;j+) if(aij>max) max=aij; maxl=i; maxh=j; if(aij<min) min=aij; minl=i; minh=j; printf(“最大值=%d, 下标: %d行,%d列n”,max,maxl,maxh); printf(“最小值=%d, 下标: %d行,%d列n”,min,minl,minh);

26、 return; 7 解:#include <stdio.h>#include <string.h>void main() char a80; int i; gets(a); for(i=0;i<strlen(a);i+) if( A<=ai&&ai<=Z) ai=ai+32; else if( a<=ai&&ai<=z) ai=ai-32; puts(a); return;8 解:#include <stdio.h>void main() float a503,vag=0,0,0,x; int

27、i,j; printf(“每人一行的输入50名学生的三种成绩n”): for(i=0;i<50;i+) for(j=0;j<3;j+) scanf(“%f”,&x); aij=x; for(j=0;j<3;j+) for(i=0;i<50;i+) vagj=vagj+aij; for(j=0;j<3;j+=) vagj=vagj/50; printf(“课程一的平均分=%fn课程二的平均分=%fn课程三的平均分=%fn”,vag0,vag1,vag2); return;9 解:#include <stdio.h>void main() int

28、a5, n, i=0; printf(“输入一短整数:n”); scanf(“%d”,&n); do ai=n%10; i+; n=n/10; while(n!=0); for(-i;i>0;-i) printf(“%c,”,ai+48); printf(“%cn”,a0+48); return;10. 解: #include <stdio.h> void main() float a33,max,min; int i,j,k,max_k,min_k,flag=0; for (i=0;i<3;i+) for (j=0;j<3;j+) scanf("

29、;%f",&aij); for (i=0;i<3;i+) for (j=0;j<3;j+) printf("%f ",aij); printf("n"); for (i=0;i<3;i+) max=ai0; max_k=0; for(j=1;j<3;j+) if(aij>max) max=aij; max_k=j; min=a0max_k; min_k=0; for(k=1;k<3;k+) if(akmax_k<min) min=akmax_k; min_k=k; if(i=min_k) fla

30、g=1; printf("在%2d行,%2d列,鞍点是:%fn",min_k+1,max_k+1,amin_kmax_k); if(!flag) printf("找不到鞍点n"); return; 11解:#include <stdio.h>#include <string.h>void main() char a80; int i; gets(a); for(i=0;i<strlen(a);i+) if( A<=ai&&ai<=Z) ai=ai+3; else if( a<=ai&

31、&ai<=z) ai=ai-3; puts(a); return;12 解:#include <stdio.h>#include <string.h>void main() char a80; int i; gets(a); for(i=0;i<strlen(a);i+) if( A<=(ai-3)&&(ai-3)<=Z+3) ai=ai-3; else if( a<=(ai+3)&&(ai+3)<=z) ai=ai+3; puts(a); return;13解: #include <st

32、dio.h> #define N 15 void main() int aN; int i,t; int top=N-1, low=0, mid; for(i=0; i<N; i+) scanf("%d",&ai); / 输出数组看看 printf("数组是:n"); for(i=0; i<N; i+) printf("%d ",ai); printf("n"); printf("请输入要查找的数:"); scanf("%d",&t); wh

33、ile(low<top&&(top-low)>1) mid=(top-low)/2+low; if(t=amid) printf("%d 位于表中第 %d 个数n",t,mid+1); break; else if(t<amid) top=mid; else low=mid; if(top-low)<=1) if(t=atop)printf("%d 位于表中第 %d 个数n",t,top+1); else if(t=alow)printf("%d 位于表中第 %d 个数n",t,low+1);

34、else printf("%d 不在表中n",t); return; 14解: #include <stdio.h> #include <string.h> void main() char a380; int i,j, d,x,s,k,q; d=x=s=k=q=0; printf("输入3行文字,每行不超过80个字符n"); for(i=0; i<3; i+) gets(ai); for(i=0;i<3;i+) for(j=0;j<80 && aij!='0'j+) if(aij

35、>='A' && aij<='Z') d+; else if(aij>='a' && aij<='z') x+; else if(aij>='0' && aij<='9') s+; else if(aij=' ') k+; else q+; printf("大写字母数:%dn",d); printf("小写字母数:%dn",x); printf("数字

36、字符数:%dn",s); printf("空格字符数:%dn",k); printf("其他字符数:%dn",q); return;第5章 指 针练习题答案一、 单项选择题12345678910CABDDBACCC11121314151617181920DCBBACBCDA2122232425CDCDC二、填充题1. 地址 加减 赋值 数组名 2. 地址 NULL 3. 取地址运算符 , 相互赋值 , 赋NULL 4. 加减整数 +,- 5. 指针(取值) 取地址 6. 比较 7. 3 +3 8. double *p=&a 9. 地址

37、指的变量 地址 10. szi , pi , *(sz+i) 和 *(p+i) 11. ABCD A 12. 50 13. *min,*a,*b,*c a , b , c *a, *b, *c *min=*b *min *min=*c *min 14. 0 + 15. sp=stri sp strlen(sp)三、程序分析题1. 程序输出:ABCDEFGH2. 程序的主要功能:把输入的10个整数反序一行一个的输出。3. 程序运行的输出结果:A ABCD B BCD C CD D D4. 该程序找出数组中最大和最小的元素,分别与第一和最后的元素交换,运行结果输出: 13,10,-3,1,7,-2

38、15. 程序用pi和指针pj指向字符串s的头尾,然后逐步向中比较字符,到不等时终止。若都相等,则是“回文”,回答“YES”,否则回答“NO”。因此当输入字符串“LEVEL”时,输出“YES”, 当输入字符串 “LEVAL”时输出 “NO”。6. 四个字符指针指向四个字符串,程序每次循环p指向一个字符串,输出第一的字符*p,运行的输出结果: AEIM7. 程序运行输出:0 1 2 3 -1 0 1 2 -2 -1 0 1 -3 -2 -1 08. 程序运行输出:1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1四、程序设计题1. #include <stdio.h>mai

39、n() int a, b, c, *pa=&a, *pb=&b, *pc=&c; scanf(“%d,%d,%d”,pa,pb,pc); if(*pa>=*pb) if(*pb>*pc) printf(“%d, %d, %dn“,*pa,*pb,*pc); else if(*pa>*pc) printf(“%d, %d, %dn“,*pa,*pc,*pb); else printf(“%d, %d, %dn“,*pc,*pa,*pb); else if(*pc>*pb) printf(“%d, %d, %dn“,*pc,*pb,*pa); els

40、e if(*pa>*pc) printf(“%d, %d, %dn“,*pb,*pa,*pc); else printf(“%d, %d, %dn“,*pb,*pc,*pa);2. #include <stdio.h>#define N 15main() int aN, b, *p, *q; for(p=a;p<a+N;p+) scanf(“%d”,p); for(p=a,q=a+N-1;p<a+N/2;p+,q-) b=*p; *p=*q; *q=b; for(p=a;p<a+N;p+) printf(“%3d ”,*p); printf(“n”);3.

41、#include <stdio.h>#include <string.h>main() char str81, *sptr; gets(str); sptr=str+strlen(str)-1; for(;sptr>=str;sptr-) printf(“%c”,*sptr); printf(“n”);4. #include <stdio.h>#define N 10main() float aN, avg, *pm, *ps, *p; for(p=a;p<a+N;p+) scanf(“%f”,p); pm=ps=a; avg=*a; for(p

42、=a+1;p<a+N;p+) if(*p>*pm) pm=p; if(*p<*ps) ps=p; avg+=*p; printf(“一维实型数组最大值=%fn”,*pm); printf(“一维实型数组最小值=%fn”,*ps); printf(“一维实型数组平均值=%fn”,avg/N);5. #include <stdio.h>main() int a36, (*p)6,i,j,maxh=0,maxl=0,minh=0,minl=0,max,min; for(p=a,i=0;i<3;i+) for(j=0;j<6;j+) scanf(“%d”,*(

43、p+i)+j); printf(“二维数组是:n”); for(p=a,i=0;i<3;i+,p+) for(j=0;j<6;j+) printf(“%3d ”,(*p)j); printf(“n”); max=min=a00; for(p=a,i=0;i<3;i+) for(j=0;j<6;j+) if(*(*(p+i)+j)>max) maxh=i; maxl=j; max=*(*(p+i)+j); if(*(*(p+i)+j)<min) minh=i; minl=j; min=*(*(p+i)+j); printf(“最大值是:%d 所在的行:%d 所

44、在的列:%dn”,amaxhmaxl,maxh,maxl); printf(“最小值是:%d 所在的行:%d 所在的列:%dn”,aminhminl,minh,minl); 6. #include <stdio.h>#include <string.h>main() char s381, *p3=s0,s1,s2, *tp; int i; printf(“输入3个字符串: n”); for(i=0;i<3;i+) gets(pi); tp=p0; for(i=1;i<3;i+) if(strcmp(pi,tp)>0) tp=pi; printf(“其中

45、最大的字符串是:%sn”,tp);7. #include <stdio.h>#include <string.h>main() char a40,b40,c80,*s,*t=c; gets(a); gets(b); s=a; for(;*s;) *t+=*s+; s=b; for(;*s;) *t+=*s+; *t=0; puts(c);8. #include <stdio.h>#include <string.h>main() char a81,b81,*s=a,*t=b; gets(a); gets(b); whilw(*s&&

46、;*t) if(*s+!=*t+) break; if(!*s&&!*t) printf(“%s 与 %s 相等n”,a,b); elas printf(“%s 与 %s 不相等n”,a,b);9. #include <stdio.h> #define N 10 main() int xN,*p=x, *min, *max, t1,t2; printf("输入十个整数(用空格分开):n"); for(p=a;p<a+N;p+) scanf("%d",p); min=&a0; max=&aN-1; for(

47、p=a;p<a+N;p+) if (*p<*min) min=p;if (*p>*max) max=p; t1=*min; *min=a0; a0=t1; t2=*max; *max=aN-1;aN-1=t2; for(p=a;p<a+N;p+) printf("%d ",*p); 10. #include <stdio.h> void main() int x100,i,n,m,end_num,*p; printf("输入整数个数n(少于100个): ");scanf("%d",&n); printf("输入%d个整数(用空格分开):n",n); for(p=x;p<x+n;p+) scanf("%d",p); printf("这%d个整数原来是:n",n); for(p=x;p<x+n;p+) printf("%d ",*p); printf("n"); printf("输入移动的位数m: n&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论