查看: 247|回复: 0

[原创图文] C语言学习第五天 进阶进制转换 分支语句 循环语句

[复制链接]

8

主题

16

帖子

0

精华

中级会员

Rank: 8Rank: 8

学币
90
荣耀
0
rank
0
违规
0

    发表于 2020-11-12 23:30:24 | 显示全部楼层 |阅读模式
    本帖最后由 鸦领主 于 2020-11-20 22:46 编辑

    ·目录

    一、进制转换(进阶)

    1.输入16以内十进制转换一个十六进制

    2.输入42亿以内十进制转换八个十六进制

    3.printf宽度管理

       4.输入16以内十进制转换一个十六进制(使用分支语句)

       5.输入42亿以内十进制转换八个十六进制(使用循环语句)

           1)pow函数

           2)改进代码

    二、分支语句

       1.单分支语句

       2.双分支语句

       3.多分支语句

    三、循环语句

       1.while循环语句

       2.do while循环语句
              3.循环控制

    四、循环分支语句使用列子

       1.打印菜单栏

       2.判断数字是否为素数

           1)第二种思路

           2)嵌套循环

    五、补充

       1.swichi语句(分支)

       2.for语句(循环)



    一、十转换十六进制打印


    1.输入一个16以内的十进制数,用%X打印成一个十六进制数
    #include<stdio.h>
    int main()
    {
    int i;
    printf("输入一个16内的数字:");
    scanf_s("%d",&i);
    printf("0x%04X",i);  // %04X中间的0代表打印出的数字,4代表4个位置,双字节(00是单字节 00 00是双字节等)
    return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天


    2.输入一个42亿以内的十进制数,用%X打印成8个十六进制数
    #include<stdio.h>
    int main()
    {
    unsigned  int i;  // 不能用 int因为有符号,unsigned int 无符号
    printf("输入42亿内的数字:");
    scanf_s("%d",&i);
    printf("0x%08X\n",i);
    printf("或者可以这样输入,每俩个十六进制数间隔\n");
    printf("%X",i/16/16/16/16/16/16/16%16);
    printf("%X ",i/16/16/16/16/16/16%16);
    printf("%X",i/16/16/16/16/16%16);
    printf("%X ",i/16/16/16/16%16);
    printf("%X",i/16/16/16%16);
    printf("%X ",i/16/16%16);
    printf("%X",i/16%16);
    printf("%XH",i%16);
    
    return 0;
    }


    错误方式:

    C语言学习第五天

    C语言学习第五天

    正确方式:

    C语言学习第五天

    C语言学习第五天


    3.printf加强功能宽度管理
    整数宽度:
    (算上自己本身占的位置,比如      55前面6个位置加上自己2个位置是8个位置)
    printf("%8d",55);8表示右对齐占8个位置,;
    printf("%-8d",44);-8表示左对齐占8个位置;
    printf("%08d",33);0表示右对齐8个位置填充为0,左对齐填充0无效。
    (字符串,浮点数同理)

    C语言学习第五天

    C语言学习第五天




    4.输入一个16以内的十进制数,不用%X打印出一个十六进制数
    #include<stdio.h>
    int main()
    {
            int i;
            printf("输入一个16内的数字:");
            scanf_s("%d", &i);
            if (i < 10)  //如果输入的是1-9
                    printf("%d", i); //将执行这一句
            else if (i == 10)//输入10
                    printf("A");//执行这一句
            else if (i == 11)
                    printf("B");
            else if (i == 12)
                    printf("C");
            else if (i == 13)
                    printf("D");
            else if (i == 14)//输入14
                    printf("E");//执行这一句
            else if (i == 15)
                    printf("F");
            else
                    printf("输入的数字无效") //如果没有符合的将直接执行到这一句
    
    }
    return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天


    5.输入一个42亿以内的十进制数,不用%X打印出8个十六进制数(使用循环语句)
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        unsigned int i, m;
        printf("输入一个42亿内的数字进行进制转换:");
        scanf_s("%d", &i);
        printf("转换结果为:0x");
        int n = 0;  
        while (n < 8) //n大于等于8就不在循环
        {
    
            m = i / (int)pow(16, (7-n)) % 16;
            if (m < 10)
                printf("%d", m);
            else if (m == 10)
                printf("A");
            else if (m == 11)
                printf("B");
            else if (m == 12)
                printf("C");
            else if (m == 13)
                printf("D");
            else if (m == 14)
                printf("E");
    
            else
                printf("F");
            n++; //每次循环n+1
        }
    }
    效果:

    C语言学习第五天

    C语言学习第五天



    1)pow函数:x的x次方(用到#include<math.h>头文件,包括了数学计算之类的函数)
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int i, n;
        printf("请输入:");
        scanf("%d%d",&i,&n);
        printf("%d的%d次方是:%0.0f",i,n,pow(i,n));
        return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天


    2)改进代码
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        unsigned int i, m, s;
        printf("请输入42亿以内的数字进行转换:");
        scanf_s("%d", &i);
        printf("0x");
        int n = 0;
        while (n < 8)
        {
            s = (int)pow(16,(7 - n)); //第一次n=7-0 第二次n=7-1
            m = i / s % 16;   //第一次i/16的7次方,第二次i/16的6次方... 第八次i/16的0次方
            if (m < 10)
                putchar(48+m);   //=printf("%d",m)  48在ascii中是0,如果m=5的话,0+5等于5将会打印出5  
            else
                putchar('A' + m - 10);  //A在ascii中是65,如果m是11的话 11-10=1,65+1=66,66是B将会打印B
            n++;
        }
    }
    效果:

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    与上面那个效果一样,更加方便了一些
    ==========================================================================

    二、分支语句

    1.单分支语句:
    if
    #include<stdio.h>
    int main()
    {
            int i, m;
            printf("请输入你的销售数量:");
            scanf_s("%d",&i);
            m = i*20;  //卖一件提成20元,卖i件=i*20元
            if (i >= 100)  //如果卖出大于等于100件
                    m = m + 500; //则额外获得500元
            printf("本月获得提成:%d元",m);
    
            return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    2.双分支语句
    if
    else

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    int main()
    {
        int i, m; //i是数量,m是多少元
        printf("输入本月销量:");
        scanf("%d", &i);
        if (i < 100)  //如果小于100件
            m = i* 20;//每件提成20元
        else             
            m = i * 30;  //大于100件每件30元
        printf("%d元",m);
        return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天


    3.多分支语句:
    if
    else if
    else if
    .....
    else
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    int main()
    {
        int i, m; //i是数量,m是多少元
        printf("输入本月销量:");
        scanf("%d", &i);
        if (i < 100)  //如果小于100件 1-99会执行这里
            m = i * 20;//每件提成20元
        else if (i < 200) //小于200件,  100-199会执行这里
            m = i * 30;  //每件30元
        else
            m = i * 40; //200以上会执行这里
        printf("%d元",m);
        return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    C语言学习第五天

    ==========================================================================

    三、循环语句

    1.while循环语句:先判断条件成不成立,成立执行不成立不执行
    #include<stdio.h>
    int main()
    {
        int i = 1, n = 0; //初始化区(i是决定从那个数值开始)
        while (i<=100)//<100的话是99加过一次就跳出循环,<=100是100也要加一次
        {
            n = n + i;//(每循环一次n加一次i)等价于n +=i
            i = i + 1;//(每循环一次i加一次1)//等价于i++;/++i;
        }
        return 0;
    }

    C语言学习第五天

    C语言学习第五天


    2.do while循环语句:先无条件的执行一次在判断条件成不成立
    #include<stdio.h>
    int main()
    {
        int i = 20,n=0;
        do
        {
            n += i;
            i++;
        } while (i<10);  //可以看到条件不成立但还是执行了一次
        return 0;
    }
    效果:

    C语言学习第五天

    C语言学习第五天


    3.循环控制
    int n=0;
    while(n<8) //n从0-7
    i++;
    
    
    int n=7                                                  
    while(n>=0)n从7-0                       
     m = i / (int)pow(16, n) % 16;   
    i--;
    
    等价于
    int n=7 
    while(n<8) //n从0-7
    m = i / (int)pow(16, 7-n) % 16; //加了7-n变成了n从7-0
    i++

    ==========================================================================
    四、循环分支使用列子
    1.打印菜单栏(循环分支语句)
    system("cls")清除数据     
    system("pause")按任意件继续(停顿)
    用system需要#include<stdlib.h>或者#include<windows.h>(windows.包括了stdlib.h)

    #include<stdio.h>
    #include<windows.h>
    int main()
    {
        int i=1;
        while (i!=0)  // i不等于0继续循环 ( !=不等于,==等于)
        {
            system("cls"); //清除数据
            puts("1.添加数据");
            puts("2.删除数据");
            puts("3.修改数据");
            puts("0.退出程序");
            puts("===============");
            puts("请输入你的选择:");
            scanf_s("%d", &i);
            if (i == 1)
                puts("你选择了添加数据");
            else if (i == 2)
                puts("你选择了删除数据");
            else if (i == 3)
                puts("你选择了修改数据");
            else if (i == 0)
                puts("你选择了退出程序");
            else
                puts("你的选择无效");
            system("pause");  //停顿
    
        }
        return 0;
    }

    输入1之后出现你选择了添加数据,输入2之后出现你选择了删除了数据,输入0退出程序

    2.判断一个数字是否为素数(循环分支语句)
    #include<stdio.h>
    int main()
    {
        int n;
        printf("请输入一个数字:");  //输入11
        scanf_s("%d" ,& n);
        int i = 2;
        while (i<n)  //循环9次,i=n不在循环 
        {
            if (n % i == 0)  //没有符合条件,继续循环
                    break; //不执行中途退出循环
            i++;   //每次循环加1
        }
        if (n == i) //n为11,i为11
            printf("%d是素数", n); // 11是素数
        else
            printf("%d不是素数", n);
        return 0;
    }


    效果:

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    C语言学习第五天 进阶进制转换 分支语句 循环语句


    1)第二种思路
    #include<stdio.h>
    int main()
    {#include<stdio.h>
    int main()
    {
        int n,f=0;
        printf("请输入一个数字:"); //输入一个33
        scanf_s("%d" ,& n);
        int i = 2;   //第一次i=2继续循环+1,i=3
        while (i<n)
        {
            if (n % i == 0) //33%3余数0
            {
                f = 1; //执行f=1
                break;//执行中途退出
            }
            i++;
        }
        if (f==0) //此时f=1
            printf("%d是素数", n);
        else
            printf("%d不是素数", n); //f不等于0,则33不是素数
        return 0;
    }
    复合语句:在函数内用大括号包起来的就是复合语句。
    缺省情况:if或while只能控制一个分号;
    如果要控制多行就要用大括号包起来。


    2)嵌套循环(循环中有循环)
    #include<stdio.h>
    int main()
    {
        int n;
        while (1) //while(1)为死循环,死循环会一直循环,没有退出条件,可以自己加退出条件
        {
            printf("请输入一个数字:");  
            scanf_s("%d", &n);
            if (n == 0) //如果 n=0,
                break; //则退出,
            int i = 2;
            while (i < n)  
            {
                if (n % i == 0) 
                    break; 
                i++;   
            }
            if (n == i) 
                printf("%d是素数\n", n); 
            else
                printf("%d不是素数\n", n);
        }
        return 0;
    }</span></code></pre>
    效果:

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    C语言学习第五天 进阶进制转换 分支语句 循环语句

    俩种复合条件:而且&&,或则||
    if(n==0||n==1) n等于1或者等于0才会执行下面代码

    if(n==0&&n==1)n等于0而且等于1才会执行下面代码
    ==========================================================================


    补充:
    1.swichi语句:
    a)if语句所控制的往往范围较大,而switch语句往往是对少量的单一条件判断;

    b)switch只有一次无限大范围条件的控制,.就是default语句。
    c)case语句中丕能带有变量:必须是一个常量了数字);
    d)一个switchi语句下面所有的case都是不可以重复的:.
    e)在每个case区域尽量不要定义变量,定义变量最好在switch之前;

    格式:
    swichi(xxx)
    {
    case'xxx';
         puts("xxx")
         break;

    case'xxx';
         puts("xxx")
         break;
    default;
    }

    2.for语句
    for(初始化区;判断区;递增区)
    {
       运算区

    }
    a)递增区是在没每次循环结束时执行
    b)当判断区不写入东西的时候代表无条件循环
    c)for的括号内3个区都可以为空
    ============
    break;中途退出循环
    return 1;直接退出函数
    contiune;返回循环开始



    温馨提示:
    1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
    2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
    3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
    学逆向论坛-免费的逆向学习论坛
    微信公众号
    快速回复 返回顶部 返回列表