C语言之蓝桥杯习题 (小白2023年第一篇博客)

目录

一.第一题

1.问题:小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。计算最高分最低分和平均分(此分保留小数点后两位),(有的算及格率优秀率得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀)

 2.解题过程

3.结果​编辑

4.注意点+总结

二.第二题

1.问题:将九进制2022转化成十进制。(有关填空题我会进行复杂处理,比如明确给出输入数字,我会按照输入任意数据进行计算)

2.解题过程

3.结果​编辑

4.注意点+总结:有关进制转化问题

三.第三题

1.问题:大写字母A的ASCII是65,求解L的ASCII。

2.解题过程

3.结果

​编辑 4.注意点+总结:注意ASCII表的规律,以及通过转化成数字再转化成字母的方法。

四.第四题

1.问题:小蓝用256MB内存开辟数组,数组每个元素是32位二进制整数,不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB 的空间可以存储多少个 32 位二进制整数

​编辑 2.解题过程

3.结果

4.注意点+总结:关键点在于了解1 byte = 8 bit   ,1 KB = 1024 byte,1 MB = 1024 KB,,1 GB = 1024 MB,,1 PB = 1024 TB等单位转化关系,       第二点小心太大的数int会不会溢出。

五.第五题

1.问题:对于一个整数,能整除这个数的整数成为这个数的约数,1200000有多少个约数(只计算正约数)​编辑

2.解题过程

3.结果

4.注意点+总结:小心太大的数int会不会溢出。

六.第六题

1.问题:小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。如果有多个字母出现的次数相等,输出字典序最小的那个。​编辑

2.解题过程

3.结果

4.拓展:

七.第七题

1.问题:如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如,4/3 , 5/2 ,1/8 ,7/1都是既约分数。请问,有多少个既约分数,分子和分母都是1到2020之间的整数(包括1 和2020)?

2.解题过程

3.结果

4.注意点+总结:(辗转相除法)


一.第一题

1.问题:小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。计算最高分最低分和平均分(此分保留小数点后两位),(有的算及格率优秀率得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀)

 2.解题过程

#include<stdio.h>
#include <math.h>
int main()
{
	int arr[100] = { 0 };
	int a = 0, n, max = 0,min=100;//min的赋值要小心,向大的放!!
	float mid = 0;//因为题目说平均分要以保留两位输出所以用float类型
	scanf("%d", &n);//输入总人数个数
	printf("\n");
	for (a = 0; a < n; a++)//利用循环进行输入每个人的成绩,并进行相关累加,判断操作
	{
		scanf("%d", &arr[a]);
		mid = mid + arr[a];//累加总分
		if (arr[a] > max)//判断最大数
		{
			max = arr[a];
		}
		else
			;
		if (arr[a] < min)
			min = arr[a];
	}mid=round(mid / n*100)/100;//round用于进行四舍五入“但是round会保留到个位所以有*100的操作”
printf("%d\n%d\n%0.2f\n",max,min,mid);//注意float类型不是默认转换两位小数,所以要进行0.2操作
	return 0;
}

以下代码算及格率和优秀率:

#include<stdio.h>
#include <math.h>
int main()
{
	int arr[100] = { 0 };
	int a = 0, n,b=0,c=0;
	float mid = 0,m=0;
	scanf("%d", &n);
	printf("\n");
	for (a = 0; a < n; a++)
	{
		scanf("%d", &arr[a]);
		if (arr[a] >= 60)//计算及格
		{
			b++;
			mid = mid + arr[a];
		}
		else
			;
		if (arr[a] >= 85)//计算优秀
		{
			c++;
			m = m + arr[a];
		}

	
	}mid = round(mid / b * 100) / 100;
	m = round(m / b * 100) / 100;
	printf("及格率%0.2f\n优秀率%0.2f\n", mid,m);
	return 0;
}

3.结果

4.注意点+总结

(1).审题认真确定要使用的变量类型。

(2).善于利用循环进行同类型操作。(累加(减),找最大(小)数等)

(3).在找最大数是,要注意创建的变量max初始值一定要小,例如max=0;最小值则反之。

(4),使用round()库函数,要引用头文件#include <math.h>,并且该函数只会保留到个位,所以要提前先把要保留到的小数后几位变成个位以上,例如本题。

二.第二题

1.问题:将九进制2022转化成十进制。(有关填空题我会进行复杂处理,比如明确给出输入数字,我会按照输入任意数据进行计算)

2.解题过程

int main()
{
	int a = 0, b = 0,c,mid=1,d=0,e,f,h;
	char arr[10] = "0";
	gets(arr);//输入任意数字,获取字符串
	b=strlen(arr);//strlen用于求该字符串字符个数(不包括‘\0’)比sizeof方便
	f= strlen(arr);
	h= strlen(arr);
	for (a = 0; a<b-1; a++)
	{
		e = arr[a] - '0';//用于将字符串中的数字字符转化成数字
		mid = 1;
		for (c = h - 1; c > 0; c--)//计算该位置乘以9的个数
		{
			mid = mid * 9;
		}h--;
		e = e * mid;//计算该位数值大小
		d = d +e;//各个位置数字相加(不包括个位)
	}
	d = d + (arr[f - 1] - '0');//arr[f - 1] - '0'计算的是最后个位数值
		printf("%d", d);
	return 0;
}

3.结果

4.注意点+总结:有关进制转化问题

每个进制的转化都是以十进制为桥梁,先转化十进制,再逆向转化成另一种进制

而转换方法就是让(该数据的每一位)*(乘以)该进制的(对应位置-1)次方,再相加【注意该数据的每一位最大值是该进制-1】

例如二进制01114->1*2^3+1*2^2+1*2^1+4*2^0;

三.第三题

1.问题:大写字母A的ASCII是65,求解L的ASCII。

2.解题过程

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值