C语言程序设计基础教程 - 习题答案

A.8 B.10 C.15 D.5

6.2.7 若有说明:int a[3][4]; 则对a数组元素的非法引用是(D)。

A.a['B'-'A'][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 6.2.8 设有语句static char str[10

={“china”};printf(“%d”,strlen(str)); 则输出结果是 A.10 B.5 C.china D.6

6.2.9 表达式strlen(“string”)+strlen(“C”)的运算结果为(C)。

A.9 B.10 C.7 D.8 6.2.10 执行以下程序段后,s的值为(B)。

static char ch[ ]=“623”

int a,s=0;for(a=0;ch[a]>=?0?&&ch[a]<=?9?;a++) s=10*s+ch[a]-?0?;

A.-4705 B.623 C.600 D.326

6.3 编程题

6.3.1 从键盘输入若干个整数(数据个数应少于50),其值在0至4的范围内,用-1作为输入结束标志.统计每个整数的个数。试编程。

参考答案

#include #define M 50 void main()

{ int a[M],c[5],i,n=0,x;

printf(\ scanf(\ while(x!=-1)

{if(x>=0 && x<=4) {a[n]=x;n++;} scanf(\ }

for(i=0;i<5;i++) c[i]=0; for(i=0;i

for(i=0;i<=4;i++) printf(\ printf(\}

6.3.2 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。请编程。

参考答案

#include #define SIZE 30 void main()

{ float b[SIZE/5],sum; int a[SIZE],i,k;

for( k=2,i=0;i

{ }

}

sum=0.0;

for( k=0,i=0;i

{ }

sum+=a[i]; if((i+1)%5==0) { }

b[k]=sum/5; sum=0; k++;

a[i]=k; k+=2;

printf(\for(i=0;i

6.3.3 通过赋初值按行顺序给2*3的二维数组赋予2、4、6....等偶数,然后按列的顺序输出该数组。试编程。

参考答案

#include void main() {

int i,j,a[2][3]={{2,4,6},{8,10,12}}; printf(\ for(i=0;i<2;i++) {

for(j=0;j<3;j++)

printf(\ printf(\ }

printf(\ for(i=0;i<3;i++) {

for(j=0;j<2;j++)

printf(\ printf(\ } }

6.3.4 通过循环按行顺序为一个5*5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。

参考答案

#include void main() {

int a[5][5],i,j,n=1; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=n++;

printf(\ for(i=0;i<5;i++) {

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

printf(\ printf(\ } }

6.3.5 下面是一个5*5阶的螺旋方阵。试编程打印出此形式的n*n(n<10)阶的方阵(顺时针方向旋进)

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

#include void main()

{ int a[10][10],i,j,k=0,m,n; printf(\ scanf(\ if(n%2==0) m=n/2; else m=n/2+1; for(i=0;i

k++;a[i][j]=k;

}

for(j=+1;j

k++;a[j][n-i-1]=k; }

for(j=n-i-2;j>=i;j--) {k++;a[n-i-1][j]=k;} for(j=n-i-2;j>=i+1;j--) {k++;a[j][i]=k;} }

for(i=0;i

{for(j=0;j

printf(\ printf(\ }

}

6.3.6 从键盘输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。若该字符不在a中,则打印出提示信息:The char is not in the string.试编程。

注:折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。

参考答案

#include void main()

{ char a[12]=\ int i,top,bot,mid;

printf(\ scanf(\

printf(\

for(top=0,bot=10;top<=bot;) { mid=(top+bot)/2; if(c==a[mid])

{ printf(\ break; }

else if(c>a[mid]) top=mid+1; else bot=mid-1; }

if(top>bot) printf(\}

6.3.7 从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b的所有元素都连接到a中。试编程。 参考答案

#include #include void main()

{ char a[80],b[80]; int i=0,j;

printf(\ gets(a);gets(b); while(a[i++]!='\\0');

for(j=0,i--;j<5&&b[j]!='\\0';j++)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4