程序设计上机实验课后答案
更新时间:2024-06-29 00:42:01 阅读量: 综合文库 文档下载
第3章 程序控制结构
1.1 选择结构部分
一、选择题
1 B 17 C 2 A 18 C 3 D 19 B 4 B 20 D 5 D 21 B 6 D 22 B 7 A 23 C 8 D 24 A 9 C 25 D 10 C 26 D 11 D 27 A 12 B 28 A 13 A 29 C 14 D 30 C 15 A 31 C 16 A 32 D 二、填空题 1. OK!
NO! ERROR! 2. x=1 y=0
x=2
3. ch>=’A’&& c<=’Z’ ch=ch-32 4. -1 5. x=6 6. (1)2
(2)3
CC
a=2,b=2,c=4 7. (1)a
(2)a>c&&b>c (3)a 三、程序设计题 1. #include #define pi 3.14159 main( ) { int k; float r,c,a; printf(“input r,k\\n”); scanf(“%f%d”,&r,&k); switch(k) { case 1: a=pi*r*r; printf(“area=%f\\n”,a);break; case 2: c=2*pi*r;printf(“circle=%f\\n”,c);break; cese 3: a=pi*r*r;c=2*pi*r;printf(“area=%f circle=%f\\n”,a,c);break; } } 2. main( ) { int year,leap; scanf(“%d”,&year); if(year%4==0) { if(year0==0) { if(year@0==0) leap=1; else leap=0; } else leap=1; } else leap=0; if(leap) printf(“%d is ”,year); else printf(“%d is not ”,year); printf(“ a leap year\\n”); } 3. #include main() { float x,y; scanf(“%f”,&x); if(x<0) y=x*x; else if(x>=0&&x<10) y=-0.5*x+10; else y=x-sqrt(x); printf(“y=%f”,y); } 1.2 循环结构部分 一、选择题 1 A 16 A 2 C 17 B 3 C 18 D 4 C 19 B 5 B 20 D 6 D 21 D 7 D 22 C 8 A 23 A 9 C 24 B 10 B 25 D 11 A 26 B 12 B 27 C 13 A 28 B 14 B 29 A 15 A 30 C 二、填空题 1. (1)先判断条件是否成立(为真),若成立(为真)再执行循环语句 (2)先执行循环语句,再判断条件是否成立(为真),若成立则继续执行循环,若不成立,则结束循环。do-while至少执行一次循环语句 2. (1)switch-case语句 (2)循环 3. 结束本次循环执行 4. (1)结束本次循环,后进行循环的条件判定,即不终止整个循环的执行过程 (2)终止整个循环的执行,不再进行条件判定 5. 8.18或19 6. ##2##4 7. 54321 8. k<=n 9. ACE 三、程序分析题 1. 1,2,3 2. 3,3 3. 52 4. 7891 5. s=6 6. 6 7. * ** *** **** 8. ****** * * * * ****** 9. 1 1 四、程序设计题 1. #include main( ) { int n=1,m=0,k,mod_mn=1; printf(“Please Input m value:\\n”); scanf(“%d”,&m); n=1; for(k=0;;k++) { mod_mn=m/(n*10); printf(“%d”,(m-mod_mn*n*10)/n); if(mod_mn==0) break; n*=10; } } 2. #include main( ) { int l,m,n,answer_flag=0; n=1; printf(“Big Rooster,Hen,Chickabiddy\\n”); for(l=0;l<=20;l++) for(m=0;m<=(100-l*5)/3;m++) { n=(100-l*5-m*3)*3; if(l*m*n>0&&l+m+n==100&&(l*5+m*3+n/3)==100) { printf(“%-4d%-4d%-4d\\n”,l,m,n); answer_flag=1; } } if(answer_flag==0) printf(“Not Answer”); } 程序运行结果: Big Rooster,Hen,Chickabiddy 4 18 78 8 11 81 12 4 84 3. #include #include int k,l,m,n=0; printf(“Please Input n:\\n”); for(m=101;m<=200;m+=2) { if(n==0) printf(“\\n”); k=sqrt(m); for(l=2;l<=k;l++) if(m%l==0) break; if(l>=k+1) {printf(“%d”,m); n++; } } } 4. #include main( ) { int l,m,n,answer_flag=0; n=1; printf(“\\n1Cent Coin,2Cent Coin,5Cent Coin\\n”); for(l=0;l<=100;l++) for(m=0;m<=(100-l)/2;m++) { n=(100-l-m*2)/5; if(l+m*2+n*5==100) { printf(“%-4d%-4d%-4d\\n”,l,m,n); answer_flag+=1; } } if(answer_flag==0) printf(“Not Answer”); else printf(“Total of Exchange Method is %d”,answer_flag); } 共有541种换法。 5. #include main( ) { int k,l,n; double e=1,fact_k=1; printf(“Please Input n:”); scanf(“%d”,&n); for(k=1;k<=n;k++) { fact_k=1; for(l=1;l<=k;l++) fact_k*=1; e+=1/(double)fact_k; } printf(“e=%lf”,e); } 程序运行结果: Please Input n:100 e=2.718282 6. #include main( ) { int k,l,m,n; printf(“Please Input n:\\n”); scanf(“%d”,&n); for(k=1;k<=n;k++) { for(m=0,l=1;l<=k/2;l++) if(!(k%l)) m+=l; if(m==k) printf(“M”,k); } } 程序运行结果: 6 28 496 7. #include main( ) { int year=0,number=0; for(year=2000;year<3000;year++) { if((year%4==0&&year0!=0)||year@0==0) { printf(“%d”,year); number++; if(number==0) printf(“\\n”); } } printf(“\\ntotal number of leap year is %d”,number); } 8. #include main( ) { int k,l,n; double sum=0,fact_k=1; printf(“Please Input n:”); scanf(“%d”,&n); for(k=1;k<=n;k++) { fact_k=1; for(l=1;l<=k;l++) fact_k*=l; sum+=fact_k; } printf(“sum=%.2lf”,sum); } 9. #include { float a=1,b,pi,t=1; while(t>=1e-6) { pi=pi+t; a++; b=a*a; t=1/b; } pi=pi*6; printf(“pi=%f”,pi); } 第4章 函数 一、选择题 1 C 16 A 31 B 2 B 17 D 32 C 3 B 18 B 33 D 4 D 19 C 34 C 5 B 20 B 35 A 6 B 21 D 36 C 7 D 22 C 37 B 8 A 23 D 38 C 9 D 24 C 39 A 10 A 25 C 11 D 26 A 12 D 27 D 13 B 28 C 14 A 29 A 15 A 30 B 二、填空题 1. 程序中的main( )函数 2. 包含它的函数 调用函数 三、程序分析题 1. 15 2. i=7;j=6;x=7 7. 1:a=1,b=1 2:a=1,b=2 3:a=1,b=3 四、程序设计题 1. void main() { int n; scanf(\ printf(\} fan(int m) { int sum=0,i; while(m) { i=m;m=m/10;sum+=i; } return(sum); } 2. #include\ double add(double x, double y) { double sum; sum=x+y; return(sum); } void main() { double a,b,c; scanf(\ c=add(a,b); printf(\} 3. #include\ double mypow(double x, int y) { double s=1;int k; for( k=0;k 3. 13 4. person[i].sex 8. x=9 x=10 9. 9 10. input a integer number:5 5!=120 11. 777 12. 15 return(s); } void main() { double a=5.0;int n=2; printf(\} 4. fun(int x,int y) { int z; z=fabs(x-y); return(z); } 5. isprime (int a) { int i; for(i=2;i 6. #include \ main() { int i=5; void palin(int n); printf(\ palin(i); printf(\} void palin(int n) { char next; if(n<=1) { next=getchar(); printf(\putchar(next); } else { next=getchar(); palin(n-1); putchar(next); } } 第5章 数组 一、选择题 1 2 D 17 C 32 D 3 D 18 B 33 C 4 B 19 C 34 B 5 C 20 C 35 B 6 A 21 D 36 D 7 B 22 B 37 D 8 C 23 B 38 D 9 B 24 B 39 D 10 A 25 D 40 B 11 B 26 D 41 D 12 C 27 C 42 B 13 C 28 B 43 C 14 B 29 D 44 D 15 B 30 A 45 C C 16 C 31 A 一、填空题 1. 0、数据类型 2. 9、0 3. ① &x[i] ② i=1 ③ a[i] 4. ① &a[i] ② i%4==0 ③ printf(\5. ① k=p ② k 6. ① a[0] ② max=a[i] 7. ① 9 ② i 8. ① =a ② a ③ sum/n ④ x[n]a[k] 11. ① base%n ② base/n ③ j-- 12. ① j=i ② k=i 13. ① a[i]>b[j] ② i<3 ③ j<5 14. ① x[0] ② x[0]=t 15. 按行存放 16. 一维 17. 0 18. 0、0 19. 0、6 20. 0 21. ① i==j ② a[i][j] 22. ① p=j ② x[i][p] ③ LineMax(x) 23. ① i==j ② a[i][j] 24. ① i-- ② n 25. ① a[0][i] ② b[i][0] 26. srtcpy(s2,s1) 27. #include 31. ① j++ ② a[i]>a[j] 32. he 33. ① c=getchar( ) ② 1 34. ① j ② s[j-1] 35. ① strlen(t) ② t[k]==c ③ break 36. ① b[j]!= '\\0' ②'\\0' 9 37. ① j>=0&&t 二、程序分析题 1. 3 7 15 2. 10010 3. 852 4. 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 7 4 8 9 1 5 5. 1 2 0 1 2 -16. 2 5 20 7. 12 8. 321678 9. 1,2,7,6,5,4,3,8,9,10,10. 3 5 7 11. 1,0,7,0, 12. 1,6,5,7, 13. 6,4,3,2, 14. 4 15. 0650 16. 21 17. 3 5 7 18. 9 19. 5 4 20. 3 4 21. ab 22. 3 23. 20 11 24. acc,xabcc 25. 6 26. f 27. 1 28. 2 29. WORLO 30. AzyD 31. 9198 32. S**B* 33. #&*&% 34. SW* 程序设计题 1. #include main() 10 { float data[10]; /*存放浮点数的一维数组*/ float result1=0.0,result2=0.0; /*定义变量,分别存放正数和、负数和*/ int i; printf(\ for(i=0;i<10;i++) scanf(\ /*逐一输入数据*/ for(i=0;i<10;i++) { if(data[i]>0.0) result1+=data[i]; /*累加正数*/ else result2+=data[i]; /*累加负数*/ } printf(\ printf(\ } 2. #include #include \#define N 101 main() { int i,j,line,a[N]; for(i=2;i if(a[i]!=0&&a[j]!=0) if(a[j]%a[i]==0) a[j]=0;} printf(\ for(i=2,line=0;i if(a[i]!=0) {printf(\ line++;} if(line==10) {printf(\line=0;} } } 3. #include #define N 10 main() {int i,j,min,tem,a[N]; /*input data*/ printf(\for(i=0;i printf(\ 11 scanf(\printf(\for(i=0;i for(j=i+1;j /*output data*/ printf(\for(i=0;i 4. #include main() { int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf(\for(i=0;i<10;i++) printf(\printf(\ printf(\scanf(\end=a[9]; if(number>end) a[10]=number; else {for(i=0;i<10;i++) { if(a[i]>number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf(\} 12 5. #include #define N 5 main() { int a[N]={9,6,5,4,1},i,temp; printf(\ for(i=0;i a[i]=a[N-i-1]; a[N-i-1]=temp; } printf(\for(i=0;i printf(\} 6. #include main() {int i,j; int a[10][10]; printf(\for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;} for(i=2;i<10;i++) for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf(\ printf(\ } } 7. #include main() {int a,i,aa[4],t; scanf(\aa[0]=a; aa[1]=a0/10; aa[2]=a00/100; aa[3]=a/1000; for(i=0;i<=3;i++) {aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) {t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; 13 } for(i=3;i>=0;i--) printf(\} 8. #include main() { int matrix[4][4]; //定义数组,存放矩阵元素 int k,j,result1=0,result2=0; //result1和result2分别存放两对角线元素和 for(k=0;k<4;k++) //逐行输入数据 { printf(\ for(j=0;j<4;j++) //逐列输入数据 { scanf(\ if(k==j) //累加对角线上的元素 result1+=matrix[k][j]; if(k+j==3) //累加反对角线上的元素 result2+=matrix[k][j]; } } printf(\} 该矩阵周边12个元素之和以及矩阵主对角线及其下方(共10个) 元素之和答案略。 9. #include #define N 4 main(){ int i,j,med; int b[N][N]; static int a[N][N]={ 1, 2, 3, 4, 5,16,17,18,19, 6, 15,24,25,20, 7, 14,23,22,21, 8, 13,12,11,10, 9 }; printf(\ for(i=0;i<=N-1;i++) { for(j=0;j<=N-1;j++) printf(\分) for(i=0;i<=N-1;i++)for(j=0;j<=N-1;j++)b[N-1-j]=a[j]; (3分) /*Try: b[N-1-j]=a[j]; (This Is Up And Down Convert ) Try: b[N-1-j]=a[j]; (This Is Left And Right Convert) */ printf(\for(i=0;i<=N-1;i++) {for(j=0;j<=N-1;j++) printf(\printf(\} } 10. 程序提示: 输入矩阵 flag2=0;//矩阵中无鞍点 for(i=0;i max=a[i][0];maxj=0; 用for循环语句找第i行的最大值存放在max中,其下标j保存到maxj中 for(k=0,flag1=1;k 14 if(max>a[k][maxj]) flag1=0;//max不是该列的最小元素 if(flag1) { printf(\第%d行第%d列的%d是鞍点\\n\1,maxj+1,max); flag2=1; } }//endfor if(!flag2) printf(\矩阵中无鞍点\\n\ 11. #include main() { static int month_tab[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31}, /*利用数组,将非闰年的每月天数列成一个表*/ {0,31,29,31,30,31,30,31,31,30,31,30,31} /*闰年的每月天数对应的表*/ }; int year, month, day; int yearday,leap,i; printf(\ scanf(\ /*输入年、月、日*/ leap = ((year %4 == 0) &&(year 0 != 0)||(year % 400 == 0));/*判定是否为闰年*/ yearday = day ; for (i=1;i yearday+=month_tab[leap][i]; /*计算是该年的第几天*/ printf(\ } 12. #include main() { char a[41],b[21]; //定义两个字符型数组,用以分别存放两个字符串 int j,k; //定义两个循环因子 printf(\ scanf(\ printf(\ scanf(\ while (a[i]!=’\\0’) i++ ; /*搜索到第一个字符串的结尾处*/ while (b[j]!=’\\0’) /*将第二个字符串中的字符逐一拷贝到第一个字符串的后面*/ { a[i]=b[j] ; i++ ; j++ ; } a[i]='\\0'; /*加字符串结尾标志*/ printf(\} 13. #include main() { char str1[100],str2[100]; //str1用于存放输入的数字,str2用于存放输入的字母 char c; //存放临时数据的变量 int i=0,j=0; 15 printf(\ //输入提示 while((c=getchar())!='\\n'&&i<99&&j<99) //输入字符串,遇回车符结束 { if(c>=48&&c<=57) //对是否为~9的数字进行判断 str1[i++]=c; //输入的是数字,则存放入str1中 else if(c>=65&&c<=90||c>=97&&c<=122) //对是否为英文字母进行判断 str2[j++]=c; //输入的是字母,则存放入str2中 else ; //既不是数字,又不是字母,忽略 } str1[i]='\\0'; //加字符串结束标志// str2[j]='\\0'; printf(\ //打印结果 printf(\} 第6章 指针 一、选择题 1 B 16 B 31 C 46 C 61 A 2 B 17 C 32 A 47 C 62 D 3 D 18 C 33 B 48 D 63 A 4 C 19 B 34 A 49 A 64 B 5 D 20 B 35 B 50 C 65 C 6 A 21 A 36 D 51 D 66 D 7 B 22 C 37 D 52 B 67 A 8 B 23 D 38 C 53 D 68 A 9 A 24 D 39 C 54 A 10 B 25 D 40 A 55 C 11 B 26 C 41 B 56 D 12 C 27 D 42 A 57 C 13 A 28 C 43 B 58 A 14 A 29 C 44 C 59 B 15 A 30 A 45 A 60 D 二、填空题 1. 0 2. p是指向整形数据的指针变量;q是指针数组,它由10个指向整形数据的指针元素组成;r是指向函数的指 针,该函数返回一个整数值;s是返回一个指针的函数,该指针指向整形数据 3. 4. 5. 6. 7. 8. 4、12 8、8 12、12 3 *(p+6) 456789 9. hELLO 10. ef 11. ① return 0 ② *p1-*p2 12. 110 13. 71 14. p=(double *)malloc(sizeof(double)) 15. br[i] 16. ① str+strlen(str)-1 ② i>strlen(str)/2 ③ huiwen(str) 17. *t 18. *pmax=*px 16 19. 10 20. 40 21. efgh 22. 3 23. 7777654321 三、程序分析题 1. 3 2. 19 3. 1,2,3,4,5,6,7,8,9,0, 4. 8,7,6,5,4,3,2,1 5. 5678901234 6. 2,3,4,5,6 7. 25 8. 6,2,3,4,5, 9. 0 10. z 11. 6789 12. 6 13. 3,4 14. AGAAGAG 15. ABCD BCD CD D 16. 8.000000 17. 2 4 18. 3 4 5 19. 10 20. gfedcba 21. Afternoon 22. 61 23. accbbxxyy,bbxxyy 24. 20 25. 31 26. 567 27. d 28. 3,5,3,5 29. 1,3 30. 2 31. a 32. 5 3 33. 6789 34. 15 35. -5,-12,-7 36. 6385 17 37. 4 3 2 1 38. 35745 39. 9 40. 1.10 41. 8 42. 26 43. day 44. 23 45. 60 46. 2 47. 6 48. 0246802468 49. Program gram 50. 2,5,1,2,3,-2, 51. CDABC 52. 0 0 0 8 53. aa 54. Java dBase C Language Pascal 55. 6 7 8 Java 9,basicjava 56. 6 57. GFEDCB 58. SO 59. 10 60. Itisis 61. goodgood! 62. 8 63. 17 64. ar=9 ar=9 ar=11 65. 6 66. 12345 67. abcfg 68. abcbcc 69. bcdefgha 70. 14 71. 10 72. 40 73. 10 28 四、程序设计题 1. #include 18 main() { int number[10]; input(number); max_min(number); output(number); } input(number) int number[10]; {int i; for(i=0;i<9;i++) scanf(\ scanf(\} max_min(array) int array[10]; {int *max,*min,k,l; int *p,*arr_end; arr_end=array+10; max=min=array; for(p=array+1;p*max) max=p; else if(*p<*min) min=p; k=*max; l=*min; *p=array[0];array[0]=l;l=*p; *p=array[9];array[9]=k;k=*p; return; } output(array) int array[10]; { int *p; for(p=array;p printf(\} 2. #include main() { int number[20],n,m,i; printf(\scanf(\printf(\scanf(\for(i=0;i scanf(\scanf(\move(number,n,m); for(i=0;i printf(\ 19 printf(\} move(array,n,m) int n,m,array[20]; { int *p,array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p--) *p=*(p-1); *array=array_end; m--; if(m>0) move(array,n,m); } 3. #include void main() { int data[7]={1,2,3,4,5,6,7},temp,k,*ph,*pt; ph=data; //定义指针指向数组data的首元素 pt=data+6; //指针指向数组的最后一个元素 while(pt>ph) { temp=*ph; *ph=*pt; *pt=temp; //数据进行交换 ph++; //两指针向中间移动 pt--; } for(k=0;k<7;k++) printf(\//输出结果 printf(\} 4. void move(int *p) { int i,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(p+3*i+j); *(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; } } main()函数请读者自己编写。 5. #include main() {int i,a[15]; int *p; void px(int *q,int n); 20 p=a; printf(\for(;p printf(\for(;p printf(\void px(int *q,int n) { int *i,*j,*k; for(i=q;i for(j=i+1;j if(k!=i) { *i+=*k; *k=*i-*k; *i=*i-*k; } } } 6. #include void main() { static int a[2][3],b[3][2],result[2][2]; int *p[3],i,j,k; p[0]=a[0];p[1]=b[0];p[2]=result[0]; //三个指针分别指向三个二维数组的起始地址 printf(\请输入第一个矩阵:\\n\ for(i=0;i<2;i++) // 通过嵌套循环输入第一个矩阵 { printf(\输入新的一行,每行三个整型数\\n\ for(j=0;j<3;j++) scanf(\ } printf(\第二个矩阵:\\n\ for(i=0;i<3;i++) // 通过嵌套循环输入第二个矩阵 { printf(\输入新的一行,每行三个整型数\\n\ for(j=0;j<2;j++) scanf(\ } //下面的三重循环将两个矩阵乘起来 for(i=0;i<2;i++) for(j=0;j<2;j++) //前两重循环穷举了resultij for(k=0;k<3;k++) result[i][j]+=(*(p[0]+3*i+k))*(*(p[1]+2*k+j)); // aik*bkj ,结果累加入resultij for(i=0;i<2;i++) // 输出结果 { printf(\ 21 for(j=0;j<2;j++) printf(\ } 7. #include void main() { char *p[7]={\\ int code; printf(\ scanf(\ printf(\} 8. #include #include void PrintArray(int * a, int n) { int i; for(i=0; i void BubbleSort(int a[], int n) { int i,j,tmp; int flag; int count = 0; printf(\ PrintArray(a,n); for(i=0; i flag = 0; for(j=0; j if(a[j] > a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = 1; } } count++; printf(\ PrintArray(a,n); if(flag == 0) { return; } } } void main() { 22 int *a,n=5,i; a =(int *)malloc(n*sizeof(int)); for(i=0; i 9. #include #include void swap(char *p1,char *p2) { char p[80]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } main() { char n1[80],n2[80],n3[80],*p1,*p2,*p3; p1=n1; // 指针p1指向字符串n1 p2=n2; // 指针p2指向字符串n2 p3=n3; // 指针p3指向字符串n3 scanf(\//输入字符串p1,p2和p3 if(strcmp(p1,p2)>0) swap(p1,p2); if(strcmp(p1,p3)>0) swap(p1,p3); if(strcmp(p2,p3)>0) swap(p2,p3); printf(\// 利用指针输出结果 } 10. #include void main() { char str1[50],str2[50]; char *ps1=str1,*ps2=str2; //指针ps1和ps2分别指向字符串str1和str2 printf(\ //输入提示 scanf(\ //输入第一个字符串 printf(\ //输入提示 scanf(\ //输入第二个字符串 while(*ps1!='\\0'&&*ps2!='\\0') { if(*ps1!=*ps2) //逐一比较两字符串中的字符,发现不等时跳出循环 break; ps1++; //指针从当前位置向后移动一个位置 ps2++; //指针从当前位置向后移动一个位置 } if(*ps2>*ps1) printf(\ else if(*ps2<*ps1) printf(\ else printf(\} 11. #include 23 main() { int len; char *str[20]; printf(\scanf(\len=length(str); printf(\} length(p) char *p; { int n; n=0; while(*p!='\\0') { n++; p++; } return n; } 12. #include char *month(int n) // 定义字符型指针数组 { char *name[]={\ \ return((n<1 || n>12)? name[0] : name[n]); } main() { int n; printf(\ scanf(\ printf(\ } 13. #include #include char *word[]={\#define NUM (sizeof(word)/sizeof(char *)) #define LINES 256 #define MAXLEN 1000 void del_word(char *s,int n,int len) { while (*(s+n)=*(s+n+len)) n++; } int getline(char *s,int len) { 24 int c; char *p=s; while (--len>0 && (c=getchar())!='\\n') *s++=c; *s='\\0'; return(s-p); } void writelines(char *lineptr[],int nlines) { int i; printf(\删除后的文本段:\\n\ for (i=0;i printf(\} int index(char s[],char t[]) { int i,j,k; for (i=0;s[i]!='\\0';i++) { for (j=i,k=0;t[k]!='\\0' && s[j]==t[k];j++,k++); if (t[k]=='\\0') return(i); } return(-1); } int readlines(char *lineptr[],int maxlines) { int len,nlines=0; char *p,line[MAXLEN]; printf(\输入一段文本:\\n\ while ((len=getline(line,MAXLEN))>1) if (nlines>maxlines) return(-1); else if ((p=(char *)malloc(len+1))==NULL) return(-1); else { line[len]='\\0'; strcpy(p,line); lineptr[nlines++]=p; } return(nlines); } main() { char *lineptr[100],*p; int i,j,k,nlines; if ((nlines=readlines(lineptr,100))>0) { for (i=0;i 25 j=0; while (j p=lineptr[j++]; while ((k=index(p,word[i]))>=0) del_word(p,k,strlen(word[i])); } } writelines(lineptr,nlines); } } 14. #include main() { float peven(),podd(),dcall(); float sum; int n; while (1) { scanf(\ if(n>1) break; } if(n%2==0) { printf(\ sum=dcall(peven,n); } else { printf(\ sum=dcall(podd,n); } printf(\} float peven(int n) { float s; int i; s=1; for(i=2;i<=n;i+=2) s+=1/(float)i; return(s); } float podd(n) int n; { float s; int i; s=0; 26 for(i=1;i<=n;i+=2) s+=1/(float)i; return(s); } float dcall(fp,n) float (*fp)(); int n; { float s; s=(*fp)(n); return(s); } 15. #include #include { char str1[20],str2[20],*p1,*p2; int sum=0; printf(\scanf(\p1=str1;p2=str2; while(*p1!='\\0') { if(*p1==*p2) {while(*p1==*p2&&*p2!='\\0') {p1++; p2++;} } else p1++; if(*p2=='\\0') sum++; p2=str2; } printf(\getch();} 16. 程序提示:报数程序段如下: for(i=0;i i=0;//i为现正报数的人的编号 k=0;//k为1.2.3计数时的计数变量 m=0;//m为退出的人数 while(m if(*(p+i)!=0)k++; if(k==3)//对退出的人的编号置0 { *(p+i)=0; k=0; m++; } 27 i++; if(i==n)i=0; } 17. #include void sort(int **p,int n) { int i,j,*temp; for(i=0;i void main() { void sort(int **p,int n); int i,n,data[10],**p,*pstr[10]; printf(\ scanf(\ for(i=0;i pstr[i]=&data[i]; printf(\ for(i=0;i scanf(\ p=pstr; sort(p,n); printf(\ for(i=0;i printf(\ printf(\} 18. #include void main() { char *p[7]={\ char **pp=p; //二级指针指向指针数组的首地址 int data; printf(\输入0~6的整型数:\ scanf(\ printf(\ //二级指针间接引用字符串 } 第7章 结构体与共用体 一、选择题 1 B D 2 C C 3 D D 4 D D 5 D D 6 C A 7 B B 8 D C 9 B C 10 11 12 13 14 15 16 17 18 19 20 C D A C 28 C D C C A C C D D B A A D A B A 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 B B 41 42 43 44 45 46 47 48 B C C A D C A C 二、填空题 1. ① 12② 0 2. ①struct DATA d={2010,10,1}; 3. ①struct DATE d = {2006,10,1}; 4. ①成员(.)②-> 5. ①内存大小②声明新的类型名 6. ①enum 7. ①100 8. ①p->no=1234 9. ①;p!=NULL;p=p->next; ②m=p->data; 10. ①struct stu_type st[N] ②i 12. ①student.no②student.birthday.year, 13. ①STDTS *p=&s1 ②p->score 15. ①strcmp(q[i].name,a)==0②q[j+1]=q[j]; 16. ①weekday②(n>=0)&&(n<=6) 17. ①w[i].b 18. ①m=a[i].n ②b[j++]=a[i]③i 21. ①sizeof(struct A))②sizeof(union B)) 22. ①a1=inputstru();②return x; 23. ①STU *x,int n②p 24. ①strcmp(a.name,b.name)>0②strcmp c.name,d.name)>0 25. ①STU stu[N],*p;②i=0,p=stu 26. ①p=(struct node *)malloc(sizeof(struct node));②free(q) 三、程序分析题 1. 10,2 2. zhao,m,85,90 3. 2,4 4. 张飞, 50, 66.600000 5. 张飞, 30, 66.600000 6. 张飞, 50, 66.600000 7. 关羽, 25, 88.800000 8. 4 8 9. 24 10. 80 11. 2,4,3,9,12,12,11,11,18,9, 12. CC,33 13. 1001,ChangRong,1098.0 14. 5 15. 13413 16. 5 29 17. 5/8 is the 128th day in 1998. 18. 20,15 19. 200,y 20. Number=10102 Name= Fu ping Sex=F Score=92.5 21. 1,2 22. 1234 12 34 12ff 23. 10,x 24. 5,3 25. 3,a 26. 07101 li jia 89.50 07103 li jian 90.6 07105 li dan 85.8 27. sum=425.00 average=85.00 count90=2 28. No Name Sex Score 10101 Zou pin M 75 10102 Yu bin M 82.5 20103 Li fang F 92.5 20104 Che lin F 87 30105 Wang mi M 88 29. All students are: liu f 78 li m 88 wang f 83 The student is: li m 88 30. number=10102 name=Zhang zhe sex=M score=88.500000 number=10102 name=Zhang zhe sex=M score=88.500000 number=10102 name=Zhang zhe sex=M score=88.500000 31. st= 101 Zhang M 19 89.00 score= 89.00 score= 95.00 32. st= 101 Zhang M 19 89.00 st= 101 Zhang M 19 89.00 t= 101 Zhang M 19 89.00 t= 101 Zhang M 19 95.00 st= 101 Zhang M 19 89.00 30 33. date=2005/6/15 34. 101 Zhang M 19 95.00 64.00 0.00 102 Wang F 18 92.00 97.00 0.00 103 Zha0 M 19 85.00 78.00 0.00 104 Li M 20 96.00 88.00 0.00 105 Gou M 19 91.00 96.00 0.00 106 Lin M 18 93.00 78.00 0.00 107 Ma F 18 98.00 97.00 0.00 108 Zhen M 21 89.00 93.00 0.00 109 Xu M 19 88.00 90.00 0.00 110 Mao F 18 94.00 90.00 0.00 ――――――――――――――――――― 101 Zhang M 19 95.00 64.00 79.50 102 Wang F 18 92.00 97.00 94.50 103 Zha0 M 19 85.00 78.00 81.50 104 Li M 20 96.00 88.00 92.00 105 Gou M 19 91.00 96.00 93.50 106 Lin M 18 93.00 78.00 85.50 107 Ma F 18 98.00 97.00 97.50 108 Zhen M 21 89.00 93.00 91.00 109 Xu M 19 88.00 90.00 89.00 110 Mao F 18 94.00 90.00 92.00 35. st= 101 Zhang M 19 89.00 t= 101 Zhang M 19 89.00 t= 101 Zhang M 19 95.00 st= 101 Zhang M 19 95.00 36. 0 7 15 0 1 15 37. No. Name Sex Age Score 103 Zhao M 19 85.70 109 Xu M 19 89.80 108 Zhen M 21 90.10 105 Gou M 19 90.20 106 Lin M 18 91.50 102 Wang F 18 92.40 110 Mao F 18 94.90 101 Zhang M 19 95.60 104 Li M 20 96.30 107 Ma F 17 98.70 38. sequence that persons leave the circle: 3 6 9 12 2 7 11 4 10 5 1 8 The last one is 13 四、程序设计题 1. 参考程序: #include #define N 5/*学生的人数*/ 31 struct student { char num[6]; char name[8]; int score[4]; }stu[N]; void main() {void print(struct student stu[6]); int i,j; for (i=0;i {printf(\ printf(\ scanf(\ printf(\ scanf(\ for (j=0;j<3;j++) {printf(\ scanf(\ } printf(\} print(stu); } void print(struct student stu[6]) {int i,j; printf(\ for (i=0;i {printf(\ for (j=0;j<3;j++) printf(\ printf(\ } } 2. 编程思路: 定义结构体变量a、b、c和指针变量p。 当p指向a时,将a.score表示为(*p).score。 #include { typedef struct students { char name[10]; char sex; int score; }STDTS; STDTS s1={\’f’,78}, s2={\’m’,88},s3={\’f’,83}; STDTS *p=&s1; printf(\printf(\ (*p).name,(*p).sex,(*p).score); printf(\ s2.name,s2.sex,s2.score); 32 printf(\ s3.name,s3.sex,s3.score); if(p->score if(p->score p->name,p->sex,p->score); } 3. 编程思路 #include #define COUNTS struct counts void main( ) { int i, ch; COUNTS { char vowel; int num; }; static COUNTS figure[5]={‘a’,0,’e’,0,’i’,0,’o’,0,’u’,0}; printf(\请输入一行文字(以’!’结束):\\n\ ch=getchar( ); while ( ch!=‘!’ ) { switch ( ch ) { case ‘a’: case ‘A’: figure[0].num++; break; case ‘e’: case ‘E’: figure[1].num++; break; case ‘i’: case ‘I’: figure[2].num++; break; case ‘o’: case ‘O’: figure[3].num++; break; case ‘u’: case ‘U’: figure[4].num++; } ch=getchar( ); } printf(\输入的文字中各元音的个数分别为:\ for(i=0; i<5; i++) printf(\ } 4. 参考答案 #include enum weekdays{sun,mon,tue,wed,thu,fri,sat} today; printf(\请输入一整数(0~6):\ scanf(\ today=(enum weekdays)n; switch(today) { case mon: case tue: case wed: 33 case thu: case fri: printf(\工作日\ case sat: case sun: printf(\休息日\ default: printf(\输入错\ } } 5. 解题思路。显然,需要设一个数组,有3个元素,每个元素中的信息应包括候选人的姓名(字符型)和得票 数(整型),只有结构体类型才能胜任。据此编写程序如下: #include struct person { char name[20]; int count; } leader[3]={\void main( ) { int i,j;char leader_name[20]; for(i=0;i<=10;i++) { scanf(\ for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } printf(\ for(i=0;i<3;i++) printf(\ 6. 分析:链表由头指针代表,要释放链表可以定义一个工作指针得到头指针,然后头指针和工作指针均不断下 移,同时释放结点。 void fun(struct node *head) {struct node *p; while(head!=NULL) {p=head; head=head->next; free(p); } } 7. 参考答案 #include NODE *create(int n); void insertlist(NODE *h, char *s); void deletelist(NODE *h, char *s); void printlist(NODE *h); void main() { char chose,sname[20]; 34 int n; NODE *head=NULL; for(;;) { system(\ printf(\创建单链表.\\n\ printf(\在单链表中插入结点.\\n\ printf(\在单链表中删除结点.\\n\ printf(\输出单链表.\\n\ printf(\退出.\\n\ printf(\请选择命令号:\ chose=getchar(); getchar(); switch(chose) { case ‘1’: printf(\输入结点个数: \ scanf(\ getchar(); head=create(n); break; case ‘2’: printf(\输入用于插入的姓名: \ gets(sname); insertlist(head,sname); break; case ‘3’: printf(\输入用于删除的姓名:\ gets(sname); deletelist(head,sname); break; case ‘4’: printlist(head); printf(\按任意键返回主菜单.\\n\ getch(); break; case ‘0’: exit(1); default: break; } } } NODE *create(int n) { NODE *p,*h; int i; char inbuf[10]; h=(NODE *)malloc(sizeof(NODE)); h->next=NULL; for(i=n;i>0;i--) { p=(NODE *)malloc(sizeof(NODE)); printf(\输入新结点值:\\n\ gets(p->name); gets(inbuf); p->score=atof(inbuf); p->next=h->next; h->next=p; } 35 return h; } void insertlist(NODE *h,char *s) { NODE *p,*old,*last; char inbuf[20]; p=(NODE *)malloc(sizeof(NODE)); printf(\输入新结点值:\\n\ gets(p->name); gets(inbuf); p->score=atof(inbuf); last=h->next; while(strcmp(last->name,s)!=0&&last->next!=NULL) { old=last; last=last->next; } if(last->next!=NULL) { old->next=p; p->next=last; } else { last->next=p; p->next=NULL; } } void deletelist(NODE *h,char *s) { NODE *q=h,*p=h->next; while(strcmp(p->name,s)!=0&&p->next!=NULL) { q=p; p=p->next; } if(p->next!=NULL) { q->next=p->next; free(p); } else { printf(\无此结点!\\n按任意键返回主菜单.\\n\ getch(); } } void printlist(NODE *h) { NODE *current=h; while(current->next!=NULL) { current=current->next; printf(\ } } 8. 参考答案 #include 36 { char name[10]; char number[10]; char replace[10]; char nationality[10]; int score; int grade[7]; } sim[N]; void main() { int i,j,f; int x=0; int max,min; struct simulate temp1; for(i=0;i printf(\scanf(\ printf(\scanf(\ printf(\scanf(\ printf(\scanf(\for(j=0;j<7;j++) { printf(\scanf(\} } for(i=0;i max=sim[i].grade[0]; min=sim[i].grade[0]; x=0; for(j=0;j<7;j++) { if(max for(f=0;f<7;f++) x=x+sim[i].grade[f]; x=x-max-min; sim[i].score=x; } for(i=0;i for(j=i+1;j 37 if(sim[i].score temp1=sim[i]; sim[i]=sim[j]; sim[j]=temp1; } } for(i=0;i<3;i++) printf(\ sim[i].name,sim[i].number,sim[i].replace,sim[i].nationality,sim[i].score) ; } 9. 参考答案: #include char Name[20]; /*姓名*/ char Sex; /*性别*/ char Answer; /*答案*/ struct tagPersion * Next; /*下一对象的位置*/ }; typedef struct tagPersion * LinkList; typedef struct tagPersion * LNode; typedef struct tagPersion Persion; typedef Persion Node; int getCommand() { int cmdID; printf(\ printf(\录入链表\\n\ printf(\显示链表\\n\ printf(\插入结点\\n\ printf(\删除结点\\n\ printf(\退出\\n\ printf(\输入选项并按回车确认:\ scanf(\ return cmdID; } LinkList createList(int n) { int i; LNode p; LNode L; LNode m; if(n <= 0) return NULL; L = (LNode)malloc(sizeof(Node)); L->Next = NULL; p = L; 38 /*头节点*/ for(i = 1; i < n; i++) { m = (LNode)malloc(sizeof(Node)); /*创建新节点*/ m->Next = NULL; p->Next = m; p = m; } return L; /*函数返回头节点地址*/ } void inputNode(LNode p) { scanf(\} void inputList(LinkList L) { LNode p; p = L; /*获得第一个节点的地址*/ while(p) { inputNode(p); p = p->Next; /*获得下一个节点的地址*/ } } void displayList(LinkList L) { LNode p; p = L; /*获得第一个节点的地址*/ while(p) { printf(\ p = p->Next; /*获得下一个节点的地址*/ } } LNode insertNode(LinkList L, int i) { LNode p = L; LNode s; int j = 0; while(p&&j p = p->Next; ++j; } if(!p||j>i-1) /*如果要插入的节点小于1或大于当前链表节点个数,返回错误信息*/ { printf(\位置小于1或大于表长。\\n\ return L; } s = (LNode)malloc(sizeof(Node)); /*创建新节点并插入此节点*/ 39 s->Next = p->Next; p->Next = s; return s; } void deleteNode(LinkList L, int i) { LNode p = L; LNode s; int j=0; while(p->Next&&j p = p->Next; ++j; } if(!(p->Next)||j>i-1) /*如果要删除的节点小于1或大于当前链表节点个数,返回错误信息*/ { printf(\删除位置不合理。\\n\ return; } s = p->Next; p->Next = s->Next; free(s); /*释放被删除节点所占据的存储空间*/ } void deleteList(LinkList L) { LNode p = L; LNode s = p; while(p) { s = p->Next; free(p); p = s; } } void main() { int cmdID; /*存放代表用户选择菜单项的值*/ int where; /*存放插入或删除节点的位置*/ int count; /*存放链表节点个数*/ LinkList L=NULL; LNode p; while(1) { cmdID = getCommand(); if(cmdID == 1) { printf(\请输入链表初始结点数:\ scanf(\ L = createList(count); 40
正在阅读:
程序设计上机实验课后答案06-29
《信托公司证券投资信托业务操作指引》05-30
潍坊风筝广场作文4篇04-01
S11配电变压器技术规范书06-05
变速器换挡叉08-14
2022年健康教育工作计划模板5篇03-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 课后
- 上机
- 程序设计
- 答案
- 实验
- 4日DAAAM智能制造与自动化国际研讨会
- 一级注册结构工程师基础考试需要准备什么及心得经验
- 学生冬季乘车安全责任书
- 购物小票教学设计
- 十二天突破英汉翻译笔译篇(例句)
- 西南大学分析化学模拟题
- 2011台湾海外联招(澳门)-中外地理-试题 - 图文
- 2019年3.15消费者权益知识竞赛试题及答案
- 市实验小学办学规范评估自查报告(2014年9月)
- autocad绘图练习
- 曲线绳正法拨道拨量调整详解
- 2018年四川省绵阳市中考数学试卷
- 内科疾病护理常规2.doc
- 老年人中医辨识保健指导处方
- 高考地理选择题专项训练
- 顾全大局 提升城管执法水平
- 2017年最新人教版 三年级上册数学全册教案 第一学期全套教学设计
- 《煤矿安全规程》专家解读(2010年版)
- BPA短路电流计算
- 上海市危险化学品安全管理办法(56号令)