练习:
一维数组练习题
1.键盘录入一组数列,利用冒泡排序将数据由大到小排序
#include <stdio.h>
int main()
{
int a[5];
int t;
printf("请输入5个数\n");
int length = sizeof(a) / sizeof(int);
for(int i= 0;i < length;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(int i = 0;i < length-1;i++)
{
for(int j = 0;j < length - 1 - i;j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("冒泡排序的数组:\n");
for(int i= 0;i < length;i++)
{
printf("%4d",a[i]);
}
printf("\n");
return 0;
}
运行结果:
2.从键盘输入年、月、日,计算并输出该日是该年第几天
#include <stdio.h>
int main()
{
int year,month,day,sum,k;
int t[] = {31,0,31,30,31,30,31,31,30,31,30,31};
printf("请输入年,月,日\n");
scanf("%d,%d,%d",&year,&month,&day);
if((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0 )
{
t[1] = 29;
}
else
{
t[1] = 28;
}
sum = day;
for(k = 0;k < month -1;k++)
{
sum +=t[k];
}
printf("%d月%d日是%d年的第%d天\n",month,day,year,sum);
return 0;
}
运行结果:
3.键盘录入一组数列,求最大数、最小数、均值
#include <stdio.h>
int main()
{
int a[8];
int max,min,length,t,sum;
float averge;
printf("请输入八个数\n");
length = sizeof(a) / sizeof(int);
for(int i = 0;i < length;i++)
{
scanf("%d",&a[i]);
sum += a[i];
averge = (double)sum / 8;
}
for(int i = 0;i <length - 1;i++)
{
for(int j = 0;j < length - 1 - i;j++)
{
if(a[j] < a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("\n");
max = a[0];
min = a[7];
printf("该队列的最大数为:%d,最小数为:%d,均值为:%.2f",max,min,averge);
return 0;
}
运行结果:
4.从键盘录入一组数列,判断是否是回文,举例:12321,abba,121
#include <stdio.h>
int main()
{
char a[5];
int num, count, recount, other;
printf("请输入5个数\n");
// 读取字符输入并转换为整数进行判断
for (int i = 0; i < sizeof(a) / sizeof(char); i++)
{
scanf("%c", &a[i]);
num = a[i] - '0'; // 将字符转换为整数
count = num;
recount = 0;
int temp = num; // 保存原始数字
// 整数的逆转
while (temp != 0)
{
other = temp % 10;
recount = recount * 10 + other;
temp /= 10;
}
// 判断是否为回文数
if (count == recount)
{
printf("%d 是回文数\n", count);
}
else
{
printf("%d 不是回文数\n", count);
}
// 清空缓冲区中的换行符
getchar();
}
printf("\n");
return 0;
}
运行结果:
5.用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;
#include <stdio.h>
int main()
{
// 定义数组和变量
int a[10];
int search_num; // 用于存储要查看下标的数
printf("请输入10个数,并输入您想查看下标的数:\n");
// 录入数据
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
{
scanf("%d", &a[i]);
}
// 输入要查看下标的数
scanf("%d", &search_num);
// 查找并输出下标
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
{
if (a[i] == search_num)
{
printf("数 %d 的下标是 %d\n", search_num, i);
return 0; // 找到后直接退出程序
}
}
// 如果未找到
printf("未找到数 %d\n", search_num);
return 0;
}
运行结果:
6.通过键盘输入 10 个学员成绩,
1)输出不及格学员的成绩和下标。
2)求最高分的下标值
3)求最低成绩的下标值
4)求总成绩及平均成绩
#include <stdio.h>
int main() {
int a[10];
int length = sizeof(a) / sizeof(int);
int sum = 0;
int score = 0; // 用于记录不及格的成绩
int highest_index = 0; // 最高分的下标
int lowest_index = 0; // 最低分的下标
printf("请输入10个学员的成绩:\n");
// 录入成绩并计算总分
for (int i = 0; i < length; i++)
{
scanf("%d", &a[i]);
sum += a[i];
// 输出不及格的成绩和下标
if (a[i] < 60)
{
printf("不及格学员的成绩:%d,下标:%d\n", a[i], i);
score = a[i]; // 记录最后一个不及格的成绩
}
// 求最高分的下标
if (a[i] > a[highest_index])
{
highest_index = i;
}
// 求最低分的下标
if (a[i] < a[lowest_index])
{
lowest_index = i;
}
}
// 输出最高分和最低分的下标
printf("最高分的下标:%d,最低分的下标:%d\n", highest_index, lowest_index);
// 计算平均成绩
int average = sum / length;
// 输出总成绩和平均成绩
printf("总成绩为:%d,平均成绩为:%d\n", sum, average);
return 0;
}
运行结果:
二维数组练习题:
7.一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则提示。
#include <stdio.h>
int main()
{
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int search_value;
int found = 0; // 标记是否找到该值
int row, col; // 用于记录找到的行列位置
printf("请输入一个值:\n");
scanf("%d", &search_value);
// 遍历二维数组进行查找
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (a[i][j] == search_value)
{
found = 1; // 找到值,将found标记为1
row = i; // 记录行位置
col = j; // 记录列位置
break; // 找到后退出内层循环
}
}
if (found)
{
break; // 找到后退出外层循环
}
}
// 根据找到与否输出结果
if (found)
{
printf("找到值 %d,位置为第 %d 行第 %d 列。\n", search_value, row + 1, col + 1);
} else
{
printf("未找到值 %d。\n", search_value);
}
return 0;
}
运行结果:
8.二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。
#include <stdio.h>
int main()
{
int sum = 0, average, max_row, min_col,i,j;
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++)
{
sum += a[i][j];
}
}
average = sum / (i+j+2);
// 求每行的最大值
for (i = 0; i < 3; i++)
{
max_row = a[i][0]; // 假设每行的第一个元素为最大值
for (j = 1; j < 3; j++)
{
if (a[i][j] > max_row)
{
max_row = a[i][j];
}
}
printf("第 %d 行的最大值为:%d\n", i + 1, max_row);
}
// 求每列的最小值
for (j = 0; j < 3; j++)
{
min_col = a[0][j]; // 假设每列的第一个元素为最小值
for (i = 1; i < 3; i++)
{
if (a[i][j] < min_col)
{
min_col = a[i][j];
}
}
printf("第 %d 列的最小值为:%d\n", j + 1, min_col);
}
printf("所有元素的平均值为:%d\n", average);
return 0;
}
运行结果:
9.在行列相等数组计算主对角线元素的和
#include <stdio.h>
int main()
{
int a[3][3];
int sum,i,j;
printf("请输入三行三列的数组\n");
for(i = 0;i < 3;i++)
{
for(j = 0;j < 3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i = 0;i < 3;i++)
{
sum += a[i][i];
}
printf("该数组的主对角线之和为:%d\n",sum);
return 0;
}
运行结果:
10计算一个矩阵下三角元素的和
#include <stdio.h>
int main()
{
int a[3][3];
int i,j,sum;
printf("请输入一个3×3的矩阵\n");
//初始化
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 <= i;j++)
{
sum += a[i][j];
}
}
printf("该矩阵下三角的和为%d",sum);
return 0;
}
运行结果:
11.电影院为了答谢影迷的支持,在某一排的某一列座位上放置了一个大礼包,放置礼物的位置具有这样的规则(行和列的平方和为开店日期 512(5月12日));
请设计程序找出大礼包的位置,(假定电影院有20排,每排25个座位)
#include <stdio.h>
int main()
{
int i, j;
int found = 0; // 用来标记是否找到大礼包的位置
for (i = 0; i < 20; i++)
{
for (j = 0; j < 25; j++)
{
if (i * i + j * j == 512)
{
printf("礼物在%d行%d列\n", i + 1, j + 1);
found = 1; // 标记已找到
break; // 找到后跳出内层循环
}
}
if (found)
{
break; // 如果已经找到,跳出外层循环
}
}
if (!found)
{
printf("在电影院内没有找到满足条件的位置。\n");
}
return 0;
}
运行结果:
字符数组练习题:
12.编写一个程序,读取用户输入的字符串,并将其反转输出。
#include <stdio.h>
int main()
{
char a[5];
printf("请输入长度为5的字符串: \n");
int length = sizeof(a) / sizeof(char);
// 读取字符串
for (int i = 0; i < length; i++)
{
scanf(" %c", &a[i]);
}
// 反转字符串
for (int i = length - 1; i >= 0; i--)
{
printf("%c", a[i]);
}
printf("\n");
return 0;
}
运行结果:
13.编写一个程序,判断用户输入的字符串是否为回文(即正反读都一样的字符串)。
#include <stdio.h>
int main()
{
char a[7], a2[7];
int i;
int isPalindrome = 1;
printf("请输入长度为6的字符串(不包含空格)\n");
scanf("%6s", a); // 读取最多6个字符,自动添加'\0'
// 复制并反转字符串到a2
for(i = 0; i < 6; i++) // 假定用户输入了6个字符(或更少)
{
a2[6 - 1 - i] = a[i];
}
a2[6] = '\0'; // 确保字符串正确结束
// 比较字符串a和a2
for(i = 0; i < 6; i++) // 同样假定用户输入了6个字符
{
if(a[i] != a2[i])
{
isPalindrome = 0;
break;
}
}
// 输出结果
if(isPalindrome)
{
printf("该字符串是回文\n");
}
else
{
printf("该字符串不是回文\n");
}
return 0;
}
运行结果: