C语言数组练习

数组作业

一维数组练习题

题目1

键盘录入一组数列,利用冒泡排序将数据由大到小排序

c 复制代码
#include <stdio.h>

int main() {
	int t[100], num, tmp;
	printf("请输入数字个数:");
	scanf("%d", &num);
	printf("请输入%d个数字:\n", num);
	for (int i = 0; i < num; i++) {
		scanf("%d", &t[i]);
	}
	for (int i = 0; i < num; i++) {
		for (int j = 0; j < num - 1 - i; j++) {
			if (t[j] < t[j + 1]) {
				tmp = t[j];
				t[j] = t[j + 1];
				t[j + 1] = tmp;
			}
		}
	}
	printf("从大到小排序为:");
	for (int i = 0; i < num; i++) {
		printf("%d ", t[i]);
	}
	printf("\n");
	return 0;
}

题目2

从键盘输入年、月、日,计算并输出该日是该年第几天

c 复制代码
#include <stdio.h>

int main() {
	int year, month, day, tmp = 0;
	int t[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	printf("请输入年,月,日:");
	scanf("%d,%d,%d", &year, &month, &day);
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
		t[1] = 29;
	}
	for (int i = 0; i < month - 1; i++) {
		tmp += t[i];
	}
	tmp += day;
	printf("%d月%d日在%d年是第%d天\n", month, day, year, tmp);
	return 0;
}

题目3

键盘录入一组数列,求最大数、最小数、均值

c 复制代码
#include <stdio.h>

int main() {
	int num, t[100];
	double sum = 0.0;
	printf("请输入数列个数:");
	scanf("%d", &num);
	printf("请输入数列:");
	for (int i = 0; i < num; i++) {
		scanf("%d", &t[i]);
		sum += t[i];
	}
	sum = 1.0 * sum / num;
	int max = t[0], min = t[0];
	for (int i = 0; i < num;  i++) {
		if (t[i] > max) {
			max = t[i];
		}
		if (t[i] < min) {
			min = t[i];
		}
	}

	printf("最大数:%d、最小数:%d、均值:%.2lf\n", max, min, sum);
	return 0;
}

题目4

从键盘录入一组数列,判断是否是回文,举例:12321,abba,121

c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
	char a[100];
	int isTure = 1;
	scanf("%s", & a);
	int len = strlen(a);
	for (int i = 0; i < len / 2; i++) {
		if (a[len - 1 - i] != a[i]) {
			isTure = 0;
			break;
		}
	}
	if (isTure) {
		printf("是回文数。", a);
	} else {
		printf("不是回文数。");
	}
	return 0;
}

题目5

用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;

c 复制代码
#include <stdio.h>

int main() {
	int t[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, a;
	printf("数组中10个整型数为:");
	for (int i = 0; i < 10; i++) {
		printf("%d  ", t[i]);
	}
	printf("\n请输入一个数:");
	scanf("%d", &a);
	for (int i = 0; i < 10; i++) {
		if (a == t[i]) {
			printf("%d的下标为:%d\n", a, i);
			return 0;
		}
	}
	printf("没有这个数。\n");
	return 0;
}

题目6

通过键盘输入 10 个学员成绩:

1)输出不及格学员的成绩和下标。

2)求最高分的下标值

3)求最低成绩的下标值

4)求总成绩及平均成绩

c 复制代码
#include <stdio.h>

int main() {
	int num, t[100], sum;
	double m = 0.0;
	printf("请输入10名学生成绩:\n");
	for (int i = 0; i < 10; i++) {
		scanf("%d", &t[i]);
		sum += t[i];
	}
	m = 1.0 * sum / 10;
	int max = t[0], min = t[0];
	for (int i = 0; i < 10; i++) {
		if (t[i] < 60) {
			printf("不及格,成绩为:%d,下标是:%d\n", t[i], i);
		}
		if (max < t[i]) {
			max = t[i];
		}
		if (min > t[i]) {
			min = t[i];
		}
	}
	printf("总成绩为:%d,平均成绩:%.2lf", sum, m);
	return 0;
}

二维数组练习题

题目7

一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则提示。

c 复制代码
#include <stdio.h>

int main() {
	int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, r;
	printf("请输入要查的数:");
	scanf("%d", &r);
	printf("存储的二维数组为:\n");
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			printf("%3d ", a[i][j]);
		}
		printf("\n");
	}
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			if (a[i][j] == r) {
				printf("%d在%d行%d列\n", r, i, j);
				return 0;
			}
		}
	}
	printf("没有这个数。\n");
	return 0;
}

题目8

二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。

c 复制代码
#include <stdio.h>

int main() {
	int arr[100][100] = {0}, row, col;
    double sum=0;
	printf("请输入行,列:");
	scanf("%d,%d", &row, &col);
	printf("请输入一个二维数组");
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			scanf("%d", &arr[i][j]);
            sum+=arr[i][j];
		}
	}
    printf("平均值为:%.2lf",sum/(row*col));
	int rmax, cmin ;
	for (int i = 0; i < row; i++) {
		rmax = arr[i][0];
		for (int j = 0; j < col; j++) {
			if (rmax < arr[i][j]) {
				rmax = arr[i][j];
			}
		}
		printf("第%d行的最大值为:%d\n", i, rmax);
	}
	for (int j = 0; j < col; j++) {
		cmin = arr[0][j];
		for (int i = 0; i < row; i++) {
			if (cmin > arr[i][j]) {
				cmin = arr[i][j];
			}
		}
		printf("第%d列的最小值为:%d\n", j + 1, cmin); // 输出列号时加1以使其从1开始
	}
	return 0;
}

题目9

在行列相等数组计算主对角线元素的和

c 复制代码
#include <stdio.h>

int main() {
	int arr[][3] = {{1, 2, 3}, {4, 5, 6,}, {7, 8, 9}}, tmp = 0;
	printf("数组为:\n");
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%3d", arr[i][j] );
		}
		printf("\n");
	}
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			if (i == j) {
				tmp += arr[i][j];
			}
		}
	}
	printf("主对角线元素的和为:%d\n", tmp);
	return 0;
}

题目10

计算一个矩阵下三角元素的和

c 复制代码
#include <stdio.h>

int main() {
	int arr[][4] = {{1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12}, {13, 14, 15, 16}}, tmp = 0;
	printf("数组为:\n");
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			printf("%3d", arr[i][j] );
		}
		printf("\n");
	}
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			if (i <= j) {
				tmp += arr[i][j];
			}
		}
	}
	printf("矩阵下三角元素的和为:%d\n", tmp);
	return 0;
}

题目11

电影院为了答谢影迷的支持,在某一排的某一列座位上放置了一个大礼包,放置礼物的位置具有这样的规则(行和列的平方和为开店日期 512(5月12日));请设计程序找出大礼包的位置,(假定电影院有20排,每排25个座位)

c 复制代码
#include <stdio.h>

int main() {
	int tmp = 0;
	for (int i = 0; i < 20; i++) {
		for (int j = 0; j < 25; j++) {
			tmp = i * i + j * j;
			if (tmp == 512) {
				printf("礼包在%d排%d列。\n", i, j);
			}
		}
	}

	return 0;
}

字符数组练习题

题目12

编写一个程序,读取用户输入的字符串,并将其反转输出。

c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
	char t[100];
	printf("请输入字符串:");
	scanf("%s", t);
	printf("反转后字符串:");
	for (int i = strlen(t) - 1; i >= 0; i--) {
		printf("%c", t[i]);
	}
	return 0;
}

题目13

编写一个程序,判断用户输入的字符串是否为回文(即正反读都一样的字符串)。

c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
	int res = 0;
	char t[100], arr[100];
	printf("请输入字符串:");
	scanf("%s", t);
	for (int i = strlen(t) - 1, j = 0; i >= 0; i--, j++) {
		arr[j] = t[i];
	}

	if (strcmp(t, arr)) {
		printf("不是回文\n");
	} else {
		printf("是回文\n");
	}
	return 0;
}

思考题【选做】:

题目14

求出一个矩阵的鞍点。鞍点的含义为行上最大同时列上也最大。

c 复制代码
#include <stdio.h>

int main() {
	int arr[][5] = {{1, 20, 30, 60, 23},
		{5, 25, 15, 35, 56},
		{9, 22, 33, 12, 13},
		{8, 18, 28, 38, 34}
	};
	printf("存的数组为:\n");
	int row = 4, col = 5, tmp = 0, t[row][2];
	for (int i = 0; i < row; i++) {
		tmp = 0;
		for (int j = 0; j < col; j++) {
			printf("%d ", arr[i][j]);
			if (tmp < arr[i][j]) {
				tmp = arr[i][j];
				t[i][0] = j;
				t[i][1] = arr[i][j];
			}
		}
		printf("\n");
	}
	printf("\n");
	for (int i = 0; i < row; i++) {			//行最大值数组
		int isTure = 1;
		for (int j = 0; j < row; j++) {		//最大值的那一行
			//printf("t=%d,arr=%d\n", t[i][1], arr[j][t[i][0]]);
			if (t[i][1] < arr[j][t[i][0]]) {
				isTure = 0;
			}
		}
		if (isTure) {
			printf("鞍点为:%d\n", t[i][1]);
		}
		//printf("\n");
	}

	return 0;
}
相关推荐
Aurora_th34 分钟前
树与图的深度优先遍历(dfs的图论中的应用)
c++·算法·深度优先·图论·dfs·树的直径
马剑威(威哥爱编程)2 小时前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
算法萌新——13 小时前
洛谷P2240——贪心算法
算法·贪心算法
湖北二师的咸鱼3 小时前
专题:二叉树递归遍历
算法·深度优先
重生之我要进大厂3 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode
Happy鱿鱼4 小时前
C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)
c语言·开发语言·数据结构
KBDYD10104 小时前
C语言--结构体变量和数组的定义、初始化、赋值
c语言·开发语言·数据结构·算法
Crossoads4 小时前
【数据结构】排序算法---桶排序
c语言·开发语言·数据结构·算法·排序算法
自身就是太阳4 小时前
2024蓝桥杯省B好题分析
算法·职场和发展·蓝桥杯
孙小二写代码5 小时前
[leetcode刷题]面试经典150题之1合并两个有序数组(简单)
算法·leetcode·面试