《程序设计基础(C)》习题指导书
2.若有说明:int a[3][4],则a[1+1][0]不是对a数组元素的正确引用。( )?
3.char a[]={0,1,2,3,4,5,6}是正确的数组说明语句。( )? 4.字符串“this”大于字符串“that”。( )?
5.C语言的数组名是一个地址常量,不能对它进行加、减和赋值运算。( )? ㈣.程序设计题
1.编写程序打印九九乘法表。 2.打印杨辉三角形的前10行。
3.用选择排序法对十个随机整数进行排序。 4.编程求一个3×3矩阵对角线元素之和。
5.Fibonacci数列为1、1、2、3、5、8、13、??,编程输出该数列的前20项。
? 应用篇
㈠.填空题
1.以下findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。
findmax(int s[ ],int t) { int k,p;
for(p=0,k=p;p
2.以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数,其它依次类推。用#号结束输入,请填空。
#include “stdio.h” #include “ctype.h” main()
{ int num[26]={0},i; char c; while(c=getchar()!=‘#’) if(isupper(c)) num[ c-‘A’ ]+=1; for(i=0;i<26;i++) if(num[i]) printf(“%c: %d\\n”,i+‘A’,num[i]); }
3.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。
请填空。 main( )
{ int i,a[20],sun,count; suum=count=0;
for(i=0;i<20;i++) scanf(\ &a[i] ); fro(i=0;i<20;i++) { if(a[i]>0) { count++;
sum+= a[i] ; } }
printf(\ }
4.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。
第 36 页 共 64 页
《程序设计基础(C)》习题指导书
main( )
{ float x[1000], sum=0.0, ave, a; int n=0, i;
printf(\:\\n\;scanf(\,&a); while(a>=0.0&& n<1000) { sum+=a; x[n]=a ; n++; scanf(\,&a); }
ave= sum/n ; printf(\:\\n\; printf(\,ave); for( i=0;i< n;i++ )
if(x[i]
5.函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
其构成规律是:第0列元素和主对角线无素均为1,其余元素为其左上方和正上方元素之和, 数据的个数每行递增1。请将程序补充完整。 #defint N 6
void YangHui(int *x[N][N]) { int i,j; x[0][0]=1
for(i=1;i { x[i][0]=x[i][i] =1; for(j=1;j x[i][j]= x[i-1][j-1]+x[i-1][j] ; } } 6.以下程序运行后的输出结果是 main( ) { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\printf(\} } 答案: 123 056 009 第 37 页 共 64 页 《程序设计基础(C)》习题指导书 ㈡.选择题 1.若二维数组y有m列,则在y[i][j]前的元素个数为( )。 A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 2.下面程序(每行程序前面的数字表示行号)中( )。 1 main( ) 2 { 3 int a[3]={3*0}; 4 int i; 5 for(i=0;i<3;i++) scanf(\ 6 for(i=1;i++) a[0]=a[0]+a[i]//此行有错 7 printf(\ A.没有错误 B.第3行有错误 C.第5行有错误 3.下面程序 (每行程序前面的数字表示行号) 中( )。 1 main( ) 2 { 3 float a[10]={0.0}; 4 int i; 5 for(i=0;i<3;i++) scanf(\6 for(i=0;i<10;i++) a[0]=a[0]+a[i]; 7 printf(\8 } A.没有错误 B.第3行有错误 C.第5行有错误4.下面程序有错的行是( )。 1 main( ) 2{ 3 int a[3]={1}; 4 int i; 5 scanf(\ 6 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 7 printf(\ 8 } A.3 B.6 C.7 D.5 5.下面程序(每行程序前面的数字表示行号) 中( )。 1 main( ) 2 { 3 int a[3]={0}; 4 int i; 5 for(i=0;i<3;i++)scanf(\ 6 for(i=1;i<4;i++)a[0]=a[0]+a[i]; 7 printf(\ 8 } A.没有错误 B.第3行有错误 C.第5行有错误 6. 有以下程序 #include 第 38 页 共 64 页 D.第7行没有错误 D.第7行有错误 D.第6行有错误 《程序设计基础(C)》习题指导书 { char a[7]=\int i,j; i=sizeof(a); j=strlen(a); printf(\} 程序运行后的输出结果是( )。 A. 5 5 B. 7 6 C. 7 5 D. 6 6 7.以下程序的输出结果是( )。 main( ) { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\ } A. 1,5,9, B. 1,4,7, C. 3,5,7, D. 3,6,9, 8.对两个数组a和b进行如下初始化: char a[]=\ char b[]={’A’,’B’,’C’,’D’,’E’,’F’}; 则以下叙述正确的是( ) A. a与b数组完全相同 B. a数组比b数组长度长 C. a和b中都存放字符串 D. a与b长度相同 ㈢.判断题 1.若int a[2][2]={{1},{2,3}};则a[0][1]的值为0。( )? 2.有如下说明语句 int a[10]={6,7,8,9,10};因为数组长度与初值的个数不相同,所以此语句不正确。( )? 3.字符个数多的字符串比字符个数少的字符串大。( )? 4.字符数组的字符串可以整体输入、输出。( )? 5.可以在赋值语句中通过赋值运算符\对字符数组整体赋值。( )? ㈣.程序设计题: 1.用随机函数产生20个100以内的整数,用选择法对它们排序。 2.用随机函数产生50个200以内的整数,用冒泡法对它们排序。 3.有一篇文章,共有3行文字,每行有80个字符。要求统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。 4.查找数组数据中的最大元素和次大元素。 5.编程从输入的10个数中,去掉一个最大数和一个最小数,求剩余数的平均值。 6.编程输入5个字符串,要求按从小到大的顺序排序并输出。(排序方法不限)。 ? 提高篇 ㈠.填空题 1.若有以下程序 main( ) { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0) continue; if(a[i][j]==0) break; 第 39 页 共 64 页 《程序设计基础(C)》习题指导书 s+=a[i][j]; } } printf(\} 执行后输出的结果是 58 。 2.若有定义语句:char s[100],d[100];int j=0;且s中已赋字符串,请填空以实现字符串拷贝。(注意:不得使用逗号表达式) while(s[i]) {d[j]= s[i++] ;j++} d[j]=0; 3. 以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include #include main( ) { char s[80], d[80]; int i,j; gets(s); for(i=j=0;s[i]!='\\0';i++) if( s[i]>=’0’&&s[i]<=’9’ ) { d[j]=s[i]; j++; } d[j]='\\0'; puts(d); } 4.函数fun的功能是:使一个字符串按逆序存放,请填空 void fun (char str[]) { char m; int i,j; for(i=0,j=strlen(str);i< j-1 ;i++,j--) { m=str[i]; str[i]= str[j-1] ; str[j-1]=m; } printf(\ } 5.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差,例如:输入的两个字符串分别为abcdef和 abceef,则输出为-1。请填空: #include main( ) { char str1[100],str2[100],c; int i,s; printf(\ printf(\ i=0; while((strl[i]==str2[i]&&(str1[i]!= ’\\0’ )) i++; s= str1[i]-str2[i] ; printf(\ } 6.有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素的规律插入到a中。请填空。(这 第 40 页 共 64 页