if (c= ='\\n')
++n_line;
if (c= =' '||c= ='\\t' ||c= =‘\\n‘)
① ; inword=0 else if (inword= =0) {
② ; inword=1 ++n_word; }
}
printf (\
line=%dword=üharacter=%d\\n\
}
10. 打印出100~1000之间的所有“水仙花数”(“水仙花数”是指一个3位数,
各位数字的立方和等于该数本身。如:153=13+53+33,153就是“水仙花数”)
main( ) {
int i,j,k,n;
for(n=100;n<1000;n++) {
i=n/100;
j= ① ; n/10-i*10 k=n;
if( ② ) n= =i*i*i+j*j*j+k*k*k printf(―M‖,n); }
}
第六章 数组
一、单项选择题
1. C语言中,引用数组元素时,其数组下标的数据类型允许是( )。C
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式 2. 以下对一维整型数组a的正确说明是( )。D
A)int a(10); B)int n=10,a[n]; C)int n; D)#define size 10 scanf(―%d‖,&n); int a[size]; int a[m]; 3. 若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=‘a‘,d,g; 则数值为4的表达式是( )。D
A)a[g-c] B)a[4] C)a[?d‘-?c‘] D)a[?d‘-c] 4. 以下二维数组a的正确说明是( )。C
A)int a[3][ ]; B)float a(3,4);
31
C)double a[1][4]; D)float a(3)(4); 5. 以下不正确的定义语句是( )。B
A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9};
C)char c1[ ]={?1‘,‘2‘,‘3‘,‘4‘,‘5‘}; D)char c2[ ]={?\\x10‘,‘\\xa‘,‘\\x8‘}; 6. 以下不能对二维数组a进行正确初始化的语句是( )。C
A)int a[2][3]={0}; B)int a[ ][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4}, {5,6}}; D)int a[ ][3]={1,2,3,4,5,6}; 7. 以下程序的输出结果是( )。B a: 0 1 2 3 4 5 6 7 8 9 main( ) i=0 a[0*1]=a[0] { i=1 a[1*2]=a[2] int i,k,a[10],p[3]; i=2 a[2*3]=a[6] k=5; p: 0 2 6 for(i=0;i<10;i++) a[i]=i; i p[i]*2 k=k+ for(i=0;i<3;i++) p[i]=a[i*(i+1)]; 0 0*2=0 5+0=5 for(i=0;i<3;i++) k+=p[i]*2; 1 2*2=4 5+4=9 printf(\ 2 6*2=12 9+12=21 } A)20 B)21 C)22 D) 23 8. 下列程序( C )(每行前的数字表示行号)。
1 main( )
2 { float a[10]={0.0}; int i;
3 for(i=0;i<3;i++) scanf(\ 4 for(i=1;i<10;i++) a[0]=a[0]+a[i]; 5 printf(\ }
A)没有错误 B)第2行有错 C)第3行有错 D)第5行有错 9. 以下程序的输出结果是( )。C
1 2 3 main( )
4 5 6 {
7 8 9 int i,x[3][3]={1,2,3,4,5,6,7,8,9};
i x[i][2-i] for(i=0;i<3;i++)
0 x02=3 printf(\
1 x11=5 }
A)1,5,9, B)1,4,7, C)3,5,7, D)3,6,9, 10. 阅读以下程序
main( ) {
n: 0 0 0 int n[3],i,j,k;
for(i=0;i<3;i++)
i j n[j]=n[i]+1 n[i]=0;
k=2;
0 0 n0=n0+1=1 for(i=0;i for(j=0;j 0 1 n1=n0+1=1+1=2 n[j]=n[i]+1; 32 1 0 n0=n1+1=2+1=3 1 1 n1=n1+1=2+1=3 printf(\} 上述程序运行后,输出结果是( )。D A)2 B)1 C)0 D)3 11. 以下程序运行后,输出结果是( )。B main( ) i y a[i]=y%2 i++ y=y/2 { 0 18 a0=0 1 9 int y=18,i=0,j,a[8]; 1 9 a1=1 2 4 do 2 4 a2=0 3 2 { 3 2 a3=0 4 1 a[i]=y%2; i++; y=y/2; 4 1 a4=1 5 0 }while(y>=1); for(j=i-1;j>=0;j--) printf(\ printf(\ } A)1000 B)10010 C)0110 D)10100 12. 下面是对字符数组s的初始化,其中不正确的是( )。D A)char s[5]={―abc‖}; B)char s[5]={?a‘,‘b‘,‘c‘}; C)char s[5]=‖‖; D)char s[5]=‖abcdef‖; 13. 对两个字符数组a和b进行如下初始化: char a[ ]=‖ABCDEF‖; char b[ ]={?A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; 则以下叙述正确的是( )。D A)a与b数组完全相同 B)a与b长度相同 C)a和b中都存放字符串 D)a数组比b数组长度长 14. 下述对C语言字符数组的描述中错误的是( )。C A)字符数组可以存放字符; B)字符数组中的字符串可以整体输入、输出; C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值; D)不可以用关系运算符对字符数组中的字符串进行比较。 15. 能正确进行字符串赋值的是( )。C A)char s[5]={'a','e','i','o','u'}; B)char s[5]; s=\C)char s[5]=\ D)char s[5]; s[ ]=\16. 不能正确为字符数组输入数据的是( )。A A)char s[5]; scanf(\,&s); B)char s[5]; scanf(\,s); C)char s[5]; scanf(\,&s[0]); D)char s[5]; gets(s); 17. 下面程序段的运行结果是( )。B char c[5]={?a‘,‘b‘,‘\\0‘,‘c‘,‘\\0‘}; printf(―%s‖,c); A)‘a‘‘b‘ B)ab C)ab c D)‖ab‖ 18. 若有char a[80],b[80];则正确的是( )。D A)puts(a,b); B)printf(\C)putchar(a,b); D)puts(a);puts(b); 19. 若已定义char s[10];在下面表达式中不能表示s[1]的地址的是( )。B A)s+1 B)s++ C)&s[0]+1 D)&s[1] 33 20. 有以下的程序段: char a[3],b[ ]=\ a=b; printf(\ 则( )。C A)运行后将输出China B)运行后将输出Ch C)编译出错 D)运行后将输出Chi 21. 下面程序段的运行结果是( )。B char c[ ]=‖\\t\\r\\\\\\0will\\n‖; printf(―%d‖,strlen(c )); A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定 22. 有以下程序 main( ) { char s[]=\ printf(\ } 执行后输出结果是( )。 C A)赋初值的字符串有错 B) 6,7 C)5,6 D)6,6 23. 若已定义char s[2][40]={―china‖,‖English‖};则在下面表达式中能表示字符‘E’的地址的是( )。C A)&s[2][1] B)&(s[1]+1) C)s[1] D)&s[1] 24. 以下程序的输出是( )。D main( ) a: 6 9 3 7 { 8 2 5 4 char a[2][5]={\i j s s=10*s+a[i][j]-?0‘ j=j+2 for ( i = 0; i < 2; i++ ) 0 0 0 10*0+a00-48=6 2 for ( j = 0; a[i][j]>'0' && a[i][j]<='9'; j+=2 ) 0 2 6 10*6+a02-48=63 4 s=10*s+a[i][j]-'0'; 0 4 printf(\ 1 0 63 10*63+a10-48=638 2 } 1 2 638 10*638+a12-48=6385 4 A)693825 B)69825 C)63825 D)6385 25. 下面描述正确的是( )。D A)字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串\ \与\相等 D)字符串“That”小于字符串\ 26. 判断字符串a和b是否相等,应当使用( )。D A)if (a= =b) B)if (a=b) C)if(strcpy(a,b)) D)if(strcmp(a,b)) 27. 下面程序段的运行结果是( )。D main( ) { int i,j; char str[ ]=‖1234567‖,k; 34 for ( i=1,j=strlen(str)-2; i A)7654321 B)1234567 C)1543267 D)1654327 28. 下面程序段的运行结果是( )。D main( ) { a:abcdef char a[7]=‖abcdef‖; b:ABC char b[4]=‖ABC‖; a:ABC\\0ef\\0 strcpy(a,b); printf(―%c‖,a[5]); } A)_ B)\\0 C)e D)f (其中“_”表示空格) 29. 当执行下面程序且输入“ABC”时,输出的结果是( )。A #include ss:123456789\\0 main( ) ss:ABC\\056789\\0 { char ss[10]=\ gets(ss); printf(\ } A)ABC B)ABC9 C)123456ABC D)ABC456789 二、阅读程序写出程序运行结果 1. 上述程序运行后,输出结果是 。3 main( ) { n:000 int n[3],i,j,k; i j k n[j]=n[i]+1 for(i=0;i<3;i++) n[i]=0; 0 0 2 n0=n0+1=1 k=2; 1 n1=n0+1=1+1=2 for(i=0;i 1 0 n[0]=n1+1=1+2=3 for(j=0;j 1 n1=n1+1=3 n[j]=n[i]+1; printf(\} 2. 下面程序段的运行结果是 。he char x[ ]=‖the teacher‖; x:the teacher int i=0; i ++i x[i] x[i-1] prn while (x[++i]!=‘\\0‘) 0 1 x1=h x0=t h if (x[i-1]= =‘t‘) 当前元素不是\\0,前一个元素是t的就打印输出 printf(―%c‖,x[ i ]); 3. 下面程序的运行结果是 。 a a b c d #include 35 str:1234567 i j str[i] str[j]的交换 i++ j-- 1 5 str1 str5 1634527 2 4 2 4 str2 str4 1654327 3 3