【蓝蓝计算机考研算法】-day08-成绩转换&数值统计

164 阅读1分钟

11.成绩转换

输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:

  • 90-100 为 A;
  • 80-89 为 B;
  • 70-79 为 C;
  • 60-69 为 D;
  • 0-59 为 E;

思路

利用if的嵌套进行输出。

具体实现

#include <stdio.h>

int main()
{
	int  M;//代表输入的成绩
	scanf_s("%d", &M);
	if ( M >= 90 && M <= 100) {
		printf("成绩为:A");
	}
	else if (M >= 80 && M <= 89) {
		printf("成绩为:B");
	}
	else if (M >= 70 && M <= 79) {
		printf("成绩为:C");
	}
	else if (M >= 60 && M <= 69) {
		printf("成绩为:D");
	}
	else if (M >= 0 && M <= 59) {
		printf("成绩为:E");
	}	else{
		printf("输入成绩非法");
	}
		return 0;
}

运行结果

image.png

复杂度

时间:O(1) ---没有复杂的循环 空间:O(1)-----没有存储量所以是O(1)

12.数值统计

数值统计:统计给定的n个数中,数、数的个数。

输入描述

输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。

输出描述

对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。

示例

输入: 3 -1 0 1
输出: 1 1 1
说明: 统计3个数字其中负数,零,正数的个数分别为1 1 1

输入:2 -10 8
输出:101

思路

1.输入个数后,用个数做循环输入需要判断正负的数,再用if.. else做对应的累加,

具体实现

#include <stdio.h>
int main() {
	int count;//count表示每行输入的个数
	int a = 0, b = 0, c = 0;//分别a表示给定的数据中负数、b表示零和c表示正数的个数。
	int x;//表示代表的具体数字
	printf("输入:");
	scanf_s("%d", &count);
	if (count>0&&count < 100) {
		for (int i = 1; i <= count; i++) {	
			scanf_s("%d", &x);
			if (x <0) {
				a++;
			}
			else if (x == 0) {
				b++;
			}
			else {
				c++;
			}
		}
		printf("输出:负个数:%d 零个数:%d 正个数:%d", a, b, c);
	}	
	return 0;
}

运行结果

image.png

复杂度

时间:O(n) ---n为for循环的次数 空间:O(1)-----没有存储量所以是O(1)

小结

今天的代码在思考上对于我基础差的,还能思考的过来,就是在实际操作的时候,犯难。
如1.if()里的判断写错成if(90<=M<=100),正确是:if ( M >= 90 && M <= 100) 2.在输入函数里加入额外的字符,导致输出结果错误 ,错误样式scanf_s("数值%d", &x);错在%d占位符处加了额外字符,调试了很久。正确是:scanf_s("%d", &x);