C语言的数组与字符串练习题1
1. 数组初始化与遍历
题目描述:
编写一个C程序,初始化一个整数数组,包含10个元素,然后遍历并打印数组中的所有元素。
解题思路:
要初始化一个数组,可以在声明时直接给出初始值。遍历数组可以使用for
循环,通过索引访问每个元素并打印。
程序流程如下:
- 声明并初始化一个包含10个整数的数组。
- 使用
for
循环遍历数组,从索引0到9。 - 在循环中打印每个数组元素。
详细代码:
#include <stdio.h>
int main() {
// 声明并初始化一个包含10个整数的数组
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 使用for循环遍历数组
printf("数组中的元素为:\n");
for(int i = 0; i < 10; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
代码注释:
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
:声明并初始化一个包含10个整数的数组。for(int i = 0; i < 10; i++)
:使用for
循环从索引0到9遍历数组。printf("arr[%d] = %d\n", i, arr[i]);
:打印当前索引和对应的数组元素。
2. 查找数组中的最大值和最小值
题目描述:
编写一个C程序,输入10个整数存储在数组中,找到并输出数组中的最大值和最小值。
解题思路:
要找到数组中的最大值和最小值,可以先假设第一个元素为最大值和最小值,然后遍历数组,比较每个元素与当前的最大值和最小值,进行更新。
程序流程如下:
- 声明一个数组,大小为10。
- 提示用户输入10个整数,并存储在数组中。
- 初始化
max
和min
为数组的第一个元素。 - 使用
for
循环遍历数组,从第二个元素开始比较。 - 根据比较结果更新
max
和min
。 - 输出最大值和最小值。
详细代码:
#include <stdio.h>
int main() {
int arr[10];
int max, min;
// 提示用户输入10个整数
printf("请输入10个整数:\n");
for(int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 初始化max和min为第一个元素
max = arr[0];
min = arr[0];
// 遍历数组,查找最大值和最小值
for(int i = 1; i < 10; i++) {
if(arr[i] > max) {
max = arr[i];
}
if(arr[i] < min) {
min = arr[i];
}
}
// 输出结果
printf("数组中的最大值是 %d。\n", max);
printf("数组中的最小值是 %d。\n", min);
return 0;
}
代码注释:
int arr[10];
:声明一个大小为10的整数数组。for(int i = 0; i < 10; i++)
:循环读取用户输入的10个整数并存储在数组中。max = arr[0]; min = arr[0];
:初始化最大值和最小值为数组的第一个元素。if(arr[i] > max)
:如果当前元素大于max
,更新max
。if(arr[i] < min)
:如果当前元素小于min
,更新min
。printf
:输出数组中的最大值和最小值。
3. 数组元素求和与平均值
题目描述:
编写一个C程序,输入5个浮点数存储在数组中,计算并输出数组元素的总和和平均值。
解题思路:
要计算数组元素的总和,可以使用for
循环将所有元素累加起来。平均值则是总和除以元素的数量。
程序流程如下:
- 声明一个数组,大小为5,类型为
float
。 - 提示用户输入5个浮点数,并存储在数组中。
- 使用
for
循环遍历数组,累加所有元素的值。 - 计算平均值。
- 输出总和和平均值。
详细代码:
#include <stdio.h>
int main() {
float arr[5];
float sum = 0.0, average;
// 提示用户输入5个浮点数
printf("请输入5个浮点数:\n");
for(int i = 0; i < 5; i++) {
scanf("%f", &arr[i]);
}
// 计算总和
for(int i = 0; i < 5; i++) {
sum += arr[i];
}
// 计算平均值
average = sum / 5;
// 输出结果
printf("数组元素的总和是 %.2f。\n", sum);
printf("数组元素的平均值是 %.2f。\n", average);
return 0;
}
代码注释:
float arr[5];
:声明一个大小为5的浮点数数组。float sum = 0.0, average;
:声明并初始化总和变量为0,平均值变量。for(int i = 0; i < 5; i++)
:循环读取用户输入的5个浮点数并存储在数组中。sum += arr[i];
:将当前数组元素累加到sum
中。average = sum / 5;
:计算平均值。printf
:输出总和和平均值。
4. 反转数组
题目描述:
编写一个C程序,输入10个整数存储在数组中,然后将数组中的元素反转,并输出反转后的数组。
解题思路:
要反转数组,可以使用两个指针(或索引)从数组的两端开始,交换对应位置的元素,直到中间位置。
程序流程如下:
- 声明一个数组,大小为10。
- 提示用户输入10个整数,并存储在数组中。
- 使用
for
循环,从数组的开始和结束,交换对应的元素。 - 输出反转后的数组。
详细代码:
#include <stdio.h>
int main() {
int arr[10];
int temp;
// 提示用户输入10个整数
printf("请输入10个整数:\n");
for(int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 反转数组
for(int i = 0; i < 10 / 2; i++) {
temp = arr[i];
arr[i] = arr[10 - 1 - i];
arr[10 - 1 - i] = temp;
}
// 输出反转后的数组
printf("反转后的数组元素为:\n");
for(int i = 0; i < 10; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
代码注释:
int arr[10];
:声明一个大小为10的整数数组。for(int i = 0; i < 10; i++)
:循环读取用户输入的10个整数并存储在数组中。for(int i = 0; i < 10 / 2; i++)
:循环遍历数组的一半,交换元素。temp = arr[i]; arr[i] = arr[10 - 1 - i]; arr[10 - 1 - i] = temp;
:交换数组中对应位置的元素。for(int i = 0; i < 10; i++)
:循环输出反转后的数组元素。
5. 数组排序(升序)
题目描述:
编写一个C程序,输入5个整数存储在数组中,对数组进行升序排序,并输出排序后的数组。
解题思路:
可以使用简单的排序算法,如冒泡排序。通过多次遍历数组,比较相邻元素并交换位置,使得最大的元素逐渐移动到数组的末尾。
程序流程如下:
- 声明一个数组,大小为5。
- 提示用户输入5个整数,并存储在数组中。
- 使用嵌套
for
循环实现冒泡排序。 - 输出排序后的数组。
详细代码:
#include <stdio.h>
int main() {
int arr[5];
int temp;
// 提示用户输入5个整数
printf("请输入5个整数:\n");
for(int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
// 冒泡排序(升序)
for(int i = 0; i < 5 - 1; i++) {
for(int j = 0; j < 5 - 1 - i; j++) {
if(arr[j] > arr[j + 1]) {
// 交换arr[j]和arr[j + 1]
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 输出排序后的数组
printf("升序排序后的数组元素为:\n");
for(int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
代码注释:
int arr[5];
:声明一个大小为5的整数数组。for(int i = 0; i < 5; i++)
:循环读取用户输入的5个整数并存储在数组中。- 冒泡排序部分:
- 外层循环控制排序的次数,每次将最大的元素移动到未排序部分的末尾。
- 内层循环比较并交换相邻的元素。
printf
:输出升序排序后的数组元素。