您的当前位置:首页正文

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

2023-11-23 来源:好走旅游网
第五章自测练习参考答案

一、选择题

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.000000 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;isum=ave=0; for(i=0;i{sum+=price[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;ia[j+1]) {

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

for(i=0;iprintf(\"%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;iscanf(\"%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]) else }

for(i=0;i<10;i++) if(a[i]>value)

{ }

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

t1=a[i]; a[i]=value; for(j=i+1;j<11;j++) {

t2=a[j]; a[j]=t1;

a[10]=value;

t1=t2; }

break;

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;ifor(j=0;jfor(i=0;ifor(j=0;jif(a[i][j]!=a[j][i]) { }

flag=1; break;

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=a[i][0]; col=0;

for(j=1;jif(a[i][j]>max) {

max=a[i][j]; col=j;

for(j=0;j}//寻找第i行上的最大值,它位于第col列 flag=0;//假定存在鞍点

if(max>a[j][col])//不是该列上的最小值 {

flag=1; break;

for(j=0;j} 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;ifor(j=0;jif(i+j==N-1) a[i][j]=0; if(i+jif(i+j>N-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') { } }

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

if(str[i]>='a' &&str[i]<='z')

str[i]=str[i]-32; i++;

for(j=0;jprintf(\"%5d\printf(\"\\n\");

printf(\"%s\\n\

#include \"string.h\"

void main() {

char pass_str[80]; /*定义字符数组passstr*/ int i=0; /*检验答案*/ while(1) {

if(i==3)

{

printf(\"你已三次输入错误答案。正确答案应是:Dennis Ritchie.\\n程 break;

/*输入三次错误的答案,退出程序*/

序结束!\\n\");

}

}

}

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;iprintf(\"%5d\

printf(\"\\n\");

15.矩阵转置程序参见参见填空题14题

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