2019-11-24c语言的第三次学习 for while 随机数 数组

for循环

1.for循环的基础

for(循环控制变量;运行的条件;控制变量的变化)
for循环中间条件必须要,其他部分可省略,分号不能省略

2. 示例

for(;1<2;)
for(int i = 0;i<10;i++)

3.循环控制变量

<1.>

循环控制变量的定义和初始化只执行一次

<2.>

循环控制变量什么时候变化?
i++ i-- j++ j--
i+=2
当这一次循环结束后在变化/执行

<3.>变量的作用域:
(1.)局部变量 :代码块里定义的变量
    {
        int a;
           {int a;
           }
    } 
(2.)全局变量 main函数前定义的变量
(3.)静态变量

4.结束循环的方式

break跳出整个for循环
continue结束当前这次循环继续下一次循环

for循环:<1.>输出1-10之间的整数;

<2.>不断输出1-10之间的整数

#include<stdio.h>
/*
for循环
while循环
数组
*/

/*
for(循环控制变量;运行的条件;控制变量的变化) 
for循环中间条件必须要,其他部分可省略,分号不能省略
for(;1<2;) 
for(int i = 0;i<10;i++)
*/


int main(){
    /*
    //输出1-10之间的整数
    for(int i = 1;i < = 10;i++) 
    {
        printf("i = %d\n",i);
    }
*/
    
    /*
    循环控制变量的定义和初始化只执行一次
    变量的作用域:
    局部变量 :代码块里定义的变量 
    {
        int a;
           {int a;
           }
    } 
    全局变量  main函数前定义的变量 
    静态变量 
    */
    
    /*循环控制变量什么时候变化?
    i++  i--  j++  j--
    i+=2
    当这一次循环结束后在变化/执行 
    */ 
    
    /*
    for(int i = 1;i<=10;) {
        printf("i = %d\n",i);
        i+=1;
    }
    
    int i = 1;
    for(;int i = 1;i<=10;) {
        printf("i = %d\n",i);
        i+=1;
    }
    */
    
    
    //不断输出1-10之间的整数
    //int i = 1;
    /*
    for(int i = 1;i<=10;i++) 
    {
        printf("i = %d\n",i);
        if(i == 10) {
            i = 0;
        }
        //i++;
    }
     */
    
    //break跳出整个for循环
    //continue结束当前这次循环继续下一次循环 
        for(int i = 1;i<=10;i++) 
    {
        printf("i = %d\n",i);
        if(i == 5) {
            break;
        }
        //i++;
    }
    
    return 0;
}

程序运行结果


程序运行.PNG

for循环实例运用demo:ATM

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

/*
main函数:不写实际代码 ,逻辑
 */

程序运行结果:
捕获.PNG

switch语句的基础

1.

switch 可读性

2.switch基本结构

switch(已经确定值的变量-int-char){
case 10 'c':
break;
case 10 'c':
break;
default:
break;
}
同样功能if-else if-else if-else

switch语句demo:输入1-3之间的一个数,系统显示你输出的是哪一个数

#include<stdio.h>

int main(){
    /*
    switch  可读性 
    switch(已经确定值的变量-int-char){
    case 10 'c':
    break;
    case 10 'c':
    break;
    default:
    break;
    同样功能if-else  if-else  if-else 
    */
    
    int a=0;
    printf("请输入一个数1-3:");
    scanf("%d",&a);
    //int char-ASCII bool
    switch(a){
        case 1:
        printf("你输入的是1\n");
        break;
        case 2:
        printf("你输入的是2\n") ;
        break;
        default:
         printf("你输入的是3\n") ;
        break;
    } 
    
    return 0;
}

程序运行结果:
switch.PNG

随机数

1.随机数的产生

当程序运行起来的时候,系统自动产生一个种子
使用rand()产生随机数后,重新启动程序,再次使用rand(),发现种子是一样的
总结:只要种子一样产生的随机数就一样
如果需要每次重新运行都产生 不一样的随机数就需要更改种子
则此时就有
时间: 001 002
运用时间做种子:
srand(time(NULL)) 导入头文件<stdlib.h> <time.h>

控制时间

1.延时2s

<1.>第一种方式

for(long long i = 0;i<10000000000/14;i++); //显示时间2s即延时2s

<2.>第二种方式

(1.)

Sleep(2000) ;
#include<windows.h> 用Sleep延时时需用该头文件

(2.)

windows系统延时或用

 #include<windows.h>
int main(){
    Sleep(2000);
    return 0;
} 

2.刷新界面

<1.>

system("cls"); 刷新界面
#include<stdlib.h> 刷新界面需要使用该头文件

<2.>

mac系统刷新

    for(int i=0;i<20;i++){
    printf("\n");
}

demo:输入的内容显示2s后消失

//控制时间输入2s后消失 
#include<stdio.h>
#include<stdlib.h>//刷新界面需要使用该头文件 
#include<windows.h>//用Sleep延时时需用该头文件 
int main(){
    printf("12\n"); 
    
    //for(long long i = 0;i<10000000000/14;i++);//显示时间2s即延时2s
    Sleep(2000) ;//#include<windows.h>//用Sleep延时时需用该头文件
     
    system("cls");//刷新界面 
    
    return 0;
}

/*
windows系统延时或用
#include<windows.h>
int main(){
    Sleep(2000);
    return 0;
} 
*/


/*  mac系统刷新 
    for(int i=0;i<20;i++){
    printf("\n");
}
*/

demo:小游戏,产生不同的随机数,产生的随机数显示2s后消失,玩家输入所看到的随机数,输入正确,游戏继续,否则游戏结束

#include<stdio.h>
#include<stdlib.h>//使用rand函数需用此头文件 
#include<time.h>//关于时间的头文件 
#include<windows.h>//用Sleep延时时需用该头文件
int main(){
    int count = 3;//记录每次生成多少个随机数
    
    while(1){
        unsigned int seed = time(NULL);
        //设置随机数的种子
        srand(seed) ;
    
        for(int i = 0;i<count;i++){
            //生成一个随机数 
            int temp = rand() % 9 + 1;//生成0-1之间的数
            printf("%d ",temp); 
        } 
        printf("\n");
    
        //延时2s
        Sleep(2000) ;
        //for(int i = 0;i < 10000000000/15*2;i++);
    
        //刷新屏幕 
        system("cls");//#include<stdlib.h>//刷新界面需要使用该头文件 
        /*  mac
        for(int i=0;i<20;i++){
        printf("\n");
    }
    */
        int temp;
        printf("请输入:");
    
        //重新设种子和之前生成时的种子一样 
        srand(seed);
    
        //接受用户输入一个一个接收 
        for(int i = 0;i < count;i++){
            scanf("%d",&temp); 
     
    
    
     
        //获取对应生成的随机数
        int old = rand() % 9 + 1;
    
        //比较输入的和随机数是否相同
        if(temp != old){  
            printf("错误 退出!");
            exit(EXIT_SUCCESS);
          }
        } 

        printf("正确");
        count ++;//第一轮3个数,第二轮4个数,以此类推 
    }
        return 0;
    }

程序运行结果:
小游戏.PNG

数组

1.数组的基础 数组:存储多个同种类型的数据

<1.>数组的定义:必须明确知道数组元素的个数

系统为数组分配内存空间的时候 必须确定

<2.>数组内存

数组名就是数组的首地址

<3.>数组访问:下标 0 - n-1

#include <stdio.h>

int main(){
    //if for while 数组 指针 结构体 动态分配内存 
    //学生管理系统
    /*
    基本数据类型:int float double long char 
    
    数组:存储多个同种类型的数据 
    */ 
    //1.数组的定义:必须明确知道数组元素的个数 
    // 系统为数组分配内存空间的时候 必须确定 
    int a = 10; //4 
    int array1[4];
    int array2[4] = {1,2};
    
    //2.数组内存
    //数组名就是数组的首地址 
    int array[] = {1,2,3,4};
    printf("%d\n",array);
    printf("%d\n",array+1);
    
    printf("%d\n",&array[0]);
    printf("%d\n",&array[1]);
    
    //3.数组访问:下标 0 - n-1 
    array[0] = 2;
    array[1] = 23;
    
    //4.Demo - 产生4个随机数 保存到数组 输出 
    
    return 0;
}

<4.>Demo - 产生4个随机数 保存到数组 输出

#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
int main(){
    //产生四个(不同)随机数 保存到数组 输出 
    int array[4] = {};//最好初始化数组,防止出现数据出现错误 
    
    srand(time(NULL));//种种子,使每次产生的随机数不一样 
    
    //生成数组 
    /*防止生成的随机数中有重复,解决方法:产生随机数的同时
    去比较是否重复 ,如果重复就重新在产生一个随机数,如果
    不重复就保存 
    每次i的值正好可以用来判断已经有几个了 
    */
    
    for(int i = 0;i < 4;i++){
        int temp = rand() % 10;//产生0-99之间的数
        
        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--;//重新回到当前这一次 
             }
        }
        
          
    } 
    
    //输出 
    for(int i = 0;i < 4;i++){
        printf("%d ",array[i]);
    }  
    
    return 0;
}

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

推荐阅读更多精彩内容