数组作业
一维数组练习题
题目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;
}