软件1801-1803班《面向过程程序设计》(4)循环结构程序设计

-1 求平方与倒数序列的部分和 (10 分)
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m
​2
​​ +1/m+(m+1)
​2
​​ +1/(m+1)+⋯+n
​2
​​ +1/n。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10
输出样例:

sum = 355.845635
#include<stdio.h>
int main()
{
	double sum=0;
	int m,n;
	scanf("%d %d",&m,&n);
	for(int i=m;i<=n;i++)
	{
		sum+=i*i;
	}
	for(int i=m;i<=n;i++)
	{
		sum+=1.0/i;
	}
	printf("sum = %lf",sum);
	
}
7-2 验证“哥德巴赫猜想” (10 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:

输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:

在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:

24
输出样例:

24 = 5 + 19
#include<iostream>
#include <cstdio>
#include<cmath>
int panduan( int num ) {

    if(num ==2|| num==3 )
        return 1 ;
    if(num %6!= 1&&num %6!= 5)
        return 0 ;
    int tmp =sqrt( num);
    for(int i= 5; i <=tmp; i+=6 )
        if(num %i== 0||num %(i+ 2)==0 )
            return 0 ;
    return 1 ;
}
 
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 2; i < n ; i ++) {
        if (panduan(i)  && panduan(n - i)) {
            printf("%d = %d + %d", n, i, n - i);
            break;
        }
    }
}
7-3 猜算式?2*7?=3848中的数字 (10 分)
算式:?2*7?=3848中缺少一个十位数和一个个位数。编程求出使该算式成立时的这两个数,并输出正确的算式。

输出格式:

在一行中输出A2*B7=C的值。

输出样例:

52*74=3848
#include<iostream>
#include <cstdio>
#include<cmath>
 
int main() {
    for(int i=0;i<=9;i++)
    {
    	for(int j=1;j<10;j++)
    	{
    		if((i*10+2)*(70+j)==3848)
    		printf("%d2*7%d=3848",i,j);
    	}
    }
}
7-4 兔子繁殖问题 (10 分)
已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目。

输入样例:

4
输出样例:

5
#include<iostream>
#include <cstdio>
#include<cmath>
 
 
int main() {
	int n;
    int a[30]={0,1,2,3,5};
    scanf("%d",&n);
    for(int i=5;i<=24;i++)
    {
    	a[i]=a[i-1]+a[i-2];
    }
    
    printf("%d",a[n]);
}
7-5 输出整数各位数字 (10 分)
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。

输入格式:

输入在一行中给出一个长整型范围内的非负整数。

输出格式:

从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

输入样例:

123456
输出样例:

1 2 3 4 5 6 

#include <stdio.h>
#include<string.h>
int main() {
	char a[1000];
	gets(a);
	int len=strlen(a);
	for(int i =0 ;i < len ;i++)
	{
		printf("%c ",a[i]);
		
	}
	
	
}
7-6 求e的近似值 (10 分)
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。本题要求对给定的非负整数n,求该级数的前n项和。

输入格式:

输入第一行中给出非负整数n(≤1000)。

输出格式:

在一行中输出部分和的值,保留小数点后八位。

输入样例:

10
输出样例:

2.71828180
#include<stdio.h>
int main()
{  
    int n,i; double b=1,sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
       {  b*=i;
          sum+=1.0/b;
  }
 printf("%.8lf",sum+1);
 return 0;
}
7-7 高空坠球 (10 分)
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:

33 5
输出样例:

94.9 1.0
#include <stdio.h>
int main()
{
	int n=0,time=0;
	double sum=0,h=0;
	scanf("%lf %d",&h,&n);
	while(h!=0&&time<n){
		sum+=h;
		time++;
		h=h/2;
		sum+=h;
	}
	if(n==0){
		sum=0;
		h=0;
	}
	else
	sum=sum-h; 
	printf("%0.1f %0.1f",sum,h);
	
	return  0;
}
7-8 求整数的位数及各位数字之和 (10 分)
对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:

输入在一行中给出一个不超过10
​9
​​ 的正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

321
输出样例:

3 6
#include <stdio.h>
#include<string.h>
int main() {
	char a[10];
	gets(a);
	int sum=0;
	int len = strlen(a);
	for(int i=0;i<len;i++)
	{
		sum+=(a[i]-'0');
	}
	printf("%d %d",len,sum);
}
7-9 人民币兑换 (10 分)
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>
#include<string.h>
int main() {
	int n;
	scanf("%d",&n);
	int count=0;
	for(int i=1;i<30;i++)
	{
		for(int j=1;j<75;j++)
		{
			if(i*5+j*2+(100-i-j)==150)
			{
				printf("%d %d %d\n",i,j,100-i-j);
				count++;
			}
		}
		if(count==n)
		break;
	}
}
7-10 an=1/(1+a(n-1)) (10 分)
计算数列的第n项。



输入格式:

直接输入n值,n值是一个正整数。

输出格式:

直接输出保留6位小数的实型结果,没有其它任何附加字符。。

输入样例:

5
输出样例:

0.625000
#include <stdio.h>
#include<string.h>
int main() {
	double a[1000]={0,1,0.5};
	int n;
	scanf("%d",&n);
	for(int i=3;i<=n;i++)
	{
		a[i]=1.0/(1+a[i-1]);
	}
	printf("%lf",a[n]);
}
发布了55 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42612338/article/details/89216026
今日推荐