(以下代码均用Visual Studio 2022 编写)
1、寻找一个整型二维数组的“鞍点”,所谓“鞍点”就是这样一个元素,该元素在所在行中值是最小,在所在列中值是最大。如果存在,则输出“鞍点”所在的行、列及其“鞍点”得值。
思路:首先自定义一个三行四列的矩阵。因为鞍点是在行中值最小,所以第二个嵌套循环中,第一个循环,先将每行第一个数定义为最小,定义一个k来储存列,第二个循环开始对行中的数与定义的最小值比较,如果小于这个最小值,则把最小值变为min=a[i][j],第三个循环,开始进行列的比较,因为鞍点是列最大,如果此时这个值小于行中某一值,终止循环,这个值不是鞍点,否则的话就是鞍点,输出值,和行,列。
#include<stdio.h>
int main()
{
int i, j,min=0,max=0,k,h,m, a[3][4];
printf("请输入3×4的矩阵:\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
scanf_s("%d", &a[i][j]);
for (i = 0; i < 3; i++)
{
min = a[i][0];
k = 0;
for(j=0;j<4;j++)
if (a[i][j] < min)
{
min = a[i][j];
k = j;
h = i;
}
for (m = 0; m < 3; m++)
{
if (min < a[m][k])
break;
else
printf("这个数是鞍点:%d,行号%d,列号%d\n",a[m][k],m,j);
break;
}
}
return 0;
}
2、某班有学生有N人(如10人),学生的信息包括学号、姓名和英语、高数和计算机三门课的成绩,统计各学生的总成绩,按总分成绩的由高到低对学生的信息进行排序,输出排序后的学生的信息。
#include <stdio.h>
#include <string.h>
#define NUM 10
int main()
{
int i,j;
char name[NUM][10];//姓名
char num[NUM][10];//学号
float score[NUM][3];//三门课成绩
float sum[NUM];//总成绩
float tmp;
char stmp[10];
printf("输入姓名、学号和三门课成绩:\n");
for(i=0;i<NUM;i++)
{printf("请输入第%d个学生的信息:\n",i);
scanf("%s%s%f%f%f",name[i],num[i],&score[i][0],&score[i][1],&score[i][2]);}
for(i=0;i<NUM-1;i++)
for(j=i+1;j<NUM;j++)
if(sum[i]<sum[j])
{
tmp=sum[i];
sum[i]=sum[j];
sum[j]=tmp;//交换成绩
strcpy(stmp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],stmp);//交换姓名
strcpy(stmp,num[i]);
strcpy(num[i],num[j]);
strcpy(num[j],stmp);//交换学号
}
for(i=0;i<NUM;i++)
{printf("排序后的学生的信息:\n");
printf("%s%s%f%f%f",name[i],num[i],score[i][0],score[i][1],score[i][2]);}
return 0;
}
3、输入4×4的矩阵,编写程序实现:
1)输出主对角线上的各元素。(按对角线格式输出)
思路:输出主对角线上元素,即是当行等于列时,就输出该数值,行不等于列时输出空格即可,然后每行结束后,输出一个换行。
#include<stdio.h>
int main()
{
int i, j, a[4][4];
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
scanf_s("%d", &a[i][j]);
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (i == j)
printf("%d", a[i][j]);
else
printf(" ");
}
printf("\n");
}
return 0;
}
2)输出左上三角上的各元素。(按三角形格式输出)
思路:输出左上角上个元素,就我个人想法而言,应该是行加列要小于四,则输出值,否则输出空格,一行结束后换行。
例如此题上三角:(0,0)(0,1)(0,2)(0,3)
(1,0)(1,1)(1,2)
(2,0)(2,1)
(3,1)
可能有错误欢迎指正!
#include<stdio.h>
int main()
{
int i, j, a[4][4];
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
scanf_s("%d", &a[i][j]);
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (i + j<4)
printf("%d", a[i][j]);
else
printf(" ");
}
printf("\n");
}
return 0;
}
4、文章中有N行(假设3行)文字,每行有80个字符,分别统计大写英文字母、小写英文字母、数字字符、空格字符和其它字符个数。
#include<stdio.h>
#include<string.h>
#define N 3
int main()
{
char str[N][80]; //N行,每行最多80个字符
int i, j, upp = 0, low = 10, dig = 0, spa = 0, oth = 0;
for (i = 0; i < N; i++)
{
printf("Please input the line %d:\n",i);
gets(str[i]);//输入字符串给数组str的第i行
for (j = 0; j < 80 && str[i][j] != '\0'; j++)
{
if (str[i][j] >= 'A' && str[i][j] <= 'Z') upp++;
else if (str[i][j] >= 'a' && str[i][j] <= 'z') low++;
else if (str[i][j] >= '0' && str[i][j] <= '9') dig++;
else if (str[i][j] = ' ') spa++;
else oth++;
}//逐个元素判断,直到遇到'\0'或每行字符超过80
}
printf("输出结果:\n");
for (i = 0; i < N; i++)
puts(str[i]);//输出字符串
printf("upp:%d\n",upp);
printf("low:%d\n", low);
printf("dig:%d\n", dig);
printf("spa:%d\n", spa);
printf("oth:%d\n", oth);
return 0;
}
5、有一个3×4矩阵,要求编程序求出其中值最大的那个元素及最小的那个元素的值,并输出它们各自所在的行号和列号。
思路:这题的row2和colum2要初始化才能运行成功,浪费了好多时间在改,不太理解,明明我row和colum也没初始化呀,真是奇怪了,望指正。
#include<stdio.h>
int main()
{
int i, j, row, colum, max, min, a[3][4];
int row2=0, colum2=0;
printf("请输入3×4矩阵\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
scanf_s("%d", &a[i][j]);
max = a[0][0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
if (a[i][j] > max)
{
max = a[i][j];
row = i;
colum = j;
}
}
min = a[0][0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
if (a[i][j] <min)
{
min = a[i][j];
row2 = i;
colum2 = j;
}
}
printf("最小值为%d,其行号%d,列号%d\n", min, row2+1, colum2+1);
printf("最大值为%d,其行号%d,列号%d\n", max, row+1, colum+1);
return 0;
}
有点难度!
{{doge}}