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