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

题目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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 偶然看到一份javase的练习题,mark一下,以后练习下 【程序1】 题目:古典问题:有一对兔子,从出生后第3个...
    null_meng阅读 415评论 2 1
  • 【题目1】有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死...
    上杉丶零阅读 10,741评论 0 10
  • 一只黄金拖鞋 :))
    66乐乐阅读 421评论 1 2
  • 这句话最近的曝光率很高:种一棵树最好的时机是十年前,其次是现在。 记忆中,是不是长久以来,很多事我们无数次想过、念...
    Sunny_大蕾阅读 540评论 0 3
  • 四年啊 四年有多短呢,短的只是一抬眼一睁眼,就突然与学生这个词再无瓜葛。四年有多长,长的好像过完了一半的人生。 ...
    十年wanana阅读 373评论 0 0