C语言经典习题(16~20)

2020-03-23  本文已影响0人  十字街86号
题目16

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

/*一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。*/

#include<stdio.h>
int main(){
    
    int i;
    int n,sum=0;
    
    printf("找到的完数有:\n");

    for(i=1;i<1000;i++){
        
        for(n=1;n<i;n++){
            if(i%n == 0){
                sum = sum+n;
            }
        }
        
        if(sum == i){
            printf("%d\t",i);
            sum = 0;
        }
        else{
            sum = 0;    
        }
    }
    return 0;
    
} 
题目17

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

/*一球从100米高度自由落下,
每次落地后反跳回原高度的一半;
再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?*/ 

#include<stdio.h>
int main(){
     float h = 100; //初始高度 
     float sum = 0; //路程 
     float l = h; 
    
    int num; //弹跳次数
    printf("请输入弹跳次数: "); 
    scanf("%d",&num); 
    int i; 
    for(i=1;i<num;i++){
        l = l/2;
        sum = 2*l + sum;
    }
    
    sum = sum + h;
    printf("第%d次落地时,共经过%f米,第%d次反弹会高%f米\n",num,sum,num,l/2);
    
    return 0;
}
题目18

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

/*猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。*/
#include<stdio.h>
int main(){
    int day; //天数
    printf("请问是几天前:"); 
    scanf("%d",&day); 
    
    int x1,x2; //x1 是当天的,x2 是下一天的桃子数量 
    // 因为 x2 = x1/2 + 1;
    // 所以 x1 = (x2+1)*2;
    x2 = 1;  //当前有的数量 
    int i;
    for(i=1;i<day;i++){
         x1 = (x2+1)*2;
         x2 = x1;
    } 
    printf("\n%d天前有%d个桃子\n",day,x1);
    
    return 0;
} 
题目19

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和

/*有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和*/

#include<stdio.h>
int main(){
    float a=2,b=1;
    float sum = 0;
    
    int num;
    printf("需要求前几项之和?\n");
    scanf("%d",&num);
    
    int i,c;    
    for(i=0;i<num;i++){
        sum = sum + a/b;
        c = a+b;
        b = a;
        a = c;
    }
    printf("\n前%d项之和等于:%f \n",num,sum);
    
    return 0;
}


题目20

求1+2!+3!+...+n!的和。

/*求1+2!+3!+...+n!的和。*/

#include<stdio.h>
int main(){
    int num;
    printf("1+2!+3!+...+n! 需要求前几项之和?\n");
    scanf("%d",&num);
    
    int i,j;
    double c = 1;
    double sum = 0;
    for(i=1;i<=num;i++){
        for(j=1;j<=i;j++){
            c = c*j;
        }

        sum = sum + c;
        c = 1;
    }
    
    printf("\n求得结果为:%lf",sum);
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读