2019年9月青少年软件编程等级考试(C语言)一级试卷及C语言版答案
一、编程题(第1部分) (共4题,每题12分,共48分)
1.输出第二个整数
输入三个整数,把第二个输入的整数输出。
输入
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。
输出
只有一行,一个整数,即输入的第二个整数。
样例输入
123 456 789
样例输出
456
程序范例
#include<stdio.h>
int main()
{
int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d”,b);
return 0;
}
2.浮点数向零舍入
输入一个单精度浮点数,将其向零舍入到整数。
说明:向零舍入的含义是,正数向下舍入,负数向上舍入。
提示:可以使用强制类型转换来实现。
输入
一个单精度浮点数。
输出
一个整数,即向零舍入到整数的结果。
样例输入
2.3
样例输出
2
程序范例
#include <stdio.h>
int main()
{
float a;
scanf(“%f”, &a);
printf(“%d”, (int)a);
return 0;
}
*3. 计算(a+b)c的值
给定3个整数a、b、C,计算表达式(a+b)*c的值。
输入
输入仅一行,包括三个整数a、b、C,数与数之间以一个空格分开。(-10000<a,b,c<10000)
输出
输出一行,即表达式的值。
样例输入
2 3 5
样例输出
25
程序范例
#include <stdio.h>
int main()
{
int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d”,(a+b)*c);
return 0;
}
4. 苹果和虫子
你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每X小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?
输入
输入仅一行,包括n,X和y(均为整数)。输入数据保证y<=n*X。
输出
输出也仅一行,剩下的苹果个数。
样例输入
10 4 9
样例输出
7
程序范例
#include <stdio.h>
int main()
{
int n,x,y,s;
scanf(“%d%d%d”,&n,&x,&y);
if (y%x==0)
s=n-y/x;
else
s=n-(y/x+1);
printf(“%d”,s);
return 0;
}
二、编程题(第2部分) (共4题,每题13分,共52分)
5. 输出绝对值
输入一个浮点数,输出这个浮点数的绝对值。
输入
输入一个浮点数,其绝对值不超过10000。
输出
输出这个浮点数的绝对值,保留到小数点后两位。
样例输入
-3.14
样例输出
3.14
程序范例
#include <stdio.h>
int main()
{
double a;
scanf(“%lf”,&a);
if (a<0)
a*=-1;
printf(“%.2lf”,a);
return 0;
}
6. 计算邮资
根据邮件的重量和用户是否选择加急计算邮费。
计算规则:
重量在1000克以内(包括1000克),基本费8元。
超过1000克的部分每500克加收超重费4元,不足500克部分按500克计算;
如果用户选择加急,多收5元。
输入
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。
如果字符是y,说明选择加急;
如果字符是n,说明不加急。
输出
输出一行,包含一个整数,表示邮费。
样例输入
1200 y
样例输出
17
程序范例
#include <stdio.h>
#include <math.h>
int main()
{
int a,v;
char j;
scanf(“%d %c”,&a,&j);
//这里注意,如果"%d%c"之间没有空格
//输入的时候,输入数字,加一个空格,再输入字母
//j会被写入为空隔而不是字母。因为空格也是字符。
if (a<=1000)
v=8;
else
{
int w=ceil((a-1000)/500.0);
// ceil(x) 取整函数
v=8+4*w;
}
if(j==‘y’)
v+=5;
printf(“%c”,j);
printf(“%d”,v);
return 0;
}
7. 求整数的和与均值
读入n(1<=n<=10000)个整数,求它们的和与均值。
输入
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。
每个整数的绝对值均不超过10000
输出
输出一行,先输出和,再输出平均值(保留到小数点后5位),
两个数用单个空格分隔。
样例输入
4
344
222
343
222
样例输出
1131 282.75000
程序范例
#include <stdio.h>
#include <math.h>
int main()
{
int n,x,s=0;
scanf(“%d”,&n);
for (int i=1;i<=n;i++)
{
scanf(“%d”,&x);
s+=x;
}
printf(“%d %.5f”,s,1.0*s/n);
return 0;
}
8. 数1的个数
给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字1的个数。
例如:
当n=2时,写下1,2。
这样只出现了1个1;
当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。
这样出现了5个1。
输入
正整数n。1<=n<=10000。
输出
一个正整数,即1的个数。
样例输入
12
样例输出
5
程序范例
#include <stdio.h>
int main()
{
int n, N, cnt = 0;//n用于循环,N统计目标,cnt统计结果
scanf(“%d”,&N);//输入N值。
for(n=1;n<=N;n++)//循环执行 从1到N遍历统计
{
int t = n;//t=当前数n,用于拆分每一位进行比对是否等于1
while(t)//循环取出每一位。即t为非0时执行
{
if(t%10 == 1) cnt++;//t跟10进行取余运算看是否余数1,是则统计加1
t/=10;//如果t<10,则到此之后结果退邮循环,否则依次统计十位、百位、千位,看t除以10之后比对是否是1
}
}
printf(“%d\n”, cnt);//输出结果
return 0;
}
printf(“%d”,s);
return 0;
}