实验六,数组(二) 数 数 组 (二) 一、 实验目的 1.掌握一维数组和二维数组的定义、赋值和初始化的方法 2.掌握字符数组的使用 3.熟练掌握与数组相关的各种算法 二、 实验任务 1 .阅读、调试、运行程序,比较阅读的结果和运行的结果。 (1) #includestdio.h void main() { char ch={“12ab56"}; int i,s=0; for(i=0;ch[i]="0"ch[i]="9";i+=2) s=10*s+ch[i]-"0"; printf("%d\n",s); } (2) 运行下面程序时,输入 abCR cCR defCR #includestdio.h #define N 6 void main() { char c[N]; int i=0; for( ;ic[i]=getchar(),i++); for(i=0;ii++) putchar(c[i]); } (3) #includestdio.h void main() { int a={1,2,2,3,4,3,4,5,1,5}; int n=0,i,j,c,k; for(i=0;i10-n;i++) { c=a[i]; for(j=i+1;j10-n;j++) if(a[j]==c) { for(k=j;k10-n;k++) a[k]=a[k+1]; n++; } } for(i=0;i(10-n);i++) printf("%d",a[i]); } (4) #include stdio.h void main() { int i; char a[]="Time",b[]="Tom"; for(i=0;a[i]!="\0"b[i]!="\0";i++) if(a[i]==b[i]) if(a[i]="a"a[i]="z") printf("%c",a[i]-32); else printf("%c",a[i]+32); else printf("*"); } (5) #includestdio.h #define LEN 4 void main() { int j,c; static char n[LEN+1]={"8980","9198"}; for(j=LEN-1;jj__) {c=n[j]+n[j]-2*"0"; n[j]=c%10+"0"; } for(j=0;jj++) puts(n[j]); } 2. 完善程序,并调试运行 (1) 以下程序的功能是删除一个字符串中的所有数字字符。 #include "stdio.h" void delnum(char *s) {int i,j; for(i=0,j=0; (1) "\0" ;i++) if(s[i]"0" (2) s[i]"9") { (3) ;j++;} s[j]="\0"; } (2) 下面程序的功能是:对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的 ASCII 码之差。例如:输入的两个字符串分别为 abcdefg 和 abceef,则输出为-1。 #include stdio.h void main ( ) { char str1,str2; int i,s; printf("\n Input string 1:\n");gets(str1); printf(“\n Input string 2:\n”);gets(str2); i= (1) ; while((str1[i]==str2[i])(str1[i]!= (2) )) i++; s= (3) ; printf("%d\n",s); } (3) 下面程序的功能是:将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变; #include “stdio.h” #include string.h void main() { char a[]=”clanguage”,t; int i,j,k; k=strlen(a); for(i=0;i=k-2;i+=2) for(j=i+2;j (1) ) if( (2) ) { t=a[i];a[i]=a[j];a[j]=t;} puts(a); printf(“\n”); } (4) 下例程序的功能是生成数列 1 6 4 9 7 12 10 15 13 18。 #include stdio.h void main() {int a={1}; int i; for( (1) ;ii++) if(i%2!=0) a[i]= (2) +5; else a[i]=a[i-1]-2; for(i=0;ii++) printf("%d ", (3) ); } (5) 将一维数组各元素循环左移一次。 #include stdio.h void main() {int a,i,t; for(i=0;ii++) scanf("%d", (1) ); t= (2) ; for(i=1;ii++) a[i-1]= (3) ; a=t; for(i=0;ii++) printf("%d ",a[i]); } (6) 用“顺序查找“法查找在一组数找一个数。 #include stdio.h #define N 10 void main() {int (1) ,i,k; for(i=0;ii++) scanf("%d",a[i]); scanf("%d", i=0; while(iN (2) ) i++; if( (3) ) printf("find"); else printf("not find"); } 3. 修正程序,并调试运行 (1) 以下程序的功能是统计一个字符串中的字母、数字、空格、和其它字符的个数。 #include "stdio.h" void main () {char s; int a={0}; int k,i; gets(s1); for (i=0;s[i]!="\0";i++) if ("a"=s[i]s[i]="z"||"A"=s[i]s[i]="Z") b++; /__found__/ else if (0=s[i]s[i]=9) b++; else if (s[i]==" ") b++; else b++; puts(s1); for(k=0;kk++) /__found__/ printf("%4c",a[k]); } } (2) 有十个字符串,在每个字符串找出最大字符,按一一对应的顺序放入一维数组 a 中,即第 i个字符串的最大字符放入 a[i]中。输出每个字符串的最大字符。 #include stdio.h void main() {char s; /__found__/ int a; int i,j; for(i=0;ii++) /__found__/ puts(s[i]); for(i=0;ii++) {a[i]=s[i]; for(j=1;s[i][j]!="\0";j++) if(a[i]s[i][j]) a[i]= s[i][j]; } for(i=0;ii++) printf("%d,%c",i, a[i]); } (3) 以下程序的功能是统计一个字符串中的字母、数字、空格、和其它字符的个数。 #include "stdio.h" void main () {char s; int a={0}; int k,i; gets(s1); for (i=0;s[i]!="\0";i++) if ("a"=s[i]s[i]="z"||"A"=s[i]s[i]="Z") b++; /__found__/ else if (0=s[i]s[i]=9) b++; else if (s[i]==" ") b++; else b++; puts(s1); for(k=0;kk++) /__found__/ printf("%4c",a[k]); } } (4) 下面程序的功能是检查一个二维数组是否对称(即:对所有 i 和 j 都有 a[i][j]=a[j][i])。 #include stdio.h void main() {int a={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int i,j,found=0; for(j=0;jj++) /__found__/ for(i=j+1;ii++) if(a[j][i] != a[i][j]) /__found__/ {found=1;continue;} if(found) printf("no"); else printf("yes"); } 4 .编写程序,并调试运行 (1) 用“折半”查找法,在一组按降序排列的数中查找一个值为 K 的元素。若有,输出 YES;若无,输出 NO。 (2) 读入一个字符串,将所有的大写字母转换成相应的小写字母,然后输出。 (3) 读入一串字符,统计字符“c”的出现次数。 (4) 将正整数 n(1=n=__)转换成相应的二进制数并输出。 (5)