C語言基礎(二)

目的:掌握用C語言編程的基本技能
內容:1.全局變量與局部變量
???2.switch語句
???3.for循環
???4.while循環
???5.break與continue
???6. getchar()的運用
???7. 數組
???8. while訓練之十進制轉化為二進制
???9. 數組訓練之產生不同隨機數
???10. "最強大腦“小游戲實戰
???11. ATM實戰

全局變量與局部變量

根據變量的作用域不同,可分為全局變量和局部變量
1.全局變量:在所有函數外部定義的變量(即在main函數前面定義的變量),作用域為從聲明開始到程序結束
?局部變量:在函數內部定義的變量(即在代碼塊之間定義的變量),作用域僅限于函數內部,離開該函數后無效
2.在同一源文件中,允許全局變量與局部變量重名。重名時,在局部變量作用域內,起作用的是局部變量,同名的全局變量被屏蔽
3.允許在不同的函數中使用相同的變量名,因為它們代表不同的變量
4.局部變量不能賦值為同名全局變量的值

#include <stdio.h>

int a = 0;//全局變量 
int main(){
  int a = 1;//局部變量 
  printf("a = %d",a);//輸出 a = 1 

 return 0;
}

switch語句

1.用于一個變量有多個確定的值,而不同的值對應的執行語句不同的情況,格式如下:

switch(表達式){
      case 常量表達式1:
           語句1:
      case 常量表達式2:
           語句2;
      ......
      case 常量表達式 n:
           語句n;
      default:
           語句 n + 1 ; 
  } 

2.注意:

  • 表達式必須是一個常量(如 int,char類型等)或者枚舉類型,且表達式與常量表達式必須是相同的數據類型
  • 當表達式的值為某個常量表達式時,執行該表達式后的語句
  • 當語句中出現break時,語句中斷并跳出switch;如果沒有出現break,控制流將繼續執行后面的case,直到遇到break才結束
  • 一個switch語句可以有一個出現在switch語句末端的default case
#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.for循環的格式為:for(循環控制變量;運行的條件;控制變量的變化){語句塊}
例如: for(int i=0;i<10;i++){printf("%d",i);}

  1. for循環中間條件是必須的,其他部分可以省略,但分號不可以省略
    如:for(;1<2;)

3.循環控制變量的定義和初始化只執行一次
4.循環控制變量什么時候變化?當這一次循環結束之后
5.for( ; ; )與while(1)等價,都時不停執行語句的死循環

int main(){
  for(int i = 1;i <= 10;i++){
      printf("i = %d\n",i);
  } //輸出1-10之間的整數
  for(int i =1;i <= 10;i++){
      printf("i = %d\n",i);
      
      if(i == 10){
          i = 0;
      }
  }//不斷輸出1-10之間的整數
  
  for(; ;) {
      
  }//死循環 

while循環

  1. while循環的格式為:while(表達式){語句塊}
  2. 先計算表達式的值,當值為真時,執行語句塊
  3. 執行完語句塊后再次計算表達式的值,如果為真,繼續執行語句塊
  4. 重復執行這個過程,直到表達式的值為假再退出循環,執行while語句后的代碼
#include <stdio.h>

//使用while循環計算1-10的和 
int main(){
  int a = 1;
  int sum = 0;
  while(a <= 10){
      sum += a;
      a++;
  }
  printf("%d",sum);

 return 0;
}

break與continue

  1. break:
    在switch語句中,當遇到break時,跳出switch;在while和for循環中,當遇到break時,會跳出循環而執行后面的代碼
  2. continue(只用于while和for循環語句):
    跳過循環體中剩余語句而強制進入下一次循環

getchar()的運用

  1. getchar()用于從緩沖區取走一個字符
  2. 輸入1,按下回車鍵后,緩沖區里為1\n,之后1被放到a的地址中,此時緩沖區剩下\n
    輸入2,按下回車鍵后,緩沖區里為\n2\n,而getchar()從緩沖區取走一個\n,緩沖區剩下2\n,之后2被放到b的地址中,此時緩沖區剩下\n
    輸入3,按下回車鍵后,緩沖區里為\n3\n,而getchar()從緩沖區取走一個\n,緩沖區剩下3\n,之后3被放到c的地址中,此時緩沖區剩下\n
#include <stdio.h>

int main(){
  char a;
  printf("請輸入a:"); 
  scanf("%c", &a);
  
  char b;
  printf("請輸入b:");
  getchar();
  scanf("%c", &b);
  
  char c; 
  printf("請輸入c:");
  getchar();
  scanf("%c", &c);
  
  printf("a=%c b=%c c=%c\n",a,b,c);


 return 0;
}
/*程序運行: 
請輸入a:1
請輸入b:2
請輸入c:3
a=1 b=2 c=3*/

數組

  1. 數組:用于儲存多個相同類型數據的集合
  2. 數組的聲明格式: 數組儲存類型+數組名字+[數組大小]
    例如:int array[3]
  3. 數組名就是數組的首地址
  4. 系統為數組分配內存空間的時候,必須明確知道數組元素的個數
  5. 在C語言中,可以逐個初始化數組,也可以使用一個初始化語句
  6. 數組的初始化:
  • 定義時要明確指定數組的大小,如:
int array1[4];
  • 如果省略了數組的大小,數組的大小則為初始化時元素的個數,如:
  int array[] = {1,2,3,4};
  • 大括號里,值的數目不能大于數組聲明時在方括號里指定的數組大小,如:
int array2[2] = {1,2}; 
  1. 數組元素的賦值:
array[0] = 2;//將數組第1個位置賦值為2 
array[1] = 23;//將數組第2個位置賦值為23 

while訓練之十進制轉化為二進制

#include <stdio.h>

int main(){
  int num;
  printf("請輸入一個數字:");
  scanf("%d",&num);
  
  //二進制
  int wei = 1;
  long long sum = 0; 
  while(1){
      //取余
      int yu = num % 2;
      num = num / 2;
      
      //目前的總和:當前位數的值 + 之前的值
      sum = sum + yu * wei;
      wei = wei * 10;
      
      if(num < 2){
          sum = sum + num * wei;
          break;
      } 
  }
  printf("%d\n",sum);

 return 0;
}

數組訓練之產生不同隨機數

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

//4.產生4個(不同)隨機數 保存到數組 輸出 
int main(){
  int array[4] = {};
  
  srand(time(NULL));
  
  /*生成數組  產生隨機數的同時比較是否重復 
  如果重復就重新產生一個隨機數 
  如果不重復就保存
  每次i的值正好可以用來判斷已經有幾個數了*/ 
  for(int i = 0;i < 4;i++){
      int temp = rand() % 100;
      
      if(i == 0){
          //第一個 直接保存
          array[i] = temp; 
      }else{
          //判斷前面是否已經存在這個數
          int j = 0;
          for(;j < i;j++){
              //比較j對應的值和temp是否相同
              if(array[j] == 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;
}

"最強大腦“小游戲實戰

#include <stdio.h>
#include <stdlib.h>//設置隨機數需導入該頭文件
#include <time.h>//設置隨機數需導入該頭文件 
#include <windows.h>//設置延時需導入該頭文件 

int main(){
  int count = 3;//記錄每次生成多少個隨機數 
  printf("歡迎來到最強大腦!游戲開始!\n");
  
  while(1){ 
  unsigned int seed = time(NULL);//1000
  //設置隨機數的種子 
   srand(seed);
  for(int i = 0;i < count;i ++){
      //生成一個隨機數 
      int temp = rand() % 9 + 1;
      printf("%d\n",temp);
  }
  
  //延時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 input;
  printf("請輸入你看到的數字:");
  
  //重新設種子 和之前生成的種子一樣
   srand(seed); 
  
  //接收用戶輸入 一個一個接收 
  for(int i = 0;i < count;i++){
      scanf("%d",&input);
      
      //獲取對應生成的隨機數
      int old = rand() % 9 + 1;
      
      //判斷輸入的數和隨機數是否相同 
      printf("old:%d\n",old);
      if(input != old){
          printf("錯誤 退出!\n");
          exit(EXIT_SUCCESS); 
      } 
  }
  
  count ++; 
  } 

   return 0;
}

ATM實戰

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

int main(){
  int password = 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 == password){
          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;
          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");
                  password = n1;
                  break;
              } else{
                  printf("兩次輸入不一致!");
              }
          } 
          break;
      default://退出
          exit(EXIT_SUCCESS);
          break;          
      }
      
      //提示是否繼續
      for(;1 < 2;){
          printf("是否繼續(y/n)");
          getchar();
          scanf("%c",&goon);
          
          if(goon == 'y'){
              break;
          } 
          if(goon == 'n'){
              exit(EXIT_SUCCESS);
          }
          printf("輸入無效 "); 
      } 
  
   } 
  
  
   return 0;
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,390評論 0 2
  • 第1章 第一個C程序第2章 C語言基礎第3章 變量和數據類型第4章 順序結構程序設計第5章 條件結構程序設計第6章...
    小獅子365閱讀 10,714評論 3 71
  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,470評論 3 44
  • 數組在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱...
    朱森閱讀 3,985評論 2 13
  • C語言的學習要從基礎開始,這里是100個經典的算法-1C語言的學習要從基礎開始,這里是100個經典的 算法 題目:...
    Poison_19ce閱讀 1,166評論 0 0