C语言练习题山东科技大学吐血整理.docx
《C语言练习题山东科技大学吐血整理.docx》由会员分享,可在线阅读,更多相关《C语言练习题山东科技大学吐血整理.docx(51页珍藏版)》请在冰豆网上搜索。
![C语言练习题山东科技大学吐血整理.docx](https://file1.bdocx.com/fileroot1/2023-4/2/12fbecf6-c8d5-4ac3-9ffd-bca3fe367511/12fbecf6-c8d5-4ac3-9ffd-bca3fe3675111.gif)
C语言练习题山东科技大学吐血整理
数学11-1C语言平时训练题
1、算术基本运算
Description
计算两整数x和y(0Input
输入只有一行。
Output
输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方。
SampleInput
x=11,y=3
SampleOutput
x+y:
14
x-y:
8
x*y:
33
x/yquotient:
3,remainder:
2
x^2:
121
y^3:
27
Answer
#include
intmain()
{
intx,y,a,b,c,d,e,f,g;
0scanf("x=%d,y=%d",&x,&y);
a=x+y;
b=x-y;
c=x*y;
d=x/y;
e=x%y;
f=x*x;
g=y*y*y;
printf("x+y:
%d\n",a);
printf("x-y:
%d\n",b);
printf("x*y:
%d\n",c);
printf("x/yquotient:
%d,remainder:
%d\n",d,e);
printf("x^2:
%d\n",f);
printf("y^3:
%d\n",g);
return0;
}
2、求圆的面积和周长
Description
从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。
Input
输入一个浮点型数据,有效数字不会超过十进制的6位。
Output
输出为两行。
第一行为圆的面积,第二行为圆的周长,格式见sample。
SampleInput
3
SampleOutput
Area:
28.260000
Perimeter:
18.840000
Answer
#include
#definePI3.14
intmain()
{
floatr,s,c;
scanf("%f",&r);
s=PI*r*r;
c=2*PI*r;
printf("Area:
%f\n",s);
printf("Perimeter:
%f\n",c);
return0;
}
3、平均值
Description
求3个数的平均值。
Input
输入只有一行,为3个较小的整数。
Output
输出为这3个整数的平均值,保留3位小数。
SampleInput
123
SampleOutput
2.000
Answer
#include
intmain()
{
inta,b,c;
floatd;
scanf("%d%d%d",&a,&b,&c);
d=(a+b+c)/3.0;
printf("%.3f\n",d);
return0;
}
4、货币兑换
Description
给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。
要计算的外币有三种:
美元、欧元、日元。
Input
输入有三行。
第一行依次为美元、欧元、日元外币汇率,用空格分开。
汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。
汇率浮动范围为(0,10000)。
第二行为外币金额x,第三行为人民币金额y。
x,y均为整数,且0Output
输出为两行。
第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。
第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。
所有金额精确到小数点后两位。
SampleInput
668.5200908.06857.9852
1500
1500
SampleOutput
10027.8013621.03119.78
224.38165.1918784.75
Answer
#include
intmain()
{
doublex,y,a,b,c,d,e,f,g,h,i;
scanf("%lf%lf%lf",&a,&b,&c);
scanf("%lf",&x);
scanf("%lf",&y);
d=x/100*a;
e=x/100*b;
f=x/100*c;
g=y/a*100;
h=y/b*100;
i=y/c*100;
printf("%.2lf%.2lf%.2lf\n",d,e,f);
printf("%.2lf%.2lf%.2lf\n",g,h,i);
return0;
}
5、求字符的值
Description
从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。
Input
输入为3个字符。
Output
输出为3行。
每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。
每个输出的值占3个字符,不足3个字符前面补0。
SampleInput
0A
SampleOutput
048060030
032040020
065101041
Answer
#include
intmain()
{
chara,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%.3d%.3o%.3x\n",a,a,a);
printf("%.3d%.3o%.3x\n",b,b,b);
printf("%.3d%.3o%.3x\n",c,c,c);
return0;
}
6、奇数还是偶数?
Description
输入一个整数,判读它是奇数还是偶数。
Input
输入只有一行,为一个100以内的正整数。
Output
输出为一行。
若输入为偶数则输出“even”,奇数输出“odd”。
SampleInput
30
SampleOutput
even
Answer
#include
intmain()
{
inta;
scanf("%d",&a);
if(a>=0&&a<=100)
{
if(a%2==0)
printf("even\n");
else
printf("odd\n");
}
else
printf("error");
return0;
}
7、绝对值
Description
求整型数据和浮点型数据的绝对值。
Input
输入两个数,第一个是整数,第二个是浮点数。
Output
输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。
SampleInput
-1
1
SampleOutput
1
1
Answer
#include
#include
#include
intmain()
{
inta,c;
doubleb,d;
scanf("%d\n%lf",&a,&b);
c=abs(a);
d=fabs(b);
printf("%d\n%g",c,d);
return0;
}
8、简单的打折计算
Description
商店规定:
消费满n元,可以打八八折。
设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:
元),精确到分。
Input
输入只有一行,三个整数m、n和x,且0Output
输出金额,精确到分。
SampleInput
953004
SampleOutput
334.40
Answer
#include
intmain()
{
intm,x,n,a;
floatb;
scanf("%d%d%d",&m,&n,&x);
0xma=m*x;
if(a>n)
b=0.88*a;
else
b=a;
printf("%.2f\n",b);
return0;
}
9、判断闰年
Description
输入一个正整数的年份,判断是否为闰年。
Input
输入只有一行,为一个10000以内的正整数。
Output
输出为一行。
若输入为闰年偶数则输出“Yes”,否则输出“No”。
SampleInput
2010
SampleOutput
No
答案
#include
intmain()
{
inta;
scanf("%d",&a);
if(a>0&&a<10000)
{
if(a%4==0&&a%100!
=0)
printf("Yes\n");
elseif(a%400==0)
printf("Yes\n");
else
printf("No\n");
}
else
printf("error");
return0;
}
10、水仙花数
Description
如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。
如:
13+53+33=153。
Input
一个整数x,100<=x<=999。
Output
x是水仙花数,则输出“YES”,否则为“NO”。
SampleInput
153
SampleOutput
YES
Answer
#include
intmain()
{
inta,b,c,d,e;
scanf("%d",&a);
b=a/100;
c=(a-b*100)/10;
d=(a-b*100-c*10);
e=b*b*b+c*c*c+d*d*d;
if(a==e)
printf("YES\n");
else
printf("NO\n");
return0;
}
11、三个数比较大小
Description
从键盘上输入0~100之间的三个数,按从小到大的顺序输出。
Input
输入只有一行,为三个整数。
Output
按从小到大输出这三个数。
SampleInput
151020
SampleOutput
101520
Answer
#include
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
{
if(b>=c)
printf("%d%d%d\n",c,b,a);
elseif(a>c)
printf("%d%d%d\n",b,c,a);
else
printf("%d%d%d\n",b,a,c);
}
else
{
if(a>=c)
printf("%d%d%d\n",c,a,b);
elseif(b>=c)
printf("%d%d%d\n",a,c,b);
else
printf("%d%d%d\n",a,b,c);
}
return0;
}
12、输出整数的最低两位
Description
把一个整数的最低两位打印出来,不输出整数的符号。
Input
输入为一个整数n,不会超出int类型的数据范围。
Output
输出n的最低两位数字。
但是,输入的数字本身不足两位时,不应当补0。
如,输入为“1”,则输出为“1”。
SampleInput
-102
SampleOutput
02
Answer
#include
intmain()
{
inta,b,c;
scanf("%d",&a);
if(a>=100)
{
b=a-a/100*100;
printf("%.2d\n",b);
}
elseif(a>=0)
{
printf("%d\n",a);
}
elseif(a>=-99)
{
printf("%d\n",-a);
}
else
{
c=-a;
b=c-c/100*100;
printf("%.2d\n",b);
}
return0;
}
13、判断奇偶数(填空)
Description
编写一个程序,判断读取的正整数的奇偶性,部分程序已经给出,请填上空白语句,并提交填充后的完整程序。
程序(含答案):
#include
intmain()
{
intnum;
scanf("%d",&num);
if(num%2==0)
printf("%disanevennumber.",num);//num是一个偶数
else
printf("%disanoddnumber.",num);//num是一个奇数
return0;
}
14、求分段函数的值(填空)
Description
设有分段函数如下:
给出N>0个x的值,求对应的y值并输出。
部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。
程序(含答案):
#include
#include
intmain()
{
doublex,y;
inti,N;
scanf("%d",&N);
for(i=0;i{
scanf("%lf",&x);
if(x<0)
y=-x;
elseif(x<1)
y=sin(2*x);
elseif(x<5)
y=sqrt(x*x*x+x);
else
y=2*x+10;
if(i==0)
printf("case1:
y=%.6g.",y);
else
printf("\ncase%d:
y=%.6g.",i+1,y);
}
return0;
}
15、输出是m的倍数或n的倍数、但不是m和n的公倍数的数
Description
输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,nInput
输入三个整数,依次为k、m、n。
Output
从小到大输出符合题意的所有整数,两数之间用一个空格分开。
SampleInput
1523
SampleOutput
23489101415
Answer
#include
intmain()
{
intk,m,n,a,i=1;
scanf("%d%d%d",&k,&m,&n);
if(ma=m;
else
a=n;
printf("%d",a);
for(i=a+1;i<=k;i++)
{
if((i%m==0&&i%n!
=0)||(i%n==0&&i%m!
=0))
printf("%d",i);
}
return0;
}
16、A+BProblemT
Description
计算a+b,0<=a,b<1000。
Input
输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
Output
每行输出一个a+b的值,顺序与输入对应。
SampleInput
12
1020
SampleOutput
3
30
Answer
#include
intmain()
{
inta,b;
while(scanf("%d%d",&a,&b)!
=EOF)
{
printf("%d\n",a+b);
}
return0;
}
17、A+BProblem(II):
Input/OutputPratice
Description
计算a+b,0<=a,b<1000。
Input
输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。
Output
每行输出一个a+b的和,顺序与输入对应。
SampleInput
2
12
1020
SampleOutput
3
30
Answer
#include
intmain()
{
inta[1000],b[1000],N,i;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=N;i++)
printf("%d\n",a[i]+b[i]);
return0;
}
18、成绩的等级
Description
把百分制的考试成绩转换成五级制的成绩:
90~100:
Excellent
80~89:
Good
70~79:
Average
60~69:
Pass
0~59:
Failing
不在0~100之间的输入是非法数据,输出“Error”。
Input
输入多行,每行一个整数。
Output
输入所对应的成绩等级。
SampleInput
-1
81
92
35
68
72
100
SampleOutput
Error
Good
Excellent
Failing
Pass
Average
Excellent
Answer
#include
intmain()
{
intscore;
while(scanf("%d",&score)!
=EOF)
{
if(score<0||score>100)
printf("Error\n");
else
{
switch(score/10)
{
case0:
case1:
case2:
case3:
case4:
case5:
printf("Failing\n");break;
case6:
printf("Pass\n");break;
case7:
printf("Average\n");break;
case8:
printf("Good\n");break;
case9:
case10:
printf("Excellent\n");break;
}
}
}
return0;
}
19、n个数的最大值和最小值
Description
找出n个数中最大的数和最小的数,并将它们的值输出出来。
Input
输入为n+1个整数,都在int类型范围内。
这些数可能用若干空格或者换行符分隔开。
输入的第1个数为n,表示后续有n个数输入。
从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。
Output
输出为两行,格式见sample。
SampleInput
301-1
SampleOutput
Themaximumnumberis1.
Theminimumnumberis-1.
Answer
#include
intmain()
{
intn,i,max,min;
scanf("%d",&n);
inta[n];
for(i=0;iscanf("%d",&a[i]);
max=a[0];
min=a[0];
for(i=0;i{
if(maxmax=a[i];
if(min>a[i])
min=a[i];
}
printf("Themaximumnumberis%d.\n",max);
printf("Theminimumnumberis%d.",min);
return0;
}
20、字符加密
Description
Tom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。
他们使用的一种最简单的暗语是:
将要说的每句话里面的英文字母变成这个字母之后的某个字母。
现在要求你写一个程序,将一个字母变成它之后的某个字母。
Input
输入有2个:
一个大写字母c和一个正整数d(0其中c是要进行变换的字母,d表示要将c变成其后面第d个字母。
Output
输出字母c之后的第d个字母。
大小写与c一致。
如果c之后的某个字母已经超出'Z',则再从字母'A'开始计数。
如:
c='A',d=3,则输出应为:
D。
若:
c='Y',d=3,则输出应为:
B。
SampleInput
A3
SampleOutput
D
Answer
#include
voidmain()
{
intd,x;
charc;
scanf("%c",&c);
scanf("%d",&d);
x=c+d;
c=c+d;
x<=90?
printf("%c",c):
printf("%c",x-26);
}
21、求100以内的素数
Description
素数是只能被1和自身整除的正整数,根据数学定义1不是素数。
素数也叫质数。
Input
输入为两个整数m和n,满足0<=m<=n<=100。
Output
从大到小输出m~n之间的所有素数,一个素数一行。
如果m~n之间没有素数,则不输出任何数。
输出的所有数在两行“=====”之间。
SampleInput
212
SampleOutput
=====
11
7
5
3
2
=====
Answer
#include
#include
intmain()
{
intm,n,i,j,k,t;
scanf("%d%d",&m,&n);//212
printf("=====\n");
for(i=n;i>=m;i--)
{t=0;
for(j=2;j<=sqrt(i);j++)//12
if(i%j==0)
t=1;
if(t==0&&i>1)
printf("%d\n",i);
}
printf("=====");
retu