C语言复习题答案(共23页).doc
精选优质文档-倾情为你奉上c语言程序设计教程(第2版)参考答案习题11-1 单选题15 BBBAC1-2 填空题1.函数2.主函数main(),主函数main()3.主函数main()4.函数首部,函数体5., 6.顺序结构,选择结构,循环结构7.c, .obj, .exe第2章2.1 单选题15 DBDCA 610 DCABA 1115 CADBD 1620CAABC2125ADAAA 2630ACBAC 3135BADDA 3640BBCCC4145BDABA 4649ABBB2.1 填空题12.21,0.539,2465100,d6(1)20 (2)0 (3)607. (1)10,6,4 (2)6,9,15 (3)3,60,838. 559. 11 6 410.511. double12.整型 字符型 实型 枚举类型13.数据类型 数据类型14. 字母 数字 下划线 字母 下划线15. 单精度 双精度16. 变量初始化17. 双引号18. 019. x=3.,i=3习题33-1 选择题1-5BDABC 6-10ADCAC 11-15BBBCC 16-20 CDCDA21-25 CACAA 26-29 BCBA3-2 填空题1.32.02613.0x104. 2, 1 互换a,b的值5.6.66.0037.5.0,4,c=3<Enter>8.i=10,j=20<Enter>9.(1) 65 (2) 65,A (3) 56.,123. (4) 3. (5) 8765.432 (6) 5.e+002 (7) 3.e+000 (8) 3.1416 (9) 8765 (10) 3.1416,8765.4310.a=2 b=5x=8.8 y=76.34c1=65 c2=9711. B6612. n1=%dnn2=%dn13. 1214. 1115. 25 21 3716. 1003017. 1B18. 8819. 2 20.20 67 G习题44-1单选题15 AADAD 610 ACB BB 1115BADAD 1620BADBA2125CDBDD 2630DCDCA 3135DAACB 3640BDBAD4142AA4-2填空题1. 12. (1) a>0 | b>0 (2) x>0 && x<=10 (3) a=1.5 && b=1.5 && c=1.5 (4)p<a | p<b | p<c 3.(1)0 (2)1 (3)1(4)0 (5)14. (max=a>b?a:b)>c?max:c 5-46175,0,38. (1) (a=0) (2) (b=0)(3) (disc<0)9. 1 1 0 110. 10 20 011. yes12.X=013. x=1 y=0x=214. ch>=A&& c<=Z ch=ch-3215. -116.0 1习题55-1单选题15 CDABA 610 ABDDB1115 DBCBC 16-21 DBCBCD5-2填空题1202333 3(1) i<10 (2) j%3!=04. (1) flag*(float)k/(k+1) (2) flag=-flag5(1) max=x (2) x!=-1 (3) scanf("%d", &x)607228t*10习题66-1单选题15CBBAD 610 DBCCD 1115DCABC 1620ABBBC2125CCBAA 2630ABBDB 3135BDADD 3640ADCAA4143BBB6.2 填空题1. 1202. x3 .3,2,2,3 4. fac/i5. 8,176. 97. 1.0/(i*i) 8. fun-in:30,20,10 fun-end:1015,35,1050 10,20,309. 10. 9363611. f12. 0 10 1 11 2 1213. 4 3 3 414. x15. void fun(double b )16. (1) j (2) strj-117. A+B=918.24619. 1:a=1,b=12:a=1,b=220. x=9x=1021. 922.777习题77-1单选题1-5DBCCB 6-8 BDCAD7-2填空题1.c2.603.1000104.16 5. 816. 100, 144习题88-1单选题115 CADAC 610 CCDAB 1115 CBBCD 1620CAABA2125 DACDA 2630BDCAD 3135ADACD 3637AC10000010000010000010000018-2填空题1 (1) 2 3 4 5 (2) 10010 (3) QuickC (4)2. (1) j+=2 (2) ai>aj3 (1) r+bk (2) *x4. 1 3 7 155. &aiai 或 *(a+i)6. m-1,n-17. (1)i<10 (2)ai-ai-1 (3)i%3= =08. (1)aij+bij (2)printf(“n”)9.0习题99-1单选题15 DDACB 610 ACBAD1115 CDBCC 1620 DADAC 2125 ACDAC 2630 DDDAA 3133 ABC9-2填空题1 . 2,1 2. 10#30#3. FOUR,O4. 605. 496. 27. 28. 7 5 3 1 99. 151,1,1, 1,1 3,3,3, 3,310.1 0 0 0 10 1 0 1 00 0 1 0 00 1 0 1 01 0 0 0 111.12. (1) *x (2) t13. (1) '0'或0 (2) n+或n+=1或n=n+114. 024习题1010-1单选题1-5CDBBB 6-10BBBAD 11-15CCBDA 16-20BDCBB21-25CDDCD 26-30CADBB10-2填空题1.所有结构体成员所占存储空间的总和2.与占用存储空间最大的那个成员相等3. (1) 结构体(2) 3(3) sa.a(4) 9(5) psa=&sa4.805.struct node6.07. 2 38.229. 10,x10. 2,3习题1111-1单选题1-6BADDAA11-2填空题1.3d3d3302.(1) 28(2) 20(3) 0(4) -93.(1) 251(2) 42(3) 209(4) 295(5) 8484. 2 4 6 习题1212-1单选题1-5BCDCA6-10ADABC 11-14BDDA12-2 填空题1.rewind(文件指针)2."d1.dat","rb"3.stdin4.文本文件二进制文件5.(1)"w"(2) stri-32(3) "r"6.fopen7.Hell8.(1) "r"(2) fgetc(fp)(3) time+9. 文本文件 二进制文件10. 非零值 0习题1212-1单选题1-5BCDCA6-8ADA12-2 填空题1.rewind(文件指针)2."d1.dat","rb"3.stdin4.文本文件二进制文件5.(1)"w"(2) stri-32(3) "r"6.fopen7.Hell8.(1) "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; if(b>a) ; else b=a-b; printf("a=%f, b=%fn",a,b); 实验4 循环结构程序设计(1) 略(2) 略(3)编写一个程序,打印输出半径为110的圆的面积,若面积为4090则予以打印,否则,不予打印。#include "stdio.h"main() float r=0, area=0; while(r<10 && area<90) if (area>40) printf("r=%f, area=%fn",r,area); r=r+1; area=3.*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:%dn",i);(5)用p/4=1-1/4+1/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=%lfn",pi);(6)解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩一个桃子了。求第一天猴子共摘了多少个桃子。#include <stdio.h>main() int i,m,n; for (n=1,i=1;i<10;i+) m=2*n+2; n=m; printf("total=%dn",m);(7)取彩球问题。现有12个彩球3个白球、3个红球、6个黑球,从中任意取n(2n12)个球,求所有不同的取法。#include "stdio.h"main() int n,white,red,yellow,count=0; printf("Please input the number of ball took:"); scanf("%d",&n); printf("white red yellown"); for(white=0;white<=3;white+) for(red=0;red<=3;red+) yellow=n-white-red; if(yellow>=0 && yellow<=6) printf("%6d%6d%6dn",white,red,yellow); count+; printf("Total:%dn",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) 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=%dn",h); l=led(x,y,h); printf("LCD=%dn",l);l 不用全局变量:#include "stdio.h"int hef(int x,int y) int a,b; if(y>x) 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=%dn",h); l=led(x,y,h); printf("LCD=%dn",l);(4)计算s = 1/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);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:%lfn",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; printf("the rsum is:%lfn",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:%lfn",sum);void rsumc(int n) int i; double sum=0; for(i=n;i>=2;i-,i-) sum-=1.0/i; for(i=n-1;i>=1;i-,i-) sum+=1.0/i; printf("the rsumc is:%lfn",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 day(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*n"); printf(" Menu section n"); printf(" 1.view() n"); printf(" 2.view($) n"); printf(" 3.exit n"); printf("*n"); printf("nPlease 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+) putchar(''); return;void view2() int i,j; for(i=1;i<5;i+) for(j=1;j<i;j+)putchar(' '); for(j=1;j<10;j+) putchar('$'); printf("n"); return;实验6 数组(1) 略(2) 略(3)设有含10个元素的一维整型数组,其中偶数和奇数各占一半,将该数组变换为2´5的二维数组,且偶数和奇数各成一行。#include "stdio.h"main() int a10,b25,i,j=0,k=0; printf("Please input the array a:n"); for(i=0;i<10;i+) scanf("%d",&ai); for(i=0;i<10;i+) if(ai%2=0) b0j=ai;j+; else b1k=ai; k+; for(j=0;j<=1;j+) for(k=0;k<=4;k+) printf("b%d%d=%d ",j,k,bjk);(4)找出一个二维数组的鞍点,即该位置上的元素在所在行上最大,在所在列上最小,注意也可能没有鞍点。#include "stdio.h"#define M 3#define N 4main() int aMN,i,j,k; printf("Please input the array a:n"); for(i=0;i<M;i+) for(j=0;j<N;j+) scanf("%d",&aij); for(i=0;i<M;i+) k=0; for(j=1;j<N;j+) if(aij>aik) k=j; for(j=0;j<M;j+) if(ajk<aik) break; if(j=M) printf("%d %d,%dn",aik,i,k); (5)有n个人围成一圈,顺序编号。从第1个人开始报数(从1到m),凡报到m的人退出圈子,求最后一个圈中的人的编号。#include "stdio.h"main()int i = 0;int k = 0;int quit_num = 0;int n;/总人数int m;/报数的最大数int num100;/保存所有人的编号int *p = num;/初始化指针,使其指向num数组printf("Please input number of person: n = ");scanf("%d", &n);printf("Please input the number m = ");scanf("%d", &m);/*给所有的人编号为1到n */for (i = 0 ; i < n ; i + ) *(p + i) = i + 1;i = 0;/*当未退出人数大于1时 执行循环*/while(quit_num < n - 1) while (i<n) if(*(p+i)=0) k+; if(k=m) *(p+i)=0; quit_num+; k=0; i+; i=0;while (*p = 0) p +;/查找留在圈中的人printf("The last ones number is : %dn" , *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,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:%dn",*pa);void max(int *p,int *q) int t; if(*p<*q) t=*p; *p=*q; *q=t; (4)编写一个对含有n个元素的一维数组求和的函数sum( ),要求用指针作为此函数的参数,并在主函数中调用此函数,实现对含有任意多个元素的一维数组求和的功能。#include "stdio.h"#define N 5int sum(int *);main() int aN,s=0,*p=a,i; printf("Please input the array a:n"); for(i=0;i<N;i+) scanf("%d",a+i); s=sum(p); printf("the sum of the array a is:%dn",s);int sum(int *p) int s,i; for(i=0;i<N;i+) s+=*(p+i); return s;(5)编写一个在一维有序数组中插入数据的函数insert( ),并在主函数中调用它实现数据的插入。有序数组在主函数中给出,可以通过初始化获得,也可以通过键盘输入任意数据。#include "stdio.h"void insert(int *,int,int);main() int i, a6,x; printf("Please input the array a:n"); for(i=0;i<5;i+) scanf("%d",&ai); printf("Please input 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 ",ai);void insert(int *p, int n, int x) int i,j; for(i=0;i<n;i+) if(*(p+i)>x) break; for(j=n;j>i;j-) *(p+j)=*(p+j-1); *(p+i)=x; 实验8 结构体和共用体(1) 略(2) 略(3)*建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。#include "stdio.h"struct list char xh4; char xm10; char xb; int nl; struct list *next;typedef struct list SLIST;SLIST *creat_list() SLIST *h,*s,*r; int i; h=(SLIST *)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!=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, %c, %dn",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(argv1,"r")=NULL) printf("cannot open infilen"); exit(0); if(out=fopen(argv2,"w")=NULL) printf("cannot open outfilen"); exit(0); while(!feof(in) fputc(fgetc(in),out); fclose(in); fclose(out); 实验10 综合编程略模拟试卷(一)参考答案一选择题(130每题1分,3150每题2分,共70分)12345678910CBDCDDBACA11121314151617181920BBDCABCCAC21222324252627282930ABBBBCDDAC31323334353637383940CDDCBBBABA41424344454647484950CCDCCBCCDC二填空题(每空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分)12345678910AAACBDABCD11121314151617181920CDAABBBDAC21222324252627282930AADBDAABDA3132333435DABBC二填空题(每空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 或 sn0【10】&ai【11】ai 或 *(a+i)【12】row【13】arowcolum【14】!(si>='0' && si<='9') 或si<'0' | si > '9'【15】'0' 或 0专心-专注-专业