2021年秋C语言重修班期中考试上机参考答案
考试入口:http://acm.hnust.edu.cn/contest.php?cid=2494
Solutions with C:
第1题
如下圆环,给定r和R,求圆环的面积。
include <stdio.h>
include <stdlib.h>
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
double area=3.14*(b*b-a*a);
printf("The area is %.2lf\n",area);
return 0;
}
第2题
湖南科技大学ACM集训队在2014年-2016年取得的团体成绩如下:
请提供查询功能,当输入一个年份时,输出该年份我校的团体总分成绩。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year;
scanf("%d",&year);
if(year==2014)
printf("4\n");
else if(year==2015)
printf("5\n");
else if(year==2016)
printf("6\n");
else
printf("Unknown\n");
return 0;
}
第3题
输出n行“三不一要”的具体内容,即输出n行“不轻信、不透露、不转帐,要及时报案”。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year;
scanf("%d",&year);
for(int i=1;i<=year;i++)
{
printf("不轻信、不透露、不转帐,要及时报案\n");
}
return 0;
}
第4题
严防电信网络诈骗之九大分类
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
if(n>=1&&n<=9&&m>=1&&m<=9)
{
for(int i=m;i<=n;i++)
{
if(i==1)
printf("一、电信网络诈骗之仿冒身份类\n");
else if(i==2)
printf("二、电信网络诈骗之购物类\n");
else if(i==3)
printf("三、电信网络诈骗之活动类\n");
else if(i==4)
printf("四、电信网络诈骗之利益诱惑类\n");
else if(i==5)
printf("五、电信网络诈骗之虚构意外类\n");
else if(i==6)
printf("六、电信网络诈骗之日常生活消费类\n");
else if(i==7)
printf("七、电信网络诈骗之钓鱼木马病毒类\n");
else if(i==8)
printf("八、电信网络诈骗之提供特定服务类\n");
else if(i==9)
printf("九、电信网络诈骗之其他新型违法类\n");
}
}
else
printf("Error\n");
}
第5题
给出n个大小不同的整数,求它们中第二大的数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(a[j]>a[i])
{
int item=a[i];
a[i]=a[j];
a[j]=item;
}
}
}
printf("%d",a[n-2]);
}
第6题
现在假设2022年湖南省赛的实际参赛队伍有n支,请你预测一下2022年一、二、三等奖的数量分别是多少?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
double a=n*0.1;
int first,second,third;
if((a-(int)a)>0.5)
first=(int)a+1;
else
first=(int)a;
double b=n*0.3-first;
if((b-(int)b)>0.5)
second=(int)b+1;
else
second=(int)b;
double c=n*0.55-first-second;
if((c-(int)c)>0.5)
third=(int)c+1;
else
third=(int)c;
printf("First Prize:%d\nSecond Prize:%d\nThird Prize:%d\n",first,second,third);
return 0;
}
第7题
本题要求实现一个计算两个数的最小公倍数的简单函数。
/* 温馨提示:在此只能粘贴你的函数代码! */
/* Attention:Only FUNCTION code can be pasted here!*/
int LCM( int x, int y )
{
int a=x,b=y;
if(a<b)
{
int t=a;
a=b;b=t;
}
int GCD,LCM;
int yushu;
while(a%b>0)
{
yushu=a%b;
a=b;b=yushu;
}
GCD=b;
LCM=(x*y)/GCD;
return LCM;
}
第8题
分数相同的人数
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n],b[100]={0};
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
}
int max=0;
for(int i=0;i<100;i++)
{
if(max<b[i])
{
max=b[i];
}
}
for(int i=0;i<100;i++)
{
if(max==b[i])
{
printf("%d %d\n",i,b[i]);
}
}
}
第9题
多重完全数
/****** begin ******/
// 你的函数实现位置。只需提交函数的定义代码,并且提交语言只能选择C(不能选C++)
void find_multiply_perfect_number(int a, int b)
{
for(int n=a;n<=b;n++)
{
int xigema=0;
for(int i=1;i<=sqrt(n);i++)
{
if(n%i==0)
{
if(n/i==i)
{
xigema+=i;
//xigema+=(n/i);
}
else
{
xigema+=i;
xigema+=(n/i);
}
}
}
if(xigema%n==0)
{
printf("%d\n",n);
}
}
}
/******** end *******/
第10题
一元二次多项式
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b,c;
scanf("%d%d%d", &a,&b,&c);
if(fabs(a)==1)
{
if(a==-1)
printf("-x^2");
else if(a==1)
{
printf("x^2");
}
}
else
{
printf("%dx^2",a);
}
if(b==0)
{
}
else if(fabs(b)==1)
{
if(b==-1)
printf("-x");
else if(b==1)
{
printf("+x");
}
}
else
{
if(b<-1)
{
printf("%dx",b);
}
else
{
printf("+%dx",b);
}
}
if(c==0)
{
}
else if(fabs(c)==1)
{
if(c==-1)
printf("-1");
else if(c==1)
{
printf("+1");
}
}
else
{
if(c<-1)
{
printf("%d",c);
}
else
{
printf("+%d",c);
}
}
return 0;
}
Solutions with C++:
第1题
如下圆环,给定r和R,求圆环的面积。
#include<bits/stdc++.h>
using namespace std;
int main(){
double r, R;
cin >> r >> R;
cout << fixed << setprecision(2) <<"The area is " << 3.14 * (R * R - r * r) << endl;
return 0;
}
第2题
湖南科技大学ACM集训队在2014年-2016年取得的团体成绩如下:
请提供查询功能,当输入一个年份时,输出该年份我校的团体总分成绩。
#include<bits/stdc++.h>
using namespace std;
int main(){
int year;
string rank;
cin >> year;
switch(year){
case 2014:
rank = "4";
break;
case 2015:
rank = "5";
break;
case 2016:
rank = "6";
break;
default:
rank = "Unknown";
break;
}
cout << rank << endl;
return 0;
}
第3题
输出n行“三不一要”的具体内容,即输出n行“不轻信、不透露、不转帐,要及时报案”。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
cout << "不轻信、不透露、不转帐,要及时报案" << endl;
}
return 0;
}
第4题
严防电信网络诈骗之九大分类
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
string str[9] = {"一、电信网络诈骗之仿冒身份类",
"二、电信网络诈骗之购物类",
"三、电信网络诈骗之活动类",
"四、电信网络诈骗之利益诱惑类",
"五、电信网络诈骗之虚构意外类",
"六、电信网络诈骗之日常生活消费类",
"七、电信网络诈骗之钓鱼木马病毒类",
"八、电信网络诈骗之提供特定服务类",
"九、电信网络诈骗之其他新型违法类"};
cin >> n >> m;
if(n <= 0 || n > 9 || m <= 0 || m > 9 ||n > m){
cout << "Error" << endl;
}else{
for(int i = n - 1; i < m; i++){
cout << str[i] << endl;
}
}
return 0;
}
第5题
给出n个大小不同的整数,求它们中第二大的数。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
vector<int> v;
cin >> n;
for(int i = 0; i < n; i++){
int num;
cin >> num;
v.push_back(num);
}
*max_element(v.begin(), v.end()) = INT_MIN;
cout << *max_element(v.begin(), v.end());
return 0;
}
第6题
现在假设2022年湖南省赛的实际参赛队伍有n支,请你预测一下2022年一、二、三等奖的数量分别是多少?
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int ans1, ans2, ans3;
ans1 = round(n * 0.1);
ans2 = round(n * 0.3 - ans1);
ans3 = round(n * 0.55 - ans1 - ans2);
cout << "First Prize:" << ans1 << endl;
cout << "Second Prize:" << ans2 << endl;
cout << "Third Prize:" << ans3 << endl;
}
第7题
本题要求实现一个计算两个数的最小公倍数的简单函数。
#include<bits/stdc++.h>
using namespace std;
int LCM( int x, int y );
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", LCM(x, y));
return 0;
}
/* 你的代码将被嵌在这里 */
int LCM( int x, int y ){
int a = x, b = y;
while(b != 0){
int temp = a % b;
a = b;
b = temp;
}
return x * y / a;
}
第8题
分数相同的人数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int count[101] = {0};
int n, maxScore, index;
cin >> n;
for(int i = 0; i < n; i++){
int num;
cin >> num;
count[num]++;
}
maxScore = *max_element(count, count + 101);
cout << max_element(count, count + 101) - count << " " << maxScore << endl;
count[max_element(count, count + 101) - count] = 0;
while(*max_element(count, count + 101) == maxScore){
cout << max_element(count, count + 101) - count << " " << maxScore << endl;
count[max_element(count, count + 101) - count] = 0;
}
return 0;
}
第9题
多重完全数
/****** begin ******/
// 你的函数实现位置。只需提交函数的定义代码,并且提交语言只能选择C(不能选C++)
void find_multiply_perfect_number(int a, int b){
for(int i = a; i <= b; i++){
int sum = 0;
for(int j = 1; j * j <= i; j++){
if(i % j == 0)
sum += j + (i / j);
}
if(sum % i == 0)
printf("%d\n", i);
}
}
/******** end *******/
第10题
一元二次多项式
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if(a == -1){
cout << "-";
}else if(a != 1){
cout << a;
}
cout << "x^2";
if(b != 0){
if(b > 0){
cout << "+";
}else if(b == -1){
cout << "-";
}
if(b != -1 && b != 1){
cout << b;
}
cout << "x";
}
if(c != 0){
if(c > 0){
cout << "+";
}
cout<< c;
}
return 0;
}