您的当前位置:首页正文

第五章自测练习答案 清华大学出版社 C语言习题、实验指导及课程设计

2020-01-04 来源:好走旅游网
第五章自测练习参考答案

一、选择题

1.B或C 2.D 3.B 4.D 5.D 6.C和D 7.C 8.C 9.C 10.D(实际都正确) 11.C 12.B 13.D 14.A 15.B 16.B 17.C 18.D 19.B 20.D 21. D 22.B 23.D 24.D 25.D 26.D 27.C 28.A 29.A 30.A 31.D

二、填空题

1.i=1 x[i-1] 2. &a[i] i%4==0 putchar(‘\\n’);或printf(“\\n”); 3. k=0; k=i j=0; j=i i=a[k];a[k]=a[j];a[j]=i; 4. 1 3 4 5 5. 求数组中正数的和并输出 6.The number is :5,The average is:5. 7. 常量表达式 常量表达式 8.按行存放,即先存第一行,再存第二行,以此类推 9.0 6 10.0 11.30 12.j=2 j>=0 13. 1 6 7 11 12 13

16 17 18 19 21 22 23 24 25 14. j<=2 b[j][i]=a[i][j] 15. 58 16.在第一条scanf语句后增加j=n; % / 将第三个printf语句中的输出项n换成j j=i; j>0; j—

17. 8 18. 600 19. 在第三个for语句前增加s=0; k=0 a[i][k]*b[k][j] printf(“\\n”); 20. str[0] 并在第一个strcpy语句后增加一行: if(strcmp(str[1],s)<0) strcpy(s,str[1]); 最后的空为: s

三、编程题

1.参考程序如下: #include \"stdio.h\" #define N 10 void main() {

int i,price[N]; int max,min; float ave,sum;

for(i=0;i if(price[i]>max) max=price[i]; if(price[i] ave=(float)sum/N;

printf(\"价格范围为%d---%d;平均价格为%.2f\\n\ }

2.选择排序的程序如下: #include \"stdio.h\" void main() {

int i,j,min,temp,a[10]; /*input*/

for(i=0;i<10;i++)

scanf(\"%d\ printf(\"\\n\"); /* start to sort */ for(i=0;i<10-1;i++) {

min=i;

for(j=i+1;j<10;j++)

if(a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; }

/*output*/

for(i=0;i<10;i++) printf(\"%5d\ }

3.冒泡排序的程序如下: #define N 10 #include \"stdio.h\"

void main() {

int i,j,m; int a[N];

for(i=0;i scanf(\"%d\ for(i=1;ia[j+1]) {

m=a[j]; a[j]=a[j+1]; a[j+1]=m; }

for(i=0;i printf(\"%5d\ printf(\"\\n\"); }

4。二分查找(或折半查找)程序如下: #include \"stdio.h\" #define n 10 void main() {

int a[n],find;

int x,i,top,bottom,mid;

printf(\"input the sorted numbers:\\n\"); for(i=0;i scanf(\"%d\

printf(\"input the number to find:\\n\"); scanf(\"%d\

find=0;top=0;bottom=n-1;

while(!find && top<=bottom) { mid=(bottom+top+1)/2; if(x==a[mid]) { find=1; printf(\"x=%d position=%d\\n\ } else if(x>a[mid]) bottom=mid-1;

else top=mid+1; }

if(!find) printf(\"the number %d is not in the table\ }

5.寻找指定的年龄并删除,若无则提示程序如下: #include \"stdio.h\" void main() {

int i,n,j,flag=0; int a[10];

printf(\"请输入10个年龄:\\n\"); for(i=0;i<10;i++) scanf(\"%d\

printf(\"再输入一个要删除的年龄:\"); scanf(\"%d\ for(i=0;i<10;i++) if(a[i]==n) { flag=1; break; }

if(flag) { printf(\"有!\\n\"); for(j=i;j<10-flag;j++) a[j]=a[j+1]; }

else printf(\"无该年龄!\\n\"); for(i=0;i<10-flag;i++) printf(\"%5d\ printf(\"\\n\"); }

6.插入排序的程序如下: #include \"stdio.h\" void main() {

int value,t1,t2,i,j;

int a[11]={1,10,20,30,40,50,60,70,80,90};

//在数组a中多设一个位置,以保存插入的数

for(i=0;i<10;i++) printf(\"%5d\ putchar('\\n');

scanf(\"%d\ if(value>a[9]) a[10]=value; else for(i=0;i<10;i++) if(a[i]>value) { t1=a[i]; a[i]=value; for(j=i+1;j<11;j++) { t2=a[j]; a[j]=t1; t1=t2; } break; } for(i=0;i<11;i++) printf(\"%5d\ putchar('\\n'); }

7.对称方阵检验的程序如下: #define N 5

#include \"stdio.h\" void main() {

int a[N][N],i,j;

int flag=0; //标识为对称方阵,若为1则不是 printf(\"请输入%dx%d个数据:\\n\ for(i=0;i if(flag) break; }

if(!flag) printf(\"你输入的对称方阵如下:\\n\"); else printf(\"你输入的非对称方阵如下:\\n\");

for(i=0;i8.鞍点检验程序如下: #include \"stdio.h\" #define N 10 #define M 10 void main() {

int a[N][M];

int i,j,flag,max,col; for(i=0;imax) { max=a[i][j]; col=j; }//寻找第i行上的最大值,它位于第col列 flag=0;//假定存在鞍点

for(j=0;ja[j][col])//不是该列上的最小值 { flag=1; break; } if(!flag) printf(\"行=%d,列=%d,值=%d\\n\

} }

9.矩阵填充程序如下: #define N 5

#include \"stdio.h\" void main() {

int a[N][N],i,j; for(i=0;iN-1) a[i][j]=-1; }

for(i=0;i10.小写变大写程序如下: #include \"stdio.h\" void main() {

char str[]=\"Happy New Year!\"; int i=0;

while(str[i]!='\\0') { if(str[i]>='a' &&str[i]<='z') str[i]=str[i]-32; i++; }

printf(\"%s\\n\}

11.答案检查程序如下: #include \"stdio.h\"

#include \"string.h\" void main() {

char pass_str[80]; /*定义字符数组passstr*/ int i=0;

/*检验答案*/ while(1) { if(i==3) { printf(\"你已三次输入错误答案。正确答案应是:Dennis Ritchie.\\n程序结束!\\n\");

break; /*输入三次错误的答案,退出程序*/ } else if(i>0) printf(\"再试一次:\\n\"); printf(\"请输入C语言的发明人:\\n\"); gets(pass_str); /*输入答案*/ if(strcmp(pass_str,\"Dennis Ritchie\")!=0) /*答案错*/ printf(\"答案错误!\"); else { printf(\"Good!\\n\"); printf(\"你已通过测试!\\n\"); break; }/*输入正确的答案,中止循环*/ i++; //次数加1 } }

12.从一个字符串中删除指定字符的程序如下: #include \"stdio.h\" #include \"string.h\" void main() {

char p[80],ch; int i=0,j; gets(p);

scanf(\"%c\ while(p[i]!='\\0') {

if(p[i]==ch)

for(j=i;j<=strlen(p);j++) p[j]=p[j+1]; else i++; }

printf(\"%s\\n\ }

13。矩阵相乘的程序参见填空题的19题。 14.指定矩阵生成程序如下: #define N 5

#include \"stdio.h\" void main() {

int a[N][N]={0},i,j; for(i=0;i15.矩阵转置程序参见参见填空题14题

因篇幅问题不能全部显示,请点此查看更多更全内容