2021年秋C语言重修班期末考试上机参考答案
第1题
#include <stdio.h>
void main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
printf("相信自己,我肯定能通过本次考试!\n");
}
第2题
问题 B: 矩形块的面积
#include <stdio.h>
void main()
{
int x,y,z,m,sum;
scanf("%d%d%d%d",&x,&y,&z,&m);
sum=m-z-y+x;
printf("%d",sum);
}
第3题
压缩编码的解码
#include <stdio.h>
void main()
{
int n;
char ch;
while(scanf("%d%c",&n,&ch)!=EOF)
{
for(int i=0;i<n;i++)
printf("%c",ch);
}
}
第4题
知识抢答赛
#include <stdio.h>
int main()
{
int n,m;
scanf("%d",&n);
m=(n+23)/4;
if(m<=20&&n>=-20)
printf("%d",m);
else
printf("Score is error!");
return 0;
}
第5题
字符串模糊匹配
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000000],b[1000000];
gets(a);
gets(b);
int i=0,j=0;
for(;i<strlen(a)&&j<strlen(b);i++)
if(a[i]==b[j])
j++;
if(j==strlen(b))
printf("Congratulations!");
else
printf("Sorry!");
return 0;
}
第6题
湖南省大学生程序设计竞赛团体名次(Ⅱ)
#include <stdio.h>
#include <string.h>
int main()
{
int a[10]={4,3,4,5,6,5,6,9,2,5};
int year;
scanf("%d",&year);
printf("%d",a[year-2012]);
return 0;
}
第7题
就业率(函数版)
/****** begin ******/
// 你的函数实现位置。只需提交函数的定义代码,并且提交语言只能选择C(不能选C++)
int cal_employment_rate(int class_size, int employed)
{
int sum;
sum=((employed*100+class_size/2)/class_size);
return sum;
}
/******** end *******/
第8题
指定区间 [a,b] 内的质数个数,大部分同学的解法如下:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,a,b,count=0;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++)
{
for(j=2;j<=sqrt(i)+1;j++)
if(i%j==0)
break;
if(i%j!=0||i==2)
count++;
}
printf("%d",count);
return 0;
}
这个题目一般会报时间超时,一种快速筛查质数的解法,参考:https://www.rookieslab.com/posts/fastest-way-to-check-if-a-number-is-prime-or-not 有下面的 c++ 实现代码:
#include <bits/stdc++.h>
using namespace std;
template<class T1,class T2>
bool cmin(T1& a,const T2& b){return a>b?a=b,1:0;}
template<class T1,class T2>
bool cmax(T1& a,const T2& b){return a<b?a=b,1:0;}
using ll=long long;
bitset<1000001> d;
int main(){
ll a,b;//[a,b]
cin>>a>>b;
for (ll i=a;i<=b;i++)
d[i-a]=i==1?0:1;
ll w=sqrt(b);
for (ll i=2;i<=w;i++){
for (ll k=a%i==0?a:a/i*i+i;k<=b;k+=i)
if (k!=i)
d[k-a]=0;
}
//for (ll i=a;i<=b;i++)
// cout<<d[i-a]<<" ";
cout << d.count() << endl;
}
对上述答案或者代码看不懂的可以看我这篇文章 快速判断区间类质数的个数方法探讨 的分析,相信你一定茅塞顿开!
第9题
#include <stdio.h>
int main()
{
int a[11],m;
scanf("%d",&m);
int n=m+1;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
if(n>2)
if(a[0]==1)
printf("x^%d",n-1);
else
if(a[0]==-1)
printf("-x^%d",n-1);
else if(a[0]!=0)
printf("%dx^%d",a[0],n-1);
for(int i=1;i<n-2;i++)
{
if(a[i]==1)
printf("+x^%d",n-i-1);
else if(a[i]<0)
if(a[i]==-1)
printf("-x^%d",n-i-1);
else
printf("%dx^%d",a[i],n-i-1);
else
if(a[i]!=0)
printf("+%dx^%d",a[i],n-i-1);
}
if(n>=2)
if(a[n-2]==1)
if(n>2)
printf("+x");
else
printf("x");
else if(a[n-2]<0)
if(a[n-2]==-1)
printf("-x");
else
printf("%dx",a[n-2]);
else
if(a[n-2]!=0)
if(n>2)
printf("+%dx",a[n-2]);
else
printf("%dx",a[n-2]);
if(a[n-1]<0)
printf("%d",a[n-1]);
else
if(a[n-1]>0)
if(n!=1)
printf("+%d",a[n-1]);
else
printf("%d",a[n-1]);
return 0;
}
第10题
/****** begin ******/
// 你的函数实现位置。只需提交函数的定义代码,并且提交语言只能选择C(不能选C++)
struct fraction add(struct fraction a, struct fraction b)
{
struct fraction c;
c.numer=a.numer*b.deno+b.numer*a.deno;
c.deno=a.deno*b.deno;
int x,y,t=1;
x=c.numer;
y=c.deno;
while(y%x!=0)
{
t=y%x;
y=x;
x=t;
}
if(x!=1)
c.numer=c.numer/x;
c.deno=c.deno/x;
return c;
}
struct fraction multiply(struct fraction *px, struct fraction *py)
{
struct fraction c;
c.numer=px->numer*py->numer;
c.deno=px->deno*py->deno;
int x,y,t=1;
x=c.numer;
y=c.deno;
while(y%x!=0)
{
t=y%x;
y=x;
x=t;
}
if(x!=1)
c.numer=c.numer/x;
c.deno=c.deno/x;
return c;
}
/******** end *******/