C語(yǔ)言基礎(chǔ)(二)

目的:掌握用C語(yǔ)言編程的基本技能
內(nèi)容:1.全局變量與局部變量
???2.switch語(yǔ)句
???3.for循環(huán)
???4.while循環(huán)
???5.break與continue
???6. getchar()的運(yùn)用
???7. 數(shù)組
???8. while訓(xùn)練之十進(jìn)制轉(zhuǎn)化為二進(jìn)制
???9. 數(shù)組訓(xùn)練之產(chǎn)生不同隨機(jī)數(shù)
???10. "最強(qiáng)大腦“小游戲?qū)崙?zhàn)
???11. ATM實(shí)戰(zhàn)

全局變量與局部變量

根據(jù)變量的作用域不同,可分為全局變量和局部變量
1.全局變量:在所有函數(shù)外部定義的變量(即在main函數(shù)前面定義的變量),作用域?yàn)閺穆暶鏖_(kāi)始到程序結(jié)束
?局部變量:在函數(shù)內(nèi)部定義的變量(即在代碼塊之間定義的變量)恬惯,作用域僅限于函數(shù)內(nèi)部狭郑,離開(kāi)該函數(shù)后無(wú)效
2.在同一源文件中,允許全局變量與局部變量重名铸题。重名時(shí)铡恕,在局部變量作用域內(nèi),起作用的是局部變量丢间,同名的全局變量被屏蔽
3.允許在不同的函數(shù)中使用相同的變量名探熔,因?yàn)樗鼈兇聿煌淖兞?br> 4.局部變量不能賦值為同名全局變量的值

#include <stdio.h>

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

 return 0;
}

switch語(yǔ)句

1.用于一個(gè)變量有多個(gè)確定的值,而不同的值對(duì)應(yīng)的執(zhí)行語(yǔ)句不同的情況烘挫,格式如下:

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

2.注意:

  • 表達(dá)式必須是一個(gè)常量(如 int,char類型等)或者枚舉類型诀艰,且表達(dá)式與常量表達(dá)式必須是相同的數(shù)據(jù)類型
  • 當(dāng)表達(dá)式的值為某個(gè)常量表達(dá)式時(shí),執(zhí)行該表達(dá)式后的語(yǔ)句
  • 當(dāng)語(yǔ)句中出現(xiàn)break時(shí)蕴侣,語(yǔ)句中斷并跳出switch;如果沒(méi)有出現(xiàn)break踊沸,控制流將繼續(xù)執(zhí)行后面的case人乓,直到遇到break才結(jié)束
  • 一個(gè)switch語(yǔ)句可以有一個(gè)出現(xiàn)在switch語(yǔ)句末端的default case
#include <stdio.h>

int main(){
  int a = 0;
  
  printf("請(qǐng)輸入一個(gè)數(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;
} 

for循環(huán)

1.for循環(huán)的格式為:for(循環(huán)控制變量;運(yùn)行的條件绿满;控制變量的變化){語(yǔ)句塊}
例如: for(int i=0;i<10;i++){printf("%d",i);}

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

3.循環(huán)控制變量的定義和初始化只執(zhí)行一次
4.循環(huán)控制變量什么時(shí)候變化棒口?當(dāng)這一次循環(huán)結(jié)束之后
5.for( ; ; )與while(1)等價(jià),都時(shí)不停執(zhí)行語(yǔ)句的死循環(huán)

int main(){
  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;
      }
  }//不斷輸出1-10之間的整數(shù)
  
  for(; ;) {
      
  }//死循環(huán) 

while循環(huán)

  1. while循環(huán)的格式為:while(表達(dá)式){語(yǔ)句塊}
  2. 先計(jì)算表達(dá)式的值辜膝,當(dāng)值為真時(shí)无牵,執(zhí)行語(yǔ)句塊
  3. 執(zhí)行完語(yǔ)句塊后再次計(jì)算表達(dá)式的值,如果為真厂抖,繼續(xù)執(zhí)行語(yǔ)句塊
  4. 重復(fù)執(zhí)行這個(gè)過(guò)程茎毁,直到表達(dá)式的值為假再退出循環(huán),執(zhí)行while語(yǔ)句后的代碼
#include <stdio.h>

//使用while循環(huán)計(jì)算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語(yǔ)句中忱辅,當(dāng)遇到break時(shí)七蜘,跳出switch;在while和for循環(huán)中墙懂,當(dāng)遇到break時(shí)橡卤,會(huì)跳出循環(huán)而執(zhí)行后面的代碼
  2. continue(只用于while和for循環(huán)語(yǔ)句):
    跳過(guò)循環(huán)體中剩余語(yǔ)句而強(qiáng)制進(jìn)入下一次循環(huán)

getchar()的運(yùn)用

  1. getchar()用于從緩沖區(qū)取走一個(gè)字符
  2. 輸入1,按下回車鍵后损搬,緩沖區(qū)里為1\n碧库,之后1被放到a的地址中柜与,此時(shí)緩沖區(qū)剩下\n
    輸入2,按下回車鍵后嵌灰,緩沖區(qū)里為\n2\n弄匕,而getchar()從緩沖區(qū)取走一個(gè)\n,緩沖區(qū)剩下2\n,之后2被放到b的地址中,此時(shí)緩沖區(qū)剩下\n
    輸入3沽瞭,按下回車鍵后迁匠,緩沖區(qū)里為\n3\n,而getchar()從緩沖區(qū)取走一個(gè)\n,緩沖區(qū)剩下3\n,之后3被放到c的地址中驹溃,此時(shí)緩沖區(qū)剩下\n
#include <stdio.h>

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


 return 0;
}
/*程序運(yùn)行: 
請(qǐng)輸入a:1
請(qǐng)輸入b:2
請(qǐng)輸入c:3
a=1 b=2 c=3*/

數(shù)組

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

while訓(xùn)練之十進(jìn)制轉(zhuǎn)化為二進(jìn)制

#include <stdio.h>

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

 return 0;
}

數(shù)組訓(xùn)練之產(chǎn)生不同隨機(jī)數(shù)

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

//4.產(chǎn)生4個(gè)(不同)隨機(jī)數(shù) 保存到數(shù)組 輸出 
int main(){
  int array[4] = {};
  
  srand(time(NULL));
  
  /*生成數(shù)組  產(chǎn)生隨機(jī)數(shù)的同時(shí)比較是否重復(fù) 
  如果重復(fù)就重新產(chǎn)生一個(gè)隨機(jī)數(shù) 
  如果不重復(fù)就保存
  每次i的值正好可以用來(lái)判斷已經(jīng)有幾個(gè)數(shù)了*/ 
  for(int i = 0;i < 4;i++){
      int temp = rand() % 100;
      
      if(i == 0){
          //第一個(gè) 直接保存
          array[i] = temp; 
      }else{
          //判斷前面是否已經(jīng)存在這個(gè)數(shù)
          int j = 0;
          for(;j < i;j++){
              //比較j對(duì)應(yīng)的值和temp是否相同
              if(array[j] == temp){
                  //重復(fù)了
                  break; 
              } 
          }
          //判斷是怎么出來(lái)的
          if(j == i){
              //將i前面的值比較一遍都沒(méi)有發(fā)現(xiàn)重復(fù)的
              //保存temp的值
              array[i] = temp; 
          }else{
              //重復(fù)了  重新回到當(dāng)前這一次
              i --;    
          } 
      } 
  }
  
  //輸出 
  for(int i = 0;i < 4;i++){ 
      printf("%d ",array[i]);
  } 
  
 return 0;
}

"最強(qiáng)大腦“小游戲?qū)崙?zhàn)

#include <stdio.h>
#include <stdlib.h>//設(shè)置隨機(jī)數(shù)需導(dǎo)入該頭文件
#include <time.h>//設(shè)置隨機(jī)數(shù)需導(dǎo)入該頭文件 
#include <windows.h>//設(shè)置延時(shí)需導(dǎo)入該頭文件 

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

   return 0;
}

ATM實(shí)戰(zhàn)

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

int main(){
  int password = 123;//原始密碼 
  int input;//輸入密碼
  int wrongtime = 3;//錯(cuò)誤次數(shù)
  int total = 1000;//余額 
   
  printf("*****************************\n");
  printf("      歡迎使用建設(shè)銀行       \n"); 
  printf("*****************************\n");
  printf("請(qǐng)輸入密碼:"); 
  
   for(int i = 1;i <= wrongtime;i ++){
      scanf("%d",&input); //輸入密碼 
      //密碼正確 
      if(input == password){
          break;
      } 
      
      if(i == wrongtime){
          printf("錯(cuò)誤次數(shù)過(guò)多,請(qǐng)聯(lián)系工作人員傍药!\n");
          return 1;
      }
      //密碼錯(cuò)誤 
      printf("密碼錯(cuò)誤磺平,請(qǐng)重新輸入:");      
  }
  
  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("請(qǐng)選擇操作:");
  scanf("%d",&choice);
  
  //判斷操作
  switch(choice){
      case 1://存款
          int temp;
          printf("請(qǐng)輸入存款金額:");
          scanf("%d",&temp);
          total += temp;
          printf("存款成功!可用余額為:%d\n",total); 
          break;
      case 2://取款 
          int temp2;
          for(;1 < 2;){
          printf("請(qǐng)輸入取款金額:");
          scanf("%d",&temp2);
          
          if(temp2 > total){
              printf("余額不足");
          }else{
              total -= temp2;
              printf("取款成功!可用余額為:%d\n",total);
              break;
          }
      }
          break; 
      case 3://查詢余額 
      printf("當(dāng)前余額為:%d\n",total);
          break;
      case 4://更改密碼 
          int n1;
          int n2;
          for(;1<2;){
              printf("請(qǐng)輸入新密碼:");
              scanf("%d", &n1);
                  
              printf("請(qǐng)確認(rèn)密碼:");
              scanf("%d", &n2);
                  
              if (n1 == n2){
                  printf("密碼設(shè)置成功!\n");
                  password = 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("輸入無(wú)效 "); 
      } 
  
   } 
  
  
   return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拐辽,一起剝皮案震驚了整個(gè)濱河市拣挪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俱诸,老刑警劉巖菠劝,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異睁搭,居然都是意外死亡赶诊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門园骆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舔痪,“玉大人,你說(shuō)我怎么就攤上這事锌唾〕耄” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵晌涕,是天一觀的道長(zhǎng)滋捶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)余黎,這世上最難降的妖魔是什么重窟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮惧财,結(jié)果婚禮上亲族,老公的妹妹穿的比我還像新娘炒考。我一直安慰自己,他們只是感情好霎迫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帘靡,像睡著了一般知给。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上描姚,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天涩赢,我揣著相機(jī)與錄音,去河邊找鬼轩勘。 笑死筒扒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绊寻。 我是一名探鬼主播花墩,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼澄步!你這毒婦竟也來(lái)了冰蘑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤村缸,失蹤者是張志新(化名)和其女友劉穎祠肥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梯皿,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仇箱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了东羹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剂桥。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖百姓,靈堂內(nèi)的尸體忽然破棺而出渊额,到底是詐尸還是另有隱情,我是刑警寧澤垒拢,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布旬迹,位于F島的核電站,受9級(jí)特大地震影響求类,放射性物質(zhì)發(fā)生泄漏奔垦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一尸疆、第九天 我趴在偏房一處隱蔽的房頂上張望椿猎。 院中可真熱鬧惶岭,春花似錦、人聲如沸犯眠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筐咧。三九已至鸯旁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間量蕊,已是汗流浹背铺罢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留残炮,地道東北人韭赘。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像势就,于是被迫代替她去往敵國(guó)和親泉瞻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,345評(píng)論 0 2
  • 第1章 第一個(gè)C程序第2章 C語(yǔ)言基礎(chǔ)第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設(shè)計(jì)第5章 條件結(jié)構(gòu)程序設(shè)計(jì)第6章...
    小獅子365閱讀 10,655評(píng)論 3 71
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一抱完。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)贼陶; ...
    朱森閱讀 3,446評(píng)論 3 44
  • 數(shù)組在程序設(shè)計(jì)中,為了處理方便巧娱, 把具有相同類型的若干變量按有序的形式組織起來(lái)碉怔。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 3,931評(píng)論 2 13
  • C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開(kāi)始,這里是100個(gè)經(jīng)典的算法-1C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開(kāi)始禁添,這里是100個(gè)經(jīng)典的 算法 題目:...
    Poison_19ce閱讀 1,141評(píng)論 0 0