内容正文:
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
");}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$