C語言相關使用

學習內容

  • 全局變量與局部變量

  • switch語句

  • for循環(huán)

  • while循環(huán)

  • Break與Continue關鍵字

  • printf與scanf相關

  • 數(shù)組

  • rand() 與 srand()函數(shù)

  • 循環(huán)訓練demon之ATM

  • 循環(huán)訓練demon之記數(shù)字

  • 數(shù)組訓練之不同隨機數(shù)

1.全局變量與局部變量

因為變量作用域的不同,分為了局部變量與全局變量

全局變量

在所有函數(shù)外部定義的變量
作用域是從聲明時刻開始,到程序結束

局部變量

函數(shù)內部定義的變量
作用域僅限于函數(shù)內部, 離開該函數(shù)后就是無效的,再使用就會報錯

  • 在同一源文件中,允許全局變量和局部變量同名,在局部變量作用域內,同名的全局變量不起作用
  • 允許在不同的函數(shù)中使用相同的變量名,他們代表不同變量
  • 當全局變量與局部變量重名的時候,起作用的是局部變量,全局變量被屏蔽掉
  • 局部變量不能賦值為同名全局變量的值
#include <stdio.h>
int a = 3;//全局變量
int main(){
  int a = 4;//局部變量 
  printf("a = %d",a);
 return 0;
}

輸出:
  a = 4

2.switch語句

一個變量有多種值的情況下,不同值對應的情況不同,根據(jù)不同的值執(zhí)行不同的語句

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

    case 常量表達式n: 
                 語句 n;
    default: 
                 語句 n+1;
}
  • 表達式必須是一個常量(int,char類型等)或者枚舉類型
  • 表達式與常量表達式必須都是相同的數(shù)據(jù)類型
  • 當表達式的值等于某個常量表達式的值之后,執(zhí)行該表達式之后的語句
  • 當語句中出現(xiàn) break 的時候,語句中斷,并跳出 switch
  • 如果 case 語句不包含 break,控制流將會繼續(xù)后續(xù)的 case,直到遇到 break 為止
  • 一個 switch 語句可以有一個可選的 default case,出現(xiàn)在 switch 的結尾
//通過輸入1-3來判斷輸入的結果
int main(){
  int a = 0;
  printf("請輸入一個數(shù)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;
}

輸出:
      請輸入一個數(shù)1-3:3
      你輸入的是3

3.for循環(huán)

  for( init ; condition ; increment ){
               語句
  //   init  : 循環(huán)變量賦初值(表達式1)
  //condion  : 循環(huán)條件(表達式2)
 //increment : 循環(huán)變量增值(表達式3)
   }
  • 循環(huán)控制變量的定義和初始化只執(zhí)行一次
  • 表達式1、表達式2和表達式3之間是用分號 ; 隔開的
  • for(表達式1;表達式2;表達式3)的后面不要加(;)分號
  • for 循環(huán)的循環(huán)條件(condition)是決定循環(huán)的次數(shù)
  • for( ; ; )與while(1) 等價,都是死循環(huán),不停的執(zhí)行語句
int main(){
  //輸出1-10 之間的整數(shù)
  for(int i = 1; i <=10; i++){
      printf("i = %d\n", i);
  } 
   //輸出不停輸出1-10之間的整數(shù)
  for(int i = 1; i <= 10; i++){
      printf("i = %d\n", i);
      if(i == 10){
        i = 0;
      } 
  }
  //死循環(huán)
  for(; ;) {  
  }
  return 0;   
}
輸出:
     第一個循環(huán)輸出 i = 1 到 i =10;
     第二個循環(huán)持續(xù)輸出 i = 1 到 i =10 ;
     第三個循環(huán)死循環(huán),一直加載,從未停止;

4.while循環(huán)

while(表達式){
  語句塊
}
//表達式:循環(huán)條件
//語句塊:循環(huán)體

  • 先計算“表達式”的值,當值為真時, 執(zhí)行“語句塊”
  • 執(zhí)行完“語句塊”,再次計算表達式的值,如果為真,繼續(xù)執(zhí)行“語句塊”
  • 重復執(zhí)行這個過程,直到表達式的值為假,就退出循環(huán),執(zhí)行 while 語句后面的代碼
//使用while循環(huán)打印1-100的和
int main(){
  int i=1;//控制循環(huán)條件
  int sum=0;//總和
   while(i<=100){
       sum+=i;
       i++;
  }
   printf("sum = %d\n",sum);
   return 0;
}

輸出:
   sum = 5050

5.Break與Continue關鍵字

  • Break

在 switch 語句,當遇到 break 時,不再執(zhí)行 switch 中的任何語句
在 while,for 循環(huán)當中,當遇到 break 時,會終止循環(huán)而執(zhí)行整個循環(huán)語句后面的代碼

  • Continue

跳過循環(huán)體中剩余的語句而強制進入下一次循環(huán) (只用于 while、for 循環(huán)語句當中)

6.printf與scanf相關

緩沖區(qū):輸入輸出流

  • printf

向終端輸出字符串
先將字符串內容輸入到緩沖區(qū),之后再依次輸出緩沖區(qū)內容

printf
  • scanf

接收終端的輸入
在緩沖區(qū)里讀數(shù)據(jù),當緩沖區(qū)里有對應類型數(shù)據(jù),就從緩沖區(qū)里面取數(shù)據(jù)
如果沒有對應類型數(shù)據(jù),就等待用戶輸入數(shù)據(jù)

scanf

getchar(): 從緩沖區(qū)讀取一個字符

#include <stdio.h>

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

輸出
請輸入a:A
請輸入b:B
請輸入c:
a=a b=b c=

輸入 A ,按下回車之后,緩沖流里面為 A\n
之后取出 A 放到 a 的地址里面,此時緩沖區(qū)還剩下 \n
輸入 B,按下回車之后,此時緩沖區(qū)里面為 \nB\n
getchar()從緩沖區(qū)里面拿走一個\n,緩沖里還剩下 B\n
之后取出 B 放到 b 的地址里,此時緩沖區(qū)還剩下 \n
因為緩沖區(qū)里面有字符 \n,scanf就將緩沖里的內容放到 c 的地址里
所以當我們輸入A,B之后,就直接輸出了結果

7.數(shù)組

數(shù)組:用于儲存多個相同類型數(shù)據(jù)的集合

數(shù)組相關
  • 能夠存儲數(shù)據(jù) 就必須要有內存
  • 如何定義一個數(shù)值的同時為他分配內存
  • 數(shù)組定義時必須明確知道數(shù)組的大小
  • 數(shù)組名就是數(shù)組的首地址
聲明數(shù)組

在C 語言中,聲明一個數(shù)組,需要指定元素的類型和元素的數(shù)量

//數(shù)組聲明格式
type arrayName [arraySize];
//arrayName:數(shù)組名字
//[]:數(shù)組標識
//type:數(shù)組存儲類型
//arraySize:數(shù)組大小
初始化數(shù)組
  • C 語言當中,可以逐個初始化數(shù)組,也可以使用一個初始化語句。大括號 { } 之間的值的數(shù)目不能大于我們在數(shù)組聲明時在方括號 [ ] 中指定的元素數(shù)目。
int a[4] = {2,45,21,45};
  • 如果您省略掉了數(shù)組的大小,數(shù)組的大小則為初始化時元素的個數(shù)。
int a[] = {2,3,564,7};
  • 在定義時期明確指定數(shù)組的大小
int temp[5];
數(shù)組元素賦值
a[3] = 56;
//將數(shù)組第4個位置的值賦為56

8.rand() 與 srand()函數(shù)

  • rand()函數(shù)

函數(shù)頭文件:stdlib.h
函數(shù)定義:int rand(void)
函數(shù)功能:產生一個隨機數(shù)
返回值: 返回0至RAND_MAX之間的隨機整數(shù)值

  • srand()函數(shù)

函數(shù)頭文件:stdlib.h
函數(shù)定義:void srand(unsigned int seed)
函數(shù)功能:設置隨機數(shù)種子
函數(shù)說明:通常可以用getpid()(獲取當前進程的進程識別碼)或者time(NULL)(獲取當前系統(tǒng)的時間信息)來充當種子,保持每次運行時種子是不一樣的

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
  for(int i = 0;i < 5;i++){
      //產生1-10以內的數(shù)字 
      int temp = rand()%9 + 1;
      printf("%d ",temp);
  }
  printf("\n");
  srand(time(NULL));//播種 
  for(int i = 0;i < 5;i++){
      int temp1 = rand()%9 + 1; 
      printf("%d ",temp1);
  }
return 0;
}

輸出:(第一次結果)
6 9 8 5 9
5 3 1 4 6
輸出:(第二次次結果)
6 9 8 5 9(與第一次相同)
5 2 1 7 2

9.循環(huán)訓練demon之ATM

#include <stdio.h>
int main(){ 
  int old = 123;//原始密碼 
  int input;//輸入密碼 
  int wrongTime = 3; //錯誤次數(shù)
  
  printf("**********************\n"); 
  printf("  歡迎使用建設銀行系統(tǒng)\n");
  printf("**********************\n");
  
  printf("請輸入密碼:");
  for(int i = 1;i <= wrongTime; i++){
      scanf("%d", &input);
      
      //判斷密碼
      if(input == old){
          //密碼正確
          break;
      } 
      
      if(i == wrongTime){
          printf("錯誤次數(shù)過多!\n");
          return 1;
      }
      //密碼不正確
      printf("密碼不正確,請重新輸入密碼:"); 
  } 
  
  int choice;//接收用戶選擇
  char goon;//是否繼續(xù) 
  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;
              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://退出 
              exit(EXIT_SUCCESS);//成功退出
              break;
      } 
      
      //提示是否繼續(xù)
      for(;1<2;){
          printf("是否繼續(xù)(y/n):");
          getchar();
          scanf("%c", &goon); 
          if(goon == 'y'){
              break; 
          }
          if (goon == 'n'){
              exit(EXIT_SUCCESS); 
          }
          printf("輸入無效 ");
      }
  }
  return 0;
}

10.循環(huán)訓練demon之記數(shù)字

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

int main(){
  int count = 3;//記錄每次生成多少個隨機數(shù)
  while(1){
      unsigned int seed = time(NULL); //設置產生種子的時間固定
      
      //設置隨機數(shù)的種子
      srand(seed); 
      for(int i = 0; i < count; i++){
          //生成一個隨機數(shù) 
          int temp2 = rand() % 9 + 1;
          printf("%d ",temp2); 
      } 
      printf("\n");
  
      // 延時2s
      Sleep(2000);
  
      //刷新屏幕 
      system("cls");
      int temp;//定義用戶輸入的變量
      printf("請輸入:");
      //重新設種子和之前生成時的種子一樣
      srand(seed); 
      //接收用戶輸入 一個一個接收 
      for(int i = 0; i < count; i++){
          scanf("%d", &temp);
          //獲取對應的生成的隨機數(shù)
          int old = rand() % 9 + 1;
          //比較輸入的和隨機數(shù)是否相同 
          if (temp != old){
              printf("錯誤 退出!\n");
              exit(EXIT_SUCCESS); 
          } 
      }
      printf("正確!\n"); 
      //增加產生數(shù)字的個數(shù) 
      count++; 
  }
  return 0;
}

11.數(shù)組訓練之不同隨機數(shù)

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>
int main(){
  int array[4] = {};
  srand(time(NULL));//初始化隨機種子
  for (int i = 0; i < 4; i++){
       //產生一個隨機數(shù)
      int temp = rand() % 4;  
      if (i == 0){//第一個隨機數(shù) 直接保存到數(shù)組 
          array[i] = temp;
      }else{
          //判斷前面是否已經(jīng)存在了
          int j = 0; 
          for(; j <i; j++){
              //比較j對應的值和temp是否相同 
              if(array[j] == temp){
                  //重復了 打印重復了的數(shù)字
                  printf("重復了:%d\n",temp); 
                  break; 
              } 
          }
          //判斷是怎么出來的
          if (j == i){
              //將i前面的比較一遍都沒發(fā)現(xiàn)重復的
              //保存temp值
              array[i] = temp; 
          }else{
              //重復了
              //重新回到當前這一次 
              i--; 
          }
      } 
  }
  //輸出 
  for (int i = 0; i< 4; i++){
      printf("%d ", array[i]);
  }
  return 0;
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容

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