目的:掌握用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);}
- 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)
- while循環(huán)的格式為:while(表達(dá)式){語(yǔ)句塊}
- 先計(jì)算表達(dá)式的值辜膝,當(dāng)值為真時(shí)无牵,執(zhí)行語(yǔ)句塊
- 執(zhí)行完語(yǔ)句塊后再次計(jì)算表達(dá)式的值,如果為真厂抖,繼續(xù)執(zhí)行語(yǔ)句塊
- 重復(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
- break:
在switch語(yǔ)句中忱辅,當(dāng)遇到break時(shí)七蜘,跳出switch;在while和for循環(huán)中墙懂,當(dāng)遇到break時(shí)橡卤,會(huì)跳出循環(huán)而執(zhí)行后面的代碼- continue(只用于while和for循環(huán)語(yǔ)句):
跳過(guò)循環(huán)體中剩余語(yǔ)句而強(qiáng)制進(jìn)入下一次循環(huán)
getchar()的運(yùn)用
- getchar()用于從緩沖區(qū)取走一個(gè)字符
- 輸入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ù)組
- 數(shù)組:用于儲(chǔ)存多個(gè)相同類型數(shù)據(jù)的集合
- 數(shù)組的聲明格式: 數(shù)組儲(chǔ)存類型+數(shù)組名字+[數(shù)組大小]
例如:int array[3]- 數(shù)組名就是數(shù)組的首地址
- 系統(tǒng)為數(shù)組分配內(nèi)存空間的時(shí)候城丧,必須明確知道數(shù)組元素的個(gè)數(shù)
- 在C語(yǔ)言中,可以逐個(gè)初始化數(shù)組,也可以使用一個(gè)初始化語(yǔ)句
- 數(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};
- 數(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; }