课程中C的练习题集合第一集(1~34)

     这是我大一C语言课OJ的练习题,这节为1~34道.记录一下,无关难易。

1、打印菜单

题目描述

本题要求编写程序,在屏幕上打印5行菜单。

输入

输入一个整数

提示:该整数与题目无关,为了保证系统稳定性需要有输入语句的代码

输出

按照下列格式打印菜单,每行显示一句。注意除了每行的换行不能有任何多余字符。

[1] Select crisps

[2] Select popcorn

[3] Select chocolate

[4] Select cola

[0] Exit

输入样例<-复制 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位小数。

输入样例 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 = 计算所得的平均成绩

输入样例<-复制 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  xx  x = y的形式输出xy的值。

输入3

输入一个整数,代表x的值。

输出

按照下列格式输出

y = x * x x * x = y

输入样例<-复制 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 = 对应的华氏温度整数值

输入样例<-复制 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) = 3i次幂的值。题目保证输出数据不超过长整型整数的范围。

输入样例<-复制 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)的值:

e3bfe10cd4f9c222596368f94d8e3750.png

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入

输入在一行中给出实数x

输出

在一行中按“f(x) = result”的格式输出,其中xresult都保留两位小数。

输入样例<-复制 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个正整数AB

输出

4行中按照格式“A 运算符 B = 结果顺序输出和、差、积、商。

输入样例<-复制 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."

输入样例<-复制 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个正整数lowerupperlowerupper≤100),请输出一张取值范围为[lowerupper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入

在一行中输入2个整数,分别表示lowerupper的值,中间用空格分开。

输出

第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."

 

输入样例<-复制 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

输出

在一行中输出部分和的值,结果保留三位小数。

输入样例<-复制 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、找出三位水仙花数

题目描述

本题要求编写程序,输出给定正整数MN区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入

输入在一行中给出两个正整数MN100≤M≤N≤999)。

输出

顺序输出MN区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.

输入样例<-复制 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,符号函数的定义如下:3c55718a5c7655ace513ae2f7bfa4a4c.png

请编写程序计算该函数对任一输入整数的值。

输入

输入在一行中给出整数n

输出

在一行中按照格式“sign(n) = 函数值输出该整数n对应的函数值。

输入样例<-复制 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且大于等于80B
  • 小于80且大于等于70C
  • 小于70且大于等于60D
  • 小于60E

输入

输入在第一行中给出一个正整数N≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出

在一行中输出ABCDE对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

输入样例<-复制

 

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个整数从小到大输出,其间以“->”相连。

输入样例<-复制4 2 8

输出样例12->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”

输入样例<-复制 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、输出三角形面积和周长

题目描述

本题要求编写程序,根据输入的三角形的三条边abc,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(sa)(sb)(sc)​​​,其中s=(a+b+c)/2

输入

输入为3个正整数,分别代表三角形的3条边abc

输出

如果输入的边能构成一个三角形,则在一行内,按照

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。逐行输出每一组的箱子匹配结果。

输入样例<-复制

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 = 其他字符个数的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例

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型数据表示利润

输出-输出应得的奖金(注意奖金是整数,不是小数)

输入样例

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,汽油品种b909397)和服务类型cm - 自助,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、还有多少天新年(分支结构)

输入一个日期,求该日期距离当年最后一天的天数。例如20161210日,距离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,求它的位数及其各位数字之和。

输入-输入在一行中给出一个不超过10​9​的正整数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、判断用户输入的数字是否为回文数

从键盘输入任意正整数,判断该数是否是回文数。所谓回文数就是从左到右读这个数与从右到左读这个数是一样的。例如123211221都是回文数。

输入

测试案例的个数n

第一个测试值

第二个测试值

.......

n个测试值

输出

各个测试值是否是回文数,是,就输出YES,不是,就输出NO

输入样例

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的正整数an,要求编写程序求a+aa+aaa+++aaana)之和。

输入--输入在一行中给出不超过9的正整数an

输出--在一行中按照“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开始构成的三角形字符阵列。

输入--输入在一行中给出一个正整数n1≤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”则结束。

输入样例  

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最少需要的月数。

输入样例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,其中1236的因子。本题要求编写程序,找出任意两正整数mn之间的所有完数。

输入-输入在一行中给出2个正整数mn,中间以空格分隔。

输出-当输入满足 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、输出每个月的天数

本题要求实现一个简单函数,能计算给定的年份和月份的天数。使得可以利用该函数,输出给定年份中每个月的天数。其中135781012月有31天,46911月有30天,2月平年有28天,闰年有29天。

要求定义并调用函数month_days(yearmonth),该函数返回yearmonth月的天数。

输入    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;
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值