• 006_stdc_C语言基础


    回顾:

    在同一函数里面 写在前面的语句先执行

    学完 分支 和循环语句 不一是上面的情况

    /*
     * 输入一个数,输出其二进制
     */

    //先输出一个二进制数的高位   不用循环的写法

        //先输出一个二进制数的高位
        char c = 0x53;//0101 0011
        //1次
        if(c & 0x80){   //0x80  -> 1000 0000
            printf("1");
        }
        else{
            printf("0");
        }
        //2次
        if(c & 0x40){
            printf("1");
        }
        else{
            printf("0");
        }
        //3次
        if(c & 0x20){
            printf("1");
        }
        else{
            printf("0");
        }
        //4次
        if(c & 0x10){
            printf("1");
        }
        else{
            printf("0");
        }
        //5次
        if(c & 0x08){
            printf("1");
        }
        else{
            printf("0");
        }
        //6次
        if(c & 0x04){
            printf("1");
        }
        else{
            printf("0");
        }
        //7次
        if(c & 0x02){
            printf("1");
        }
        else{
            printf("0");
        }
        //8次
        if(c & 0x01){
            printf("1");
        }
        else{
            printf("0");
        }

    循环写法

        //先输出一个二进制数的高位
        char c = 0x53;//0101 0011
        for (int i =7;i>=0;i--)
        {
            if(c & 0x1<<i){   //0x80  -> 1000 0000      1<<7
                printf("1");
            }
            else{
                printf("0");
            }
        }

    32位机器中的二进制

        int j=0;
        int c = 0x53; //0101 0011
        printf("输入一个数:");
        scanf("%x",&c);
        for(int i = 31;i>=0;i--)
        {
            if(c & 0x1<<i)  //1<<7   0000 0001 <<
            {                    //1000 0000
                printf("1"); 
                j++;
            }
            else
            {
                printf("0"); 
            }
        }
        printf("
    ");
        printf("1的个数%d
    ",j);


    break;跳出循环 后的语句不会被执行

    continue; 结束本次循环,后面语句不执行

    #include <stdio.h>
    #include <windows.h>
    int main(){
        int sec = 10;
        for(;;)
        {
            //printf("%d
    ",sec); 
            Sleep(1000);
            sec--;
            if(sec %3 == 0)
            {
                continue;  //3的整数倍
            }
            printf("sec=%d
    ",sec); // 
        }
        getchar();
        return 0;
    }

    time(0);
    返回 当前系统的秒数
    1970 1.1 0:0:0

    #include <stdio.h>
    #include <time.h>
    #include <windows.h> 
    int main(){
        for(;;)
        {
            printf("sec = %lu
    ",time(0));
            Sleep(1000);
        }
        getchar();
        return 0;
    }
    /*
     * 随机数 产生函数 rand()
     * 设置随机的种子   srand();
     * 把系统的秒数  设置为随机数的种子 srand(time(0));
     */
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    int main(){
        srand(time(0));//设置系统的时间为随机种子
        for(int i = 0;i<7;i++)
        {
            //printf("%d
    ",rand()%10);  //0 - 9
            printf("%d
    ",rand()%32+1);  //0 - 31 //0 - 32
        }
        getchar();
        return 0;
    }
     * 随机生产一部iphone 手机的价格 
     * 8000 - 9000
        srand(time(0));
        price = rand()%100*10+8000;       //8000 - 8990
        //实现让用户不断猜这个价格,直到用户猜对为止
        //如果猜的数,大于价格,提示用户 "猜高了"
        //如果猜的数,小于价格,提示用户 "猜低了"
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    int main(){
        int price = 0;
        int guess = 0;
    
        srand(time(0));
        price = rand()%100*10+8000;       //8000 - 8990
        //printf("%d
    ",price);//打印随机价格,仅用于测试 
    
        //编写下面代码
        //实现让用户不断猜这个价格,直到用户猜对为止
        //如果猜的数,大于价格,提示用户 "猜高了"
        //如果猜的数,小于价格,提示用户 "猜低了"
        for(;;)    
        {
            printf("输入您猜的价格:");
            scanf("%d",&guess);
    
            if(guess == price)
            {
                printf("猜对了
    "); 
                break;
            }
            if(guess > price)
            {
                printf("猜高了
    "); 
                continue; 
            }
    
            else
            {
                printf("猜低了
    "); 
            }
        }
        getchar();
        return 0;
    }

    多重循环

    #include <stdio.h>
    int main(){
        for (int i=0;i<6;i++)
        {
            for (int j=0;j<i;j++)
            {
                printf("%d",j);
            }
            printf("
    ");
        }
        getchar();
        return 0;
    }

    0
    01
    012
    0123
    01234

    九九乘法表

    #include <stdio.h>
    int main(){
        for (int i=1;i<=9;i++)
        {
            for (int j=1;j<=i;j++)
            {
                printf("%d * %d = %d ",j,i,i*j);
            }
            printf("
    ");
        }
        getchar();
        return 0;
    }

    1 * 1 = 1
    1 * 2 = 2 2 * 2 = 4
    1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
    1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
    1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
    1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
    1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
    1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
    1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

     /* [应用]
     *     已知  i + j = 40
     *           2i + 4j = 100
     *
     *     请输出 i j 的取值
    */
        for(int i=0;i<=40;i++)
        {
            for(int j=0;j<=40;j++)
            {
                if((i+j == 40)&&(2*i+4*j)==100)   
                {
                    printf("i = %d  j = %d
    ",i,j); 
                }
            }
        }
     /*     早饭 20圆   有若干2圆  若5圆  
     *     输出  付费方案
     *     输出  共有几种
     */
        for(int i=0;i<=10;i++)
        {
            for(int j=0;j<=4;j++)
            {
                if(i*2+j*5 == 20)   
                {
                    printf("2元的张数 = %d  5元的张数 = %d
    ",i,j); 
                }
            }
        }

    2元的张数 = 0 5元的张数 = 4
    2元的张数 = 5 5元的张数 = 2
    2元的张数 = 10 5元的张数 = 0

    while语句

    while(条件表达式) //相当于for 中间的语句
    {
            //条件为真 循环执行的语句

    }

        int score = -1;
        while(score<0 || score>100)
        {
            printf("输入成绩:"); 
            scanf("%d",&score);
        }
        int score = -1;
        while(1) //死循环
        {
            printf("输入成绩:"); 
            scanf("%d",&score);
            if(score >=0 && score <=100)
            {
                break;//跳出while循环
            }
        }
    do  while 语句
    /*
     * do  while 语句  注意后面的分号
     * 跟 if for  while  区别 先执行循环体
     * 再判断循环条件
     */
        int score = 80;
        do 
        {
            printf("输入成绩:"); 
            scanf("%d",&score);
        }while(score<0 || score>100);
    /*
     * goto 语句 演示
     * goto + if 实现循环
     */
        int i = 0;
    label:
        if(i<5)
        {
            printf("hello
    "); 
            i++;
            goto label;
        }
    over:
        int x = 0;
        for(int k = 0;k<=20;k++)
        {
            for(int i=0;i<=10;i++)    //i 代表2圆的张数
            {
                for(int j=0;j<=4;j++) //j 代表5圆的张数
                {
                    if(i*2+j*5+ k== 20)   
                    {
                        x++;
                        printf("1圆=%d 2圆的张数=%d 5圆的张数=%d
    ",k,i,j); 
                        goto  over;//直接跳出所有循环
                    }
                }
            }
        }
    over:
        printf("共%d种方案
    ",x);
    /*
     *  内核 有输出缓冲区
    */

    linux系统下执行以下代码

    /*
     *  内核 有输出缓冲区
     *  1. 
      会将 缓冲区内容 推送到屏幕
     *  2. 程序结束,缓冲区内容 推送到屏幕
     *  3. 缓冲区满
     *  4. fflush(stdout);
     */
    
    #include <stdio.h>
    #include <unistd.h>
    
    int main(){
        int x = 0;
        for(int i=0;i<5;i++)
        {
            printf("i=%d ",i);
            sleep(1);//一次性输出,不能依次输出
    } 
    return 0;
    }
    int main(){
        int x = 0;
        for(int i=0;i<5;i++)
        {
            printf("i=%d ",i);
            fflush(stdout);//能依次输出
            sleep(1);
        }
        return 0;
    }
     

    windows 系统下则相反,执行一次会延时设定的时间

    #include <stdio.h>
    #include <windows.h>
    int main(){
        int x = 0;
        for(int i=0;i<5;i++)
        {
            printf("i=%d ",i);
            Sleep(1500);//依次输出
        }
        getchar();
        return 0;
    }
    /*
     *  输入缓冲区
     *   
     *   */
    #include <stdio.h>
    #include <windows.h>
    int main(){
        int c = 0;
        for(int i=0;i<5;i++)
        {
            printf("输入一个字符:");
            scanf("%c",&c);
            printf("c = %c
    ",c);
    
            Sleep(1);
        }
        getchar();
        return 0;
    }

    c=怎么东西?
    第一次读的时候a,
    但回车还在里面,
    它把回车也当输入了,这是输入缓冲区引起的
    解决:

    //清输入缓冲区
            scanf("%*[^ ]"); //清 前的内容
            scanf("%*c");     //清
    #include <stdio.h>
    #include <windows.h>
    int main(){
        char c = 0;
        for(int i=0;i<5;i++)
        {
            printf("输入一个字符:");
            scanf("%c",&c);
            printf("c = %c
    ",c);
    
            //清输入缓冲区
            scanf("%*[^
    ]"); //清
    前的内容
            scanf("%*c");     //
    
            Sleep(1);
        }
        getchar();
        return 0;
    }

    数组

    C的数据成分 数组
          连续 大小 的某一种类型 存储空间

    如果声明 一个数组
    变量名 (合法标示符)
    存储元素的数据类型
    元素的个数

    int a[5];  --> 存储5个整型数据的数组

    a[0] --> 第一个元素
    ....
    a[4] --> 第五个元素

    a[0]   等价 int 变量
    /*
     *    从键盘上输入一个单词 (多个字符) hello
     *       输出该单词
    */
    #include <stdio.h>
    #include <windows.h>
    int main(){
        char c[5];
        for(int i=0;i<5;i++)
        {
            printf("输入一个字符:");
            scanf("%c",&c[i]);
    
            //清输入缓冲区
            scanf("%*[^
    ]"); //清
    前的内容
            scanf("%*c");     //
            Sleep(1);
        }
        for(int i = 0;i<5;i++)
        {
            printf("%c",c[i]);
        }
        getchar();
        return 0;
    }
     *  数组
     *    [练习]
     *       输入 5 个整数 , 
     *       打印他们的和
     *       然后 再输出这5个数
    #include <stdio.h>
    #include <windows.h>
    int main(){
        int c[5];
        int sum=0;
        for(int i=0;i<5;i++)
        {
            printf("输入一个字符:");
            scanf("%d",&c[i]);
            sum += c[i];
            //清输入缓冲区
            scanf("%*[^
    ]"); //清
    前的内容
            scanf("%*c");     //
            Sleep(1);
        }
        printf("%d
    ",sum);
        for(int i = 0;i<5;i++)
        {
            printf("%d",c[i]);
        }
        getchar();
        return 0;
    }

    方法2

        int a[5] ;
        int i=0;
        for(i = 0;i<5;i++)
        {
            printf("输入一个数:");
            scanf("%d",&a[i]);
        }
    
        printf("i = %d
    ",i);  //5
    
        int sum = 0;
        for(i = 0;i<5;i++)
        {
           sum = sum + a[i];
        }
        printf("sum = %d
    ",sum);
    
        for(i = 0;i<5;i++)
        {
            printf("%d
    ",a[i]);
        }
        
        return 0;
     
    何所为,不仅仅是一种态度,更是一种艺术!
  • 相关阅读:
    Android实战经验之图像处理及特效处理的集锦(总结版)
    Android类似于滚动的通知栏实现
    Python概览
    高效程序员的45个习惯读书笔记
    Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET)
    发布订阅者模式之C#委托实现
    表数据复制(迁移)
    Code Smell
    Python学习过程遇到的Bug不断更新
    Resharper 7小技巧系列:导航、书签、和最近编辑
  • 原文地址:https://www.cnblogs.com/tanzizheng/p/12898116.html
Copyright © 2020-2023  润新知