那些有趣的C语言基础练习

一、猴子吃桃问题(while)

        猴子第一天摘了若干了桃,
        当即就吃了一半数量的桃,没吃过瘾,又多吃了一个
        第二天,又将剩下桃吃了一半,没吃过瘾,又多吃了一个
        依次类推,直到第十天想吃桃的时候,发现只剩下一个了。
        问:猴子第一天摘了多少个桃
        思路:
                1.从第十天倒推:第十天只剩下一个了,设第九天吃了n个,n-1即为第十天剩下的 那一个,所以n为2,又因为吃的是当天总量的一半加1,所以第九天总共为4个。以此类推第八天即为(4+1)乘以2,也就是10个。总结来说就是下一天与上一天的桃子数量关系为(n+1)*2
#include <stdio.h>

int main(int argc, char const *argv[])
{
    int n = 1;   //第十天剩下的那一个
    int day = 10;  // 天数

    while(day > 1){
        n = (n+1)*2;
        day--;
    }
    printf("第%d天采摘了%d桃子\n",day,n);
    return 0;
}

结果:第1天采摘了1534桃子

二、水仙花数(for)

        输出 (100,1000) 范围内所有的 水仙花 数
        水仙花数:自身 == 个位*个位*个位 + 十位*十位*十位 + 百*百*百
        例:
                153 = 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 +1 = 153
#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i = 100;  //从一百开始
    int ge = 0;   //个位
    int shi = 0;  //十位
    int bai = 0;  //百位

    for(i = 100; i < 1000; i++){
        ge = i % 10;  //例: 153 % 10 =3 
        shi = i / 10 % 10;   //例: 153 / 10 = 15     15 % 10 = 5
        bai = i / 100

        if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
            printf("%d ",i);
        }
    }
    printf("\n");
    return 0;
}
结果:   153 370 371 407 

三、使用C语言的控制语句输出下面的图案 (for)

F 
_FE 
__FED 
___FEDC 
____FEDCB 
_____FEDCBA
#include <stdio.h> 
int main(int argc, const char *argv[]) { 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    char value = 'F'; 
    //外层循环控制输出的行数 
    for(i = 0; i < 6; i++){ 
    //内层循环控制输出 下划线 的个数 
    for(j = 0; j < i; j++){ 
        printf("_"); 
    } 
    value = 'F';//每次都从 F 开始输出 
    //控制输出 字母 的个数
    for(k = 0; k <= i ; k++){ 
        printf("%c", value); 
        value‐‐; 
    } 
    //每行内容都输出完之后 再换行 
    printf("\n"); 
    } 
    return 0; 
}

四、冒泡排序

4.1 基本思想:
        相邻的两个元素之间进行比较,按照要求进行交换。
4.2 详细步骤:(以升序为例 从小到大)
        第一趟排序:
                将第一个元素和第二个元素进行比较,将较大放在后面,
                然后第二个元素和第三个元素进行比较,将较大的放在后面,
                依次类推,直到第一趟排序结束,最大的元素就在最后一位了
        第二趟排序:
                将第一个元素和第二个元素进行比较,将较大放在后面,
                然后第二个元素和第三个元素进行比较,将较大的放在后面,
                依次类推,直到第二趟排序结束,第二大的元素就在倒数第二位了依次类推,
                直到最后一趟排序完成,整个序列就有序了。
​​​​​​​
#include <stdio.h> 
int main(int argc, const char *argv[]) { 
    int s[10] = {12,34,5,3,6,45,67,98,55,1}; 
    int i = 0; 
    int j = 0; 
    int temp = 0; 
    int len = sizeof(s)/sizeof(s[0]); //排序前 
    for(i = 0; i < 10; i++){ 
        printf("%d ",s[i]); 
    } 
    putchar(10);
    //外层循环控制比较的趟数 
    //当只剩下最后一个元素时,就不用再比了 所以 可以少比一趟 
    for(j = 0; j < len‐1; j++){ 
    //内层循环用来找每趟的最大值 
    //因为每趟都能确定一个最大值,所以每趟都可以少比一个元素 所以 ‐j 
        for(i = 0; i < len‐1‐j; i++){ 
            if(s[i] > s[i+1]){ 
                temp = s[i]; 36 s[i] = s[i+1]; 
                s[i+1] = temp; 
            } 
        } 
    }    
    //排序后 
    for(i = 0; i < 10; i++){ 
        printf("%d ",s[i]); 
    } 
    putchar(10); 
    return 0; 
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值