C语言——第二次笔记


循环语句


swicth语句

  • switch语句即是一个变量有多种值的情况下,不同的值对应的情况不同,根据不同的值执行不同的语句。而且表达时必须是一个常量(int,char类型等)或枚举类型。表达式与常量表达式必须都是相同的数据类型。当表达式的值等于某个常量表达式之后, 执行该表示之后的语句。当语句中出现break时,语句中断,并跳出switch语句。如果case语句不包含break,控制流将会继续后续的case,直至遇到break为止,一个switch语句可以有一个可选的 default case,出现在switch的结尾。
#include <stdio.h>

int main(){
  int a = 0;
  printf("请输入一个数字 1 - 3 : ") ;
  scanf("%d",&a);
  
  switch(a){
    case 1:
        printf("你输入的是1\n");
        break;
        case 2:
            printf("你输入的是2\n");
            break;
            default:
                printf("你输入的是3\n");
                break;
  } 

 return 0 ;
 }

for循环

  • 循环控制的变量的定义和初始化之执行一次,表达式1,表达是2,表达式3之间使用分号( ;) 隔开,但是for(表达式;表达是2;表达式3)的后面不能加分号( ;)。for循环的循环条件是决定循环的次数,注意:for(; ;)与while(1)等价,都是死循环,是不会停止的执行语句。
#include <stdio.h>

/**
    for(循环控制变量;运行的条件;控制变量的变化)
    for循环中间条件是必须要,其他部分可以省略
        分号不能省略
    for(; 1 < 2; ) 
    for(int i = 0; i < 10; i++) 
*/
int c = 10;
int main(){
    //输出1-10 之间的整数
    for(int i = 1; i <=10; i++){
        printf("i = %d\n", i);
    } 
    
    /*
    循环控制变量的定义和初始化只执行一次
    变量的作用域:
    局部变量 :{ 
        int a   
         {
            int a; 
            printf(a);
         }  
     } 
    全局变量
    静态变量 
    
    循环控制变量什么时候变化/执行?
    i++ i-- j++ j-- 
    i+=2
    当这一次循环结束之后 再变化/执行 
    
    */ 
    
    //int i = 1; 
    for(int i = 1; i <= 10; i++){
        printf("i = %d\n", i);
        
        if(i == 10){
            i = 0;
        } 
        //i++;
    }
    
    //不断输出1-10之间的整数 
    return 0;
}

while循环

  • while语句是先计算“表达式”的值,当值为真时,执行”语句块“。执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”,重复这个过程,直到表达式的值为假时,才会停止并退出语句这个循环,再执行while语句后面的语句。
while语句训练-------进制之间的转换
#include <stdio.h>

int main(){
    /*
    for(int i = 0; i < 10; i++)
    
    while(1) 
    
    int i = 0;
    while(i < 3){
        
        i++; 
    }
    
    do{
            
    }while(i < 3);
    */
    
    /* 
    2进制    1010  10100 
    8进制      12    24 
    10进制   10    20 
    16进制   0A    14 
    
    请输入数字:56
    2进制为:111000
    8进制为:70
    16进制为:38 
    */ 
    
    int num;
    printf("请输入数字:");
    scanf("%d",&num);
    
    int jinzhi = 16;
    
    //二进制
    int wei = 1;
    long long sum = 0;
    while(1){
        //取余 10100 
        // 00101
        // 1*0 + 10*0 + 100*1 + 1000*0 + 10000*1
        // 10100
        int yu = num % jinzhi;
        num = num / jinzhi; //10 5 
        
        //目前的总和:当前位数的值 + 之前的值 
        sum = sum + yu * wei;//0 
        wei = wei * 10 ;//1*10 100 1000 
        
        if(num < jinzhi){
            sum = sum + num * wei;
            break;
        } 
    } 
    printf("%d\n", sum);
    return 0;
}

Break与Continue关键字

  • Break
    在switch语句中,遇到break时,将不再执行switch中的任何语句
    在while,for循环中,遇到break时,将终止当前循环而执行整个循环后面的代码
  • Continue
    跳过循环体中剩余的语句并强制进入下一次循环(只用于while,for循环语句中)

数组

  • 数组用于储存多个想同类型数据的集合
注意:
  • 能够储存数据,就必须要有内存
  • 如何定义一个数值的同时为它分配内存
  • 数组定义是必须明确直到数组的大小
  • 数组名就是数组的首地址
声明数组

在C语言中,声明一个数组,需要指定元素的类型和元素的数量

初始化数组

C语言中,可以逐个初始化数组,也可以使用一个初始化语句。大括号 { } 之间的值的数目不能大于我们在数组声明时在 [ ] 中指定的元素

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>

//4.Demo - 产生4个(不同)随机数 保存到数组 输出 
int main(){
    int array[4] = {};
    
    srand(time(NULL));

    //生成数组 
    //产生随机数的同时去比较是否重复 
    //如果重复就重新再产生一个随机数
    //如果不重复就保存 
    //每次i的值正好可以用来判断已经有几个了 
    //1  
    //i = 1 
    // 2
    int i;
    for ( i = 0; i < 4; i++){
        int temp = rand() % 4;
        
        if (i == 0){//第一个 直接保存 
            array[i] = temp;
        }else{
            //判断前面是否已经存在了
            int j = 0; 
            for(; j <i; j++){
                //比较j对应的值和temp是否相同 
                if(array[j] == temp){
                    //重复了
                    printf("重复了:%d\n",temp); 
                    break; 
                } 
            }
            //判断是怎么出来的
            if (j == i){
                //将i前面的比较一遍都没发现重复的
                //保存temp值
                array[i] = temp; 
            }else{
                //重复了
                //重新回到当前这一次 
                i--; 
            }
        } 
    }
    
    //输出 
    int n;
    for ( n = 0; n< 4; n++){
        printf("%d ", array[n]);
    }
    
    return 0;
}

rand()和srand()函数

  • rand()函数

函数头文件:stdio.h
函数定义:int rand()
函数功能:产生一个随机数
返回值:返回0至RAND_MAX之间的随机整值

  • srand()函数

函数头文件:stdio.h
函数定义:void srand(unsigned int seed)
函数功能:设置随机种子
通常用time(NULL)(获得当前系统的时间信息)来充当种子,来保持每次运行时种子是不一样的

训练小游戏----最强大脑

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

int main(){
    int count = 3; //记录每次生成多少个随机数

    while(1){
        unsigned int seed = time(NULL); //1000
        
        //设置随机数的种子
        srand(seed); 
        int i;
        for( i = 0; i < count; i++){
            //生成一个随机数 
            int temp2 = rand() % 9 + 1;
            printf("%d ",temp2); 
        } 
        printf("\n");
    
        // 延时2s
        Sleep(2000);
        //for(int i = 0; i < 10000000000/15*2; i++);
    
        //刷新屏幕 
        system("cls");
        /*  mac 
        for(int i = 0; i < 20; i++){
            printf("\n");
        } 
        */ 
        int temp;
        printf("请输入:");
    
        //重新设种子和之前生成时的种子一样
        srand(seed);
     
        //接收用户输入 一个一个接收 
        // 1 2 3
        // 1 2 4
        int n;
        for( n = 0; n < count; n++){
            scanf("%d", &temp);
        
            //获取对应的生成的随机数
            int old = rand() % 9 + 1;
        
            //比较输入的和随机数是否相同 
            printf("old:%d\n", old);
            if (temp != old){
                printf("错误 退出!\n");
                exit(EXIT_SUCCESS); 
            } 
        }
    count ++;
        printf("正确!\n"); 
    }
    
    return 0;
}
    

通关达标训练-----ATM机

#include <stdio.h>
#include <stdlib.h>

    
 
/*
 getchar();从终端接收一个字符
 注意:当上一次有输入的情况下 必须要将上一次缓冲区
 里面的内容清空 
 scanf("%d");
 123\n;
 \n
 方式一: 
 getchar(); //拿走\n 
 getchar();
 
 方式二: 
 fflush(stdin);//刷新输入流 
 
 
 return; 结束当前这个函数/方法 
 exit()导入头文件<stdlib.h> 直接退出程序 
 
 main(){
  1
  2
  3
 } 
 
 add(){
    retrun; 
 }
 
 for(){
            switch(){
                return 1;
                exit();
                break;
            } 
        } 
*/
int main(){ 
    int old = 123;//原始密码 
    int input;//输入密码 
    int wrongTime = 3; //错误次数
    int total = 1000; //金额 
    
    printf("**********************\n"); 
    printf(" 欢迎使用建设银行系统\n");
    printf("**********************\n");
    
    //int i = 1;
    printf("请输入密码:");
    int i; 
    for( i = 1;i <= wrongTime; i++){
        scanf("%d", &input);
        
        //判断密码
        if(input == old){
            //密码正确
            break;
        } 
        
        if(i == wrongTime){
            printf("错误次数过多!\n");
            return 1;
        }
        //密码不正确
        printf("密码不正确,请重新输入密码:"); 
    } 
    
    
    int choice;//接收用户选择
    char goon;//是否继续 
    for(; 1 < 2;){
        //主界面 
        printf("*****************************\n");
        printf("1.存款\n");
        printf("2.取款\n");
        printf("3.查询\n");
        printf("4.更改密码\n");
        printf("5.退出\n"); 
        printf("*****************************\n");
         
        //提示用户选择
        printf("请选择操作:");
        scanf("%d", &choice);
        
        //判断操作 
        switch(choice){
            case 1: //存款 
                int temp;
                printf("请输入存款金额:");
                scanf("%d", &temp);
                total += temp;
                //total = total + temp;
                
                printf("存款成功!可用余额为:%d\n",total);
                break;
            case 2: //取款 
                int temp2;
                for(;1<2;){
                    printf("输入取款金额:");
                    scanf("%d", &temp2);
                
                    if(temp2 > total){
                        printf("余额不足 "); 
                    }else{
                        total -= temp2;
                        printf("取款成功 余额为%d\n",total);
                        break;
                    }
                }
                break;
            case 3: //查询余额 
                printf("当前余额为:%d\n",total);
                break;
            case 4: //更改密码
                int n1;
                int n2;
                for(;1<2;){
                    printf("请输入新密码:");
                    scanf("%d", &n1);
                    
                    printf("请确认密码:");
                    scanf("%d", &n2);
                    
                    if (n1 == n2){
                        printf("密码设置成功!\n");
                        old = n1;
                        break;
                    } else{
                        printf("两次输入不一致!");
                    }
                } 
                break;
            default://退出 
                return 1;
                //exit(EXIT_FAILURE);
                break;
        } 
        
        //提示是否继续
        for(;1<2;){
            printf("是否继续(y/n):");
            getchar();
            scanf("%c", &goon); 
            
            if(goon == 'y'){
                break; 
            }
            if (goon == 'n'){
                return 1;
            }
            printf("输入无效 ");
        }
        
        
    }
     
    return 0;
}


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 继续学习打卡,今天分享的绘本绘本是Za-za's baby brother. 随着政策二胎政策的开放,很多家庭都带...
    宋枚阅读 382评论 0 0
  • “哦,该死该死该死!我已经受够了!该死的热狗!”带着墨镜和遮阳帽,有着如模特般修长身材的男子烦躁地将咬了半口的热狗...
    长夜无痕阅读 622评论 0 0
  • 9月10号教师节那天,我的外甥女小桔子出世,长50厘米,重6.4斤。小妹也升级当母亲啦!又有人喊我大姨了。 小桔子...
    齐帆齐阅读 3,266评论 38 77
  • 抗战时期,各地抗日武装队伍风起云涌,其中有一支队伍的军长名叫于龙飞。这个于龙飞本是穷苦出身,他被当地百姓誉为奇人,...
    Awhatsup阅读 455评论 0 7