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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容