第6章 第4、5节:数组的应用举例(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 32页
| 43人阅读
| 0人下载

内容正文:

6.4与6.5节:数组的应用举例 一、单项选择题 1.已知一维数组int a[5] = {1,3,5,7,9};,执行语句for(int i=0;i<4;i++) a[i]=a[i+1];后,数组元素值错误的是( ) A. a [0]=3 B. a [2]=7 C. a [3]=9 D. a [4]=9 2.一维数组int a[6]={2,4,6,8,10,12};,循环for(int i=1;i<=4;i++) a[i-1]=a[i+1];执行后 a [2] 的值为() A. 6 B. 8 C. 10 D. 12 3.字符数组char s[]="abcde";,执行for(int i=0;i<3;i++) s[i]=s[i+1];后,数组内容为() A. bcdee B. abccc C. abcde D. bcdea 4.二维数组int d[3][3]={{1,2,3},{4,5,6},{7,8,9}};,求主对角线元素和,正确的循环是() A. for (i=0;i<3;i++) sum+=d [i][2-i]; B. for (i=0;i<3;i++) sum+=d [i][i]; C. for (i=0;i<3;i++) sum+=d [0][i]; D. for (i=0;i<3;i++) sum+=d [i][0]; 5.下列能正确表示一维数组元素逆序存放的核心逻辑是() A. for (i=0;i<n;i++) a [i]=a [n-1-i]; B. for (i=0;i<n/2;i++){t=a [i];a [i]=a [n-1-i];a [n-1-i]=t;} C. for (i=0;i<n;i++){t=a [i];a [i]=a [n-1-i];a [n-1-i]=t;} D. for (i=n-1;i>=0;i--) a [i]=a [i-1]; 6.执行char s1[6]="abcd"; char s2[]="1234"; strcpy(s1,s2);后,s1 [3] 的值为() A. 'd' B. '4' C. '\0' D. '3' 7.二维数组int e[4][2],能正确遍历所有元素的嵌套循环是() A. for (i=0;i<4;i++) for (j=0;j<2;j++) printf ("% d",e [i][j]); B. for (i=0;i<2;i++) for (j=0;j<4;j++) printf ("% d",e [i][j]); C. for (i=1;i<=4;i++) for (j=1;j<=2;j++) printf ("% d",e [i][j]); D. for (i=0;i<4;i++) printf ("% d",e [i][j]); 8.已知int a[5]={5,4,3,2,1};,执行 for(int i=0;i<3;i++)if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}后,a [1] 的值为() A. 4 B. 3 C. 2 D. 5 9.执行char s[8]="test"; strcat(s,"ing");后,字符串的总长度为() A. 5 B. 6 C. 7 D. 8 10.一维数组int a[6]={3,1,4,1,5,9};,统计数组中偶数个数,正确的判断条件是() A. if (a [i]%2=0) B. if (a [i]%2==0) C. if (a [i]/2==0) D. if (a [i]%2!=0) 二、填空题。 1.一维数组int a[5] = {2,5,8,11,14};,执行a[2] = a[4]-a[0];后,a [2] 的值为___________。 2.二维数组int b[2][3] = {{1,2,3},{4,5,6}};,元素 b [1][1] 的值为___________。 3.循环for(int i=0;i<3;i++) a[i] = i*2;执行后,a [2] 的值为___________。 4.执行char s1[5] = "abc"; char s2[] = "123"; strcpy(s1,s2);后,s1 [1] 的值为___________。 5.二维数组int d[2][2] = {{5},{6}};,d [1][1] 的初始值为___________。 6.执行int a[3] = {1,2,3}; a[0] = a[2]; a[2] = a[1];后,a [1] 的值为___________。 7.以下程序段执行后,k的值是___________。 int i,j,k=0; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j||i+j==2) k+=a[i][j]; 8.以下程序运行后输出的结果是___________。 #include <stdio.h> int main() { char str[20] = "hello\0world"; int i, count = 0; for(i = 0; str[i] != '\0'; i++) if(str[i] == 'l') count++; printf("%d", count); } 9.以下程序段的功能是___________。 int a[10]={5,2,9,1,7,3,8,6,4,0}; int i,j,t; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } 10.设有定义 char s[]="123\089"; 则strlen(s)的值是___________。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[] = "Hello"; int i; for(i = 0; i < strlen(s); i++) { if(i % 2 == 1) s[i] = '*'; } printf("%s", s); } 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int i, j, sum = 0; for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) if(i == j) sum += a[i][j]; printf("%d", sum); } 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[5] = {5, 4, 3, 2, 1}; int i, j, t; for(i = 0; i < 4; i++) for(j = 0; j < 4-i; j++) if(a[j] < a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } printf("%d", a[0]); } 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[]="abcdef"; int i; for(i=0;i<strlen(s)/2;i++) { char t=s[i]; s[i]=s[strlen(s)-1-i]; s[strlen(s)-1-i]=t; } puts(s); } 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[5]={5,1,4,2,3}; int i,j,t; for(i=0;i<4;i++) { for(j=0;j<4-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<5;i++) printf("%d ", a[i]); } 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { b[j][i]=a[i][j]; } } printf("%d", b[1][0]); } 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s1[10]="123", s2[]="456"; int i=0,j=0; while(s1[i]!='\0') i++; while(s2[j]!='\0') { s1[i]=s2[j]; i++; j++; } s1[i]='\0'; printf("%s", s1); } 8.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[20]="Hello"; int i,len=strlen(s); for(i=0;i<len/2;i++) { char t=s[i]; s[i]=s[len-1-i]; s[len-1-i]=t; } puts(s); } 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[]="ab12cd34ef"; int i,sum=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='0'&&s[i]<='9') sum+=s[i]-'0'; } printf("%d", sum); } 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[2][3]={{6,5,4},{3,2,1}}; int c[2][3],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { c[i][j]=a[i][j]+b[i][j]; } } printf("%d", c[1][1]); } 四、程序填空题(根据题意,将空缺的语句补上) 1.以下程序段的功能是删除字符串s中的数字字符,请填空。 char s[]="a1b2c3"; int i,j; for(i=0,j=0; s[i]!='\0'; i++) { if(________________) { s[j]=s[i]; j++; } } s[j]='\0'; 2.以下程序的功能是将一个字符串中的小写字母转换为大写字母,请填空。 #include <stdio.h> main() { char s[20]="Hello World"; int i; for(i=0; s[i]!='\0'; i++) { if(s[i]>='a' && s[i]<='z') s[i] = ________; } puts(s); } 3.以下程序的功能是判断字符串是否为回文(正读反读都一样),请填空。 #include <stdio.h> #include <string.h> main() { char s[20]="level"; int i,j,len=strlen(s); int flag=1; // 假设是回文 for(i=0,j=len-1; i<j; i++,j--) { if(________) { flag=0; break; } } if(flag) printf("Yes"); else printf("No"); } 4.程序将一个十进制整数转换为二进制数存入数组,并判断该二进制数是否为回文(即正读和反读一样,如9的二进制1001是回文)。 #include <stdio.h> main() { int n, i = 0, j, len; int bin[32]; scanf("%d", &n); if(n == 0) bin[i++] = 0; while(n > 0) { bin[i++] = ______①______; n = n / 2; } len = i; for(j = 0; j < len / 2; j++) { if(bin[j] != bin[len - 1 - j]) break; } if(______②______) printf("Yes"); else printf("No"); } 5. 统计字符串中每个字符出现的次数。利用字符的ASCII码作为数组下标。 #include <stdio.h> #include <string.h> main() { char s[100] = "abracadabra"; int count[256] = {0}; int i; for(i = 0; s[i] != '\0'; i++) { ______①______; } for(i = 0; i < 256; i++) { if(______②______) { printf("%c: %d ", i, count[i]); } } } 三、编程题。 1. 编写程序,定义一个3行3列的二维数组,从键盘输入所有元素的值,然后输出矩阵的周边元素(即第一行、最后一行、第一列、最后一列)。 2.编写程序,定义一个4行4列的二维数组,从键盘输入所有元素的值,然后找出该数组中的最大值及其所在的行号和列号(假设最大值唯一)。 3.输入一个字符串和一个字符 ch。编写程序,删除字符串中所有的 ch 字符,并输出处理后的字符串。 输入样例: programming m 输出样例: prograing 4.编写程序实现简单的密码加密。规则是:将字符串中的每个字母变成其后的第3个字母(例如 'a'->'d', 'b'->'e')。如果是 'x', 'y', 'z' 则循环回到开头('x'->'a', 'y'->'b', 'z'->'c')。非字母字符保持不变。大小写敏感。 输入样例: xyz ABC! 输出样例: abc DEF! 5.魔方阵(幻方)是一个 N×N 的矩阵,其中填入 1 到 N2 的数字,使得每一行、每一列以及两条对角线的和都相等。编写程序,判断输入的 N×N 矩阵是否为魔方阵。 输入: 第一行输入 N ,随后 N 行每行 N 个整数。 输出: 如果是魔方阵,输出 "Yes",否则输出 "No"。 示例输入: 3 8 1 6 3 5 7 4 9 2 示例输出: Yes 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 6.4与6.5节:数组的应用举例 一、单项选择题 1.已知一维数组int a[5] = {1,3,5,7,9};,执行语句for(int i=0;i<4;i++) a[i]=a[i+1];后,数组元素值错误的是( ) A. a [0]=3 B. a [2]=7 C. a [3]=9 D. a [4]=9 【答案】D 2.一维数组int a[6]={2,4,6,8,10,12};,循环for(int i=1;i<=4;i++) a[i-1]=a[i+1];执行后 a [2] 的值为( ) A. 6 B. 8 C. 10 D. 12 【答案】C 【解析】循环修改 a [0]=a [2]、a [1]=a [3]、a [2]=a [4]、a [3]=a [5],a [2] 最终为 10。 3.字符数组char s[]="abcde";,执行for(int i=0;i<3;i++) s[i]=s[i+1];后,数组内容为( ) A. bcdee B. abccc C. abcde D. bcdea 【答案】A 【解析】改前 3 个元素,s [0]=b、s [1]=c、s [2]=d,最终为 bcdee。 4.二维数组int d[3][3]={{1,2,3},{4,5,6},{7,8,9}};,求主对角线元素和,正确的循环是( ) A. for (i=0;i<3;i++) sum+=d [i][2-i]; B. for (i=0;i<3;i++) sum+=d [i][i]; C. for (i=0;i<3;i++) sum+=d [0][i]; D. for (i=0;i<3;i++) sum+=d [i][0]; 【答案】B 【解析】二维数组主对角线元素下标满足行 = 列。 5.下列能正确表示一维数组元素逆序存放的核心逻辑是( ) A. for (i=0;i<n;i++) a [i]=a [n-1-i]; B. for (i=0;i<n/2;i++){t=a [i];a [i]=a [n-1-i];a [n-1-i]=t;} C. for (i=0;i<n;i++){t=a [i];a [i]=a [n-1-i];a [n-1-i]=t;} D. for (i=n-1;i>=0;i--) a [i]=a [i-1]; 【答案】B 【解析】逆序存放只需交换前半部分和后半部分元素,循环到 n/2 即可。 6.执行char s1[6]="abcd"; char s2[]="1234"; strcpy(s1,s2);后,s1 [3] 的值为( ) A. 'd' B. '4' C. '\0' D. '3' 【答案】B 【解析】strcpy 将 s2 复制到 s1,s1 [3] 为 '4'。 7.二维数组int e[4][2],能正确遍历所有元素的嵌套循环是( ) A. for (i=0;i<4;i++) for (j=0;j<2;j++) printf ("% d",e [i][j]); B. for (i=0;i<2;i++) for (j=0;j<4;j++) printf ("% d",e [i][j]); C. for (i=1;i<=4;i++) for (j=1;j<=2;j++) printf ("% d",e [i][j]); D. for (i=0;i<4;i++) printf ("% d",e [i][j]); 【答案】A 【解析】数组下标从 0 开始,4 行 2 列需对应循环范围。 8.已知int a[5]={5,4,3,2,1};,执行 for(int i=0;i<3;i++)if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}后,a [1] 的值为( ) A. 4 B. 3 C. 2 D. 5 【答案】B 【解析】循环进行 3 次相邻交换,数组变为 {4,3,2,5,1},a [1]=3。 9.执行char s[8]="test"; strcat(s,"ing");后,字符串的总长度为( ) A. 5 B. 6 C. 7 D. 8 【答案】C 【解析】strcat 拼接字符串,"test"+"ing" 长度为 7。 10.一维数组int a[6]={3,1,4,1,5,9};,统计数组中偶数个数,正确的判断条件是( ) A. if (a [i]%2=0) B. if (a [i]%2==0) C. if (a [i]/2==0) D. if (a [i]%2!=0) 【答案】B 【解析】判断偶数用取模运算,双等号为相等判断。 二、填空题。 1.一维数组int a[5] = {2,5,8,11,14};,执行a[2] = a[4]-a[0];后,a [2] 的值为___________。 【答案】12 【解析】14-2=12,赋值给 a [2]。 2.二维数组int b[2][3] = {{1,2,3},{4,5,6}};,元素 b [1][1] 的值为___________。 【答案】5 【解析】第二行第二列元素为 5。 3.循环for(int i=0;i<3;i++) a[i] = i*2;执行后,a [2] 的值为___________。 【答案】4 【解析】i=2 时,2*2=4。 4.执行char s1[5] = "abc"; char s2[] = "123"; strcpy(s1,s2);后,s1 [1] 的值为___________。 【答案】'2' 【解析】strcpy 复制后 s1 为 "123",s1 [1]='2'。 5.二维数组int d[2][2] = {{5},{6}};,d [1][1] 的初始值为___________。 【答案】0 【解析】未初始化元素自动赋值为 0。 6.执行int a[3] = {1,2,3}; a[0] = a[2]; a[2] = a[1];后,a [1] 的值为___________。 【答案】2 【解析】仅修改 a [0] 和 a [2],a [1] 保持不变。 7.以下程序段执行后,k的值是___________。 int i,j,k=0; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j||i+j==2) k+=a[i][j]; 【答案】25 【解析】遍历主对角线(i==j)和副对角线(i+j==2)元素,主对角线:1+5+9=15,副对角线:3+5+7=15,但中间元素5被重复计算一次,故总和为15+15-5=25。 8.以下程序运行后输出的结果是___________。 #include <stdio.h> int main() { char str[20] = "hello\0world"; int i, count = 0; for(i = 0; str[i] != '\0'; i++) if(str[i] == 'l') count++; printf("%d", count); } 【答案】2 【解析】字符串"hello\0world"在第一个'\0'处结束,所以str实际为"hello",其中'l'出现2次。 9.以下程序段的功能是___________。 int a[10]={5,2,9,1,7,3,8,6,4,0}; int i,j,t; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } 【答案】将数组升序排序 【解析】这是冒泡排序算法,相邻元素比较,如果前面大于后面就交换,每轮将最大元素移到最后,实现升序排序。 10.设有定义 char s[]="123\089"; 则strlen(s)的值是___________。 【答案】3 【解析】字符串中"\0"是转义字符表示结束符,所以实际字符串为"123",长度为3。注意"\08"中\0是结束符,不是\08。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[] = "Hello"; int i; for(i = 0; i < strlen(s); i++) { if(i % 2 == 1) s[i] = '*'; } printf("%s", s); } 【答案】H*l*o 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int i, j, sum = 0; for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) if(i == j) sum += a[i][j]; printf("%d", sum); } 【答案】15 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[5] = {5, 4, 3, 2, 1}; int i, j, t; for(i = 0; i < 4; i++) for(j = 0; j < 4-i; j++) if(a[j] < a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } printf("%d", a[0]); } 【答案】5 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[]="abcdef"; int i; for(i=0;i<strlen(s)/2;i++) { char t=s[i]; s[i]=s[strlen(s)-1-i]; s[strlen(s)-1-i]=t; } puts(s); } 【答案】fedcba 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[5]={5,1,4,2,3}; int i,j,t; for(i=0;i<4;i++) { for(j=0;j<4-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<5;i++) printf("%d ", a[i]); } 【答案】1 2 3 4 5 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { b[j][i]=a[i][j]; } } printf("%d", b[1][0]); } 【答案】2 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s1[10]="123", s2[]="456"; int i=0,j=0; while(s1[i]!='\0') i++; while(s2[j]!='\0') { s1[i]=s2[j]; i++; j++; } s1[i]='\0'; printf("%s", s1); } 【答案】123456 8.写出下列程序段的输出结果:________________。 #include <stdio.h> #include <string.h> main() { char s[20]="Hello"; int i,len=strlen(s); for(i=0;i<len/2;i++) { char t=s[i]; s[i]=s[len-1-i]; s[len-1-i]=t; } puts(s); } 【答案】olleH 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { char s[]="ab12cd34ef"; int i,sum=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='0'&&s[i]<='9') sum+=s[i]-'0'; } printf("%d", sum); } 【答案】10 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[2][3]={{6,5,4},{3,2,1}}; int c[2][3],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { c[i][j]=a[i][j]+b[i][j]; } } printf("%d", c[1][1]); } 【答案】7 四、程序填空题(根据题意,将空缺的语句补上) 1.以下程序段的功能是删除字符串s中的数字字符,请填空。 char s[]="a1b2c3"; int i,j; for(i=0,j=0; s[i]!='\0'; i++) { if(________________) { s[j]=s[i]; j++; } } s[j]='\0'; 【答案】s[i]<'0' || s[i]>'9'或 !(s[i]>='0' && s[i]<='9') 2.以下程序的功能是将一个字符串中的小写字母转换为大写字母,请填空。 #include <stdio.h> main() { char s[20]="Hello World"; int i; for(i=0; s[i]!='\0'; i++) { if(s[i]>='a' && s[i]<='z') s[i] = ________; } puts(s); } 【答案】s[i]-32或 s[i]-'a'+'A' 3.以下程序的功能是判断字符串是否为回文(正读反读都一样),请填空。 #include <stdio.h> #include <string.h> main() { char s[20]="level"; int i,j,len=strlen(s); int flag=1; // 假设是回文 for(i=0,j=len-1; i<j; i++,j--) { if(________) { flag=0; break; } } if(flag) printf("Yes"); else printf("No"); } 【答案】s[i]!=s[j] 4.程序将一个十进制整数转换为二进制数存入数组,并判断该二进制数是否为回文(即正读和反读一样,如9的二进制1001是回文)。 #include <stdio.h> main() { int n, i = 0, j, len; int bin[32]; scanf("%d", &n); if(n == 0) bin[i++] = 0; while(n > 0) { bin[i++] = ______①______; n = n / 2; } len = i; for(j = 0; j < len / 2; j++) { if(bin[j] != bin[len - 1 - j]) break; } if(______②______) printf("Yes"); else printf("No"); } 【答案】①n % 2 ②j >= len / 2 5. 统计字符串中每个字符出现的次数。利用字符的ASCII码作为数组下标。 #include <stdio.h> #include <string.h> main() { char s[100] = "abracadabra"; int count[256] = {0}; int i; for(i = 0; s[i] != '\0'; i++) { ______①______; } for(i = 0; i < 256; i++) { if(______②______) { printf("%c: %d ", i, count[i]); } } } 【答案】①count[s[i]]++ ②count[i] > 0 三、编程题。 1. 编写程序,定义一个3行3列的二维数组,从键盘输入所有元素的值,然后输出矩阵的周边元素(即第一行、最后一行、第一列、最后一列)。 【参考代码】 #include <stdio.h> main() { int a[3][3]; int i, j; // 输入 for(i=0; i<3; i++) { for(j=0; j<3; j++) { scanf("%d", &a[i][j]); } } // 输出周边元素 for(i=0; i<3; i++) { for(j=0; j<3; j++) { if(i==0 || i==2 || j==0 || j==2) { // 周边条件 printf("%d ", a[i][j]); } else { printf(" "); // 非周边元素输出空格对齐 } } printf(" "); } } 2.编写程序,定义一个4行4列的二维数组,从键盘输入所有元素的值,然后找出该数组中的最大值及其所在的行号和列号(假设最大值唯一)。 【参考代码】 #include <stdio.h> main() { int a[4][4]; int i, j, max, row, col; // 输入 for(i=0; i<4; i++) { for(j=0; j<4; j++) { scanf("%d", &a[i][j]); } } // 找最大值及其位置 max = a[0][0]; row = 0; col = 0; for(i=0; i<4; i++) { for(j=0; j<4; j++) { if(a[i][j] > max) { max = a[i][j]; row = i; col = j; } } } printf("最大值:%d,行:%d,列:%d", max, row, col); } 3.输入一个字符串和一个字符 ch。编写程序,删除字符串中所有的 ch 字符,并输出处理后的字符串。 输入样例: programming m 输出样例: prograing 【参考代码】 #include <stdio.h> main() { char str[100]; char ch; int i, j = 0; scanf("%s", str); getchar(); scanf("%c", &ch); // 双下标法:i遍历原数组,j记录新数组的位置 for (i = 0; str[i] != '\0'; i++) { if (str[i] != ch) str[j++] = str[i]; } str[j] = '\0'; // 加上结束符 printf("%s", str); } 4.编写程序实现简单的密码加密。规则是:将字符串中的每个字母变成其后的第3个字母(例如 'a'->'d', 'b'->'e')。如果是 'x', 'y', 'z' 则循环回到开头('x'->'a', 'y'->'b', 'z'->'c')。非字母字符保持不变。大小写敏感。 输入样例: xyz ABC! 输出样例: abc DEF! 【参考代码】 #include <stdio.h> main() { char str[100]; int i = 0; gets(str); while (str[i] != '\0') { if (str[i] >= 'a' && str[i] <= 'z') { // 小写处理 str[i] = str[i] + 3; if (str[i] > 'z') str[i] = str[i] - 26; } else if (str[i] >= 'A' && str[i] <= 'Z') { // 大写处理 str[i] = str[i] + 3; if (str[i] > 'Z') str[i] = str[i] - 26; } // 非字母不处理 i++; } printf("%s", str); } 5.魔方阵(幻方)是一个 N×N 的矩阵,其中填入 1 到 N2 的数字,使得每一行、每一列以及两条对角线的和都相等。编写程序,判断输入的 N×N 矩阵是否为魔方阵。 输入: 第一行输入 N ,随后 N 行每行 N 个整数。 输出: 如果是魔方阵,输出 "Yes",否则输出 "No"。 示例输入: 3 8 1 6 3 5 7 4 9 2 示例输出: Yes 【参考代码】 #include <stdio.h> main() { int n; if (scanf("%d", &n) != 1) return 0; int a[10][10]; int i, j; for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); // 计算基准和 (第一行) int magic_sum = 0; for (j = 0; j < n; j++) magic_sum += a[0][j]; int is_magic = 1; // 检查所有行 for (i = 0; i < n; i++) { int row_sum = 0; for (j = 0; j < n; j++) row_sum += a[i][j]; if (row_sum != magic_sum) { is_magic = 0; break; } } // 检查所有列 if (is_magic) { for (j = 0; j < n; j++) { int col_sum = 0; for (i = 0; i < n; i++) col_sum += a[i][j]; if (col_sum != magic_sum) { is_magic = 0; break; } } } // 检查主对角线 if (is_magic) { int diag1 = 0; for (i = 0; i < n; i++) diag1 += a[i][i]; if (diag1 != magic_sum) is_magic = 0; } // 检查副对角线 if (is_magic) { int diag2 = 0; for (i = 0; i < n; i++) diag2 += a[i][n - 1 - i]; if (diag2 != magic_sum) is_magic = 0; } if (is_magic) printf("Yes "); else printf("No ");} 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第6章 第4、5节:数组的应用举例(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第6章 第4、5节:数组的应用举例(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第6章 第4、5节:数组的应用举例(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。