學(xué)習(xí)目標(biāo):掌握全局變量與局部變量的區(qū)別裆熙、switch語(yǔ)句端礼、for循環(huán)禽笑、while循環(huán)、break與continue的應(yīng)用蛤奥、printf與scanf的的相關(guān)細(xì)節(jié)佳镜、數(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);
returnn0;
}
輸出結(jié)果為0
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類(lèi)型等)或者枚舉類(lèi)型
?表達(dá)式與常雖表達(dá)式必須都是相同的數(shù)據(jù)類(lèi)型
?當(dāng)表達(dá)式的值等于某個(gè)常量表達(dá)式的値之后娜睛,執(zhí)行該表達(dá)式之后的語(yǔ)句
?當(dāng)諾句中出現(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)判斷輸入1的結(jié)果
int main(){
iny a=0;
printf("請(qǐng)輸入一個(gè)數(shù)1-3:");
scanf(%d,&a);
switch(a){
case 1:
printf("你輸入的數(shù)是1\n");
break;
case2:
printf("你輸入的數(shù)是2\n");
break;
case3:
printf("你輸入的數(shù)是3\n");
break;
}
}
3.for循環(huán)
for( init ; condition ; increment ) (
語(yǔ)句
//inte:循環(huán)變量賦初值(表達(dá)式1)
//condition:循環(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);
}
for(int i=1;i<=10;i++){
printf("i=%d\n",i);
if(i==10){
i=0;
}
}
//死循環(huán)
for(;;){
}
return 0;
)
輸出結(jié)果:
第一個(gè)循環(huán)輸出:i=1~i=10;
第二個(gè)循環(huán)持續(xù)輸出:i=1~i=10凳干;
第三個(gè)循環(huán)死循環(huán)晴裹,一直加載,從未停止救赐;
4.while 循環(huán)
語(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;
}
輸出結(jié)果:
sum=5050
5.Break 與 C ontinue 關(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)補(bǔ)充
緩沖區(qū):輸入輸出流
? printf
向終端輸出字符串:
先將字符串內(nèi)容輸入到緩沖區(qū)待逞,之后再依次輸出緩沖區(qū)內(nèi)容
? scanf
接收終端的輸入:
在緩沖區(qū)里讀數(shù)據(jù)甥角,當(dāng)緩沖區(qū)里有對(duì)應(yīng)類(lèi)型數(shù)據(jù),就從緩沖區(qū)里面取數(shù)據(jù) 如果沒(méi)有對(duì)應(yīng)類(lèi)型數(shù)據(jù)识樱,就等待用戶(hù)輸入數(shù)據(jù)
注意:`臀蕖!怜庸!一般情況在scanf当犯、getchar之前都需要:fflush(stdin) !割疾! 此函數(shù)需要在<stdio.h>中調(diào)用灶壶;、
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;
}
輸入A ,按下回車(chē)之后杈曲,緩沖流里面為A\n
之后取出A放到a的地址里面驰凛,此時(shí)緩沖區(qū)還剰下\n
輸入B,按下回車(chē)之后,此時(shí)緩沖區(qū)里面為\nB\n
getchar()從緩沖區(qū)里面掌走一個(gè)\n,緩沖里還剰下8\n
之后取出B放到b的地址里担扑,此時(shí)緩沖區(qū)還剰下\n
因?yàn)榫彌_區(qū)里面有字符\n , scan嘛將緩沖里的內(nèi)容放到c的地址里 所以當(dāng)我們輸入A,B之后恰响,就直接輸出了結(jié)果
所以
輸出結(jié)果為:
請(qǐng)輸入a:A
請(qǐng)輸入b:B 請(qǐng)輸入c: a=a b=b c=
7.數(shù)組
a.數(shù)組:用于儲(chǔ)存多個(gè)相同類(lèi)型數(shù)據(jù)的集合
b.數(shù)組相關(guān):
?能夠存儲(chǔ)數(shù)據(jù)就必須要有內(nèi)存
?如何定義一個(gè)數(shù)值的同時(shí)為他分配內(nèi)存
?數(shù)組定義時(shí)必須明確知道數(shù)組的大小
?數(shù)組名就是數(shù)組的首地址
c.聲明數(shù)組
在C語(yǔ)言中,聲明一個(gè)數(shù)組涌献,需要指定元素的類(lèi)型和元素的數(shù)量
//數(shù)組聲明格式為:
type arrayName[arraysize];
//arrayName:數(shù)組名字
//[]:數(shù)組標(biāo)識(shí)
//type:數(shù)組數(shù)據(jù)類(lèi)型
//arraySize:數(shù)組大小
d.初始化數(shù)組
-C語(yǔ)言當(dāng)中胚宦,可以逐個(gè)初始化數(shù)組,也可以使用一個(gè)初始化語(yǔ)句燕垃。大括號(hào){}之間的值的數(shù)目不能大于我們?cè)谏⒔M 聲明時(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ù)組第四個(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í)別碼)或者tinw(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以?xún)?nèi)的數(shù)字
int temp=rand()%9+1;
printf("%d",temp);
}
printf("\n");
srand(time(NULL));//播種
for(int i=0;i<5;i++){
itn temp1=rand()%9+1;
printf("%d",temp);
}
return 0;
}
輸出結(jié)果(第一次結(jié)果):
6 9 8 5 9
5 3 1 4 6
輸出結(jié)果(第二次結(jié)果):
6 9 8 5 9
5 2 1 7 2