2021年6月青少年软件编程等级考试(C语言)一级试卷及C语言版答案

文章包含五道C语言编程题目,涉及数的输入输出、实数除法计算、大写字母判断、特殊幻数求和以及硬币翻转问题,每题配有参考答案。这些题目旨在测试考生的基础编程能力和逻辑思维能力。
摘要由CSDN通过智能技术生成

2021年6月青少年软件编程等级考试(C语言)一级试卷及C语言版答案
分数:100 题数:5

编程题(共5题,每题20分,共100分)

1. 数的输入和输出
输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。
输入
一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。
输出
一行两个数,分别为保留2位小数输出的F,以及整数N,以一个空格分开。
样例输入
100 123.456789
样例输出
123.46 100

参考范例

#include <stdio.h>
int main() 
{
    int N;
    double F;   
    scanf("%d",&N);
    scanf("%lf",&F);
	printf("%.2lf ",F);
	printf("%d ",N);
return 0;
}

*2. (a/b)c的值
给定整数a、b、c,计算(a / b)*c的值,这里的除法为实数除法。
输入
一行,三个整数a、b、c,整数间以空格分隔。(1 ≤ a,b,c ≤ 1000)
输出
将计算结果保留6位小数输出。
样例输入
1 3 3
样例输出

1.000000

参考范例

#include <stdio.h>
#include <math.h>
int main()
{
    int a,b,c;   
    scanf("%d%d%d",&a,&b,&c);
	float s;
	s=(float)a/b*c;
	printf("%f",s);
    return 0;
} 

3. 大写字母的判断
输入一个字符,判断是否是英文大写字母,即是否是A-Z中的一个。
输入
一个字符。
输出
如果是英文大写字母,则输出YES,否者输出NO。
样例输入
K
样例输出
YES

参考范例

#include <stdio.h>
int main()
{
    char ch;   
    scanf("%c",&ch);
	float s;
	if(ch>='A'&&ch<='Z')
		printf("YES");
    else
    	printf("NO");
	return 0;
}

4. 特殊求和
如果一个数能够被7整除或者十进制表示中含有数字7,那么我们称这个数为幻数,比如17,21,73是幻数,而6,59不是。
对于给定的N,求出1~N中所有幻数的和。
输入
一个整数N(1 < N < 10000)。
输出
一个整数,表示1~N中所有幻数的和。
样例输入
14
样例输出
21

参考范例

#include <stdio.h>
#include <math.h>
int main()
{
	int n,i,flag,s=0;//n为目标数,i用于遍历循环,s为和
	scanf("%d",&n);//输入n
	for (int i=1;i<=n;i++)//进行遍历循环
 		{
			if(i%7==0)//通过取余判断是否7的倍数
				s+=i;//是就直接加上
			else//如果不是就判断各数位上是否有7
			{
				int k=i;//内循环k,进一步判断
				while(k!=0)
				{
					if(k%10==7)//与10取余检查末位是否为7
					{
						s+=i;//个位是7则累加
						break;//然后退出内循环
					}
					k/=10;//整除10,将末尾数字去掉后继续检查
				}
			}
		}
	printf("%d\n",s);//输出最后总和
    return 0; 

5. 硬币翻转
假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。
请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。
输入
输入正整数N和M,以单个空格隔开。
输出
顺次输出正面向上的硬币的编号,其间用空格间隔。
样例输入
10 10
样例输出
2 3 5 6 7 8 10

参考范例

#include<stdio.h>
//此题与开关灯问题是同一问题
int main()
{
    int N,M,i,sum=0;//N是硬币数,M是人数,i用于循环判断,
	                //sum是硬币被翻次数
    scanf("%d %d",&N,&M);//按题目要求输入N和M
    for( i=1;i<=N;i++)//从第个硬币开始遍历判断硬币状态
    {
        sum = 0 ;
        for(int j=1;j<=i&&j<=M;j++)//每个硬币按人数遍历判断
        {
            if(i%j==0)//判断硬币编号是否人序号的倍数
            {
                sum++;//是人序号倍数则硬币被操翻次数加1
            }          
        }
        if(sum%2==0) //判断硬币被操翻次数是否偶数,是说明正面向上
            printf("%d,",i);//输出该硬币编号和逗号
    }
        
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖之远izxg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值