第4章 数组 - 44584

if(a[i]

i=a[0];a[0]=a[mini],a[mini]=i; if(maxi==0) maxi=mini;

i=a[9];a[9]=a[maxi],a[maxi]=i; printf(\ for(i=0;i<10;i++) printf(\}

(16)有n个人围成一个圈子,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。

解答:将此问题转化为一维数组来处理,先将数组a中的n个元素分别赋初值1到n,然后从a[0]开始,顺序查找第三个值不为0数组元素,若到a[n-1]还没找到,再从a[0]开始,找到后将其值赋为0;再从刚赋0元素的下一个元素开始按上述方法查找第三个值不为0数组元素,并将其值赋为0,依此下去,直到数组a中只有一个不为0的元素为止,其元素值不为0的下标就是所求。

#define N 10 main()

{ int a[N],m,i,k;

for(i=0;i<10;i++) a[i]=i; i=0; m=0;k=0; while(m<9)

{ if(a[i]!=0) k+=1;

if(k==3) { a[i]=0;k=0;m+=1;} i++;

if(i==10) i=0; }

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

if(a[i]!=0) printf(\}

(17)给定一个一维数组,任意输入6个数,假设为1、2、3、4、5、6。建立一个具有以下内容的方阵存入二维数组中。

1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4

6 1 2 3 4 5

解答:把一维数组元素存入二维数组的第一行,然后将一维数组的所有元素右移一位,移出去的元素存入第一位;再把一维数组元素存入二维数组的第二行,然后将一维数组的所有元素右移一位,移出去的元素存入第一位;依次下去,执行六次为止。

main()

{ int a[6],b[6][6],i,j,t;

printf(\

86

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

{ for(j=0;j<6;j++) b[i][j]=a[j]; t=a[0];

for(j=0;j<5;j++) a[j]=a[j+1]; a[5]=t; }

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

printf(\ printf(\ } } (18)数组a中存放10个四位十进制整数,统计千位和十位之和与百位和个位之和相等的数据个数,并将满足条件的数据存入数组b中。

解答:依次取出数组a中每一个元素的个位、十位、百位和千位,并判断是否满足条件,若满足,则存入数组b,否则不存。

main()

{ int a[]={1221,2234,2343,2323,2112,2224,8987,4567,4455,8877}; int b[10],i,gw,sw,bw,qw,k,num=0; k=0;

for(i=0;i<10;i++) { gw=a[i]; sw=a[i]0/10; bw=a[i]00/100; qw=a[i]/1000; if(qw+sw==bw+gw)

{ num++;b[k++]=a[i];} }

printf(\ for(i=0;i

(19)将一个英文句子中的前后单词逆置(单词之间用空格隔开)。 如:how old are you

逆置后为:you are old how

解答:先将整个英文句子逆置,然后再将每个单词逆置。 #include \main()

{ char str[81],*p1,*p2,*p,ch;

printf(\ gets(str); p1=str;p2=str;

87

while(*p2) p2++; p2--;

while(p1

{ ch=*p1;*p1++=*p2;*p2--=ch;} p=str; while(*p) { p1=p;

while(*p1==' ') p1++; p2=p1;

while(*p2&&*p2!=' ') p2++; p=p2; p2--;

while(p1

{ch=*p1;*p1++=*p2;*p2--=ch;} }

printf(\ puts(str); } (20)将一个小写英文字符串重新排列,按字符出现的顺序将所有相同字符存放在一起。 如:acbabca

排列后为:aaaccbb

解答:新开辟一个数组,从字符串的第一个非空格字符开始,把该字符和与该字符相同的字符都存入该数组,同时用空格代替原串中的相应字符;再从字符串的第一个非空格字符开始,把该字符和与该字符相同的字符都存入该数组,同时用空格代替原串中的相应字符,依次下去,直到原字符串变为空格串为止。

#include \#include \main()

{ char str1[81],str2[81],*p1,*p2,*p,ch; printf(\ gets(str1); p=str1;p2=str2; while(*p)

{ while(*p==' ') p++; p1=p; ch=*p; while(*p1)

if(*p1==ch) {*p2=ch;*p1=' ';p1++;p2++;} else p1++; }

*p2='\\0';

printf(\ strcpy(str1,str2); puts(str2); }

88

4.7 自测试题参考答案

1. 单项选择题

(1) D (2) B (3) C (4) B (5) A (6) C (7) B (8)B (9) B (10) D 2. 程序分析题

(1) 1 1 1 0 (2) 1 3 7 15 (3) 4 (4) 5 (5) 8 3. 程序填空题

(1)① j+=2或j=j+2 或j++,j++ ② a[i]>a[j] (2)③ *r==*p ④ *r=='\\0' (3)⑤ y<3或y<=2 ⑥ z==3 (4)⑦ s[0][0] ⑧ s[0][2] (5)⑨ a[i-l]+a[i-2] ⑩ i%4==0 4. 程序设计题 (1)

#define N 10 main()

{ int a[N],i,s=0;

for(i=0;i

#define N 11 main()

{ int a[N],i,j,t;

for(i=0;i

if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;} for(i=N/2;i

if(a[i]

#include \#include \main()

{ int a[10]={0},len,i; char ch[81]; gets(ch);

len=strlen(ch); for(i=0;i

if(ch[i]>= '0'&&ch[i]<='9') a[ch[i]-'0']++;

89

联系客服:779662525#qq.com(#替换为@)