C語(yǔ)言實(shí)戰(zhàn)開發(fā)——C語(yǔ)言基礎(chǔ)第二天

學(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)樽兞孔饔糜虻牟煌?,分為了局部變量與全局變量;

全局變量

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

局部變量

函數(shù)內(nèi)部定義的變量。作用域僅限于函數(shù)內(nè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類型等)或者枚舉類型
?表達(dá)式與常雖表達(dá)式必須都是相同的數(shù)據(jù)類型
?當(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);隔開的
? 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)類型數(shù)據(jù),就從緩沖區(qū)里面取數(shù)據(jù) 如果沒有對(duì)應(yīng)類型數(shù)據(jù),就等待用戶輸入數(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 ,按下回車之后,緩沖流里面為A\n
之后取出A放到a的地址里面,此時(shí)緩沖區(qū)還剰下\n
輸入B,按下回車之后,此時(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è)相同類型數(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ù)組,需要指定元素的類型和元素的數(shù)量

//數(shù)組聲明格式為:
type arrayName[arraysize];
//arrayName:數(shù)組名字
//[]:數(shù)組標(biāo)識(shí)
//type:數(shù)組數(shù)據(jù)類型
//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ō)明:通??梢杂胓etpid()(獲取當(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以內(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

從中可以看出兩次結(jié)果不同,原因是兩次播種時(shí)間不同,產(chǎn)生種子不同。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容