[蓝蓝计算机考研算法训练二期]-day08

127 阅读1分钟

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;
} 

image.png

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;
}

image.png

小结

本次的算法题目不难,但是在编写时,可以多想想有没有简化程序编写的语句或者方法。