欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語(yǔ)言

C語(yǔ)言基礎(chǔ)知識(shí)總結(jié)

時(shí)間:2025-04-15 09:12:30 C語(yǔ)言 我要投稿

C語(yǔ)言基礎(chǔ)知識(shí)總結(jié)

  總結(jié)是對(duì)取得的成績(jī)、存在的問(wèn)題及得到的經(jīng)驗(yàn)和教訓(xùn)等方面情況進(jìn)行評(píng)價(jià)與描述的一種書面材料,它可以促使我們思考,因此好好準(zhǔn)備一份總結(jié)吧。如何把總結(jié)做到重點(diǎn)突出呢?以下是小編整理的C語(yǔ)言基礎(chǔ)知識(shí)總結(jié),希望能夠幫助到大家。

C語(yǔ)言基礎(chǔ)知識(shí)總結(jié)

  主要內(nèi)容:1.C數(shù)據(jù)類型

  2.簡(jiǎn)單的算術(shù)運(yùn)算和表達(dá)式

  3.鍵盤輸入和屏幕輸出

  4.選擇控制結(jié)構(gòu)

  總結(jié)風(fēng)格:分條羅列,主要是知識(shí)點(diǎn),有例題不多

  5.循環(huán)控制結(jié)構(gòu)

  一、C數(shù)據(jù)類型

  1.C語(yǔ)言處理兩種數(shù)據(jù):常量和變量

  2.常量:整形常量、實(shí)型常量、字符常量、字符串常量、枚舉常量

  3.整形常量:正整數(shù)、負(fù)整數(shù)、零 eg: 10,-30,0

  4.實(shí)型常量:實(shí)數(shù)、小數(shù)、浮點(diǎn)數(shù) eg: 3.14,-0.56,18.0

  5.字符常量:字符型常量、用單引號(hào)括起來(lái)的任意字符 eg: x X ? , 9

  6.字符串常量:用雙引號(hào)括起來(lái)的一個(gè)或多個(gè)字符 eg: "x" "Hello" "Y78"

  7.在C程序中,整型常量可以用十進(jìn)制、八進(jìn)制、十六進(jìn)制形式表示,但編譯器都會(huì)自動(dòng)將

  其轉(zhuǎn)換成二進(jìn)制存儲(chǔ)

  8.整型常量的類型:長(zhǎng)整型、短整型、有符號(hào)、無(wú)符號(hào)。

  9.不同進(jìn)制的整型常量的表示形式:

  1)十進(jìn)制:0~9數(shù)字組合,可帶正負(fù)號(hào) eg: 256,-128,0,+7

  2)八進(jìn)制:0開頭,后面跟0~7數(shù)字組合 eg: 021,-017

  3)十六進(jìn)制:0x(0X)開頭,后跟0~9,a~f(A~F)數(shù)字組合 eg:0x12,-0x1F

  10.不同類型的整形常量的表示形式:

  1) 有符號(hào)整型常量:默認(rèn)int型定義為有符號(hào)整數(shù),無(wú)需signed eg:10,-30,0

  2) 無(wú)符號(hào)整形常量:常量值后跟u或U,只能表示>=0的數(shù) eg:30u,256U

  3) 長(zhǎng)整型常量:常量值后跟l或L eg:-256l,1024L

  4) 無(wú)符號(hào)長(zhǎng)整型常量:常量值后跟LU、Lu 、lU 、lu eg:30lu

  11.C程序中,實(shí)型常量?jī)煞N表示形式:小數(shù)、指數(shù)

  12.不同形式的實(shí)型常量的表示形式:

  1) 十進(jìn)制表示形式:數(shù)字和小數(shù)點(diǎn)組成,必須要有小數(shù)點(diǎn),整數(shù)部分可省略 eg:0.123, -12.35, .98

  2) 指數(shù)形式:e或E代表以10為底的指數(shù), e左邊是數(shù)值部分(有效數(shù)字,可以是整

  數(shù)、小數(shù),不能省略),e右邊是指數(shù)部分(必須是整數(shù)形式) eg:3.45e-6

  13.實(shí)型常量有單精度和雙精度之分,無(wú)有符號(hào)和無(wú)符號(hào)之分

  14.不同類型的實(shí)型常量表示形式:

  1)單精度實(shí)型常量:常量值后跟F或f eg:1.25F,1.25e-2f

  2)雙精度實(shí)型常量(double):實(shí)型常量默認(rèn)按雙精度處理 eg:0.123,-12.35, .98

  3)長(zhǎng)雙精度實(shí)型常量(long double):常量值后跟L或l eg:1.25L

  15.變量:在程序執(zhí)行過(guò)程中可以改變的量

  16.變量在必須先定義后使用,定義時(shí)需要聲明變量的類型和變量名,一般形式:類型關(guān)鍵

  字 變量名;

  17.關(guān)鍵字是C語(yǔ)言預(yù)先規(guī)定具有特殊意義的單詞,類型關(guān)鍵字用于聲明變量的類型

  18.標(biāo)準(zhǔn)C語(yǔ)言編寫的程序都是以main()作為開頭,指定了C程序執(zhí)行的起點(diǎn),在C程序中

  只能出現(xiàn)一次,稱為主函數(shù)

  19.C程序總是從main函數(shù)開始執(zhí)行,與他在程序中的位置無(wú)關(guān),main函數(shù)主體部分稱為語(yǔ)

  句,用{}括起來(lái),一般C語(yǔ)句以;結(jié)束

  20.變量的類型決定了編譯器為其分配內(nèi)存單元的字節(jié)數(shù)、數(shù)據(jù)在內(nèi)存單元中的存放形式、

  該類型變量合法的取值范圍以及該類型變量可參與的運(yùn)算種類

  21.變量名是用戶定義的標(biāo)識(shí)符,用于標(biāo)識(shí)內(nèi)存中具體的存儲(chǔ)單元,存放的數(shù)據(jù)稱為變量的

  值

  22.新數(shù)據(jù)存放于存儲(chǔ)單元時(shí),舊數(shù)據(jù)將會(huì)被修改,反應(yīng)變量的值是可以改變的

  23.變量名的命名規(guī)則:

  1)標(biāo)識(shí)符只能由英文字母、數(shù)字、下劃線組成

  2)標(biāo)識(shí)符必須以字母或下劃線開頭

  3)不允許使用C關(guān)鍵字為標(biāo)識(shí)符命名

  4)標(biāo)識(shí)符可以包含任意多個(gè)字符,但一般會(huì)有最大長(zhǎng)度限制,預(yù)編譯器有關(guān),一般不會(huì)超過(guò),最好不超過(guò)8個(gè)字符

  注意:標(biāo)識(shí)符區(qū)分大小寫

  eg:x y3 _imax ELSE X A_to_B (合法)

  eg:7x int #No bad one re-input(不合法)

  24.標(biāo)準(zhǔn)C規(guī)定所有變量必須在第一條可執(zhí)行語(yǔ)句之前定義

  25.在同一條語(yǔ)句中可以同時(shí)定義多個(gè)相同類型變量,多個(gè)變量之間用逗號(hào)分隔,沒(méi)有順序要求

  26.在使用標(biāo)準(zhǔn)輸入/輸出函數(shù)時(shí),必須在程序開頭加上編譯預(yù)處理命令

  27.中stdio為頭文件,std是standard,i為input,o為output,h為head

  28.編譯預(yù)處理命令#include的作用:將在輸入/輸出函數(shù)的頭文件stdio.h包含到用戶源文件中

  29.%d按十進(jìn)制整數(shù)個(gè)格式輸出,%f按十進(jìn)制小數(shù)格式輸出,一般輸出6位小數(shù),%c輸出一個(gè)字符, 換行,雙引號(hào)內(nèi)字符原樣輸出

  30.不同類型的數(shù)據(jù)在內(nèi)存中占用不同大小的存儲(chǔ)單元,他們所能表示的數(shù)據(jù)的取值范圍各不相同,不同類型的數(shù)據(jù)表示形式及其可以參與的運(yùn)算種類也不同

  31.定義整型變量時(shí),只要不指定為無(wú)符號(hào)型,其隱含類型為有符號(hào)型,signed通常省略不寫

  32.C程序中每個(gè)變量的值都是按字節(jié)編址,都被存儲(chǔ)在內(nèi)存中特定的存儲(chǔ)單元中,這個(gè)存儲(chǔ)空間實(shí)際是一個(gè)線性地址表,即每個(gè)字節(jié)的存儲(chǔ)空間對(duì)應(yīng)一個(gè)唯一的地址

  33.1個(gè)字節(jié)等于8個(gè)二進(jìn)制位,即8個(gè)位為一個(gè)字節(jié),一個(gè)字節(jié)可以表示的整數(shù)最小為0,最大255,即8個(gè)位可以表示0-255之間的數(shù),一個(gè)二進(jìn)制位的值只能是0或1

  34.同種類型在不同的平臺(tái)所占字節(jié)數(shù)不同,要計(jì)算數(shù)據(jù)類型所占內(nèi)存空間的字節(jié)數(shù)需要用sizeof()運(yùn)算符

  35.sizeof是C語(yǔ)言關(guān)鍵字,不是函數(shù)名,sizeof(變量名)計(jì)算一個(gè)變量所占內(nèi)存的字節(jié)數(shù)

  36.計(jì)算不同類型運(yùn)算符的表達(dá)式時(shí),要考慮運(yùn)算符的優(yōu)先級(jí)和結(jié)合性

  37.正數(shù)的反碼、補(bǔ)碼與原碼都相同,負(fù)數(shù)的補(bǔ)碼等于反碼加1

  38.在計(jì)算機(jī)內(nèi)存中負(fù)數(shù)都是用補(bǔ)碼來(lái)表示

  39.對(duì)于實(shí)數(shù),無(wú)論小數(shù)海曙指數(shù)形式,在計(jì)算機(jī)內(nèi)存中都采用浮點(diǎn)形式來(lái)存儲(chǔ)

  40.浮點(diǎn)數(shù)分為階碼、尾數(shù)兩部分,實(shí)數(shù)N=S*pow(r,j),S為尾數(shù)(無(wú)論正負(fù),規(guī)定用存小數(shù)),j為階碼(無(wú)論正負(fù),必須是整數(shù)),r是基數(shù) eg:10.0111=0.100111*pow(2,10)

  41.階碼所占位數(shù)決定實(shí)數(shù)的取值范圍,尾數(shù)所占位數(shù)決定實(shí)數(shù)的精度,尾數(shù)的符號(hào)決定實(shí)數(shù)的正負(fù),階碼和尾數(shù)的字節(jié)大小與編譯器有關(guān)

  42.float型變量能接收實(shí)型常量的7位有效數(shù)字,double型變量能接收16位

  43.運(yùn)算符的優(yōu)先級(jí):?jiǎn)文窟\(yùn)算<算術(shù)運(yùn)算<關(guān)系運(yùn)算<邏輯運(yùn)算<條件運(yùn)算<賦值運(yùn)算<逗號(hào)運(yùn)算

  44.素?cái)?shù):又稱質(zhì)數(shù),指在大于1的自然數(shù)中,除1和本身不能被其他自然數(shù)整除的數(shù)

  45.合數(shù):指在自然數(shù)中除1和本身外還能被其他自然數(shù)整除的數(shù)

  46.因子:所有能整除這個(gè)數(shù)的數(shù),不包括自身,但包括1

  47.閏年:能被4整除但不能被100整除,或能被400整除

  二、 簡(jiǎn)單的算術(shù)運(yùn)算和表達(dá)式

  1.條件運(yùn)算符是C語(yǔ)言提供的唯一一個(gè)三元運(yùn)算符,C語(yǔ)言中沒(méi)有冪運(yùn)算符

  2.只有計(jì)算相反數(shù)是一元運(yùn)算符,其余運(yùn)算符都是二元運(yùn)算符

  3.一元運(yùn)算符也叫單目運(yùn)算符,二元運(yùn)算符也叫雙目運(yùn)算符,三元運(yùn)算符也叫三目運(yùn)算符

  4.整數(shù)除法的結(jié)果是整數(shù),浮點(diǎn)數(shù)除法的結(jié)果是浮點(diǎn)數(shù)

  5.求余運(yùn)算限定參與運(yùn)算的兩個(gè)操作數(shù)必須為整型,余數(shù)的符號(hào)與被除數(shù)的符號(hào)相同,不能對(duì)兩個(gè)實(shí)型數(shù)進(jìn)行求余運(yùn)算

  6.所有的算術(shù)運(yùn)算符中只有一元的去相反數(shù)運(yùn)算符為右結(jié)合,其余的結(jié)合性都為左結(jié)合

  7.同一優(yōu)先級(jí)的運(yùn)算符進(jìn)行混合運(yùn)算時(shí),從左向右依次進(jìn)行

  8.運(yùn)算符的優(yōu)先級(jí):?jiǎn)文窟\(yùn)算>算術(shù)運(yùn)算>關(guān)系運(yùn)算>邏輯運(yùn)算>條件運(yùn)算>賦值運(yùn)算>逗號(hào)運(yùn)算

  9.計(jì)算并輸出一個(gè)三位整數(shù)的個(gè)位、十位、百位數(shù)字之和

  #include

  void main()

  {

  int x=321;

  int a,b,c,sum;

  a=x%10;//a=1

  b=(x/10)%10;//b=2

  c=x/100;//c=3

  sum=a+b+c;

  printf("a=%d,b=%d,c=%d sum=%d ",a,b,c,sum);

  }

  10.涉及算術(shù)運(yùn)算的復(fù)合賦值運(yùn)算符有5個(gè):+=,-=,*=,/=,%=

  11.增1運(yùn)算符也稱自增運(yùn)算符,減1運(yùn)算符也稱自減運(yùn)算符,都是一元運(yùn)算符,只有一個(gè)操作數(shù)必須是變量不能是常量或表達(dá)式

  12.自增自減運(yùn)算符作為前綴時(shí),先執(zhí)行加1或減1然后使用;自增自減運(yùn)算符作為后綴時(shí),先使用再執(zhí)行加1或減1;

  13.考慮優(yōu)先級(jí)與結(jié)合性的實(shí)例

  m=-n++《=》m=-(n++)《=》m=-n,n=n+1;

  //正面:-和++都是一元運(yùn)算符,優(yōu)先級(jí)相同,此時(shí)要考慮結(jié)合性,結(jié)合性都是右結(jié)合的,所以先算++后算-

  //反面:如果等價(jià)m=(-n)++就不合法了,因?yàn)楸磉_(dá)式不能進(jìn)行自增操作

  14.scanf函數(shù)和printf函數(shù)都是C的標(biāo)準(zhǔn)輸入/輸出函數(shù),&為取地址運(yùn)算符

  15.宏常量與宏替換:

  1) 在程序中直接使用的常數(shù)稱為幻數(shù),將幻數(shù)定義為宏常量或const常量是為了提高程序的可讀性和可維護(hù)性

  2) 宏常量也稱符號(hào)常量,沒(méi)有數(shù)據(jù)類型,編譯器不對(duì)其進(jìn)行類型檢查,只進(jìn)行字符串替換

  3) 宏定義一般形式:#define 標(biāo)識(shí)符 字符串。標(biāo)識(shí)符被稱為宏名,宏名與字符串之間可有多個(gè)空白符,不加等號(hào),結(jié)尾不加分號(hào)

  4) 宏常量是由宏定義編譯預(yù)處理命令來(lái)定義,宏名替換成字符串的過(guò)程稱為宏替換,宏替換不做任何語(yǔ)法檢查

  5) 當(dāng)宏定義是一個(gè)表達(dá)式時(shí),調(diào)用時(shí),是一個(gè)數(shù)就可以直接帶入,而是表達(dá)式也要看成是一個(gè)數(shù)代進(jìn)宏定義表達(dá)式中,

  而看成一個(gè)數(shù)這就要求把調(diào)用的數(shù)加上圓括號(hào),為了減少不必要的錯(cuò)誤,最好都加上圓括號(hào)

  6) 宏替換的過(guò)程是將宏名原樣替換成字符串,而不是直接計(jì)算出值,所以要用調(diào)用后的結(jié)果參與其他運(yùn)算就需要把調(diào)用的結(jié)果加上圓括號(hào)

  7) 例題:

  #include

  #define N 2 //N=2

  #define M N+1 //M=2+1

  #define NUM 2*M+1 //NUM=2*2+1+1=6

  void main()

  {

  int i;

  for(i=1;i<=NUM;i++);

  printf("%d ",i); //執(zhí)行完空循環(huán),i=7

  i--; // i=6

  printf("%d ",i);

  }

  8) 例題:

  #include

  #define f(x) x*x

  void main()

  {

  int b;

  b=f(4+4); //b=4+4*4+4=24,解釋見5)

  printf("b=%d ",b);

  }

  9) 例題:

  #include

  #define f(x) x*x

  void main()

  {

  int b;

  b=f(4+4)/(2+2); //b=4+4*4+4/(2+2)=21解釋見6)

  printf("b=%d ",b);

  }

  10) 例題:

  #include

  #define f(x) x*x

  void main()

  {

  int b;

  b=f((4+4)); //b=(4+4)*(4+4)=64

  printf("b=%d ",b);

  }

  11) 例題:

  #include

  #define f(x) (x*x)

  void main()

  {

  int b;

  b=f((4+4))/(2+2); //b=((4+4)*(4+4))/(2+2)=16

  printf("b=%d ",b);

  }

  16.const常量

  1) const常量只能在定義時(shí)賦初值,因?yàn)榫幾g器將其放在只讀存儲(chǔ)區(qū),不允許在程序中修改

  2) const常量的定義一般形式:const 類型名 標(biāo)識(shí)符=字符串;//將標(biāo)識(shí)符聲明為具有該數(shù)據(jù)類型的const常量

  3) const是一種類型修飾符,const常量具有數(shù)據(jù)類型,編譯器要對(duì)其進(jìn)行類型檢查

  17.表達(dá)式中的自動(dòng)類型轉(zhuǎn)換:

  1) 表達(dá)式中,操作數(shù)類型相同,運(yùn)算的結(jié)果類型與操作數(shù)類型相同

  2) 表達(dá)式中,操作數(shù)類型不相同,C編譯器自動(dòng)將所有操作數(shù)進(jìn)行類型提升,轉(zhuǎn)換成同一類型,所占字節(jié)最大,再計(jì)算

  18.賦值中的自動(dòng)類型轉(zhuǎn)換:

  1) 賦值運(yùn)算符左側(cè)變量與右側(cè)表達(dá)式類型不同時(shí),發(fā)生自動(dòng)類型轉(zhuǎn)換:右側(cè)表達(dá)式的值轉(zhuǎn)換成左側(cè)變量的類型

  19.強(qiáng)制類型轉(zhuǎn)換:

  1) 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符是一元運(yùn)算符

  2) 強(qiáng)制類型轉(zhuǎn)換也稱強(qiáng)轉(zhuǎn),是將表達(dá)式的值轉(zhuǎn)換為任意類型,并不改變變量本身的數(shù)據(jù)類型

  3) 強(qiáng)轉(zhuǎn)一般形式:(類型)表達(dá)式

  4) 演示強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的使用

  #include

  void main()

  {

  int m=5;

  printf("m/2=%d ",m/2);//m=2

  printf("(float)(m/2)=%f ",(float)(m/2));//m=2.000000

  printf("(float)m/2=%f ",(float)m/2);//m=2.500000

  printf("m=%d ",m);//m=5,只是將m強(qiáng)轉(zhuǎn)為實(shí)型數(shù)據(jù),并不改變m的數(shù)據(jù)類型 }

  20.常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):

  1) 使用C標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),要在程序開頭加上編譯預(yù)處理命令:#include

  2) 例:已知三角形三邊長(zhǎng)為a,b,c,計(jì)算三角形的面積

  #include

  #include

  void main()

  {

  float a,b,c,s,area;

  printf("Input a,b,c:");

  scanf("%f,%f,%f",&a,&b,&c);

  s=(a+b+c)/2;

  area=(float)sqrt(s*(s-a)*(s-b)*(s-c));

  printf("area=%f ",area);

  }

  21.賦值運(yùn)算符的左側(cè)不能出現(xiàn)表達(dá)式,變量與變量之間可以賦值

  例1:若有定義:int a,b,c;下列表達(dá)式中哪一個(gè)是合法的C語(yǔ)言賦值表達(dá)式(C、D)

  A)a=7+b=c=7 B)a=b++=c=7 C)a=(b=7,c=12) D)a=3,b=a+5,c=b+2

  //A.7+b表達(dá)式不能做左值 B.b++表達(dá)式不能做左值 C.逗號(hào)表達(dá)式a=12 D.依次賦值

  例2:下面不正確的賦值語(yǔ)句是(B)

  A)a=++a B)a=b++=10 C)a+=b D)a=1>a

  //D.算術(shù)運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符,先算1>a再將其結(jié)果賦給a

  例3:若有下列定義:int a=3,b=2,c=1;以下選項(xiàng)錯(cuò)誤的賦值表達(dá)式是(A)

  A)a=(b=4)=3 B)a=b=c+1 C)a=(b=4)+c D)a=1+(b=c=4)

  //A.先計(jì)算圓括號(hào)里的值等于4,然后按照賦值表達(dá)式的順序從右向左計(jì)算,將3賦值給4這是不對(duì)的,

  即賦值號(hào)左側(cè)只能是變量,不能出現(xiàn)表達(dá)式b=4

  三、 鍵盤輸入和屏幕輸出

  1.字符常量:

  把字符放在一對(duì)單引號(hào)內(nèi),適用于多數(shù)可打印字符

  2.轉(zhuǎn)義字符:

  以反斜線()開頭,也是放在一對(duì)單引號(hào)內(nèi),適用于控制字符(如回車符,換行符)

  3.常用的轉(zhuǎn)義字符:

  1) — 換行 8) a — 響鈴報(bào)警提示音

  2) — 回車(不換行) 9) " — 一個(gè)雙引號(hào)

  3) — 空字符 10) — 一個(gè)單引號(hào)

  4) — 水平制表 11) — 一個(gè)反斜線

  5) v — 垂直制表 12) ? — 問(wèn)號(hào)

  6)  — 退格 13) ddd —1到3位八進(jìn)制ASCII碼值所代表的字符

  7) f — 走紙換頁(yè) 14) xhh —1到2位十六進(jìn)制ASCII碼值所代表的字符

  4. ,是將光標(biāo)移到下一行起始位置, 是將光標(biāo)移到當(dāng)前行的起始位置

  5. ,是水平制表符,相當(dāng)于按下Tab鍵,每次按下Tab鍵并不是從當(dāng)前光標(biāo)位置向后移動(dòng)一個(gè)Tab寬度,而是移到下一個(gè)制表位

  實(shí)際移動(dòng)的寬度視當(dāng)前光標(biāo)位置距相鄰的下一個(gè)制表位的距離而定

  6.制表位,屏幕上的一行被分為若干個(gè)域,相鄰域之間的交接點(diǎn)稱為制表位,每個(gè)域的寬度就是一個(gè)Tab寬度,多數(shù)習(xí)慣上為4

  7.當(dāng)轉(zhuǎn)義序列出現(xiàn)在字符串中時(shí),是按單個(gè)字符計(jì)數(shù)的

  8.一個(gè)整形數(shù)在內(nèi)存中是以二進(jìn)制形式存儲(chǔ)的,而一個(gè)字符在內(nèi)存中也是以其對(duì)應(yīng)的ASCII碼的二進(jìn)制形式存儲(chǔ)的,

  但char型數(shù)據(jù)在內(nèi)存中只占一個(gè)字節(jié),而int型數(shù)據(jù)在16位系統(tǒng)中占2個(gè)字節(jié),32位系統(tǒng)占4個(gè)字節(jié)

  9.在ASCII碼取值范圍內(nèi),char型數(shù)據(jù)可以和int型數(shù)據(jù)進(jìn)行混合運(yùn)算,char型數(shù)據(jù)也能以int型輸出,直接輸出其對(duì)應(yīng)的ASCII碼的十進(jìn)制值

  10.字符的輸入/輸出:

  1) get)和put)是C標(biāo)準(zhǔn)函數(shù)庫(kù)中專門用于字符輸入/輸出的函數(shù),功能是只能輸入/輸出一個(gè)字符

  2) 例:從鍵盤輸入一個(gè)大寫英文字母,將其轉(zhuǎn)換為小寫字母顯示在屏幕上

  #include

  void main()

  {

  char ch;

  ch=get);//鍵盤輸入一個(gè)字符,再按回車表示輸入結(jié)束,字符存入變量ch,注意:get)沒(méi)有參數(shù),直接返回讀入的字符

  ch=ch+32;

  putch);//第二次按回車,將顯示轉(zhuǎn)換后的結(jié)果

  put );//注意:put)內(nèi)一定要有參數(shù),參數(shù)就是待輸出的字符,可以是可打印字符,也可是轉(zhuǎn)義字符

  }

  11.數(shù)據(jù)的格式化屏幕輸出:

  1) 函數(shù)printf()的一般格式:printf(格式控制字符串);或者printf(格式控制字符串,輸出值

  參數(shù)表);

  2) 格式控制字符串包括:格式轉(zhuǎn)換說(shuō)明符,需要原樣輸出的普通字符

  3) 函數(shù)printf()的格式轉(zhuǎn)換說(shuō)明符:

  %d — 輸出帶符號(hào)十進(jìn)制整數(shù),整數(shù)符號(hào)省略

  %u — 輸出無(wú)符號(hào)十進(jìn)制整數(shù)

  %o — 輸出無(wú)符號(hào)八進(jìn)制整數(shù),不輸出前導(dǎo)符0

  %x — 輸出無(wú)符號(hào)十六進(jìn)制整數(shù)(小寫),不輸出前導(dǎo)符0x

  %X — 輸出無(wú)符號(hào)十六進(jìn)制整數(shù)(大寫),不輸出前導(dǎo)符0x

  %c — 輸出一個(gè)字符

  %s — 輸出字符串

  %f — 以十進(jìn)制小數(shù)形式輸出實(shí)數(shù),包含單,雙精度,隱含6位小數(shù),但并非全是有效數(shù)字,單精度有效7位,雙精度16位

  %e — 以指數(shù)形式輸出實(shí)數(shù)(小寫e表示指數(shù)部分),小數(shù)點(diǎn)前有且僅有一位非0數(shù)字

  %E — 以指數(shù)形式輸出實(shí)數(shù)(大寫E表示指數(shù)部分)

  %g — 自動(dòng)選取f或e格式中寬度較小的一種使用,不輸出無(wú)意義的0

  %% — 輸出%

  4) 輸出值參數(shù)表:需要輸出的數(shù)據(jù)項(xiàng)的列表,可以是變量或表達(dá)式,逗號(hào)隔開,類型與格式轉(zhuǎn)換說(shuō)明符相匹配

  5) 每個(gè)格式轉(zhuǎn)換說(shuō)明符與輸出值參數(shù)表中的輸出值參數(shù)一一對(duì)應(yīng),沒(méi)有輸出值參數(shù),格式控制字符串就不需要格式轉(zhuǎn)換說(shuō)明符

  6) 例:從鍵盤輸入一個(gè)大寫英文字母,將其轉(zhuǎn)換為小寫字母和其十進(jìn)制ASCII碼值顯示在屏幕上

  #include

  void main()

  {

  char ch;

  printf("Please enter a key:");

  ch=get);

  ch=ch+32;

  printf("%c,%d ",ch,ch);//printf("%c",ch)<<=>>putch),printf(" ")<<=>>put ) }

  7) 函數(shù)printf()中的格式修飾符:在%和格式符中間插入格式修飾符,用于輸出格式的微調(diào),如:指定輸出域?qū)、精度、左?duì)齊等

  英文字母l — 修飾格式符d,o,x,u時(shí),用于輸出long型數(shù)據(jù)

  英文字母L — 修飾格式符f,e,g時(shí),用于輸出long double型數(shù)據(jù)

  英文字母h — 修飾格式符d,o,x時(shí),用于輸出short型數(shù)據(jù)

  輸出域?qū)抦 — m為整數(shù),輸出時(shí)占m列,若m>0,當(dāng)數(shù)據(jù)寬度小于m時(shí),域內(nèi)右靠齊,左補(bǔ)空格,當(dāng)數(shù)據(jù)寬度大于m時(shí),修飾符失效,按實(shí)際寬度輸出,若m有前導(dǎo)符0,左邊多余位補(bǔ)0;若m<0,輸出數(shù)據(jù)在域內(nèi)左靠齊

  顯示精度 .n — n為大于等于0的整數(shù),精度修飾符位于最小域?qū)捫揎椃螅蓤A點(diǎn)和整數(shù)構(gòu)成,對(duì)于浮點(diǎn)數(shù),用于指定輸出的浮點(diǎn)數(shù)小數(shù)位數(shù);對(duì)于字符串,用于指定從字符串左側(cè)開始截取的子串字符個(gè)數(shù)

  8) 使用const常量定義pi,編程從鍵盤輸入圓的周長(zhǎng)和面積,使其輸出數(shù)據(jù)保留兩位小數(shù)

  #include

  void main()

  {

  const double pi=3.14159;

  double r,circum,area;

  printf("Please enter r:");

  scanf("%lf",&r);

  circum=2*pi*r;

  area=pi*r*r;

  printf("輸出沒(méi)有寬度和精度的值:");

  printf("circum=%f,area=%f ",circum,area);

  printf("輸出沒(méi)有寬度和精度的值:");

  printf("circum=%7.2f,area=%7.2f ",circum,area);//域?qū)挒?,占7個(gè)字符寬度,小數(shù)點(diǎn)也算一個(gè)字符,精度為2,小數(shù)點(diǎn)后保留2位

  }

  12.數(shù)據(jù)的格式化鍵盤輸入:

  1) 函數(shù)scanf()的一般格式:scanf(格式控制字符串,參數(shù)地址表);

  2) 格式控制字符串:包括格式轉(zhuǎn)換說(shuō)明符,分隔符

  3) 格式轉(zhuǎn)換說(shuō)明符以%開始,以格式字符結(jié)束,用于指定各參數(shù)的輸入格式

  4) 函數(shù)scanf()的格式轉(zhuǎn)換說(shuō)明符:

  %d — 輸入十進(jìn)制整數(shù)

  %o — 輸入八進(jìn)制整數(shù)

  %x — 輸入十六進(jìn)制整數(shù)

  %c — 輸入一個(gè)字符,空白字符(包括空格、回車、制表符)也作為有效字符輸入 %s — 輸入字符串,遇到第一個(gè)空白字符(包括空格、回車、制表符)時(shí)結(jié)束 %f或%e — 輸入實(shí)數(shù),以小數(shù)或指數(shù)形式輸入均可

  %% — 輸入一個(gè)%

  5) 參數(shù)地址表:由若干變量的地址組成的列表,用逗號(hào)分隔

  6) 函數(shù)scanf()中的格式修飾符:在%和格式符中間插入格式修飾符

  英文字母l — 加在格式符d,o,x,u之前,用于輸入long型數(shù)據(jù);加在f,e之前,用于輸入double型數(shù)據(jù)

  英文字母L — 加在格式符f,e之前,用于輸入long double型數(shù)據(jù)

  英文字母h — 加在格式符d,o,x時(shí),用于輸入short型數(shù)據(jù)

  輸出域?qū)抦 — m為正整數(shù),指定輸入數(shù)據(jù)的寬度,系統(tǒng)自動(dòng)按此寬度截取所需數(shù)據(jù)

  顯示精度 .n — n為0或正整數(shù),scanf()沒(méi)有精度格式修飾符,輸入時(shí)不能規(guī)定精度 忽略輸入修飾符* — 表示對(duì)應(yīng)的輸入項(xiàng)在讀入后不賦給相應(yīng)的變量

  7) 函數(shù)scanf()輸入數(shù)值型數(shù)據(jù)時(shí),被認(rèn)為輸入結(jié)束的幾種情況:遇空格符、回車符、制表符;達(dá)到輸出域?qū)?遇非法字符輸入

  8) 如果函數(shù)scanf()的格式控制字符串中存在除格式轉(zhuǎn)換說(shuō)明符以外的其他字符,必須將這些字符原樣輸入

  #include

  void main()

  {

  int a,b;

  scanf("%d %d",&a,&b); //以空格作為分隔符,等價(jià)于scanf("%d%d",&a,&b),等價(jià)于scanf("%d %d",&a,&b),

  printf("a=%d,b=%d ",a,b);//實(shí)際輸入時(shí),空格、回車符、制表符都可作為分隔符,即輸入:12空格34 12回車34 12制表符34均可,

  }

  #include

  void main()

  {

  int a,b;

  scanf("%d,%d",&a,&b);//輸入時(shí)必須以逗號(hào)作為分隔符,即只能輸入:12,34

  printf("a=%d,b=%d ",a,b);

  }

  #include

  void main()

  {

  int a,b;

  scanf("a=%d,b=%d",&a,&b);//輸入時(shí)必須將"a="和"b="原樣輸入,即只能輸入:a=12,b=34 printf("a=%d,b=%d ",a,b);

  }

  #include

  void main()

  {

  int a,b;

  scanf("%2d%2d",&a,&b);//輸入時(shí)將前兩位數(shù)讀入存到a中,接著兩位存到b中,然后結(jié)束讀取,即輸入:1234,或123456結(jié)果一樣

  printf("a=%d,b=%d ",a,b);

  }

  #include

  void main()

  {

  int a,b;

  scanf("%d %d",&a,&b);

  printf("a="%d",b="%d" ",a,b);//輸出a="12",b="34"

  }

  #include

  void main()

  {

  int a,b;

  scanf("%d%*c%d",&a,&b);//任意字符都可作為分隔符,即輸入:12,34或12?34或12+34結(jié)果都一樣

  printf("a=%d,b=%d ",a,b);

  }

  #include

  void main()

  {

  int a,b;

  scanf("%2d%*2d%d",&a,&b);//忽略兩位,輸入123456

  printf("a=%d,b=%d ",a,b);//輸出a=12,b=56

  }

  對(duì)于程序

  #include

  void main()

  {

  int a,b;

  scanf("%d %d",&a,&b);

  printf("a=%d,b=%d ",a,b);

  }

  如果輸入12 34a回車,則結(jié)果a=12,b=3,程序在遇到非法字符a時(shí),會(huì)導(dǎo)致程序輸入終止,此時(shí)a會(huì)讀入12,b會(huì)讀入3

  如果輸入123a回車,則結(jié)果a=123,b=-858993460,程序在遇到非法字符a時(shí),會(huì)導(dǎo)致程序輸入終止,此時(shí)a會(huì)讀入123,而b未能讀入指定數(shù)據(jù)項(xiàng)數(shù)

  如果在scanf()函數(shù)中忘記在變量前加取地址運(yùn)算符&,會(huì)導(dǎo)致非法內(nèi)存訪問(wèn)

  13.%c格式符使用幾種情況:

  1) 用%c格式讀入字符時(shí),空格字符和轉(zhuǎn)義字符(包括回車)都會(huì)被當(dāng)做有效字符讀入 例:鍵盤輸入一個(gè)整數(shù)加法算式:操作數(shù)1+操作數(shù)2,輸出:操作數(shù)1+操作數(shù)2=計(jì)算結(jié)果

  #include

  void main()

  {

  int data1,data2;

  char op; //輸入:12空格+空格3 回車//輸出:12 -858993460=-858993448

  printf("Enter data1+data2 ");//輸入:12空格3 回車//輸出:12 3=15

  scanf("%d%c%d",&data1,&op,&data2);//輸入:12+3 回車//輸出:12+3=15 printf("%d%c%d=%d ",data1,op,data2,data1+data2);

  }

  2) 先輸入一個(gè)數(shù)據(jù)后再輸入字符型變量時(shí),輸入一個(gè)數(shù)據(jù)后,輸入的回車符將被當(dāng)做有效字符讀給字符型變量

  例:編程從鍵盤先后輸入int型、char型和float型數(shù)據(jù),要求每輸入一個(gè)數(shù)據(jù)就顯示這個(gè)數(shù)據(jù)的類型和數(shù)據(jù)值

  void main()

  {

  int a;

  char b;

  float c;

  printf("Please input an integer:");

  scanf("%d",&a);

  printf("integer:%d ",a);

  //在輸入一個(gè)整型數(shù)據(jù)后,輸入的回車符被當(dāng)做有效字符讀給了字符型變量b了

  printf("Please input a character:");

  scanf("%c",&b);

  printf("chracter:%c ",b);

  printf("Please input a float number:");

  scanf("%f",&c);

  printf("float:%f ",c);

  }

  14.%c格式符存在問(wèn)題的解決方法

  1) 用函數(shù)get)將數(shù)據(jù)輸入時(shí)存入緩沖區(qū)中的回車符讀入,以避免被后面的字符型變量作為有效字符讀入

  #include

  void main()

  {

  int a;

  char b;

  float c;

  printf("Please input an integer:");

  scanf("%d",&a);

  printf("integer:%d ",a);

  get);//將存于緩沖區(qū)中的回車符讀入,避免在后面作為有效字符讀入

  //函數(shù)get)的返回值是一個(gè)回車符,已經(jīng)避免了錯(cuò)誤,不需要再將其賦給字符型變量使用

  printf("Please input a character:");

  scanf("%c",&b);

  printf("chracter:%c ",b);

  printf("Please input a float number:");

  scanf("%f",&c);

  printf("float:%f ",c);

  }

  2) 在%c前面加一個(gè)空格,將前面數(shù)據(jù)輸入時(shí)存于緩沖區(qū)的回車符讀入,避免被后面的字符型變量作為有效字符讀入

  void main()

  {

  int a;

  char b;

  float c;

  printf("Please input an integer:");

  scanf("%d",&a);

  printf("integer:%d ",a);

  printf("Please input a character:");

  scanf(" %c",&b);//在%c前面加空格,將存于緩沖區(qū)中的回車符讀入

  printf("chracter:%c ",b);

  printf("Please input a float number:");

  scanf("%f",&c);

  printf("float:%f ",c);

  }

  //解釋:在%c前加空格為什么能將存于緩沖區(qū)中的回車符讀入

  因?yàn)槿绻瘮?shù)scanf()的格式控制字符串中存在除格式轉(zhuǎn)換說(shuō)明符以外的其他字符,必須將這些

  字符原樣輸入,所以在%c前加空格,就必須在輸入字符型數(shù)據(jù)前先原樣輸入空格,而空格,回車符,制表符在

  函數(shù)scanf()輸入數(shù)值型數(shù)據(jù)時(shí)都代表輸入結(jié)束,由實(shí)踐可知,空格符、回車符、制表符在輸入時(shí)等效

  所以,緩沖區(qū)中的回車將代替需要原樣輸入的空格,因此,實(shí)際上,在%c前增加空格或者Tab鍵都可以完成,

  并且與增加的數(shù)量無(wú)關(guān),且可以混合增加

  3)*經(jīng)典例題:編程實(shí)現(xiàn)鍵盤任意輸入字符,統(tǒng)計(jì)字母、數(shù)字、空格、其他字符數(shù)量 首選字符串的方法:

  #include

  #define N 100

  int main()

  {

  char a[N];

  int i,m=0,n=0,b=0,c=0;

  printf("請(qǐng)輸入字符: ");

  gets(a);

  for(i=0;a[i]!=;i++)

  {

  if((a[i]>=a&&a[i]<=z)||(a[i]>=A&&a[i]<=Z)) m++;

  else if(ch>=0&&ch<=9) b++;

  else if(ch== ) c++;

  else d++;

  }

  }while(ch!= );

  printf("字母?jìng)(gè)數(shù):%d ",a);

  printf("數(shù)字個(gè)數(shù):%d ",b);

  printf("空格個(gè)數(shù):%d ",c);

  printf("其他字符個(gè)數(shù):%d ",d);

  return 0;

  }

  //解釋:你可以把Tab控制結(jié)束改成其他任意字符,包括字母、數(shù)字、/;都可以,

  就是不能直接使用回車控制結(jié)束,因?yàn)槟阍趯?shí)際鍵盤輸入時(shí),需要打回車才能把前面的 字符讀入,當(dāng)你輸完回車后,就已經(jīng)換行了,再回車就達(dá)不到你要的效果了,不可能把 他讀入,但是他會(huì)留在緩沖區(qū)下一次使用,所以說(shuō),理論上任意字符都可以控制結(jié)束, 但是不能直接使用回車再回車的方法,而get)函數(shù)一次只能讀一個(gè)字符,當(dāng)你回車 讀入字符后,回車符就會(huì)留在緩沖區(qū)下一次使用,你可以試試,你把get)這行語(yǔ)句 注釋,然后一次輸入兩個(gè)字符再回車的話,那么這時(shí)他也只能讀入第一個(gè)字符,第二個(gè) 字符和回車就會(huì)計(jì)入第二次、第三次的結(jié)果。

  總結(jié):這種方式與用字符串的區(qū)別在于,字符串可以統(tǒng)計(jì)任何字符,但是這種方式不能統(tǒng)計(jì) 你用來(lái)控制結(jié)束的字符,比如說(shuō),你用/控制結(jié)束,那么就不能統(tǒng)計(jì)/的數(shù)量了,而且你要把 他去掉,因?yàn)樵谡麄(gè)程序中/只會(huì)出現(xiàn)一次,然后就結(jié)束了

  **當(dāng)程序中出現(xiàn)兩次或以上的鍵盤輸入時(shí),就有可能出現(xiàn)緩沖區(qū)的問(wèn)題,只有一次輸入,回車直接結(jié)束沒(méi)有這種問(wèn)題

  15.考點(diǎn)題型:字符串常量的長(zhǎng)度問(wèn)題:

  1)字符串常量"abc d376"的長(zhǎng)度是(A)

  A) 7 B) 12 C) 8 D) 14

  // a b c d 376

  2)語(yǔ)句printf("%d",strlen("abs o121"));的輸出結(jié)果是(C)

  A) 11 B) 10 C) 9 D) 8

  // a b s o 1 2 1

  16.考點(diǎn)題型:賦值運(yùn)算、關(guān)系運(yùn)算的混合運(yùn)算問(wèn)題:

  1)設(shè)m,n,a,b,c,d的值均為0,執(zhí)行(m=a==b)||(n=c==d),m,n的值是(C)

  A) 0,0 B) 0,1 C) 1,0 D) 1,1

  // "=="是算術(shù)運(yùn)算符,"="是賦值運(yùn)算符,優(yōu)先級(jí):算術(shù)運(yùn)算符>賦值運(yùn)算符,先判斷a==b?是否正確

  正確則為真,把1賦給m,"||"是或運(yùn)算,前面已經(jīng)為真,所以||后面的就不會(huì)再運(yùn)算了,結(jié)果就為真

  所以m=1,n=0不變

  2)int a,b,m,n;初值依次為4,3,2,1,經(jīng)計(jì)算m=(a<=b)&&(n=m

  A) 1,1 B) 1,0 C) 0,1 D) 0,0

  // a<=b為假,&&是并,前面已經(jīng)為假,后面就不會(huì)再運(yùn)算了,結(jié)果就為假,把0賦給m,即m=0,n=1不變

  四、 選擇控制結(jié)構(gòu)

  1.沃思提出“數(shù)據(jù)結(jié)構(gòu)+算法=程序”只在面向過(guò)程的語(yǔ)言(如C語(yǔ)言)成立

  2.算法的正確性衡量方法:

  1)有窮性 2)確定性 3)有效性 4)允許沒(méi)有輸入或者有多個(gè)輸入 5)必須有一個(gè)或者多個(gè)輸出

  3.算法的描述方法:

  1)自然語(yǔ)言描述 2)流程圖描述 3)NS結(jié)構(gòu)化流程圖描述 4)偽碼描述

  4.關(guān)系表達(dá)式:用作判斷條件,結(jié)果只有真和假,(n%2!=0)等價(jià)于(n%2),0表示假,非0表示真

  5.分支結(jié)構(gòu):當(dāng)條件P成立時(shí),執(zhí)行A操作,否則執(zhí)行B操作;如果B操作為空,即為單分支結(jié)構(gòu);

  如果B操作不為空,即為雙分支結(jié)構(gòu);如果B操作中又包含另一選擇結(jié)構(gòu),則構(gòu)成多分支選擇結(jié)構(gòu);

  6.單分支例題:計(jì)算輸出兩整數(shù)最大值

  單分支(一般形式):if(表達(dá)式P) 語(yǔ)句A

  #include

  void main()

  {

  int a,b,max;

  printf("Enter a,b:");

  scanf("%d%d",&a,&b);

  if(a>b) //單分支:if(表達(dá)式P) 語(yǔ)句A

  max=a;

  if(a<=b) //單分支:if(表達(dá)式P) 語(yǔ)句A

  max=b;

  printf("max=%d ",max);

  }

  7.雙分支例題:計(jì)算輸出兩整數(shù)最大值

  雙分支(一般形式):if(表達(dá)式P) 語(yǔ)句1

  else 語(yǔ)句2

  #include

  void main()

  {

  int a,b,max;

  printf("Enter a,b:");

  scanf("%d%d",&a,&b);

  if(a>b)

  max=a;

  else

  max=b;

  printf("max=%d ",max);

  }

  8.條件運(yùn)算符是C語(yǔ)言中唯一的三元運(yùn)算符,需要三個(gè)操作數(shù)

  9.條件運(yùn)算符例題:計(jì)算輸出兩整數(shù)最大值

  條件運(yùn)算符(一般形式):表達(dá)式1?表達(dá)式2:表達(dá)式3

  含義:若表達(dá)式1為非0,則結(jié)果為表達(dá)式2的值,否則是表達(dá)式3的值

  #include

  void main()

  {

  int a,b,max;

  printf("Enter a,b:");

  scanf("%d%d",&a,&b);

  max=a>b?a:b;

  printf("max=%d ",max);

  }

  10.多分支控制條件語(yǔ)句(一般形式):

  if(表達(dá)式1) 語(yǔ)句1

  else if(表達(dá)式2) 語(yǔ)句2

  ...

  else if(表達(dá)式m) 語(yǔ)句m

  else 語(yǔ)句m+1

  11.條件語(yǔ)句在語(yǔ)法上只允許每個(gè)條件分支中帶一條語(yǔ)句,而要在分支里處理多條語(yǔ)句 就要使用花括號(hào),構(gòu)成復(fù)合語(yǔ)句

  12.隨機(jī)數(shù)的使用方法:

  1) 符號(hào)常量RAND_MAX在頭文件#include中定義,標(biāo)準(zhǔn)C規(guī)定RAND_MAX不大于雙字節(jié)整數(shù)的最大值32767

  2)隨機(jī)函數(shù)rand()產(chǎn)生的是一個(gè)在0~RAND_MAX之間的整數(shù),即[0,32767]之間的整數(shù)

  3) 利用求余運(yùn)算rand()%b可將函數(shù)rand()生成的隨機(jī)數(shù)變化到[0,b-1]

  4) 利用rand()%b+a可將隨機(jī)數(shù)的取值范圍平移到[a,a+b-1]

  例:產(chǎn)生1~100的隨機(jī)數(shù): rand()%100+1

  13.例題:猜數(shù)游戲:計(jì)算機(jī)想一個(gè)數(shù),人猜對(duì)了提示Right!,否則提示W(wǎng)rong!,并告訴大小 #include

  #include

  void main()

  {

  int magic,guess;

  magic=rand(); //隨機(jī)數(shù)

  printf("Please guess a number:");

  scanf("%d",&guess);

  if(guess>magic) //多分支

  {

  printf("Wrong!Too big! "); //復(fù)合語(yǔ)句

  }

  else if(guess

  {

  printf("Wrong!Too small! ");

  }

  else{

  printf("Right! ");

  printf("The number is:%d ",magic);

  }

  }

  14.switch語(yǔ)句:用于多路選擇,一般情況大于三種,用開關(guān)語(yǔ)句代替條件語(yǔ)句

  1) switch語(yǔ)句(一般形式):

  switch(表達(dá)式)

  {

  case 常量1:

  可執(zhí)行語(yǔ)句序列1 //注意:語(yǔ)句序列不使用花括號(hào)

  case 常量2:

  可執(zhí)行語(yǔ)句序列2

  ........

  case 常量n:

  可執(zhí)行語(yǔ)句序列n

  default:

  可執(zhí)行語(yǔ)句序列n+1

  }

  2) switch語(yǔ)句相當(dāng)于一系列的if-else語(yǔ)句

  3)switch后圓括號(hào)內(nèi)的表達(dá)式只能是char型或int型

  4)關(guān)鍵字case后接常量,類型與表達(dá)式類型一致,常量的值必須互不相同

  5)常量與case中間至少有一個(gè)空格,常量后面是冒號(hào)

  6)case本身并沒(méi)有條件判斷的功能,若case后面的語(yǔ)句省略不寫,則表示它與后續(xù)case執(zhí)行相同的語(yǔ)句

  7)switch語(yǔ)句的執(zhí)行過(guò)程:

  第一步,計(jì)算switch后表達(dá)式的值

  第二步,將表達(dá)式的值依次與case后的常量比較

  第三步,如果相等,執(zhí)行case后的代碼段,執(zhí)行完畢,可使用break語(yǔ)句跳出switch語(yǔ)句

  如果沒(méi)有break語(yǔ)句,不會(huì)再比較,程序?qū)⒁来螆?zhí)行下面的case后的語(yǔ)句,直到遇到break或者switch的}為止

  15.例題:編程實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

  #include

  void main()

  {

  int data1,data2;

  char op;

  printf("Enter your expression:");

  scanf("%d%c%d",&data1,&op,&data2);

  switch(op)

  {

  case +:

  printf("%d+%d=%d ",data1,data2,data1+data2);

  break;

  case -:

  printf("%d-%d=%d ",data1,data2,data1-data2);

  break;

  case *:

  case x:

  case X:

  printf("%d*%d=%d ",data1,data2,data1*data2);

  break;

  case /:

  if(0==data2)//也可寫成data2==0,寫0==data2的好處:

  { //因?yàn)橘x值表達(dá)式左值必須是變量,如果把==誤寫成=,會(huì)提示錯(cuò)誤

  printf("Division by zero! ");

  }

  else{

  printf("%d/%d=%d ",data1,data2,data1/data2);

  }

  break;

  default:

  printf("Invalid operator! ");

  //break;這句一般不需要,因?yàn)闆](méi)有break就會(huì)依次執(zhí)行下面的步驟直到break或者switch的}

  } //這里已經(jīng)是switch的}了

  }

  16.例題:編程實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,能進(jìn)行浮點(diǎn)數(shù)運(yùn)算,操作數(shù)與運(yùn)算符之間可加入任意多個(gè)空格

  #include

  #include

  void main()

  {

  float data1,data2;

  char op;

  printf("Enter your expression:");

  scanf("%f %c%f",&data1,&op,&data2);

  switch(op)

  {

  case +:

  printf("%f+%f=%f ",data1,data2,data1+data2);

  break;

  case -:

  printf("%f-%f=%f ",data1,data2,data1-data2);

  break;

  case *:

  case x:

  case X:

  printf("%f*%f=%f ",data1,data2,data1*data2);

  break;

  case /:

  if(fabs(data2)<=1e-7)

  {

  printf("Division by zero! ");

  }

  else{

  printf("%f/%f=%f ",data1,data2,data1/data2);

  }

  break;

  default:

  printf("Invalid operator! ");

  }

  }

  //內(nèi)存中的浮點(diǎn)數(shù)所表示的精度是有限的,所以比較實(shí)型變量data2與0是否相等時(shí), 不能像整型變量與0比較那樣直接用相等關(guān)系運(yùn)算符與0比較,而應(yīng)使用如下方式判斷 實(shí)型變量data2的值是否位于0附近的一個(gè)很小的區(qū)間內(nèi),即:if(fabs(data2)<=1e-7)

  17.邏輯運(yùn)算符和邏輯表達(dá)式

  邏輯非:!,單目運(yùn)算符,右結(jié)合, 優(yōu)先級(jí)最高

  邏輯與:&&,雙目運(yùn)算符,左結(jié)合,優(yōu)先級(jí)較高

  邏輯或:||,雙目運(yùn)算符,左結(jié)合,優(yōu)先級(jí)較低

  例:判斷某一年year是否是閏年的條件:

  1) 能被4整除,但不能被100整除;

  1)能被400整除

  邏輯表達(dá)式:((year%4==0)&&(year%100!=0))||(year%400==0)

  或:(year%4==0)&&(year%100!=0)||(year%400==0)

  18.特別注意:在計(jì)算含有邏輯運(yùn)算符(&&和||)的表達(dá)式時(shí),通常盡量使用最少的操作數(shù)來(lái) 確定表達(dá)式的值,這就意味著表達(dá)式中的某些操作數(shù)可能不會(huì)被計(jì)算。

  例:if(a>1&&b++>2&&c--!=0)中,僅在條件表達(dá)式a>1為真時(shí),才會(huì)計(jì)算后面的值

  19.程序測(cè)試:

  1)程序測(cè)試只能證明程序有錯(cuò),不能證明程序無(wú)錯(cuò)

  2)例:編程輸入三角形三邊長(zhǎng)a,b,c,判斷他們能否構(gòu)成三角形,能構(gòu)成什么三角形 #include

  #include

  #define EPS 1e-1

  void main()

  {

  float a,b,c;

  int flag=1;

  printf("Enter a,b,c:");

  scanf("%f,%f,%f",&a,&b,&c);

  if(a+b>c&&b+c>a&&a+c>b)

  {

  if(fabs(a-b)<=EPS&&fabs(b-c)<=EPS&&fabs(c-a)<=EPS)

  {

  printf("等邊");

  flag=0;

  }

  else if(fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(c-a)<=EPS)

  {

  printf("等腰");

  flag=0;

  }

  if(fabs(a*a+b*b-c*c)<=EPS||fabs(b*b+c*c-a*a)<=EPS||fabs(a*a+c*c-b*b)<=EPS) {

  printf("直角");

  flag=0;

  }

  if(flag)

  {

  printf("一般");

  }

  printf("三角形 ");

  }

  else{

  printf("不是三角形 ");

  }

  }

  3)例:編程將輸入的百分制成績(jī)轉(zhuǎn)換為五分制成績(jī)輸出

  #include

  void main()

  {

  int score,mark;

  printf("Enter score:");

  scanf("%d",&score);

  if(score<0||score>100)

  {

  mark=-1;//這個(gè)if語(yǔ)句很重要,如果去掉,邊界測(cè)試101~109,-1~-9會(huì)出錯(cuò) }

  else{

  mark=score/10;

  }

  switch(mark)

  {

  case 10:

  case 9:

  printf("%d-優(yōu)! ",score);

  break;

  case 8:

  printf("%d-良! ",score);

  break;

  case 7:

  printf("%d-中! ",score);

  break;

  case 6:

  printf("%d-及格! ",score);

  case 5:

  case 4:

  case 3:

  case 2:

  case 1:

  case 0:

  printf("%d-不及格! ",score);

  break;

  default:

  printf("Input error! ");

  }

  }

  20.對(duì)輸入非法字符的檢查與處理

  1)例:輸入兩個(gè)整型數(shù),計(jì)算并輸出兩個(gè)整數(shù)的最大值

  #include

  void main()

  {

  int a,b,max;

  printf("Enter a,b:");

  scanf("%d,%d",&a,&b);

  max=a>b?a:b;

  printf("max=%d ",max);

  }

  //隱含問(wèn)題:在Visual C++下

  1.如果輸入3.2,1則輸出3

  2.如果輸入1,3.2則輸出3

  3.如果輸入q則輸出-858993460

  //解決辦法:

  #include

  void main()

  {

  int a,b,max,ret;

  do{

  printf("Enter a,b:");

  ret=scanf("%d,%d",&a,&b);

  if(ret!=2)//返回在遇到非法字符前已成功讀入的數(shù)據(jù)項(xiàng)數(shù)

  {

  //但是scanf()函數(shù)不做類型檢查,所以輸入1,3.2會(huì)輸出3

  printf("Input error! ");

  while(get)!= );

  }

  else{

  max=a>b?a:b;

  printf("max=%d ",max);

  }

  }while(ret!=2);

  }

  21.位運(yùn)算符的使用

  1)位運(yùn)算是對(duì)字節(jié)或字內(nèi)的二進(jìn)制數(shù)位進(jìn)行測(cè)試、抽取、設(shè)置或移位等操作

  2) 位運(yùn)算的操作對(duì)象只能是char和int類型

  3) C語(yǔ)言中共有6種位運(yùn)算符,只有按位取反是單目運(yùn)算符,其他都是雙目運(yùn)算符

  4)關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果要么是0,要么是1,而位運(yùn)算結(jié)果可為任意值,但每一位都只能是0或1

  5)6種位運(yùn)算符:

  按位取反 ~ 用于加密處理,一次求反加密,二次求反解密

  左移位 <<

  右移位 >>

  按位與 & 用于對(duì)字節(jié)中某位清零

  按位異或 ^

  按位或 | 用于對(duì)字節(jié)中某位置1

  6)按位取反 ~1=0,~0=1

  例:~5=-6

  ~ 00000101

  ———————

  11111010 是-6的補(bǔ)碼

  7)按位與 0&0=0,0&1=0,1&1=1

  例:將15的最低位不變,其余位清零 15&1=1

  00001111

  & 00000001

  ——————

  00000001

  8)按位或 0|0=0,0|1=1,1|1=1

  例:將15的最高位不變,其余位均置1 15|127=127

  00001111

  | 01111111

  ——————

  01111111 是127的補(bǔ)碼

  9)按位異或 0^0=0,0^1=1,1^1=0

  例:3^5=6

  00000011

  ^ 00000101

  ——————

  00000110 是6的補(bǔ)碼

  10)左移位

  x<

  例:將15左移1、2、3位的二進(jìn)制補(bǔ)碼如下

  初始字節(jié)內(nèi)容 00001111 對(duì)應(yīng)十進(jìn)制15

  左移1位字節(jié)內(nèi)容 00011110 對(duì)應(yīng)十進(jìn)制30

  左移2位字節(jié)內(nèi)容 00111100 對(duì)應(yīng)十進(jìn)制60

  左移3位字節(jié)內(nèi)容 01111000 對(duì)應(yīng)十進(jìn)制120

  11)右移位

  x>>n 表示把x的每一位向右移n位,當(dāng)x為有符號(hào)數(shù)時(shí),左邊空位補(bǔ)符號(hào)位值—算術(shù)移位

  當(dāng)x為無(wú)符號(hào)位時(shí),左邊空位補(bǔ)0—邏輯移位

  例1:將15右移1、2、3位的二進(jìn)制補(bǔ)碼如下

  初始字節(jié)內(nèi)容 00001111 對(duì)應(yīng)十進(jìn)制15

  右移1位字節(jié)內(nèi)容 00000111 對(duì)應(yīng)十進(jìn)制7

  右左移2位字節(jié)內(nèi)容 00000011 對(duì)應(yīng)十進(jìn)制3

  右移3位字節(jié)內(nèi)容 00000001 對(duì)應(yīng)十進(jìn)制1

  例2:將-15右移1、2、3位的二進(jìn)制補(bǔ)碼如下

  初始字節(jié)內(nèi)容 11110001 對(duì)應(yīng)十進(jìn)制-15

  右移1位字節(jié)內(nèi)容 11111000 對(duì)應(yīng)十進(jìn)制-8

  右左移2位字節(jié)內(nèi)容 11111100 對(duì)應(yīng)十進(jìn)制-4

  右移3位字節(jié)內(nèi)容 11111110 對(duì)應(yīng)十進(jìn)制-2

  12) 無(wú)論左移位還是右移位,從一端移走的位不移入另一端,移走的位的信息就丟失了

  13)左移位和右移位可以分表代替整數(shù)的乘法和除法,左移n位相當(dāng)于乘以2^n,右移n為相當(dāng)于除以2^n

  14) 例:寫出運(yùn)行結(jié)果

  #include x 0000 0000 0000 1100

  void main() ~x 1111 1111 1111 0011

  { ~x反碼1000 0000 0000 1100

  int x=12,y=8; ~x反碼加一1000 0000 0000 1101 -13 printf("%5d%5d%5d ",!x,x||y,x&&y);

  printf("%5u%5d%5d ",~x,x|y,x&y);

  printf("%5d%5d%5d ",~x,x|y,x&y);

  }

  輸出: 0 1 1

  4294967283 12 8

  -13 12 8

  五、循環(huán)控制結(jié)構(gòu)

  1.循環(huán):包括計(jì)數(shù)控制的循環(huán)和條件控制的循環(huán)

  2.結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)

  3.循環(huán)結(jié)構(gòu)的類型:

  1)當(dāng)型循環(huán)結(jié)構(gòu):for語(yǔ)句(適合循環(huán)次數(shù)已知,計(jì)數(shù)控制的循環(huán))

  2)直到型循環(huán)結(jié)構(gòu):while語(yǔ)句、do-while語(yǔ)句(適合循環(huán)次數(shù)未知,條件控制的循環(huán))

  4.while語(yǔ)句

  1)一般形式為:

  while(循環(huán)控制表達(dá)式)

  { |

  語(yǔ)句系列 |循環(huán)體

  } |

  2)循環(huán)控制表達(dá)式在執(zhí)行循環(huán)體之前測(cè)試

  3)執(zhí)行過(guò)程:

  計(jì)算循環(huán)控制表達(dá)式的值

  如果循環(huán)控制表達(dá)式的值為真,那么執(zhí)行循環(huán)體中的語(yǔ)句,并返回步驟1

  如果循環(huán)控制表達(dá)式的值為假,就退出循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句

  5.do-while語(yǔ)句

  1)一般形式為:

  do

  { |

  語(yǔ)句系列 |循環(huán)體

  }while(循環(huán)控制表達(dá)式);

  2)循環(huán)控制表達(dá)式在執(zhí)行循環(huán)體之后測(cè)試

  3)執(zhí)行過(guò)程:

  執(zhí)行循環(huán)體中的語(yǔ)句

  計(jì)算循環(huán)控制表達(dá)式的值

  如果循環(huán)控制表達(dá)式的值為真,那么返回步驟1

  如果循環(huán)控制表達(dá)式的值為假,就退出循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句

  6.for語(yǔ)句

  1)一般形式為:

  for(初始化表達(dá)式;循環(huán)控制表達(dá)式;增值表達(dá)式)

  { |

  語(yǔ)句系列 |循環(huán)體

  } |

  2) 在每次循環(huán)體被執(zhí)行之前,都要對(duì)循環(huán)控制條件測(cè)試一次,每次循環(huán)體執(zhí)行完以后都要執(zhí)行一次增值表達(dá)式

  3)初始化表達(dá)式作用:循環(huán)變量初始化,即賦初值

  4)循環(huán)控制表達(dá)式:是控制繼續(xù)執(zhí)行的條件,當(dāng)表達(dá)式的值為非0時(shí)重復(fù)執(zhí)行循環(huán)

  5)增值表達(dá)式作用:每執(zhí)行一次循環(huán),循環(huán)控制變量增值

  6)for語(yǔ)句三個(gè)表達(dá)式之間用分號(hào)分隔,有且只能有兩個(gè)分號(hào)

  7)循環(huán)控制表達(dá)式若省略,表示循環(huán)條件為永真

  8)初始化表達(dá)式和增值表達(dá)式都可省略,但是必須有其他語(yǔ)句反應(yīng)其作用

  7.例:從鍵盤輸入n,然后計(jì)算輸出1+2+3+??n的值

  1)while語(yǔ)句編程實(shí)現(xiàn)

  #include

  void main()

  {

  int i=1,n,sum=0;//sum一定要初始化,不然會(huì)是隨機(jī)值

  printf("Enter n:");

  scanf("%d",&n);

  while(i<=n)

  {

  sum+=i;

  i++;

  }

  printf("1+2+3+??+%d=%d ",n,sum);

  }

  2)do-while語(yǔ)句編程實(shí)現(xiàn)

  #include

  void main()

  {

  int i=0,n,sum=0;

  printf("Enter n:");

  scanf("%d",&n);

  do

  {

  sum+=i;

  i++;

  }while(i<=n);

  printf("1+2+3+??+%d=%d ",n,sum);

  }

  3)for語(yǔ)句編程實(shí)現(xiàn)

  #include

  void main()

  {

  int i=1,n,sum=0;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  sum+=i;

  }

  printf("1+2+3+??+%d=%d ",n,sum);

  }

  8.逗號(hào)運(yùn)算符

  1)所有運(yùn)算符中優(yōu)先級(jí)最低,左結(jié)合

  2)作用:可實(shí)現(xiàn)對(duì)各個(gè)表達(dá)式的順序求值

  3)結(jié)果:將最后一個(gè)表達(dá)式的值作為整個(gè)逗號(hào)表達(dá)式的值

  4)例:從鍵盤輸入n,然后計(jì)算輸出1+2+3+??n的值

  #include

  void main()

  {

  int i,j,n,sum=0;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1,j=n;i<=j;i++,j--)

  {

  sum+=i+j;

  }

  printf("1+2+3+??+%d=%d ",n,sum);

  }

  9.空語(yǔ)句

  1)僅由一個(gè)分號(hào)構(gòu)成的語(yǔ)句

  2)作用:什么也不做,只起延時(shí)作用

  3)例:for(i=1;i<50000000;i++)

  {

  ;

  }

  或for(i=1;i<50000000;i++)

  {

  }

  或for(i=1;i<50000000;i++);

  for(i=1;i<=n;i++);

  {

  sum+=i;

  }

  等價(jià)于

  for(i=1;i<=n;i++)

  {

  ;

  }

  sum+=i;

  4) 例:從鍵盤輸入n,然后計(jì)算輸出1+2+3+??n的值

  #include

  void main()

  {

  int i,j,n,sum=0;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1,j=n;i<=j;i++,j--);

  {

  sum+=i+j;

  }

  printf("1+2+3+??+%d=%d ",n,sum);

  }//輸出結(jié)果:101

  10.死循環(huán)

  1)while語(yǔ)句行末加分號(hào)將導(dǎo)致死循環(huán)

  2)例:i=1;

  while(i<=n);//行末加分號(hào)導(dǎo)致死循環(huán)

  {

  sum+=i;

  i++;

  }

  相當(dāng)于

  i=1;

  while(i<=n)//當(dāng)輸入大于1的n值,循環(huán)體中沒(méi)有語(yǔ)句可以改變控制變量i { //使得循環(huán)條件為永真,導(dǎo)致死循環(huán)

  ;

  }

  sum+=i;

  i++;

  11.while語(yǔ)句和do-while語(yǔ)句的區(qū)別

  1)while先判斷后執(zhí)行,有可能一次都不執(zhí)行,do-while先執(zhí)行后判斷,至少執(zhí)行一次

  2)例:n=101; n=101;

  while(n<100) do

  { {

  printf("n=%d ",n); printf("n=%d ",n);

  n++; n++;

  } }while(n<100);

  //循環(huán)一次也不執(zhí)行 //結(jié)果:輸出n=101,循環(huán)執(zhí)行一次

  3)例:分別用while和do-while語(yǔ)句編程,輸入一組數(shù)據(jù),然后顯示每次輸入數(shù)據(jù)進(jìn)行累加運(yùn)算的結(jié)果,輸入0結(jié)束

  do-while語(yǔ)句實(shí)現(xiàn):

  #include

  void main()

  {

  int num,sum=0;

  do{

  printf("Enter num:");

  scanf("%d",&num);

  sum+=num;

  printf("sum=%d ",sum);

  }while(num!=0);

  }

  while語(yǔ)句實(shí)現(xiàn)

  #include

  void main()

  {

  int num=1,sum=0;//給num賦任意非0值都可以

  while(num!=0)

  {

  printf("Enter num:");

  scanf("%d",&num);

  sum+=num;

  printf("sum=%d ",sum);

  }

  }

  12.計(jì)數(shù)控制的循環(huán):循環(huán)次數(shù)事先已知的循環(huán)

  1)例1:編寫一個(gè)程序,從鍵盤輸入n,計(jì)算輸出n! #include

  void main()

  {

  int i,n,sum=1;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  sum*=i;

  }

  printf("%d!=%ld ",n,sum);

  }

  2)例2:編寫一個(gè)程序,從鍵盤輸入n,計(jì)算輸出1!,2!??n! #include

  void main()

  {

  int i,n,sum=1;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  sum*=i;

  printf("%2d!=%ld ",i,sum);

  }

  }

  3)例:鍵盤輸入n,編程計(jì)算1!+2!+3!+??+n!

  #include

  void main()

  {

  int term=1,sum=0,i,n;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  term*=i;

  sum+=term;

  }

  printf("1!+2!+3!+??+%d!=%ld ",n,sum);

  }

  13.條件控制的循環(huán):循環(huán)次數(shù)事先未知,由條件控制

  1)例1:輸入兩個(gè)整型數(shù),計(jì)算并輸出兩個(gè)整型數(shù)的最大值,如若輸入非法字符,提示錯(cuò)誤并重新輸入

  //解釋:非法字符,需要輸入數(shù)字時(shí),字符相對(duì)它來(lái)說(shuō)就是非法字符,而需要輸入字符型,數(shù)字對(duì)它不是非法字符,所有都是合法

  #include

  void main()

  {

  int a,b,max,ret;

  printf("Enter a,b:");

  ret=scanf("%d %d",&a,&b);

  while(ret!=2)//判斷數(shù)據(jù)個(gè)數(shù)或格式是否錯(cuò)誤

  {

  while(get)!= );//清除緩沖區(qū)中的錯(cuò)誤數(shù)據(jù)

  printf("Enter a,b:");

  ret=scanf("%d %d",&a,&b);

  }

  max=a>b?a:b;

  printf("max=%d ",max);

  }

  //注意:scanf()函數(shù)不做參數(shù)類型匹配檢查,當(dāng)輸入1 3.2時(shí),scanf返回2,不會(huì)導(dǎo)致重新輸入

  但是,此后的小數(shù)點(diǎn)仍留在緩沖區(qū),如果此后還需輸入內(nèi)容,就要先清除緩沖區(qū)內(nèi)容

  2)例2:先由計(jì)算機(jī)想一個(gè)1-100之間的數(shù)請(qǐng)人猜,若猜對(duì),則計(jì)算機(jī)提示Right!結(jié)束 游戲,否則提示W(wǎng)rong!,并告訴人是大是小,直到猜對(duì)為止,記錄人猜的次數(shù),反應(yīng)猜數(shù)的水平

  #include

  #include

  void main()

  {

  int magic;

  int guess;

  int counter=0;

  magic=rand()%100+1;

  do{

  printf("Please guess a magic number:");

  scanf("%d",&guess);

  counter++;

  if(guess>magic)

  {

  printf("Wrong!Too big! ");

  }

  else if(guess

  {

  printf("Wrong!Too small! ");

  }

  else{

  printf("Right! ");

  }

  }while(guess!=magic);

  printf("counter=%d ",counter);

  }

  14.隨機(jī)數(shù)的使用

  a.隨機(jī)數(shù)的產(chǎn)生: rand()

  1) 符號(hào)常量RAND_MAX在頭文件#include中定義,標(biāo)準(zhǔn)C規(guī)定RAND_MAX不大于雙字節(jié)整數(shù)的最大值32767

  2)隨機(jī)函數(shù)rand()產(chǎn)生的是一個(gè)在0~RAND_MAX之間的整數(shù),即[0,32767]之間的整數(shù)

  3) 利用求余運(yùn)算rand()%b可將函數(shù)rand()生成的隨機(jī)數(shù)變化到[0,b-1]

  4) 利用rand()%b+a可將隨機(jī)數(shù)的取值范圍平移到[a,a+b-1]

  b.隨機(jī)數(shù)的產(chǎn)生: srand(time(NULL))

  1)用rand()直接產(chǎn)生的隨機(jī)數(shù)只是一個(gè)偽隨機(jī)數(shù),反復(fù)調(diào)用產(chǎn)生的隨機(jī)數(shù)序列是一樣的,而且每次都只用第一個(gè)

  2)隨機(jī)化:使程序每次運(yùn)行時(shí)產(chǎn)生不同的隨機(jī)數(shù)序列的過(guò)程

  3)隨機(jī)化的實(shí)現(xiàn):通過(guò)調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)srand()為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來(lái)實(shí)現(xiàn)

  4)隨機(jī)數(shù)種子的設(shè)置:

  法1:每次通過(guò)用戶輸入來(lái)完成隨機(jī)化,srand(1),srand(2),srand(seed),輸入seed

  法2:的通過(guò)函數(shù)time()讀取計(jì)算機(jī)的時(shí)鐘值,并把該值設(shè)置為隨機(jī)數(shù)種子srand(time(NULL))

  5)函數(shù)time()返回以秒計(jì)算的當(dāng)前時(shí)間值,即一個(gè)代表時(shí)間的字符串,使用NULL作為time()的參數(shù)時(shí),

  time(NULL)的返回值被轉(zhuǎn)換成一個(gè)無(wú)符號(hào)整數(shù),可作為隨機(jī)數(shù)發(fā)生器的種子

  6)使用time()函數(shù)時(shí),必須在程序開頭將頭文件包含到程序中

  15.例:先由計(jì)算機(jī)想一個(gè)1-100之間的數(shù)請(qǐng)人猜,若猜對(duì),則計(jì)算機(jī)提示Right!結(jié)束

  游戲,否則提示W(wǎng)rong!,并告訴人是大是小,直到猜對(duì)為止,記錄人猜的次數(shù),反應(yīng)猜數(shù)的水平

  #include

  #include

  #include

  void main()

  {

  int magic;

  int guess;

  int counter=0;

  srand(time(NULL));

  magic=rand()%100+1;

  do{

  printf("Please guess a magic number:");

  scanf("%d",&guess);

  counter++;

  if(guess>magic)

  {

  printf("Wrong!Too big! ");

  }

  else if(guess

  {

  printf("Wrong!Too small! ");

  }

  else{

  printf("Right! ");

  }

  }while(guess!=magic);

  printf("counter=%d ",counter);

  }

  16.例:先由計(jì)算機(jī)想一個(gè)1-100之間的數(shù)請(qǐng)人猜,若猜對(duì),則計(jì)算機(jī)提示Right!屏幕輸出多少次成功,

  結(jié)束游戲,否則提示W(wǎng)rong!,并告訴人是大是小,最多猜10次,超過(guò)就結(jié)束,要避免非法字符的輸入

  #include

  #include

  #include

  void main()

  {

  int magic;

  int guess;

  int counter=0;

  int ret;//保存scanf()函數(shù)的返回值

  srand(time(NULL));

  magic=rand()%100+1;

  do{

  printf("Please guess a magic number:");

  ret=scanf("%d",&guess);

  while(ret!=1)//若存在輸入錯(cuò)誤,則重新輸入

  {

  while(get)!= );//清楚緩沖區(qū)中的內(nèi)容

  printf("Please guess a magic number:");

  ret=scanf("%d",&guess);

  } //若存在非法字符,則重新輸入

  counter++;

  if(guess>magic)

  {

  printf("Wrong!Too big! ");

  }

  else if(guess

  {

  printf("Wrong!Too small! ");

  }

  else{

  printf("Right! ");

  }

  }while(guess!=magic&&counter<10);

  printf("counter=%d ",counter);

  }

  延伸拓展:先由計(jì)算機(jī)想一個(gè)1-100之間的數(shù)請(qǐng)人猜,若猜對(duì),則計(jì)算機(jī)提示Right!屏幕輸出多少次成功,

  結(jié)束游戲,否則提示W(wǎng)rong!,并告訴人是大是小,最多猜10次,超過(guò)就繼續(xù)猜下一個(gè)數(shù),每次運(yùn)行程序,可

  反復(fù)猜多個(gè)數(shù),直到操作者想停時(shí)結(jié)束,要注意避免非法字符輸入的問(wèn)題

  #include

  #include

  #include

  void main()

  {

  int magic;

  int guess;

  int counter;

  char reply;//保存用戶輸入的答案

  int ret;//保存scanf()函數(shù)的返回值

  srand(time(NULL));

  do{

  magic=rand()%100+1;

  counter=0;

  do{

  printf("Please guess a magic number:");

  ret=scanf("%d",&guess);

  while(ret!=1)//若存在輸入錯(cuò)誤,則重新輸入

  {

  while(get)!= );//清楚緩沖區(qū)中的內(nèi)容

  printf("Please guess a magic number:");

  ret=scanf("%d",&guess);

  } //若存在非法字符,則重新輸入

  counter++;

  if(guess>magic)

  {

  printf("Wrong!Too big! ");

  }

  else if(guess

  {

  printf("Wrong!Too small! ");

  }

  else{

  printf("Right! ");

  }

  }while(guess!=magic&&counter<10);

  printf("counter=%d ",counter);

  printf("Do you want to continue(Y/N or y/n)?");

  scanf(" %c",&reply);//%c前有一個(gè)空格,讀取緩沖區(qū)中的回車符

  }while(reply==Y||reply==y);

  }

  17.設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器,允許連續(xù)做多次算術(shù)運(yùn)算

  #include

  #include

  void main()

  {

  float data1,data2;

  char op;

  char reply;

  do{

  printf("Please enter your expression: ");

  scanf("%f %c%f",&data1,&op,&data2);//加空格可在操作數(shù)和運(yùn)算符之間加任意多個(gè)空白符

  switch(op)

  case +:

  printf("%f+%f=%f ",data1,data2,data1+data2);

  break;

  case -:

  printf("%f-%f=%f ",data1,data2,data1-data2);

  break;

  case *:

  case X:

  case x:

  printf("%f*%f=%f ",data1,data2,data1*data2);

  break;

  case /:

  if(fabs(data2)<=1e-7)

  {

  printf("Division by zero! ");

  }

  else{

  printf("%f/%f=%f ",data1,data2,data1/data2);

  }

  break;

  default:

  printf("Invalid operator! ");

  }

  printf("Do you want to continue(Y/y or N/n)?");

  scanf(" %c",&reply);//加空格清除緩沖區(qū)中的回車符

  }

  while(reply==Y||reply==y);

  }

  18.嵌套循環(huán)

  一個(gè)循環(huán)語(yǔ)句放在另一個(gè)循環(huán)語(yǔ)句中構(gòu)成的循環(huán)稱為嵌套循環(huán)

  1) 嵌套循環(huán)的總循環(huán)次數(shù)等于外層循環(huán)次數(shù)和內(nèi)層循環(huán)次數(shù)的乘積

  2)為避免造成混亂,嵌套循環(huán)的內(nèi)層和外層的循環(huán)控制變量不要同名

  3)例:鍵盤輸入n,編程計(jì)算1!+2!+3!+??+n!

  #include

  void main()

  {

  int term,sum=0,i,j,n;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  term=1;

  for(j=1;j<=i;j++)

  term*=j;

  }

  sum+=term;

  }

  printf("1!+2!+3!+??+%d!=%ld ",n,sum);

  }

  19累加求和構(gòu)成規(guī)律:

  1)當(dāng)累加項(xiàng)較為復(fù)雜或者前后項(xiàng)之間無(wú)關(guān)時(shí),需要單獨(dú)計(jì)算每個(gè)累加項(xiàng)

  2)當(dāng)累加項(xiàng)前項(xiàng)與后項(xiàng)之間有關(guān)時(shí),根據(jù)前項(xiàng)計(jì)算后項(xiàng)

  #include

  void main()

  {

  int i,n;

  long term=1,sum=0;

  printf("Enter n:");

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

  term=term*i;

  sum=sum+term;

  }

  printf("1!+2!+3!+??%d=%ld ",n,sum);

  }

  20.goto語(yǔ)句

  1)功能:使程序無(wú)條件跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句去執(zhí)行,所跳過(guò)的語(yǔ)句不再執(zhí)行

  2)一般形式:

 、傧蚯疤D(zhuǎn) ②向后跳轉(zhuǎn)

  goto 語(yǔ)句標(biāo)號(hào); 語(yǔ)句標(biāo)號(hào):??(后)

  ?? ??

  語(yǔ)句標(biāo)號(hào):?? (前) goto 語(yǔ)句標(biāo)號(hào);

  3)應(yīng)用:通常情況,goto語(yǔ)句與if語(yǔ)句聯(lián)合使用

  if(表達(dá)式) goto語(yǔ)句標(biāo)號(hào); 語(yǔ)句標(biāo)號(hào):??

  ?? ??

  語(yǔ)句標(biāo)號(hào):?? if(表達(dá)式) goto語(yǔ)句標(biāo)號(hào);

  21.break語(yǔ)句

  1)功能:①用于退出switch結(jié)構(gòu)

 、谟糜谕顺鲇蓋hile,do-while和for語(yǔ)句構(gòu)成的循環(huán)體

  2)原理:當(dāng)執(zhí)行循環(huán)體遇到break語(yǔ)句時(shí),循環(huán)體將立即終止,從循環(huán)語(yǔ)句后的第一條語(yǔ)句開始繼續(xù)執(zhí)行

  3)應(yīng)用:break語(yǔ)句通常與if聯(lián)合使用,表明在任何條件下跳轉(zhuǎn)到緊接循環(huán)語(yǔ)句后的第一條語(yǔ)句

  22.continue語(yǔ)句

  1)功能:跳過(guò)continue后面尚未執(zhí)行的語(yǔ)句,開始下一次循環(huán),只結(jié)束本次循環(huán),不終止整

  個(gè)循環(huán)

  2)例題:

  #include

  void main()

  {

  int i,n;

  for(i=1;i<=5;i++)

  {

  printf("Please enter n:");

  scanf("%d",&n);

  if(n<0) continue;

  printf("n=%d ",n);

  }

  printf("Program is over! ");

  }

  23.函數(shù)exit()

  1) 標(biāo)準(zhǔn)庫(kù)函數(shù)exit()用于控制程序的流程,調(diào)用時(shí),需要加頭文件

  2)一般形式:exit(code);

  3)功能:終止整個(gè)程序的執(zhí)行,強(qiáng)制返回操作系統(tǒng),并將int型參數(shù)code的值傳給調(diào)用進(jìn)程 (一般為操作系統(tǒng)),當(dāng)code的值為0或宏常量EXIT_FAILURE,表示程序出現(xiàn)某種錯(cuò)誤后退出

  24.goto,break,continue,exit()的比較

  1)goto,break,continue,exit()都用于控制程序的流程,前三個(gè)是流程控制語(yǔ)言,exit()是C標(biāo)準(zhǔn)函數(shù)

  1)功能:goto語(yǔ)句可以向任意方向跳轉(zhuǎn),break語(yǔ)句只限定流程跳轉(zhuǎn)到循環(huán)語(yǔ)句之后 的第一條語(yǔ)句,continue語(yǔ)句結(jié)束本次循環(huán),exit()直接終止所有程序

  2)break,goto語(yǔ)句和exit()函數(shù)都可用于終止整個(gè)循環(huán)的執(zhí)行,continue不能終止整個(gè)循環(huán)

  3)在嵌套循環(huán)下,break語(yǔ)句和continue語(yǔ)句只對(duì)包含他們的最內(nèi)層循環(huán)語(yǔ)句起作用, 不能用break語(yǔ)句跳出多重循環(huán),只能一層一層的跳出

  4)使用goto語(yǔ)句的兩種特定情形:

  ①快速跳出多重循環(huán)

 、谔蚬餐某隹谖恢,進(jìn)行退出前的錯(cuò)誤處理工作

  25.例題:韓信點(diǎn)兵:x%5==1&&x%6==5&&x%7==4&&x%11==10

  ①窮舉法(循環(huán)條件自定義,不具實(shí)際意義)

 、赽reak退出循環(huán)(循環(huán)條件省略,滿足條件結(jié)束循環(huán))

 、踖xit(0)結(jié)束程序(循環(huán)條件省略,滿足條件結(jié)束整個(gè)程序)

 、苁褂脴(biāo)志變量(循環(huán)條件為標(biāo)識(shí)變量為0,最佳方法)

  #include

  void main()

  {

  int x;

  int find=0;

  for(x=1;!find;x++)

  {

  if(x%5==1&&x%6==5&&x%7==4&&x%11==10)

  {

  printf("x=%d ",x);

  find=1;

  }

  }

  }

  26.類型溢出

  1)原因:當(dāng)運(yùn)算的結(jié)果超出了類型所能表示的數(shù)的上界,導(dǎo)致進(jìn)位到達(dá)了最前面的符號(hào) 位或者更多進(jìn)位的丟失,就會(huì)發(fā)生類型溢出

  2)解決辦法:采用取值范圍更大的數(shù)據(jù)類型來(lái)定義變量

  27.結(jié)構(gòu)化程序設(shè)計(jì)的基本思想

  1)采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計(jì)的基本單元,語(yǔ)法結(jié)構(gòu)具有4個(gè)特性 ①只有一個(gè)入口

 、谥挥幸粋(gè)出口

 、蹮o(wú)不可達(dá)語(yǔ)句,即不存在永遠(yuǎn)執(zhí)行不到的語(yǔ)句

  ④無(wú)死循環(huán),即不存在永遠(yuǎn)都執(zhí)行不完的循環(huán)

  2)盡量避免使用goto語(yǔ)句,因?yàn)樗茐牧私Y(jié)構(gòu)化設(shè)計(jì)風(fēng)格,并且容易帶來(lái)錯(cuò)誤的隱患

  3)采用自頂向下、逐步求精的模塊化程序設(shè)計(jì)方法進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)

【C語(yǔ)言基礎(chǔ)知識(shí)總結(jié)】相關(guān)文章:

C語(yǔ)言的基礎(chǔ)知識(shí)08-16

C語(yǔ)言基礎(chǔ)知識(shí)10-13

C語(yǔ)言基礎(chǔ)知識(shí)小總結(jié)07-08

C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)總結(jié)09-12

C語(yǔ)言基礎(chǔ)知識(shí)集錦05-13

C語(yǔ)言程序基礎(chǔ)知識(shí)09-09

C語(yǔ)言基礎(chǔ)知識(shí)大全09-23

c語(yǔ)言入門基礎(chǔ)知識(shí)07-18

C語(yǔ)言基礎(chǔ)知識(shí)匯總07-15