11、成绩转换。
输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下: 90 ~ 100 为 A; 80 ~ 89 为 B; 70 ~ 79 为 C; 60 ~ 69 为 D; 0 ~ 59 为 E;
思路
多路分支选择使用switch-case语句,防止输入数据不为整数,选择使用float类型,先将输入的成绩取十位上的数字分别进行分支判断即可。
具体实现
#include<stdio.h>
int main() {
float n;
printf("请输入成绩:");
scanf("%f", &n);
switch((int)n/10) {
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
}
return 0;
}
12 、数值统计
统计给定的n个数中,负数、零和正数的个数。
-
输入:
输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
-
输出:
对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
思路
先读入这一组所需要输入的数的个数,因为题设没有说读入的数是整数,所以用double类型来记录,循环读入一组中的各个数,判断之后将计数器自增,最后读入0结束循环。
具体实现
#include <stdio.h>
int main() {
int n, i, positive = 0, negative = 0, zero = 0;
double x;
while (scanf("%d", &n) == 1 && n != 0) { // 读入成功且不为0时执行循环
positive = negative = zero = 0; // 重置计数器
for (i = 0; i < n; i++) {
scanf("%lf", &x);
if (x > 0)
positive++;
else if (x < 0)
negative++;
else
zero++;
}
printf("%d %d %d\n", negative, zero, positive);
}
return 0;
}
小结
本次的算法题目不难,但是在编写时,可以多想想有没有简化程序编写的语句或者方法。