中国电子学会(CEIT)考评中心历届真题(含解析答案)
C语言软件编程等级考试一级 2021年09月
编程题五道 总分:100分
一、比n小的最大质数(20分)
对于给定的n,求比n小的质数中最大的一个。
质数是指一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数。
时间限制: 1000ms
内存限制: 65536kB
输入
一个整数n。(2<n<10000)
输出
一个整数,即题目要求的解。
样例输入
100
样例输出
97
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int i, j;
int n; //整数n
int a;
//输入n
cin >> n;
for(i = 1; i < n; i++){
//判断n-i是不是质数
a= 0;
for(j = 2; j < n - i; j++){
if((n - i) % j == 0){
a++;
}
}
//因数的个数为0
if(a == 0){
break;
}
}
//打印最小的质数
cout << n - i;
return 0;
}
#include <stdio.h>
#include <math.h>
int main(){
int i,j;
int n;//整数n
int a;
//输入n
scanf("%d", &n);
for(i = 1; i < n; i++){
//判断n-i是不是质数
a=0;
for(j = 2;j < n-i; j++){
if((n-i)%j==0){
a++;
}
}
//因数的个数为0
if(a==0)
break;
}
//打印最小的质数
printf("%d",n-i);
return 0;
}
二、计算乘积(20分)
给定两个数a、b,计算它们的乘积。
时间限制: 1000ms
内存限制: 65536kB
输入
-行两个整数a、b,以空格分隔。(0<a, b<10^8)
输出
输出一个整数,表示a、b的乘积。
样例输入
123456 123456
样例输出
15241383936
#include <iostream>
using namespace std;
int main(){
int a, b;
long long n;//结果要使用64位整数
//输入a,b
cin >> a >> b;
//计算a*b,注意这里要转换为long long类型,否则结果不正确
n = (long long)a * b;
//打印n,使用64位%lld打印
cout << n;
return 0;
}
#include <stdio.h>
int main(){
int a,b;
long long n;//结果要使用64位整数
//输入a,b
scanf("%d %d" , &a,&b);
//计算a*b,注意这里要转换为long long类型,否则结果不正确
n=(long long)a*b;
//打印n,使用64位%lld打印
printf("%lld",n);
return 0;
}
三、交换输出(20分)
输入两个整数a、b,将他们交换输出。
时间限制: 1000ms
内存限制: 65536kB
输入
—行两个整数a、b,以空格分隔。0<a<10^8,
0<b<10^16。
输出
—行两个整数b、a,以空格分隔。
样例输入
123 12345654321
样例输出
12345654321 123
#include <iostream>
using namespace std;
int main(){
int a;//注意数据范围,a使用int即可
long long b;//b要使用long long
//输入a,b
cin >> a >> b;
//打印结果,交换位置
cout << b <<" " << a;
return 0;
}
#include <stdio.h>
int main(){
int a;//注意数据范围,a使用int即可
long long b;//b要使用long long
//输入a,b
scanf("%d %lld",&a, &b);
//打印结果,交换位置
printf("%lld %d" ,b,a);
return 0;
}
四、满足条件的数的累加(20分)
现有n个整数,将其中个位数为k的数进行累加求和。
时间限制: 1000ms
内存限制: 65536kB
输入
第一行两个整数n、k,以空格分隔。(0<n<1000,0=<k<=9)第二行n个非负整数,以空格分隔,每个数不大于100000。
输出
输出满足题目要求的累加和。
样例输入
10 7
2 5 7 17 11 18 4 27 1 7
样例输出
58
#include <iostream>
using namespace std;
int main(){
int i;
int n, k;//n和k
int c = 0;//累加之和
int m;
//输入n,k
cin >> n >> k;
for(i = 0; i < n; i++){
cin >> m;
//满足条件个位数为k的数
if(m % 10 == k){
//累加m
c+= m;
}
}
cout << c;
return 0;
}
#include <stdio.h>
int main(){
int i;
int n,k; //n和k
int c=0;//累加之和
int m;
//输入n,k
scanf("%d %d" , &n, &k);
for(i=0;i<n;i++){
scanf("%d",&m);
//满足条件个位数为k的数
if(m%10==k){
//累加m
c+=m;
}
}
printf("%d" ,c);
return 0;
}
五、数字判断(20分)
输入一个字符,如果输入的字符是数字,输出yes,否则输出no。
时间限制: 1000ms
内存限制: 65536kB
输入
一个字符
输出
如果输入的字符是数字,输出yes,否则输出no。
样例输入
样例1输入:
5
样例2输入:
A
样例输出
样例1输出:
yes
样例2输出:
no
#include <iostream >
using namespace std;
int main(){
char c;//字符
//输入c
cin >> c;
//判断是否是数字
if(c >= '0'&& c <= '9')
cout << "yes";
else
cout << "no";
return 0;
}
#include <stdio.h>
int main(){
char c;//字符
//输入c
scanf("%c",&c);//判断是否是数字
if(c >= '0' && c <= '9')
printf("yes");
else
printf("no");
return 0;
}