C语言程序设计基础练习题三

练习题 专栏收录该内容
8 篇文章 0 订阅
  • 1-1 输入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
输入样例2:
40 30
输出样例2:
Invalid.

#include <stdio.h>
int main()
{
	int lower,upper,fahr;
	double celsius;
	scanf("%d %d",&lower,&upper);//输入最小值和最大值

	if(lower>0&&lower<=upper&&upper<=100)//取值范围 
	{
		printf("fahr celsius\n");
		for(fahr=lower;fahr<=upper;fahr+=2) 
		{
			celsius = 5*(fahr-32)*1.0/9;
			printf("%d%6.1lf\n",fahr,celsius);
		}		
	}
	else
	{
		printf("Invalid.");
	}
		
	return 0;
}
  • 1-2 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
6
输出样例:
sum = 2.450000

#include <stdio.h>
int main()
{
	int N,i;
	double S = 0;
	scanf("%d",&N);
	
	for(i=1;i<=N;++i)
	{
		S = S+1.0/i;
	}
	
	printf("sum = %.6lf",S);
	return 0;
}
  • 1-3 输入一个非负整数n,生成一张3的乘方表,输出3​0​​~3​n​​的值。可调用幂函数计算3的乘方。

输入格式:
输入在一行中给出一个非负整数n。
输出格式:
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。
输入样例:
3
输出样例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27

#include <stdio.h>
#include <math.h>
int main()
{
	int n,i,result;
	scanf("%d",&n);
	
	for(i=0;i<=n;++i)
	{	
		result = pow(3,i);
		printf("pow(3,%d) = %d\n",i,result);
	}

	return 0;
}
  • 1-4 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。

输入格式:
输入在一行中给出一个不超过12的正整数N。
输出格式:
在一行中输出整数结果。
输入样例:
5
输出样例:
153

#include <stdio.h>
int main()
{
	int N,i,j;
	int sum = 0;//给sum赋初始值'0' 
	int pro = 1;//给pro赋初始值'1' 
	scanf("%d",&N);
	
	for(i=1;i<=N;++i)
	{
		for(j=i;j>=1;--j)
		{
			pro = pro*j;
		} 		
		sum = sum + pro;
		pro = 1;
		
	}
	printf("%d",sum);
	return 0;
}
  • 1-5 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

    大于等于90分为A;
    小于90且大于等于80为B;
    小于80且大于等于70为C;
    小于70且大于等于60为D;
    小于60为E。

输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1

#include<stdio.h>
int main()
{
	int N, score,i;
	int A,B,C,D,E;
	A = B = C = D = E = 0;
	scanf("%d", &N);
	for(i=1; i<=N; i++)
	{
		scanf("%d", &score);
		if(score>=90)
			A++;
		else if(score>=80)
			B++;
		else if(score>=70)
			C++;
		else if(score>=60)
			D++;
		else
			E++;
	}
	printf("%d %d %d %d %d",A,B,C,D,E);
	
	return 0;	
}
  • 1-6 本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
输入样例:
4 -2 -123 100 0
输出样例:
min = -123

#include<stdio.h>
int main() 
{
	int n,i,x,min;
	scanf("%d",&n);
	scanf("%d",&x);
	min=x;
	
	for(i=1; i<n; i++) 
	{
		scanf("%d",&x);
		if(min>x)
			min=x;
	}
	
	printf("min = %d",min);
	
	return 0;
}
  • 1-7 本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143

#include<stdio.h>
int main()
{
    int M,N,i,j;
    int count=0,sum=0;
    scanf("%d %d",&M,&N);
    
    if(M==1)
        M++;
    for(i=M;i<=N;i++)
    {
        j=2;
        while(i%j!=0)
        {
            j++;
        }
        if(j==i)
        {
            count++;
            sum+=i;
        }
    }
    printf("%d %d",count,sum);
    
    return 0;
}

-1-8 一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:
输入在一行中给出正整数N(1<N≤10)。
输出格式:
在一行中输出第一天共摘了多少个桃子。
输入样例:
3
输出样例:
10

#include<stdio.h>
int main()
{
    int N,i,count=1; 
    scanf("%d",&N);
	
	for(i=1;i<N;++i) 
	{
		count = (count+1)*2; 

	}
    printf("%d",count);
    return 0;
}
  • 1-9 给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。
输入样例:
-3 8
输出样例:
    -3 -2 -1 0 1
    2 3 4 5 6
    7 8
Sum = 30

#include<stdio.h>
int main()
{
    int A,B,i,sum,count; 
    sum=count=0;
    scanf("%d %d",&A,&B);
	
	if(A>=-100 && A<=B && B<=100)
	{
		for(i=A; i<=B; ++i)
		{
			printf("%5d",i);
			sum += i;
			++count;
			if(count%5==0)
			{
				printf("\n");
			}		
		}
		if(count%5!=0) 
		{
			printf("\n");
			
		}
		printf("Sum = %d",sum);
	}
	   
    return 0;
}
  • 1-10 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
    下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
    输入格式:

输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96

#include<stdio.h>
int main()
{
    int N,i;
    char sex;
    double high;  
    scanf("%d",&N);
    
    for(i=0;i<N;++i)
    {
    	getchar();
    	scanf("%c %lf",&sex,&high);
		   	
		if(sex=='M')
		{
			printf("%.2lf\n",high/1.09);
		}
		else if(sex=='F')
		{
			printf("%.2lf\n",high*1.09);
		}
		
	}

    return 0;
}
  • 1-11 对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:
输入在一行中给出一个不超过10​9​​的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321
输出样例:
3 6

#include<stdio.h>
int main()
{
    int N,count,sum;
    count=sum=0;
    scanf("%d",&N);
    
    while(N!=0)
    {
    	count = count+1;
    	sum = sum + N%10;
    	N = N/10;
    	
	}
	printf("%d %d",count,sum);

    return 0;
}
  • 1-12 在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:

    按从1至5报数,记下最末一个士兵报的数为1;
    再按从1至6报数,记下最末一个士兵报的数为5;
    再按从1至7报数,记下最末一个士兵报的数为4;
    最后按从1至11报数,最末一个士兵报的数为10;

    请编写程序计算韩信至少有多少兵。

输入格式:
本题无输入
输出格式:
输出韩信至少拥有的士兵人数。

#include<stdio.h>
int main()
{
    int i;
    
    for(i=1;;++i)
    {
    	if(i%5!=1)
    	{
    		continue;
		}
		if(i%6!=5)
    	{
    		continue;
		}
		if(i%7!=4)
    	{
    		continue;
		}
		if(i%11!=10)
    	{
    		continue;
		}
		break;
	}
	printf("%d",i);
    return 0;
}
  • 1-13 一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
    这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:
12 3 1
输出样例:
11

#include<stdio.h>
int main()
{
    int N,U,D,time,length;
    time=length=0;
    scanf("%d %d %d",&N,&U,&D);
    
    
    while(length<N)
    {
    	time++;
    	length = length+U;
    	if(length>=N)
    	{
    		break; 
		}
    	length = length-D;
    	time++;
	}
    
	printf("%d",time);

    return 0;
}

	
  • 1-14 1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。

输入格式:
输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。
输出格式:
显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。
注意:如果全部方案不到n种,就顺序输出全部可能的方案。
输入样例:
5
输出样例:
1 46 53
2 42 56
3 38 59
4 34 62
5 30 65

#include<stdio.h>
int main()
{
    int n,a,b,c,count=0;
    scanf("%d",&n);
    
    for(a=1;a<30;++a)  
	{
		b = 50-4*a;  //2分的个数 
		c = 150-a*5-2*b;  //1分的个数 
		if(a+b+c==100&&b>0&&c>0)
		{			
			count++;
			printf("%d %d %d\n",a,b,c);
			if(count>=n) 
			{
				
				break;
			}
		}		
	}
    return 0;
}
  • 1-15 给定一个整数m(50<m<20000),找出小于m的最大的10个素数。

输入格式:
输入在一行中给出一个正整数m(50<m<20000)。
输出格式:
在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。
输入样例:
229
输出样例:
  227 223 211 199 197 193 191 181 179 173

#include<stdio.h>
int main()
{
    int m,i,j,count=0;
    scanf("%d",&m);
    if(m>50 && m<20000)
    {
    	for(i=m-1;;--i)
	    {
	    	j=2;
	    	while(i%j!=0) 
	   		{
	   			j++;
	    	}
	    	if(j==i)
	    	{
	    		count=count+1;
	    		printf("%6d",i);
				if(count>9) 
				{
					break;
				}  		
			}		
							 
		}	
	}
       
    return 0;
}
  • 5
    点赞
  • 2
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值