1. 实验目的与要求
(1)认识C语言开发环境,至少会使用一种开发环境进行编程;
(2)能运用标准输入输出函数对数据进行输入与输出;
(3)能灵活运用三种基本结构解决实际问题。
2. 实验内容
(1)标准输入/输出函数的使用;
(2)顺序结构程序设计;
(3)选择结构程序设计;
(4)循环结构程序设计;
(5)三种基本控制结构的综合应用。
某班级若干个学生参加测验。在得到本次测验的成绩(0 到 100 之间的整数)之后,确定该班级本次测验的平均分(保留两位小数)。
设计一个求班级平均分的程序,运行一次可以处理任意数量的测验成绩,其中测验成绩是 0 到 100 之间的整数,班级平均分保留两位小数。
-【输入】一个班若干学生的测验成绩
-【输出】该班级的平均成绩
为了处理任意多个数据,用 -1 作为输入结束的标记值。例如:输入 95, 96, 75, 74, 89 和 -1,程序将计算 95, 96, 75, 74 和 89 的平均值,-1 作为结束标记不计算平均值。
示例1:测验成绩为 75,94,97,88,70,64,83,89。
Enter grade, -1 to end: 75
Enter grade, -1 to end: 94
Enter grade, -1 to end: 97
Enter grade, -1 to end: 88
Enter grade, -1 to end: 70
Enter grade, -1 to end: 64
Enter grade, -1 to end: 83
Enter grade, -1 to end: 89
Enter grade, -1 to end: -1
Class average is 82.50
假如一开始就输入了 -1,则不会输入任何测验成绩,程序不会计算平均分,并提示没有输入测验成绩
示例2:没有任何测验成绩。
Enter grade, -1 to end: -1 No grades were entered
算法总体描述:
Step 1. 初始化变量
Step 2. 输入测验成绩,求和并计数
Step 3. 计算并打印班级平均值
算法完整描述:
// Step 1. 初始化变量 初始化总分 total 为 0 初始化计数器 counter 为 0
// Step 2. 输入测验成绩,求和并计数 输入第一个测验成绩 grade(也可能是结束标记值) WHILE 用户尚未输入结束标记值 DO 将测验成绩 grade 累加到总分 total 中 将计数器 counter 加 1 输入下一个测验成绩 grade(也可能是结束标记值) ENDWHILE
// Step 3. 计算并打印班级平均值 IF 计数器 counter 不等于 0 THEN 置平均值 average 为总分 total 除以 counter 打印平均分 ELSE 打印未输入测验成绩 "No grades were entered" ENDIF 程序代码:
/* 计算测验成绩的班级平均分 */
#include <stdio.h>
int main(void) { int total; // 输入成绩的和 int counter; // 输入成绩个数 int grade; // 测验成绩
float average; // 平均成绩
// 初始化阶段
total = 0; // 初始化总分 total
counter = 0; // 初始化计数器 counter
// 输入测验成绩,求和并计数
// 输入第一个测验成绩
printf("Enter grade, -1 to end: "); // 提示输入
scanf("%d", &grade); // 读取用户输入的测验成绩
// 当用户尚未输入结束标记值时重复做
while (grade != -1) {
total = total + grade; // 将 grade 累加 total
counter = counter + 1; // 将计数器 counter 加 1
// 输入下一个测验成绩
printf("Enter grade, -1 to end: "); // 提示输入
scanf("%d", &grade); // 读取下一个测验成绩
}
// 计算并输出结果
if (counter != 0) { // 如果用户至少输入了一个测验成绩
// 计算班级平均分
average = (float)total / counter;
// 显示班级平均分
printf("Class average is %.2f\n", average);
} else { // 如果没有输入测验成绩,则输出提示信息
printf("No grades were entered\n");
}
return 0;
}
测试结果与两个演算示例一致,测试通过。
设计一个求在一系列整数中的最小值的程序,运行一次可以找出此系列整数中最小值,在循环输入n个整 数,按 min = 最小值 格式输出整数中最小值。
在 n 个数中找到最小值。
【输入】n个整数(n>0)
【输出】n个整数中最小值
示例1:n = 5, 5个整数:4 -2 -123 100 0
依次读入 5 个整数,逐个比较选出最小的数,这里是 -123。
先读入第一个数 4,假设其为最小值 min;然后依次读入剩下的数,每读入一个数 number 就与当前最 小值 min 相比较。如果 number 小于 min,则令 min 为 number。
程序运行过程如下:
Enter n: 5
Enter 5 numbers: 4 -2 -123 100 0
min = -123
算法总体设计描述:
输入 n 个数并求出其中最小值 min
输出 min
细化:
// 输入 n 个数并求出其中最小值 min
输入 n
输入第一个数 number
min = number
FOR i = 2..n DO
Read number
IF number < min THEN
min = number
END IF
END FOR
输出 min
程序代码:
// 求 n 个数的最小值
#include <stdio.h>
int main(void)
{
int n; // 数的个数
int number;
int min; // 最小值
// 输入 n 个数并求出其中最小值 min
printf("Enter n: ");
scanf("%d", &n);
printf("Enter %d numbers: ", n);
scanf("%d", &number);
min = number; // 假设第一个数是最小值
for (int i = 2; i <= n; i++) {
scanf("%d", &number);
if (number < min)
min = number;
}
// 输出 min
printf("min = %d\n", min);
return 0;
}
测试结果与示例一致,测试通过。
设计一个已知最后一天桃子数求第一天摘桃子数的程序,运行一次可处理10天以内桃子数,其中测试可在1至10天之间,结果进行输出。
【输入】猴子吃桃子的天数
【输出】猴子在第一天摘的桃子数
实例1:N=1。显然,第一天摘的桃子数是1。
实例2:N=2。第2天,只剩1个桃子;所以,第1天,有4个桃子(吃一半加一个,剩下1个)。
实例3:N=3。第3天,只剩1个桃子;第2天,有4个桃子;所以,第1天有10个桃子(吃一半加一个,剩下4个)。
.......
总结一下规律,已知某天的桃子数为m,前一天桃子数2(m+1)
算法描述:
输入天数 N
计算第一天所摘桃子数 m
输出第一天桃子数 m
算法完整描述:
输入天数 N
// 计算第一天所摘桃子数 m
m = 1 // 第 N 天桃子数
FOR i = N-1 TO 1 DO
m = 2(m+1)
END FOR
输出第一天桃子数 m
程序代码:
// 求解猴子吃桃问题
#include <stdio.h>
int main(void)
{
int N; // 总天数
int m; // 桃子数
int i;
// 输入天数 N
printf("Enter N: ");
scanf("%d", &N);
// 计算第一天所摘桃子数 m
m = 1; // 第 N 天桃子数
for (i = N-1; i >= 1; i--) {
m = 2 * (m + 1);
}
// 输出第一天桃子数 m
printf("Number of peachs in the first day is %d.\n", m);
return 0;
}
测试结果与手动演算示例一致,测试通过。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。