第4章 数组 - 44584 下载本文

strcat(str1,str3),即将字符串str3连接到字符串str1之后。

答案:③

(15)若有如下定义,则正确的叙述为( )。

char x[]=\

char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};

① 数组x和数组y等价 ② 数组x和数组y的长度相同

③ 数组x的长度大于数组y的长度 ④ 数组y的长度大于数组x的长度

解答:char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’, ’\\0’};等价于:char x[]=\,所以③是正确的。

答案:③

2.程序分析题

(1)下列程序的运行结果是 main()

{ int a[3][3]={{1,2},{3,4},{5,6}}; int i,j,s=0; for(i=0;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(\ }

解答:此程序完成的功能是计算3×3矩阵的下三角阵(包括主对角线元素)元素和,运行结果是1+3+4+5+6,即19。

答案:19

(2)下列程序的运行结果是 main()

{ int i,j,k,n[3];

for(i=0;i<3;i++) n[i]=0; k=2;

for(i=0;i

printf(\

解答:当i=0时,n[0]=n[0]+1=1,n[1]=n[0]+1=2。

当i=1时,n[0]=n[1]+1=3,n[1]=n[1]+1=3。 答案:3

(3)下列程序的运行结果是 main()

{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1];

for(x=0;x<3;x++) y+=*(p+x);

printf(\

解答:程序的功能是把数组a中下标为1、2和3的元素值累加到变量y上,即:

74

y=1+4+6+8=19。 答案:19

(4)下列程序的运行结果是 main() { int i,c;

char num[][4]={\ for(i=0;i<4;i++)

{ c=num[0][i]+num[1][i]-2*’A’; printf(\ } } 解答:程序的功能是从左向右依次输出两个字符串对应字符的ASCII码之和与130的差值。

答案:2 5 5 8

(5)下列程序的运行结果是 main()

{ char a[]=\ int i,j,k;

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

for(j=0;j

解答:此程序的功能是输出5行“*”号,每行有5个“*”,且从上到下每行向右挫一列。

答案: ***** ***** ***** ***** *****

(6)下列程序的功能是 main()

{ int i,a[10],*p=&a[9];

for(i=0;i<10;i++) scanf(\ for(;p>=a;p--) printf(\ }

答案:该程序把从键盘输入的10个整型数按相反的顺序输出。 (7)下列程序的运行结果是 main()

{ char ch[2][5]={\ int i,j,s;

for(i=0;i<2;i++) p[i]=ch[i];

75

for(i=0;i<2;i++) { s=0;

for(j=0;ch[i][j]!=’\\0’;j++) s=s*10+ch[i][j]-’0’; printf(\ } }

解答:程序的功能是把数字串转换成对应的数值。 答案:6937 8254

(8)下列程序的运行结果是 #include \ main()

{ int i,k,a[10],p[3]; k=5;

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

for(i=0;i<3;i++) p[i]=a[i*(i+1)]; for( i=0;i<3;i++) k+=p[i]*2;

printf(\ }

解答:由于k=5+(p[0]+p[1]+p[2])*2,且p[i]=a[i*(i+1)]=i*(i+1),所以k的值为 5+(0+2+6)*2=21。 答案:21

(9)下列程序的运行结果是 #include \ main( )

{ int a=2,*p,**pp; pp=&p; p=&a; a++;

printf(\ }

解答:由于p指向a,pp又指向p,所以a、*p和**pp等价,其值都为3。 答案:3,3,3

(10)下列程序的运行结果是 main( )

{ int a[6],i;

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

{ a[i]=9*(i-2+4*(i>3))%5; printf(\ } }

解答:程序的功能是:i的值从0到5,依次输出表达式9*(i-2+4*(i>3))%5的值。 答案:-3 –4 0 4 4 3

76

3. 程序填空题(在下列程序的 处填上正确的内容,使程序完整) (1)下列程序的功能是输出数组s中最大元素的下标。 main() { int k,i;

int s[]={3,-8,7,2,-1,4}; for(i=0,k=i;i<6;i++)

if(s[i]>s[k]) ① ; printf(\ }

解答:程序输出的是最大元素的下标,所以,应将i值赋给k,即k=i。 答案:① k=i

(2)下列程序的功能是将一个字符串str的内容颠倒过来。 #include \ main()

{ int i,j,k;

char str[]=\

for(i=0,j= ② ;i

解答:由于C语言中数组元素的下标从0开始,所以j的值应为字符串长度减1,即strlen(str)-1。

答案:② strlen(str)-1

(3)下列程序的功能是把输入的十进制长整型数以十六进制数的形式输出。 main()

{ char b[]=\ int c[64],d,i=0,base=16; long n;

scanf(\ do

{c[i]= ③ ;i++;n=n/base; }while(n!=0); for(--i;i>=0;--i)

{ d=c[i];printf(\ }

解答:进制转换的算法是除以基数取余,所以应填nose。 答案:③ nose (4)下列程序的功能是从键盘输入若干个字符(以回车键作为结束)组成一个字符串存入一个字符数组,然后输出该数组中的字符串。

#include \ main()

{ char str[81],*ptr; int i;

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

77