1、c语言程序设计教程(第2版)参考答案 习题1 1-1 单选题 1~5 BBBAC 1-2 填空题 1. 函数 2. 主函数main(),主函数main() 3. 主函数main() 4. 函数首部,函数体 5. {, } 6. 顺序结构,选择结构,循环结构 7. .c, .obj, .exe 第2章 2.1 单选题 1~5 DBDCA 6~10 DCABA 11~15 CADBD 16~20CAABC 21~25ADAAA 26~30ACBAC 31~35BADDA 36~40BBCCC 41
2、~45BDABA 46~49ABBB 2.1 填空题 1.2.000000 2.1,0.5 3.9,2 4.6 5.100,d 6.(1)20 (2)0 (3)60 7. (1)10,6,4 (2)6,9,15 (3)3,60,83 8. 55 9. 11 6 4 10.5 11. double 12..整型 字符型 实型 枚举类型 13.数据类型 数据类型 14. 字母 数字 下划线 字母 下划线 15. 单精度 双精度 16. 变量初始化 17. 双引号 18. ’\0 19. x=3
3、600000,i=3
习题3
3-1 选择题
1-5 BDABC 6-10 ADCAC 11-15 BBBCC 16-20 CDCDA
21-25 CACAA 26-29 BCBA
3-2 填空题
1. 3
2. 0261
3. 0x10
4. 2, 1 互换a,b的值
5. 6.6
6. –003
7. 5.0,4,c=3
4、0 (5) 8765.432 (6) 5.864000e+002 (7) 3.141600e+000 (8) 3.1416 (9) 8765 (10) 3.1416,8765.43 10. a=2 b=5x=8.8 y=76.34c1=65 c2=97 11. B66 12. n1=%d\nn2=%d\n 13. 12 14. 11 15. 25 21 37 16. 10030 17. 1B 18. 88 19. 2 20.000000 20 67 G
5、习题4 4-1单选题 1~5 AADAD 6~10 ACB BB 11~15BADAD 16~20BADBA 21~25CDBDD 26~30DCDCA 31~35DAACB 36~40BDBAD 41~42AA 4-2填空题 1. 1 2. (1) a>0 || b>0 (2) x>0 && x<=10 (3) a==1.5 && b==1.5 && c==1.5 (4)pb
6、a:b)>c?max:c 5.-4 6.1 7.5,0,3 8. (1) (a==0) (2) (b==0) (3) (disc<0) 9. 1 1 0 1 10. 10 20 0 11. yes 12.X==0 13. x=1 y=0 x=2 14. ch>=’A’&& c<=’Z’ ch=ch-32 15. -1 16.0 1 习题5 5-1单选题 1~5 CDABA 6~10 ABDDB 11~15 DBCBC 16-21 DBCBCD 5-2填空题 1.20 2.333 3.(1) i<10 (2)
7、j%3!=0 4. (1) flag*(float)k/(k+1) (2) flag=-flag 5.(1) max=x (2) x!=-1 (3) scanf("%d", &x) 6.0 7.22 8.t*10 习题6 6-1单选题 1~5CBBAD 6~10 DBCCD 11~15DCABC 16~20ABBBC 21~25CCBAA 26~30ABBDB 31~35BDADD 36~40ADCAA 41~43BBB 6.2 填空题 1. 120 2. x 3 . 3,2,2,
8、3 4. fac/i 5. 8,17 6. 9 7. 1.0/(i*i) 8. fun-in:30,20,10 fun-end:1015,35,1050 10,20,30 9. 012345 10. 93636 11. –f 12. 0 10 1 11 2 12 13. 4 3 3 4 14. x 15. void fun(double b[ ]) 16. (1) j (2) str[j-1 17. A+B=9 18.246 19. 1:a=1,b=1 2:a=1,b=2 20. x=9 x=
9、10 21. 9 22.777 习题7 7-1单选题 1-5 DBCCB 6-8 BDCAD 7-2填空题 1. c 2. 60 3. 1000 10 4. 16 5. 81 6. 100, 144 习题8 8-1单选题 1~15 CADAC 6~10 CCDAB 11~15 CBBCD 16~20CAABA 21~25 DACDA 26~30BDCAD 31~35ADACD 36~37AC 10000 01000 00100 00010 00001 8-2填空题 1 (1) 2
10、3 4 5 (2) 10010 (3) QuickC (4) 2. (1) j+=2 (2) a[i]>a[j] 3. (1) r+b[k] (2) *x 4. 1 3 7 15 5. &a[i] a[i] 或 *(a+i) 6. m-1,n-1 7. (1)i<10 (2)a[i]-a[i-1] (3)i%3= =0 8. (1)a[i][j]+b[i][j] (2)printf(“\n”) 9.0 习题9 9-1单选题 1~5 DDACB 6~10 ACBAD 11~15 CDBCC
11、16~20 DADAC 21~25 ACDAC 26~30 DDDAA 31~33 ABC 9-2填空题 1 . 2,1 2. 10#30# 3. FOUR,O 4. 60 5. 49 6. 2 7. 2 8. 7 5 3 1 9 9. 15 1,1,1, 1,1 3,3,3, 3,3 10. 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0
12、 1 11. 12. (1) *x (2) t 13. (1) '\0'或0 (2) n++或n+=1或n=n+1 14. 024 习题10 10-1单选题 1-5 CDBBB 6-10 BBBAD 11-15 CCBDA 16-20BDCBB 21-25CDDCD 26-30CADBB 10-2填空题 1. 所有结构体成员所占存储空间的总和 2. 与占用存储空间最大的那个成员相等 3. (1) 结构体 (2) 3 (3) sa.a (4) 9 (5) psa=&sa 4. 80 5. s
13、truct node 6. 0 7. 2 3 8.22 9. 10,x 10. 2,3 习题11 11-1单选题 1-6 BADDAA 11-2填空题 1. 3d3d330 2. (1) 28 (2) 20 (3) 0 (4) -9 3. (1) 251 (2) 42 (3) 209 (4) –295 (5) 848 4. 2 4 6 习题12 12-1单选题 1-5 BCDCA 6-10 ADABC 11-14BDDA 12-2 填空题 1. rewind(文件指针) 2. "d1.dat","rb" 3. stdin
14、 4. 文本文件 二进制文件 5. (1)"w" (2) str[i]-32 (3) "r" 6. fopen 7. Hell 8. (1) "r" (2) fgetc(fp) (3) time++ 9. 文本文件 二进制文件 10. 非零值 0 习题12 12-1单选题 1-5 BCDCA 6-8 ADA 12-2 填空题 1. rewind(文件指针) 2. "d1.dat","rb" 3. stdin 4. 文本文件 二进制文件 5. (1)"w" (2) str[i]-32 (3) "r" 6. fopen 7. Hell 8. (1
15、) "r" (2) fgetc(fp) (3) time++ 实验篇 实验1 熟悉Visual C++6.0可视化集成开发环境 略 实验2 顺序结构程序设计 略 实验3 选择结构程序设计 (1) 略 (2) 略 (3) #include "stdio.h" main() { float a,b; printf("Please input the data a and b:\n"); scanf("%f%f",&a,&b); if(a>10.0) a=a-10.0; else { a=a+10.0;
16、 if(b>a) ; else b=a-b; } printf("a=%f, b=%f\n",a,b); } 实验4 循环结构程序设计 (1) 略 (2) 略 (3)编写一个程序,打印输出半径为1~10的圆的面积,若面积为40~90则予以打印,否则,不予打印。 #include "stdio.h" main() { float r=0, area=0; while(r<10 && area<90) { if (area>40) printf("r=%f, area=%f
17、\n",r,area); r=r+1; area=3.1415926*r*r; } } (4)从键盘输入一批整数,统计其中不大于100的非负数数值的个数。(用while循环实现。) #include "stdio.h" main() { int x,i=0; scanf("%d",&x); while(x>=0) { if(x<=100) i++; scanf("%d",&x); } printf("the number is:%d\n",i); } (5)用p/4=1-1/4+1/
18、5-1/7+1/9-…公式求p的近似值,直到最后一项的绝对值小于10-4为止。 #include "math.h" main() { double k=1.0,n=1.0,pi=0,t=1.0; while (fabs(t)>=1e-4) { pi=pi+t; n=n+2.0; k=-k; t=k/n; } pi=pi*4; printf("pi=%lf\n",pi); } (6)解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每
19、天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩一个桃子了。求第一天猴子共摘了多少个桃子。
#include
20、ow,count=0; printf("Please input the number of ball took:"); scanf("%d",&n); printf("white red yellow\n"); for(white=0;white<=3;white++) for(red=0;red<=3;red++) { yellow=n-white-red; if(yellow>=0 && yellow<=6) { printf("%6d%6d%6d\n",white,red,yellow);
21、 count++; } } printf("Total:%d\n",count); } 实验5 函数 (1) 略 (2) 略 (3)求两个整数的最大公约数和最小公倍数,要求:用一个函数求最大公约数,用另一个函数求最小公倍数,分别采用用全局变量和不用全局变量两种方法做。 l 使用全局变量: #include "stdio.h" int x,y; int hef() { int u=x,v=y,a,b; if(u>v) { a=u; u=v; v=a; } while((b=u%v)!=0)
22、 { u=v; v=b; } return(v); } int led(int x,int y,int h) { return(x*y/h);} main() { int h,l; scanf("%d%d",&x,&y); h=hef(x,y); printf("HCF=%d\n",h); l=led(x,y,h); printf("LCD=%d\n",l); } l 不用全局变量: #include "stdio.h" int hef(int x,int y) { int a,b; if(y>x)
23、 { a=x; x=y; y=a; } while((b=x%y)!=0) { x=y; y=b; } return(y); } int led(int x,int y,int h) { return(x*y/h);} main() { int x,y,h,l; scanf("%d%d",&x,&y); h=hef(x,y); printf("HCF=%d\n",h); l=led(x,y,h); printf("LCD=%d\n",l); } (4)计算s = 1/
24、1-1/2+1/3-…+1/9999-1/10000,分别采用下列各种方法,每种方法单独用一个函数实现,最后加以比较: ① 从左到右各项相加; ② 从右到左各项相加; ③ 从左到右各个正项和负项分别相加; ④ 从右到左各个正项和负项分别相加。 #include "stdio.h" void lsum(int n); void rsum(int n); void lsumc(int n); void rsumc(int n); main() { lsum(10000); rsum(10000); lsumc(10000); rsumc(10000
25、); } void lsum(int n) { int i,k=1; double sum=0,t; for(i=1;i<=n;i++) { t=1.0*k/i; sum+=t; k=-k; } printf("the lsum is:%lf\n",sum); } void rsum(int n) { int i,k=-1; double sum=0,t; for(i=n;i>=1;i--) { t=1.0*k/i; sum+=t; k=-k; }
26、printf("the rsum is:%lf\n",sum); } void lsumc(int n) { int i; double sum=0; for(i=1;i<=n-1;i++,i++) sum+=1.0/i; for(i=2;i<=n;i++,i++) sum-=1.0/i; printf("the lsumc is:%lf\n",sum); } void rsumc(int n) { int i; double sum=0; for(i=n;i>=2;i--,i--) sum-=1.0/i; for(i
27、n-1;i>=1;i--,i--) sum+=1.0/i; printf("the rsumc is:%lf\n",sum); } (5)猴子吃桃问题的函数化。把猴子吃桃问题写成一个函数,使它能够求得指定一天开始时的桃子数。 #include "stdio.h" int monkey(int k) { int i,m,n; for(n=1,i=1;i<=10-k;i++) { m=2*n+2; n=m; } return(n); } main() { int day; printf("Please input the da
28、y(1<=day<=10):\n"); scanf("%d",&day); printf("day: %d, total:%d",day, monkey(day)); } (6)菜单程序。编写一个菜单程序,运行后首先在屏幕显示如图所示的菜单,当输入数值1时,调用显示“@”图案的函数;当输入数值2时,调用显示“$”图案的函数;当输入数值3时,程序结束。 #include "stdio.h" void view1(); void view2(); main() { int op; printf("\n******************************
29、\n"); printf(" Menu section \n"); printf(" 1.view(@) \n"); printf(" 2.view($) \n"); printf(" 3.exit \n"); printf("************************************\n"); printf("\nPl
30、ease input selection:\n"); while(1) { scanf("%d",&op); if(op==1) { view1(); printf("\nPlease input selection:"); } else if(op==2) { view2(); printf("\nPlease input selection:"); } else return; } } void view1() { int i; for(i=1;i<15;i+
31、) putchar('@'); return; } void view2() { int i,j; for(i=1;i<5;i++) { for(j=1;j
32、nclude "stdio.h" main() { int a[10],b[2][5],i,j=0,k=0; printf("Please input the array a:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { if(a[i]%2==0) { b[0][j]=a[i]; j++; } else { b[1][k]=a[i]; k++; } } for(
33、j=0;j<=1;j++)
for(k=0;k<=4;k++)
printf("b[%d][%d]=%d ",j,k,b[j][k]);
}
(4)找出一个二维数组的鞍点,即该位置上的元素在所在行上最大,在所在列上最小,注意也可能没有鞍点。
#include "stdio.h"
#define M 3
#define N 4
main()
{ int a[M][N],i,j,k;
printf("Please input the array a:\n");
for(i=0;i 34、canf("%d",&a[i][j]);
for(i=0;i 35、e "stdio.h"
main()
{ int i = 0; int k = 0;
int quit_num = 0;
int n; //总人数
int m; //报数的最大数
int num[100]; //保存所有人的编号
int *p = num; //初始化指针,使其指向num数组
printf("Please input number of person: n = ");
scanf("%d", &n);
printf("Please input the number m = ");
scanf("%d" 36、 &m);
/*给所有的人编号为1到n */
for (i = 0 ; i < n ; i ++ )
{ *(p + i) = i + 1; }
i = 0;
/*当未退出人数大于1时 执行循环*/
while(quit_num < n - 1)
{ while (i 37、 i=0;
}
while (*p == 0) p ++; //查找留在圈中的人
printf("The last one’s number is : %d\n" , *p);
}
实验7 指针
(1) 略
(2) 略
(3) 用指针作函数参数求4个整数中的最大者。
#include "stdio.h"
void max(int *,int *);
main()
{ int a,b,c,d,*pa,*pb,*pc,*pd;
pa=&a;pb=&b;pc=&c;pd=&d;
printf("Please input the data a,b 38、c,d:\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
max(pa,pb);
max(pa,pc);
max(pa,pd);
printf("the max number of the datas is:%d\n",*pa);
}
void max(int *p,int *q)
{ int t;
if(*p<*q)
{ t=*p; *p=*q; *q=t; }
}
(4)编写一个对含有n个元素的一维数组求和的函数sum( ),要求用指针作为此函数的参数,并在主函数中调用此函数,实现对含有 39、任意多个元素的一维数组求和的功能。
#include "stdio.h"
#define N 5
int sum(int *);
main()
{ int a[N],s=0,*p=a,i;
printf("Please input the array a:\n");
for(i=0;i 40、 s+=*(p+i);
return s;
}
(5)编写一个在一维有序数组中插入数据的函数insert( ),并在主函数中调用它实现数据的插入。有序数组在主函数中给出,可以通过初始化获得,也可以通过键盘输入任意数据。
#include "stdio.h"
void insert(int *,int,int);
main()
{ int i, a[6],x;
printf("Please input the array a:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("Please inpu 41、t the insert data x:\n");
scanf("%d",&x);
insert(a, 5,x);
printf("the new array a:\n");
for(i=0;i<6;i++)
printf("%d ",a[i]);
}
void insert(int *p, int n, int x)
{ int i,j;
for(i=0;i 42、
}
实验8 结构体和共用体
(1) 略
(2) 略
(3)*建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
#include "stdio.h"
struct list
{ char xh[4];
char xm[10];
char xb;
int nl;
struct list *next;
};
typedef struct list SLIST;
SLIST *creat_list()
{ SLIST *h,*s,*r;
int i;
h=(SLI 43、ST *)malloc(sizeof(SLIST));
r=h;
for(i=0;i<3;i++)
{ s=(SLIST *)malloc(sizeof(SLIST));
scanf("%s%s%d%c",s->xh,s->xm,&s->nl,&s->xb);
r->next=s;
r=s;
}
r->next=NULL;
return h;
}
void dele_list(SLIST *p,int age)
{ SLIST *q=p->next;
while(q)
if(q->nl 44、age)
{ p=p->next; q=q->next; }
else
{ p->next=q->next; break; }
}
main()
{ SLIST *head,*p;
int age;
head=creat_list();
printf("Please input the age:\n");
scanf("%d",&age);
dele_list(head,age);
p=head->next;
while(p!=NULL)
{ printf("%s, %s 45、 %c, %d\n",p->xh,p->xm,p->xb,p->nl);
p=p->next; }
}
实验9 文件
(1)略
(2)编写程序实现将一个文本文件复制到另一个文本文件中,源文件内容自己定义。
#include "stdio.h"
main(int argc, char *argv[])
{ FILE *in,*out;
if(argc!=3){ printf("please enter the filename");exit(0);}
if((in=fopen(argv[1],"r"))==NULL)
{ printf("cannot 46、open infile\n");
exit(0); }
if((out=fopen(argv[2],"w"))==NULL)
{ printf("cannot open outfile\n");
exit(0); }
while(!feof(in)) fputc(fgetc(in),out);
fclose(in); fclose(out); }
实验10 综合编程
略
模拟试卷(一)参考答案
一.选择题(1~30每题1分,31~50每题2分,共70分)
1
2
3
4
5
6
7
8
9
10
C
47、
B
D
C
D
D
B
A
C
A
11
12
13
14
15
16
17
18
19
20
B
B
D
C
A
B
C
C
A
C
21
22
23
24
25
26
27
28
29
30
A
B
B
B
B
C
D
D
A
C
31
32
33
34
35
36
37
38
39
40
C
D
D
C
B
B
B
A
B
A
41
42
43
44
45
46
47
48
49
50
C
C
D
C
C
B
C
C 48、
D
C
二.填空题(每空2分,共30分)
空序号
答案
空序号
答案
【1】
main()
【9】
10 20 0
【2】
11 6 4
【10】
1 B
【3】
5
【11】
4 3 3 4
【4】
1 1 0 1
【12】
0 10 1 11 2 12
【5】
i<=9 或 i<10
【13】
yes
【6】
k%3
【14】
-f
【7】
0
【15】
1 3 7 15
【8】
b
模拟试卷(二)参考答案
一.选择题(共35道小题,70分,每题2分)
1
2
3
4
49、
5
6
7
8
9
10
A
A
A
C
B
D
A
B
C
D
11
12
13
14
15
16
17
18
19
20
C
D
A
A
B
B
B
D
A
C
21
22
23
24
25
26
27
28
29
30
A
A
D
B
D
A
A
B
D
A
31
32
33
34
35
D
A
B
B
C
二.填空题(每空2分,共30分)
题空号
答 案
题空号
答 案
【1】
double
【2】
x==0
【3】
0
【4】
–f 或 f*-1 或 –1*f 或 f*(-1) 或 (-1)*f
【5】
fun(10)
【6】
x
【7】
a=1.0;b=1.0;s=1.0;
【8】
-1 或 (-1)
【9】
*sn 或 sn[0]
【10】
&a[i]
【11】
a[i] 或 *(a+i)
【12】
row
【13】
a[row][colum]
【14】
!(s[i]>='0' && s[i]<='9') 或
s[i]<'0' || s[i] > '9'
【15】
'\0' 或 0
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818