本次单元测试虽然较第一次机测难度增加,但整体难度与平时pta练习相比,难度并不大,一些细节同学们在考试时容易忽略,本次八道题,可关注第四题的简便公式,以及第七题的注意事项和第八题运行超时的解决办法。
7-1 sdut-C语言实验-A+B for Input-Output Practice (不确定次数循环)
分数 10
作者 马新娟
单位 山东理工大学
Your task is to Calculate a + b.
Too easy?! Of course! I specially designed the problem for acm beginners.
You must have found that some problems have the same titles with this one, yes, all these problems were designed for the same aim.
输入格式:
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
输出格式:
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
输入样例:
1 5
10 20
输出样例:
在这里给出相应的输出。例如:
6
30
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题为为循环题最最最基础题,不过多赘述。
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d %d\n",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
7-2 sdut-C语言实验-数位数
分数 12
作者 马新娟
单位 山东理工大学
给定一个正整数 n ,请你求出它的位数。
输入格式:
单组输入,输入一个整数 n 。(1<= n <= 2147483647)
输出格式:
输出一行,包含一个整数,即为 n 的位数。
输入样例:
1234567
输出样例:
在这里给出相应的输出。例如:
7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题仍为for循环最基本题型,
不过多赘述。
#include<stdio.h>
int main()
{
int a=0,n;
scanf("%d",&n);
while(n>0)
{
n=n/10;
a++;
}
printf("%d",a);
return 0;
}
7-3 sdut-C语言实验- 分段函数求值
分数 13
作者 马新娟
单位 山东理工大学
有如下分段函数
F(x) = x^2 + 1 当x> 0时;
F(x) = -x 当x<0时;
F(x) = 100.0 当x=0时;
编程根据输入的不同x(x为实数),输出其对应的函数值。
输入格式:
多组输入,每组一个实数x。处理到文件结束。
输出格式:
对于每组输入x,输出其对应的F(x),每组一行,结果保留1位小数。
输入样例:
8.00
-5.0
输出样例:
在这里给出相应的输出。例如:
65.0
5.0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题考查循环语句嵌套选择语句
解决分段函数,
仍没有难度,可跳过。
#include<stdio.h>
int main()
{ double x,f;
while(scanf("%lf\n",&x)!=EOF)
{
if(x>0)
{
f=x*x+1;
}
if(x<0)
{
f=-x;
}
if(x==0)
{
f=100.0;
}
printf("%.1f\n",f);
}
return 0;
}
7-4 sdut-C语言实验-最大公约数与最小公倍数
分数 15
作者 马新娟
单位 山东理工大学
求两个正整数的最大公约数与最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
第一行输出最大公约数;
第二行输出最小公倍数。
输入样例:
9 21
输出样例:
3
63
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题需要了解什么是最大公约数什么是最小公倍数,
还要了解最小公倍数利用最大公约数的求法,
即:两个数m,n他们的最大公约数为t,
那么最小公倍数为m*n/t,
此公式可大大降低题目难度,并节省时间。
#include<stdio.h>
int main()
{
int a,b, i,min, m,n;
scanf("%d %d",&m,&n);
if(m>n)
{
min=n;
}
else if(m<n)
{
min=m;
}
for(i=1;i<=min;i++)
{
if(m%i==0&&n%i==0)
{
a=i;
}
}
b=(m*n)/a;
printf("%d\n%d",a,b);
return 0;
}
7-5 sdut- C语言实验-计算1到n的和(循环结构)
分数 10
作者 马新娟
单位 山东理工大学
从键盘上输入任意一个整数n,计算1到n的和。
输入格式:
从键盘输入任意整数n。
输出格式:
输出1到n的和。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题为for循环基本题,不过多赘述。
#include<stdio.h>
int main()
{
int a=0,t,n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a=a+i;
}
printf("%d",a);
return 0;
}
7-6 sdut-C语言实验- 简单计算
分数 12
作者 马新娟
单位 山东理工大学
接受从键盘输入的N个整数,输出其中的最大值、最小值和平均值(平均值为整除的商)。
输入格式:
第一行一个正整数N(N<=100);
第二行有N个用空格隔开的整数Ti (1 <= i <= N, 0 <= Ti <= 10000000)
输出格式:
三个有空格隔开的整数分别为最大值、最小值和平均值,其中平均值为整除的商。
输入样例:
在这里给出一组输入。例如:
5
1 2 3 5 4
输出样例:
在这里给出相应的输出。例如:
5 1 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题难度不大,
注意当i==1时,对max和min的赋值,
然后在接下来的循环比较。
注意对sum的初始化赋值。
#include<stdio.h>
int main()
{
int sum=0,max,min,n,a ,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%d",&a);
if(i==1)
{
max=a;
min=a;
}
else if(i!=1)
{
if(a>max)
{
max=a;
}
if(a<min)
{
min=a;
}
}
sum=sum+a;
}
printf("%d %d %d",max,min,sum/n);
return 0;
}
7-7 sdut -C语言实验 - 水仙花数
分数 13
作者 马新娟
单位 山东理工大学
水仙花的花语是“敬意”。在春节时,很多地方的人喜欢把亲手培育的水仙花送给自己最尊敬的人。
数学中研究“水仙花数”也是很有趣味的。“水仙花数”是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
现在要求输出所有在 m 和 n 范围内的水仙花数。
输入格式:
输入数据有多组,每组占一行,包括两个整数 m 和 n(100≤m≤n≤999)
输出格式:
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于 m,并且小于等于 n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;最后一个数据后面也有空格输出。
如果给定的范围内不存在水仙花数,则输出 no。
每个测试实例的输出占一行。
输入样例:
100 120
300 380
输出样例:
no
370 371
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
此题相较于平时练习所做的水仙花相比,难度大大降低,
很多同学未得分原因原因在于把题目复杂化了
此题已要求输入值为三位数,那么他们的指数也确定了,
逻辑较练习的水仙花题目简单许多,在考试过程中,思维固化是失分原因,
要注意新题与旧题的区别。
#include<stdio.h>
int main()
{
int m,n,i,j;
while(scanf("%d %d",&m,&n)!=EOF)
{
int num=0;
for(i=m;i<=n;i++)
{
int sum=0;
int t=i;
int y,z;
for(;t>0;t=t/10)
{
j=t%10;
for(z=1,y=1;y<=3;y++)
z=z*j;
sum=sum+z;
}
if(sum==i)
{
printf("%d ",sum);
num++;
}
}
if(num!=0)printf("\n");
if(num==0) printf("no\n");
num=0;
}
return 0;
}
7-8 sdut-C语言实验-哥德巴赫猜想
分数 15
作者 马新娟
单位 山东理工大学
自然科学的皇后是数学,数学的皇冠是数论;哥德巴赫猜想,则是皇冠上的明珠。
一七四二年,德国数学家哥德巴赫发现,每一个大偶数都可以写成两个素数的和,有些偶数可以分解成多对素数的和。例如:10=3+7,10=5+5,即10可以分解为2对不同素数的和,但他和欧拉有生之年都不能够证明它。从此,这成了一道难题,吸引了成千上万数学家的注意。两百多年来,多少数学家企图给这个猜想作出证明,都没有成功。
我国著名数学家陈景润先生毕生投身到数学研究中,为中国乃至世界数学的研究做出了杰出的贡献,尤其对哥德巴赫猜想的证明做了有效的推动。
下面让我们编程来测试一下哥德巴赫猜想吧。输入一个大于6的正整数n,编程统计偶数n可以分解为多少对不同的素数之和。
输入格式:
输入一个正整数n(6 <= n <= 32767)。
输出格式:
输出n可以分解的素数对数。
输入样例:
10
输出样例:
在这里给出相应的输出。例如:文章来源:https://www.toymoban.com/news/detail-755372.html
2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB文章来源地址https://www.toymoban.com/news/detail-755372.html
此题题目很长,但实则纸老虎,前面的文字都是在铺垫背景,实际题目不难,但要注意的是,
此题如果逻辑复杂,会导致第四和第五测试点运行超时,这是很多同学得部分正确的原因,
很多同学在定义for()时,会让i=1;i<=n;
其实,i在达到n/2时,再往后就不会有素数了,
因此让i<=n/2会降低运行超时的可能。
同时在定义for时,尽量让i=0;i<n;
#include<stdio.h>
int main()
{
int j,i,n,a,b,t,m,u=0;
scanf("%d",&n);
for(i=1;i<=n/2;i++)
{
a=0;
b=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
if(j==i)
{
t=n-i;
for(m=1;m<=t;m++)
{
if(t%m==0)
{
b++;
}
}
if(b==2)
{
u++;
}
}
}
printf("%d",u);
return 0;
}```
到了这里,关于山东理工大学单元测试2重现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!