C语言 数组(二)

(以下代码均用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;
}

有点难度!

评论

  1. 小木白
    博主
    Windows
    9月前
    2022-5-11 23:51:11

    {{doge}}

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇