學(xué)習(xí)內(nèi)容
全局變量與局部變量
switch語(yǔ)句
for循環(huán)
while循環(huán)
Break與Continue關(guān)鍵字
printf與scanf相關(guān)
數(shù)組
rand() 與 srand()函數(shù)
循環(huán)訓(xùn)練demon之ATM
循環(huán)訓(xùn)練demon之記數(shù)字
數(shù)組訓(xùn)練之不同隨機(jī)數(shù)
1.全局變量與局部變量
因?yàn)樽兞孔饔糜虻牟煌拱裕譃榱司植孔兞颗c全局變量
全局變量
在所有函數(shù)外部定義的變量
作用域是從聲明時(shí)刻開(kāi)始向族,到程序結(jié)束局部變量
函數(shù)內(nèi)部定義的變量
作用域僅限于函數(shù)內(nèi)部, 離開(kāi)該函數(shù)后就是無(wú)效的洋侨,再使用就會(huì)報(bào)錯(cuò)
- 在同一源文件中灼卢,允許全局變量和局部變量同名销钝,在局部變量作用域內(nèi)跨扮,同名的全局變量不起作用
- 允許在不同的函數(shù)中使用相同的變量名受扳,他們代表不同變量
- 當(dāng)全局變量與局部變量重名的時(shí)候嗜桌,起作用的是局部變量,全局變量被屏蔽掉
- 局部變量不能賦值為同名全局變量的值
#include <stdio.h> int a = 3;//全局變量 int main(){ int a = 4;//局部變量 printf("a = %d",a); return 0; } 輸出: a = 4
2.switch語(yǔ)句
一個(gè)變量有多種值的情況下辞色,不同值對(duì)應(yīng)的情況不同,根據(jù)不同的值執(zhí)行不同的語(yǔ)句
switch(表達(dá)式){ case 常量表達(dá)式1: 語(yǔ)句 1; case 常量表達(dá)式2: 語(yǔ)句 2; ...... case 常量表達(dá)式n: 語(yǔ)句 n; default: 語(yǔ)句 n+1; }
- 表達(dá)式必須是一個(gè)常量(int,char類型等)或者枚舉類型
- 表達(dá)式與常量表達(dá)式必須都是相同的數(shù)據(jù)類型
- 當(dāng)表達(dá)式的值等于某個(gè)常量表達(dá)式的值之后浮定,執(zhí)行該表達(dá)式之后的語(yǔ)句
- 當(dāng)語(yǔ)句中出現(xiàn) break 的時(shí)候相满,語(yǔ)句中斷,并跳出 switch
- 如果 case 語(yǔ)句不包含 break桦卒,控制流將會(huì)繼續(xù)后續(xù)的 case立美,直到遇到 break 為止
- 一個(gè) switch 語(yǔ)句可以有一個(gè)可選的 default case,出現(xiàn)在 switch 的結(jié)尾
//通過(guò)輸入1-3來(lái)判斷輸入的結(jié)果 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; } 輸出: 請(qǐng)輸入一個(gè)數(shù)1-3:3 你輸入的是3
3.for循環(huán)
for( init ; condition ; increment ){ 語(yǔ)句 // init : 循環(huán)變量賦初值(表達(dá)式1) //condion : 循環(huán)條件(表達(dá)式2) //increment : 循環(huán)變量增值(表達(dá)式3) }
- 循環(huán)控制變量的定義和初始化只執(zhí)行一次
- 表達(dá)式1方灾、表達(dá)式2和表達(dá)式3之間是用分號(hào)
;
隔開(kāi)的- for(表達(dá)式1建蹄;表達(dá)式2;表達(dá)式3)的后面不要加(
;
)分號(hào)- for 循環(huán)的循環(huán)條件(condition)是決定循環(huán)的次數(shù)
- for( ; ; )與while(1) 等價(jià)裕偿,都是死循環(huán)洞慎,不停的執(zhí)行語(yǔ)句
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; } 輸出: 第一個(gè)循環(huán)輸出 i = 1 到 i =10; 第二個(gè)循環(huán)持續(xù)輸出 i = 1 到 i =10 ; 第三個(gè)循環(huán)死循環(huán)嘿棘,一直加載劲腿,從未停止;
4.while循環(huán)
while(表達(dá)式){ 語(yǔ)句塊 } //表達(dá)式:循環(huán)條件 //語(yǔ)句塊:循環(huán)體
- 先計(jì)算“表達(dá)式”的值鸟妙,當(dāng)值為真時(shí)焦人, 執(zhí)行“語(yǔ)句塊”
- 執(zhí)行完“語(yǔ)句塊”挥吵,再次計(jì)算表達(dá)式的值,如果為真花椭,繼續(xù)執(zhí)行“語(yǔ)句塊”
- 重復(fù)執(zhí)行這個(gè)過(guò)程忽匈,直到表達(dá)式的值為假,就退出循環(huán)矿辽,執(zhí)行 while 語(yǔ)句后面的代碼
//使用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關(guān)鍵字
Break
在 switch 語(yǔ)句丹允,當(dāng)遇到 break 時(shí),不再執(zhí)行 switch 中的任何語(yǔ)句
在 while嗦锐,for 循環(huán)當(dāng)中嫌松,當(dāng)遇到 break 時(shí),會(huì)終止循環(huán)而執(zhí)行整個(gè)循環(huán)語(yǔ)句后面的代碼
Continue
跳過(guò)循環(huán)體中剩余的語(yǔ)句而強(qiáng)制進(jìn)入下一次循環(huán) (只用于 while奕污、for 循環(huán)語(yǔ)句當(dāng)中)
6.printf與scanf相關(guān)
緩沖區(qū):輸入輸出流
printf
向終端輸出字符串
先將字符串內(nèi)容輸入到緩沖區(qū)萎羔,之后再依次輸出緩沖區(qū)內(nèi)容
scanf
接收終端的輸入
在緩沖區(qū)里讀數(shù)據(jù),當(dāng)緩沖區(qū)里有對(duì)應(yīng)類型數(shù)據(jù)碳默,就從緩沖區(qū)里面取數(shù)據(jù)
如果沒(méi)有對(duì)應(yīng)類型數(shù)據(jù)贾陷,就等待用戶輸入數(shù)據(jù)getchar(): 從緩沖區(qū)讀取一個(gè)字符
#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:"); scanf("%c", &c); printf("\na=%c b=%c c=%c\n",a,b,c); return 0; } 輸出 請(qǐng)輸入a:A 請(qǐng)輸入b:B 請(qǐng)輸入c: a=a b=b c=
輸入 A ,按下回車之后嘱根,緩沖流里面為
A\n
之后取出 A 放到 a 的地址里面髓废,此時(shí)緩沖區(qū)還剩下\n
輸入 B,按下回車之后该抒,此時(shí)緩沖區(qū)里面為\nB\n
getchar()從緩沖區(qū)里面拿走一個(gè)\n慌洪,緩沖里還剩下B\n
之后取出 B 放到 b 的地址里,此時(shí)緩沖區(qū)還剩下\n
因?yàn)榫彌_區(qū)里面有字符\n
凑保,scanf就將緩沖里的內(nèi)容放到 c 的地址里
所以當(dāng)我們輸入A,B之后冈爹,就直接輸出了結(jié)果
7.數(shù)組
數(shù)組:用于儲(chǔ)存多個(gè)相同類型數(shù)據(jù)的集合
數(shù)組相關(guān)
- 能夠存儲(chǔ)數(shù)據(jù) 就必須要有內(nèi)存
- 如何定義一個(gè)數(shù)值的同時(shí)為他分配內(nèi)存
- 數(shù)組定義時(shí)必須明確知道數(shù)組的大小
- 數(shù)組名就是數(shù)組的首地址
聲明數(shù)組
在C 語(yǔ)言中,聲明一個(gè)數(shù)組欧引,需要指定元素的類型和元素的數(shù)量
//數(shù)組聲明格式 type arrayName [arraySize]; //arrayName:數(shù)組名字 //[]:數(shù)組標(biāo)識(shí) //type:數(shù)組存儲(chǔ)類型 //arraySize:數(shù)組大小
初始化數(shù)組
- C 語(yǔ)言當(dāng)中频伤,可以逐個(gè)初始化數(shù)組,也可以使用一個(gè)初始化語(yǔ)句芝此。大括號(hào) { } 之間的值的數(shù)目不能大于我們?cè)跀?shù)組聲明時(shí)在方括號(hào) [ ] 中指定的元素?cái)?shù)目憋肖。
int a[4] = {2,45,21,45};
- 如果您省略掉了數(shù)組的大小,數(shù)組的大小則為初始化時(shí)元素的個(gè)數(shù)婚苹。
int a[] = {2,3,564,7};
- 在定義時(shí)期明確指定數(shù)組的大小
int temp[5];
數(shù)組元素賦值
a[3] = 56; //將數(shù)組第4個(gè)位置的值賦為56
8.rand() 與 srand()函數(shù)
rand()函數(shù)
函數(shù)頭文件:stdlib.h
函數(shù)定義:int rand(void)
函數(shù)功能:產(chǎn)生一個(gè)隨機(jī)數(shù)
返回值: 返回0至RAND_MAX之間的隨機(jī)整數(shù)值
srand()函數(shù)
函數(shù)頭文件:stdlib.h
函數(shù)定義:void srand(unsigned int seed)
函數(shù)功能:設(shè)置隨機(jī)數(shù)種子
函數(shù)說(shuō)明:通嘲陡可以用getpid()(獲取當(dāng)前進(jìn)程的進(jìn)程識(shí)別碼)或者time(NULL)(獲取當(dāng)前系統(tǒng)的時(shí)間信息)來(lái)充當(dāng)種子,保持每次運(yùn)行時(shí)種子是不一樣的#include <stdio.h> #include <time.h> #include <stdlib.h> int main(){ for(int i = 0;i < 5;i++){ //產(chǎn)生1-10以內(nèi)的數(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; } 輸出:(第一次結(jié)果) 6 9 8 5 9 5 3 1 4 6 輸出:(第二次次結(jié)果) 6 9 8 5 9(與第一次相同) 5 2 1 7 2
9.循環(huán)訓(xùn)練demon之ATM
#include <stdio.h> int main(){ int old = 123;//原始密碼 int input;//輸入密碼 int wrongTime = 3; //錯(cuò)誤次數(shù) printf("**********************\n"); printf(" 歡迎使用建設(shè)銀行系統(tǒng)\n"); printf("**********************\n"); printf("請(qǐng)輸入密碼:"); for(int i = 1;i <= wrongTime; i++){ scanf("%d", &input); //判斷密碼 if(input == old){ //密碼正確 break; } if(i == wrongTime){ printf("錯(cuò)誤次數(shù)過(guò)多膊升!\n"); return 1; } //密碼不正確 printf("密碼不正確,請(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("輸入取款金額:"); scanf("%d", &temp2); if(temp2 > total){ printf("余額不足 "); }else{ total -= temp2; printf("取款成功 余額為%d\n",total); break; } } break; 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"); 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("輸入無(wú)效 "); } } return 0; }
10.循環(huán)訓(xùn)練demon之記數(shù)字
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main(){ int count = 3;//記錄每次生成多少個(gè)隨機(jī)數(shù) while(1){ unsigned int seed = time(NULL); //設(shè)置產(chǎn)生種子的時(shí)間固定 //設(shè)置隨機(jī)數(shù)的種子 srand(seed); for(int i = 0; i < count; i++){ //生成一個(gè)隨機(jī)數(shù) int temp2 = rand() % 9 + 1; printf("%d ",temp2); } printf("\n"); // 延時(shí)2s Sleep(2000); //刷新屏幕 system("cls"); int temp;//定義用戶輸入的變量 printf("請(qǐng)輸入:"); //重新設(shè)種子和之前生成時(shí)的種子一樣 srand(seed); //接收用戶輸入 一個(gè)一個(gè)接收 for(int i = 0; i < count; i++){ scanf("%d", &temp); //獲取對(duì)應(yīng)的生成的隨機(jī)數(shù) int old = rand() % 9 + 1; //比較輸入的和隨機(jī)數(shù)是否相同 if (temp != old){ printf("錯(cuò)誤 退出!\n"); exit(EXIT_SUCCESS); } } printf("正確!\n"); //增加產(chǎn)生數(shù)字的個(gè)數(shù) count++; } return 0; }
11.數(shù)組訓(xùn)練之不同隨機(jī)數(shù)
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int array[4] = {}; srand(time(NULL));//初始化隨機(jī)種子 for (int i = 0; i < 4; i++){ //產(chǎn)生一個(gè)隨機(jī)數(shù) int temp = rand() % 4; if (i == 0){//第一個(gè)隨機(jī)數(shù) 直接保存到數(shù)組 array[i] = temp; }else{ //判斷前面是否已經(jīng)存在了 int j = 0; for(; j <i; j++){ //比較j對(duì)應(yīng)的值和temp是否相同 if(array[j] == temp){ //重復(fù)了 打印重復(fù)了的數(shù)字 printf("重復(fù)了:%d\n",temp); 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; }