这是我大一C语言课OJ的练习题,这节为1~34道.记录一下,无关难易。
1、打印菜单
题目描述
本题要求编写程序,在屏幕上打印5行菜单。
输入
输入一个整数
提示:该整数与题目无关,为了保证系统稳定性需要有输入语句的代码
输出
按照下列格式打印菜单,每行显示一句。注意除了每行的换行不能有任何多余字符。
[1] Select crisps
[2] Select popcorn
[3] Select chocolate
[4] Select cola
[0] Exit
输入样例1 <-复制 1
输出样例1[1] Select crisps
[2] Select popcorn
[3] Select chocolate
[4] Select cola
[0] Exit
代码:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("[1] Select crisps\n");
printf("[2] Select popcorn\n");
printf("[3] Select chocolate\n");
printf("[4] Select cola\n");
printf("[0] Exit");
return 0;
}
2、计算物体自由下落的距离
题目描述
一个物体从100米高空自由落下。编写程序,求它在某一时刻距离地面的高度。设重力加速度为9.8米/秒2
自由落体公式:初速度Vo=0,末速度V=gt,下落高度h=gt²/2。
输入
输入一个整数,代表物体落下的时间。(单位为秒)
输出
按照下列格式输出,请注意,距离地面高度为0的情况。
height = 距离地面高度值
结果保留2位小数。
输入样例1 2
输出样例1 height = 55.90
代码:
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
float height;
float g=9.8;
height=100-(g*t*t)/2;
if(height<0){
printf("height = 0.00");
}
else
printf("height = %.2f",height);
return 0;
}
3、计算平均分
题目描述
输入某位学生的数学、英语和计算机课程的成绩,求该生3门课程的平均成绩(结果按整型输出)。
输入
输入三个整数,分别代表数学、英语和计算机课程的成绩
输出
按照下列格式输出结果:
average = 计算所得的平均成绩
输入样例1 <-复制 87 72 93
输出样例1 average = 84
代码:
#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=(a+b+c)/3;
printf("average = %d\n",d);
}
4、将x的平方赋值给y
题目描述
输入x的值,计算x的平方并赋值给y,分别以"y = x ∗ x“和”x ∗ x = y“的形式输出x和y的值。
输入3
输入一个整数,代表x的值。
输出
按照下列格式输出
y = x * x x * x = y
输入样例1 <-复制 3
输出样例1
9 = 3 * 3
3 * 3 = 9
代码:
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
int y=x*x;
printf("%d = %d * %d\n",y,x,x);
printf("%d * %d = %d\n",x,x,y);
return 0;
}
5、计算华氏温度
题目描述
本题要求编写程序,计算摄氏温度对应的华氏温度。计算公式:F=(9×C)/5+32,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整数。
注:小数点后面为0位
输入
请输入一个小数,代表摄氏温度。
输出
按照下列格式输出
celsius= 摄氏温度的整数值, fahr = 对应的华氏温度整数值
输入样例1 <-复制 26
输出样例1 celsius = 26, fahr = 79
代码:
#include <stdio.h>
int main(void)
{
float celsius,fahr;
scanf("%f",&celsius);
fahr=(9*celsius)/5+32;
printf("celsius = %.0f,",celsius);
fahr=(int)(fahr*1+0.5)/1;
printf(" fahr = %.0f",fahr);
return 0;
}
6、生成3的乘方表
题目描述
输入一个非负整数n,生成一张3的乘方表,输出30~3n的值。可调用幂函数计算3的乘方。
输入
输入在一行中给出一个非负整数n。
输出
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。
输入样例1 <-复制 3
输出样例1
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
int i,n;
double power;
scanf("%d",&n);
for(i=0;i<=n;i++){
power=pow(3,i);
printf("pow(3,%d) = %.0f\n",i,power);
}
return 0;
}
7、计算分段函数
题目描述
本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h
,并调用sqrt
函数求平方根,调用pow
函数求幂。
输入
输入在一行中给出实数x。
输出
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。
输入样例1 <-复制 10
输出样例1 f(10.00) = 3.16
代码
#include<stdio.h>
#include<math.h>
int main()
{
float z,x;
scanf("%f",&x);
if(x>=0){
z=sqrt(x);
printf("f(%.2f) = %.2f\n",x,z);
}
else{
z=(x+1)*(x+1)+x*2+1/x;
printf("f(%.2f) = %.2f\n",x,z);
}
return 0;
}
8、整数算术运算
题目描述
本题要求编写程序,计算并输出2个正整数的和、差、积、商。题目保证输入和输出全部在整型范围内。
输入
输入在一行中给出2个正整数A和B。
输出
在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。
输入样例1 <-复制 5 3
输出样例1
5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
代码:
#include<stdio.h>
#include<math.h>
int main(){
int x,y;
scanf("%d%d",&x,&y);
printf("%d + %d = %d\n",x,y,x+y);
printf("%d - %d = %d\n",x,y,x-y);
printf("%d * %d = %d\n",x,y,x*y);
printf("%d / %d = %d\n",x,y,x/y);
return 0;
}
9、阶梯电价
题目描述
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时;超过100千瓦时的,超出部分的用电量,电价较50~100区间电价的基础上上调0.03元/千瓦时。请编写程序计算电费。
输入
在一行中输入一个整数,表示某用户的月用电量(单位:千瓦时)。
输出
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value."。
输入样例1 <-复制 10
输出样例1 cost = 5.30
#include<stdio.h>
int main()
{
float x,cost;
scanf("%f",&x);
if(x<0)
printf("Invalid Value!");
else if (x>50){
cost=50*0.53+(x-50)*0.58;
printf("cost = %.2f\n",cost);
}
else if(0<=x<=50){
cost = x*0.53;
printf ("cost = %.2f\n",cost);
}
return 0;
}
10、输出华氏-摄氏温度转换表
题目描述
输入2个正整数lower
和upper
(lower
≤upper
≤100),请输出一张取值范围为[lower
,upper
]、且每次增加2华氏度的华氏-摄氏温度转换表。
温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。
输入
在一行中输入2个整数,分别表示lower
和upper
的值,中间用空格分开。
输出
第一行输出:"fahr celsius"
接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。
若输入的范围不合法,则输出"Invalid."。
输入样例1 <-复制 32 35
输出样例1
fahr celsius
32 0.0
34 1.1
代码:
#include <stdio.h>
int main(void)
{
int fahr,lower,upper;
double celsius;
scanf("%d",&lower);
scanf("%d",&upper);
if (lower>upper||lower<0||upper<0||lower>100||upper>100){
printf("Invalid.\n");
}else{
printf("fahr celsius\n");
for(fahr = lower;fahr<=upper;fahr=fahr+2){
celsius=(5.0/9)*(fahr-32);
printf("%d %.1f\n",fahr,celsius);
}
}
return 0;
}
11、求交错序列前N项和
题目描述
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
输入
输入在一行中给出一个正整数N。
输出
在一行中输出部分和的值,结果保留三位小数。
输入样例1 <-复制 5
输出样例1 0.917
代码:
#include<stdio.h>
int main(void)
{
float a,b,flag,i,N,item,sum;
b=1;
sum=0;
flag=1;
a=1;
b=1;
scanf("%f",&N);
for(i=1;i<=N;i++,a=a+1,b=b+2,flag=-flag)
{
item=flag*a*1.0/b;
sum =sum+item;
}
printf("%.3f\n",sum);
return 0;
}
12、找出三位水仙花数
题目描述
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。
输出
顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。
如果M或者N不符合题目的要求,则输出Invalid Value.
。
输入样例1 <-复制 100 400
输出样例1
153
370
371
代码:
#include<stdio.h>
int main()
{
int M;
int i = M;
int N;
scanf("%d%d",&M,&N);
if(M>N||N<0||M>1000||M<0||N>1000){
printf("Invalid Value.");
}
else{
int a = 0, b = 0, c = 0, d = 0;
for (i = M; i <= N; i++)
{
a = i % 10;//求出个位数
b = (i / 10) % 10;//十位数
c = i / 100;//百位数
//判断其各位数字的立方是否确好等于该数本身
if (i == (a * a * a + b * b * b + c * c * c))
{
printf("%d\n", i);//是则输出
}
}
}
return 0;
}
13、计算符号函数的值
题目描述
对于任一整数n,符号函数的定义如下:
请编写程序计算该函数对任一输入整数的值。
输入
输入在一行中给出整数n。
输出
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。
输入样例1 <-复制 10
输出样例1sign(10) = 1
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
if(n<0){
printf("sign(%d) = -1",n);
}
else if(n>0){
printf("sign(%d) = 1",n);
}
else{
printf("sign(%d) = 0",n);
}
return 0;
}
14、统计学生成绩
题目描述
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例1 <-复制
7
77 54 92 73 60 65 69
输出样例1
1 0 2 3 1
#include<stdio.h>
int main()
{
int N,i,n,A=0,B=0,C=0,D=0,E=0;
scanf("%d\n",&N);
for(i=0;i<N;i++)
{
scanf("%d",&n);
if(n<60)E=E+1;
else if(60<=n&&n<70)D=D+1;
else if(70<=n&&n<80)C=C+1;
else if(80<=n&&n<90)B=B+1;
else if(90<=n&&n<=100)A=A+1;
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
15、比较大小
题目描述
本题要求将输入的任意3个整数从小到大输出。
输入
输入在一行中给出3个整数,其间以空格分隔。
输出
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例1 <-复制4 2 8
输出样例1《2->4->8
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b){
if(b>c)
printf("%d->%d->%d",c,b,a);
else if(c>a)
printf("%d->%d->%d",b,a,c);
}
else{
printf("%d->%d->%d",b,c,a);
}
if(b>a){
if(c>b)
printf("%d->%d->%d",a,b,c);
else if(a>c)
printf("%d->%d->%d",c,a,b);
}
else
printf("%d->%d->%d",a,c,b);
return 0;
}
16、三天打鱼两天晒网
题目描述
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
输入
输入在一行中给出一个不超过1000的正整数N。
输出
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例1 <-复制 103
输出样例1 Fishing in day 103
#include<stdio.h>
int main()
{
int N,M;
scanf("%d",&N);
M=N%5;
if(1<=M&&M<=3){
printf("Fishing in day %d",N);
}
else{
printf("Drying in day %d",N);}
return 0;
}
17、输出三角形面积和周长
题目描述
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
输入
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle
输入样例1 <-复制
5 5 3
输出样例1
area = 7.15; perimeter = 13.00
#include<stdio.h>
int main()
{
int a,b,c;
float s,n,area,perimeter;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c && b+c>a && a+c>b){
s=(a+b+c)*0.5;
n=s*(s-a)*(s-b)*(s-c);
area=sqrt(n);
perimeter=a+b+c;
printf("area = %.2f; ",area);
printf("perimeter = %.2f",perimeter);
}
else
printf("These sides do not correspond to a valid triangle");
return 0;
}
18、箱子匹配(选择)
题目描述
每个箱子都有长宽高,我们需要判断一个箱子能否放入另一个箱子中。
例如有箱子A的尺寸是 3 x 4 x 5,箱子B的尺寸 是 5 x 6 x 4,经过比较判断,可以知道箱子A能够放入箱子B中,我们就说箱子A匹配箱子B。
注意,当两个箱子尺寸相等,我们也认为它们匹配。
输入
第一行输入参数T,表示有T个测试实例
第二行输入第1组实例的箱子A的长、宽、高,输入数值为小于1000的自然数
第三行输入第1组实例的箱子B的长、宽、高,输入数值为小于1000的自然数
以此类推
输出
如果两个箱子匹配,输出yes,否则输出no。逐行输出每一组的箱子匹配结果。
输入样例1 <-复制
3
3 4 5
5 6 4
5 6 4
3 4 5
5 6 7
7 4 7
输出样例1
yes
yes
no
#include"stdio.h"
int main(){
int a,b,c,A,B,C,M,N,z;
scanf("%d",&z);
for (int i = 1; i <= z; i++) {
scanf("%d %d %d",&a,&b,&c);
if(a>b){M=a;a=b;b=M;}
if(a>c){M=a;a=c;c=M;}
if(b>c){M=b;b=c;c=M;}
scanf("%d %d %d",&A,&B,&C);
if(A>B){N=A;A=B;B=N;}
if(A>C){N=A;A=C;C=N;}
if(B>C){N=B;B=C;C=N;}
if((a>=A&& b>=B&& c>=C )||(a<A&& b<B && c<C)) printf("yes\n");
else printf("no\n");
}
}
19、输出闰年
输出21世纪(2001年至2100年)中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入-输入在一行中给出21世纪的某个截止年份。
输出-逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例12048
输出样例1
2004\n
2008\n
2012\n
2016\n
2020\n
2024\n
2028\n
2032\n
2036\n
2040\n
2044\n
2048
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
if(n<=2000||n>2100)
printf("Invalid year!");
else if(n>2000&&n<=2003)
printf("None");
else{
for(i=2001;i<=n;i=i+1){
if((i%4 == 0 && i%100 != 0) ||i%400 == 0)
printf("%d\n",i);
}
}
return 0;
}
20、统计字符
本题要求编写程序,输入N个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入-输入在第一行中给出正整数N,第二行输入N个字符,最后一个回车表示输入结束,不算在内。
输出-在一行内按照letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。
输入样例1
10
aZ &
09 Az
输出样例1
letter = 4, blank = 3, digit = 2, other = 1
#include<stdio.h>
int main(){
int i,N,letter,blank,digit,other;
letter=blank=digit=other=0;
char ch;
scanf("%d",&N);
getchar();
for(i=1;i<=N;i++){
ch=getchar();
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else if((ch==' ') || (ch=='\n'))
blank++;
else if(ch>='0'&& ch<='9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank, digit,other);
return 0;
}
20、奖金提成(switch语句)
企业发放的奖金根据利润提成,如下规则
利润≤10000元时,奖金可提成10%;
10000<利润≤20000时,低于10000元的部分按10%提成,高于10000元的部分,可提成7.5%;
20000<利润≤40000时,低于20000元部分仍按上述办法提成,(下同),高于20000元的部分按5%提成;
40000<利润≤60000元时,高于40000元的部分按3%提成;
60000<利润≤100000时,高于60000元的部分按1.5%提成;
利润>100000时,超过100000元的部分按1%提成。
要求:用switch实现。
输入-输入一个int型数据表示利润
输出-输出应得的奖金(注意奖金是整数,不是小数)
输入样例1
36000
输出样例1
2550
#include<stdio.h>
int main(){
int x,y,a;
scanf("%d",&x);
a=x/10000;
if(a>=0){
switch(a){
case 0:y=x*0.1;break;
case 1:y=1000+(x-10000)*0.075;break;
case 2:y=1000+750+(x-20000)*0.05;break;
case 3:y=1000+750+(x-20000)*0.05;break;
case 4:y=1000+750+1000+(x-40000)*0.03;break;
case 5:y=1000+750+1000+(x-40000)*0.03;break;
case 6:y=1000+750+1000+300+(x-60000)*0.015;break;
case 7:y=1000+750+1000+300+(x-60000)*0.015;break;
case 8:y=1000+750+1000+300+(x-60000)*0.015;break;
case 9:y=1000+750+1000+300+(x-60000)*0.015;break;
default:y=1000+750+1000+300+60+(x-100000)*0.01;break;
}
}
printf("%d\n",y);
return 0;
}
21、计算油费
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
输入-输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。
输出-在一行中输出应付款额,保留小数点后2位
输入样例1
40 97 m
输出样例1
301.34
#include<stdio.h>
int main()
{
int a,b;
float x;
char ch;
scanf("%d%d",&a,&b);
getchar();
if(b==90){
ch=getchar();
if(ch =='m'){
x=a*6.95*(1-0.05);
}
else if(ch =='e'){
x=a*6.95*(1-0.03);
}
printf("%.2f",x);
}
else if(b==93){
ch=getchar();
if(ch=='m'){
x=a*7.44*(1-0.05);
printf("%.2f",x);
}
else if(ch =='e'){
x=a*7.44*(1-0.03);
printf("%.2f",x);
}
}
else if(b==97){
ch=getchar();
if(ch =='m'){
x=a*7.93*(1-0.05);
printf("%.2f",x);
}
else if(ch =='e'){
x=a*7.93*(1-0.03);
printf("%.2f",x);
}
}
return 0;
}
22、还有多少天新年(分支结构)
输入一个日期,求该日期距离当年最后一天的天数。例如2016年12月10日,距离2016年底还有21天.
输入-输入某年某月某日
输出-输出距离最后一天还有多少天
输入样例1-2016 12 10
输出样例1-21
#include<stdio.h>
int main(){
int year,month,day,trotday=0;
scanf("%d%d%d",&year,&month,&day);
switch(month){
case 1:trotday+=31-day;break;
case 2:trotday+=28-day+((year % 4==0 && year % 100 !=0)||(year % 400 == 0));break;
case 3:trotday+=31-day;break;
case 4:trotday+=30-day;break;
case 5:trotday+=31-day;break;
case 6:trotday+=30-day;break;
case 7:trotday+=31-day;break;
case 8:trotday+=31-day;break;
case 9:trotday+=30-day;break;
case 10:trotday+=31-day;break;
case 11:trotday+=30-day;break;
case 12:trotday+=31-day;break;
default:trotday=0;
}
switch(month + 1){
case 2:trotday+=28+((year%4 == 0 && year%100 != 0)||(year % 400 == 0));
case 3:trotday+=31;
case 4:trotday+=30;
case 5:trotday+=31;
case 6:trotday+=30;
case 7:trotday+=31;
case 8:trotday+=31;
case 9:trotday+=30;
case 10:trotday+=31;
case 11:trotday+=30;
case 12:trotday+=31;
default:trotday+=0;
}
printf("%d\n",trotday);
}
23、求给定精度的简单交错序列部分和
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入-输入在一行中给出一个正实数eps。
输出-在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1 4E-2
输出样例1 sum = 0.854457
#include<stdio.h>
#include<math.h>
int main(){
int flag = 1;
double sum=0,eps,item;
int fm;
item=1.0;
scanf("%lf",&eps);
for(fm=1;;fm=fm+3){
item=flag*1.0/fm;
sum=sum+item;
flag=-flag;
if(1.0/fm<=eps)
break;
}
printf("sum = %.6f\n",sum);
return 0;
}
24、求奇数和
本题要求计算给定的一系列正整数中奇数的和。
输入-输入在一行中给出一系列正整数,其间以空格分隔。当读到负数时,表示输入结束,该数字不要处理。
输出-在一行中输出正整数序列中奇数的和。
输入样例1 8 7 4 3 70 5 6 101 -1
输出样例1 116
#include<stdio.h>
int main()
{
int x, s=0 ;
scanf("%d",&x) ;
while(x>0){
if(x%2==1)
s=s+x;
scanf("%d",&x) ;
}
printf("%d",s) ;
return 0 ;
}
25、求整数的位数及各位数字之和
对于给定的正整数N,求它的位数及其各位数字之和。
输入-输入在一行中给出一个不超过109的正整数N。
输出-在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例1 321
输出样例1 3 6
#include<stdio.h>
int main(){
int n,N,Sn;
n=0;
Sn=0;
scanf("%d",&N);
while(N!=0&&N<=pow(10,9)){
Sn=N%10+Sn;
n=n+1;
N=N/10;
}
printf("%d %d",n,Sn);
return 0;
}
26、判断用户输入的数字是否为回文数
从键盘输入任意正整数,判断该数是否是回文数。所谓回文数就是从左到右读这个数与从右到左读这个数是一样的。例如12321、1221都是回文数。
输入
测试案例的个数n
第一个测试值
第二个测试值
.......
第n个测试值
输出
各个测试值是否是回文数,是,就输出YES,不是,就输出NO
输入样例1
3
4554
123
121
输出样例1
YES
NO
YES
#include<stdio.h>
int main(){
int a,x,n,T;
int y=0;
scanf("%d",&T);
while(T--){
y = 0;
scanf("%d",&x);
a=x;
while(x>0){
y=y*10+x%10;
x=x/10;
printf("%d %d\n",x,y);
}
if(a==y)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
27、特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入--输入在一行中给出不超过9的正整数a和n。
输出--在一行中按照“s = 对应的和”的格式输出。
输入样例1 2 3
输出样例1 s = 246
#include<stdio.h>
int main(){
int a,n,i;
int s=0;
scanf("%d %d",&a,&n);
int x=a;
for(i=0;i<n;i=i+1){
s=s+a;
a=x+a*10;
}
printf("s = %d",s);
return 0;
}
28、输出三角形字符阵列
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入--输入在一行中给出一个正整数n(1≤n<7)。
输出--输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例1
4
输出样例1
A B C D
E F G
H I
J
代码实现:
#include<stdio.h>
int main(){
int n,x,y;
char ch='A';
scanf("%d",&n);
for(int x=n;x>0;x=x-1){
for(int y= 1;y<=x;y++){
printf("%c ",ch);
ch=ch+1;
}
printf("\n");
}
return 0;
}
29、猜数字游戏
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入-输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出-在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例1
58 6
70
50
56
58
输出样例1
Too big
Too small
Too small
Good Guess!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int mynumber,n,yournumber,time;
scanf("%d %d",&mynumber,&time);
scanf("%d",&yournumber);
for(n=1;yournumber>0&&n<=time;n++){
if(yournumber>mynumber)
printf("Too big\n");
else if(yournumber<mynumber)
printf("Too small\n");
else
break;
scanf("%d",&yournumber);
}
if(yournumber<0)
printf("Game Over\n");
else if(n==1)
printf("Bingo!\n");
else if(n<=3)
printf("Lucky You!\n");
else if(n>time)
printf("Game Over\n");
else
printf("Good Guess!\n");
return 0;
}
30、兔子繁衍问题
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入 输入在一行中给出一个不超过10000的正整数N。
输出 在一行中输出兔子总数达到N最少需要的月数。
输入样例1 30
输出样例1 9
#include<stdio.h>
int main(){
int N,mx,my,mz,mouth,i;
scanf("%d",&N);
if(N==0||N==1){
printf("%d",1);
return 0;}
else if(N==2){
printf("%d",3);
return 0;}
mx=1;
my=1;
for(i=3;;i++){
mz=mx+my;
if(mz>=N)
break;
mx=my;
my=mz;
}
printf("%d",i);
}
31、高空坠球
题目描述-皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
输入-输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。
输出-在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
输入样例1 33 5
输出样例1 94.9 1.0
#include<stdio.h>
#include<math.h>
int main(){
int h,n,a;
double sum,H;
scanf("%d %d",&h,&n);
if(h>=0&&n>=0){
a=n-1;
sum=2*h*(1-pow(0.5,a))+h;
H=h*pow(0.5,n);
printf("%.1f %.1f",sum,H);
}
return 0;
}
32、找完数
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入-输入在一行中给出2个正整数m和n,中间以空格分隔。
输出-当输入满足 1<m≤n≤10000:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
否则:输出”Invalid data.“。
输入样例1 2 30
输出样例1 6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
#include<stdio.h>
int main(){
int m,n,sum,i,j,t,s,x;
scanf("%d%d",&m,&n);
x=0;
for(i=m;i<=n;i++){
sum=0;
for(j=1;j<=0.5*i;j++){
t=i%j;
if (t==0)
sum=sum+j;
}
if (sum==i){
printf("%d = 1",i);
for(s=2;s<j;s++){
if(i%s==0){
printf(" + %d",s);
}
}
printf("\n");
x++;
}
}
if(x==0){
printf("None");
}
return 0;
}
33、输出每个月的天数
本题要求实现一个简单函数,能计算给定的年份和月份的天数。使得可以利用该函数,输出给定年份中每个月的天数。其中1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,2月平年有28天,闰年有29天。
要求定义并调用函数month_days(year,month),该函数返回year
年month
月的天数。
输入 年year
输出 该年1~12月每个月的天数
输入样例1 2000
输出样例1 31 29 31 30 31 30 31 31 30 31 30 31
#include<stdio.h>
int main(){
int year,month;
scanf("%d",&year);
if(year%400==0 || (year%4==0&&year%100!=0))
printf("31 29 31 30 31 30 31 31 30 31 30 31");
else
printf("31 28 31 30 31 30 31 31 30 31 30 31");
return 0;
}
34、最大公约数和最小公倍数
输入两个正整数,求它们的最大公约数和最小公倍数
输入 两个正整数
输出 最大公约数 最小公倍数
输入样例1 6 15
输出样例1 3 30
#include<stdio.h>
int main()
{
int m,n,i,j,maxj=0;
scanf("%d%d",&m,&n);
for(i=m;;i++)
{
if(i%m==0&&i%n==0)
break;
}
for(j=1;j<=m;j++)
{
if(m%j==0&&n%j==0)
{
if(maxj<j)
maxj=j;
}
}
printf("%d %d",maxj,i);
return 0;
}