C語言-全國計算機等級考試2級-所有教程最全_第1頁
C語言-全國計算機等級考試2級-所有教程最全_第2頁
C語言-全國計算機等級考試2級-所有教程最全_第3頁
C語言-全國計算機等級考試2級-所有教程最全_第4頁
C語言-全國計算機等級考試2級-所有教程最全_第5頁
已閱讀5頁,還剩183頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

全國計算機

等級考試二級教程

——C語言程序設計培訓講座辛建軍3/14/202412012年計算機等級考試二級C考試大綱◆根本要求

1.熟悉VisualC++6.0集成開發(fā)環(huán)境。

2.掌握結(jié)構化程序設計的方法,具有良好的程序設計風格。

3.掌握程序設計中簡單的數(shù)據(jù)結(jié)構和算法并能閱讀簡單的程序。

4.在VisualC++6.0集成環(huán)境下,能夠編寫簡單的C程序,并具有根本的糾錯和調(diào)試程序的能力。3/14/20242考試方式1.筆試:90分鐘,總分值100分,其中含公共根底知識局部的30分。

2.上機:90分鐘,總分值100分

3.上機操作包括:

〔1〕填空。

〔2〕改錯。

〔3〕編程。3/14/20243考試內(nèi)容,如下表

3/14/20244考試內(nèi)容,如下表

3/14/20245考試要點總結(jié)3/14/20246第1章程序設計根本概念第9章數(shù)組第2章C的初步知識第10章字符串第3章順序結(jié)構第11章對函數(shù)的進一步討論第4章選擇結(jié)構第12章作用域和存儲類別第5章循環(huán)結(jié)構第13章編譯預處理和動態(tài)存儲分配第6章字符型數(shù)據(jù)第14章結(jié)構體、共用體和用戶定義類型第7章函數(shù)第15章位運算第8章地址和指針第16章文件內(nèi)容導航3/14/20247第1章程序設計根本概念1.1程序和程序設計

程序

連續(xù)執(zhí)行的一條條指令的集合稱為“程序”。計算機并不能直接識別由高級語言編寫的程序,它只能接受和處理由0和1的代碼構成的二進制指令或數(shù)據(jù)。這種形式的指令稱為“機器語言”。

每條C語句,經(jīng)過編譯(Compile)最終都將轉(zhuǎn)換成二進制的機器指令。由C語言構成的指令序列稱為C源程序。C源程序經(jīng)過C編譯程序編譯之后生成一個后綴為.OBJ的二進制文件(稱為目標文件),然后由“連接程序”(Link),把此.OBJ文件與C語言提供的各種庫函數(shù)連接起來生成一個后綴為.EXE的可執(zhí)行文件。在操作系統(tǒng)環(huán)境下,只需點擊或輸入此文件的名字(而不必輸入后綴.EXE),該可執(zhí)行文件就可運行。

程序設計

簡單的程序設計一般包含以下幾個局部:確定數(shù)據(jù)結(jié)構、確定算法、編碼、在計算機上調(diào)試程序、整理并寫出文檔資料。3/14/20248【例題分析】

〔2007.4試題〕以下表達中錯誤的選項是(D)

A〕計算機不能直接執(zhí)行用C語言編寫的源程序

B〕C程序經(jīng)C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件

C〕后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個二進制文件

D〕后綴為.obj和.exe的二進制文件都可以直接運行

〔2009.9試題〕以下表達中正確的選項是(D)

A〕程序設計的任務就是編寫程序代碼并上機調(diào)試

B〕程序設計的任務就是確定所用數(shù)據(jù)結(jié)構

C〕程序設計的任務就是確定所用算法

D〕以上三種說法都不完整3/14/202491.2算法

學習計算機程序設計語言的目的,是要用語言作為工具,設計出可供計算機運行的程序。有了一個好的算法,就可以用任何一種計算機高級語言把算法轉(zhuǎn)換為程序(編寫程序)。算法是指為解決某個特定問題而采取確實定且有限的步驟。一個算法應當具有以下五個特性:有窮性、確定性、可行性、有零個或多個輸入、有一個或多個輸出。

算法可以用各種描述方法來進行描述,最常用的是偽代碼、流程圖和N-S流程圖。

3/14/202410【例題分析】〔習題〕以下那一個不是算法的特性()

A〕有窮性B〕唯一性C〕確定性D〕可行性3/14/2024111.3結(jié)構化程序設計和模塊結(jié)構

結(jié)構化程序

結(jié)構化程序由三種根本結(jié)構組成:順序結(jié)構、選擇結(jié)構、循環(huán)結(jié)構。

模塊化結(jié)構

3/14/202412以下選項中關于程序模塊化的表達錯誤的選項是______。A)把程序分成假設干相對獨立的模塊,便于編碼和調(diào)試B)把程序分成假設干相對獨立、功能單一的模塊,可便于重復使用這些模塊C)可采用自底向上、逐步細化的設計方法把假設干獨立模塊組裝成所要求的程序D)可采用自頂向下、逐步細化的設計方法把假設干獨立模塊組裝成所要求的程序【例題分析】3/14/202413第2章C程序設計的初步知識2.1認識C程序例2.1第一個程序Hello,World!/*example2.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}輸出:Hello,World!注釋編譯預處理函數(shù)語句3/14/202414例2.2求矩形的面積。#include<stdio.h>/*Thisisthemainprogram*/main(){doublea,b,area;a=1.2;b=3.6;area=a*b;

printf(”area=%f\n",area);}語句>3/14/202415格式特點習慣用小寫字母,大小寫敏感不使用行號,無程序行概念可使用空行和空格常用鋸齒形書寫格式<>main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}#include<stdio.h>

main(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}優(yōu)秀程序員的素質(zhì)之一:使用TAB縮進{}對齊有足夠的注釋有適宜的空行3/14/202416結(jié)構特點函數(shù)與主函數(shù)程序由一個或多個函數(shù)組成必須有且只能有一個主函數(shù)main()程序執(zhí)行從main開始,在main中結(jié)束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。程序語句C程序由語句組成用“;”作為語句終止符注釋/**/為注釋,不能嵌套不產(chǎn)生編譯代碼<>例:/*Thisisthemain/*ofexample1.1*/*/非法編譯預處理命令#include<stdio.h>3/14/202417知識點

1、C語言由函數(shù)組成,有且僅有一個主函數(shù)--main(),一個程序總是從主函數(shù)開始執(zhí)行;

2、C語言的語句由“;”結(jié)束,書寫格式自由,一行可寫多個語句,一個語句可分多行書寫;

3、C程序是大小寫敏感的〔嚴格區(qū)分字母大小寫〕;4、C程序的文件擴展名必須是.c;5、C語言的兩種注釋方式://行尾注釋或/*塊注釋*/;6、使用輸入/出庫函數(shù)時需在預處理命令中包含stdio.h頭文件;7、要求熟記本章中出現(xiàn)的幾種定界符:<>、""、;、()、\n、//等;3/14/202418【例題分析】〔2010.3試題〕以下表達正確的選項是(B)

A〕C語言程序是由過程和函數(shù)組成的

B〕C語言函數(shù)可以嵌套調(diào)用的,例如:fun(fun(x))

C〕C語言函數(shù)不可以單獨編譯

D〕C語言中除了main函數(shù),其他函數(shù)不可作為單獨文件形式存在

〔2008.4試題〕以下表達中正確的選項是(C)

A)C程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面

B)C程序書寫格式嚴格,要求一行內(nèi)只能寫一個語句

C)C程序書寫格式自由,一個語句可以寫在多行上

D)用C語言編寫的程序只能放在一個程序文件中3/14/2024192.2標識符、常量和變量定義:用來標識變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個字母必須是字母或下劃線大小寫敏感不能使用關鍵字長度:最長32個字符命名原那么:見名知意不宜混淆如l與I,o與0例:判斷以下標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>3days#33char$123a>b

3/14/202420一般用大寫字母是宏定義預處理命令,不是C語句如#definePRICE30定義:程序運行時其值不能改變的量〔即常數(shù)〕分類:符號常量:用標識符代表常量定義格式:#define符號常量常量<>例符號常量舉例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}運行結(jié)果:total=300常量常量與變量3/14/202421編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元…...地址inta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址…...內(nèi)存1-3

隨機數(shù)概念:其值可以改變的量變量名與變量值變量定義的一般格式:

數(shù)據(jù)類型變量1[,變量2,…,變量n];變量初始化:定義時賦初值例:inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標識符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

變量定義位置:一般放在函數(shù)開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執(zhí)行語句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量3/14/202422三種形式:十進制整數(shù):由數(shù)字0~9和正負號表示.如123,-456,0八進制整數(shù):由數(shù)字0開頭,后跟數(shù)字0~7表示.如0123,011十六進制整數(shù):由0x開頭,后跟0~9,a~f,A~F表示.如0x123,0Xff例12與12L例30000為int型65536為longint型整型常量的類型根據(jù)其值所在范圍確定其數(shù)據(jù)類型在整常量后加字母l或L,認為它是longint型常量問題:0123=()100x123=()100Xff=()1083291255問題:0123=()100x123=()100Xff=()10整型常量〔整常數(shù)〕3/14/202423表示形式:十進制數(shù)形式:〔必須有小數(shù)點〕如0.123,.123,123.0,0.0,123.指數(shù)形式:〔e或E之前必須有數(shù)字;指數(shù)必須為整數(shù)〕如12.3e3,123E2,1.23e4,e-5,實型常量的類型默認double型在實型常量后加字母f或F,認為它是float型

實型常量〔實數(shù)或浮點數(shù)〕3/14/202424占字節(jié)數(shù)隨機器不同而不同,一般占一個機器字short≤int≤long可用sizeof(類型標識符〕測量實型變量float:占4字節(jié),提供7位有效數(shù)字double:占8字節(jié),提供15~16位有效數(shù)字例1:floata;a=111111.111;/*a=111111.1*/例2:doubleb;b=111111.111;/*b=111111.111*/整型變量3/14/202425/*ch2_003.c*/#definePRICE12.5main(){intnum=3;floattotal;

total=num*PRICE;

printf(“total=%f\n”,total);}宏定義變量定義輸出結(jié)果運行結(jié)果:total=37.500000例:3/14/202426運算符功能與運算量關系要求運算量個數(shù)要求運算量類型運算符優(yōu)先級別結(jié)合方向結(jié)果的類型學習運算符應注意3/14/202427根本算術運算符:+-*/%結(jié)合方向:從左向右優(yōu)先級:----->*/%----->+-(2)(3)(4) 說明:“-”可為單目運算符時,右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%22.3算術運算符和表達式2-2.51-110(

)3/14/202428一般形式:〔類型名〕〔表達式〕例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3較高類型向較低類型轉(zhuǎn)換時可能發(fā)生精度損失問題2.4強制類型轉(zhuǎn)換〔顯式轉(zhuǎn)換〕3/14/202429簡單賦值運算符符號:=格式:變量標識符=表達式作用:將一個數(shù)據(jù)〔常量或表達式〕賦給一個變量復合賦值運算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;2.5賦值運算符和表達式3/14/202430結(jié)合方向:自右向左優(yōu)先級:14左側(cè)必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉(zhuǎn)換規(guī)那么:使賦值號右邊表達式值自動轉(zhuǎn)換成其左邊變量的類型例3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;那么f=10.0例inti;i=2.56;//結(jié)果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表達式值為5,a,b,c值為5//b=5;a=5//表達式值11,c=6,a=11//表達式值10,a=10,b=4,c=6//表達式值5,a=5,b=10,c=2說明〔1〕:

3/14/202431結(jié)合方向:自右向左優(yōu)先級:12

左側(cè)必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉(zhuǎn)換規(guī)那么:使賦值號右邊表達式值自動轉(zhuǎn)換成其左邊變量的類型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等價于a=a+(a=a-(a*a))//a=0等價于a=a+(a=a*(a=a-(a=a*3)))說明〔2〕:

3/14/202432作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值〕后置i++,i--(先使用i值,再執(zhí)行i+1或i-1〕例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=42.6自增、自減運算符++--3/14/202433作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值〕后置i++,i--(先使用i值,再執(zhí)行i+1或i-1〕說明:++--不能用于常量和表達式,如5++,(a+b)++++--結(jié)合方向:自右向左優(yōu)先級:-++-------->*/%----->+-

(2)(3)(4)例-i++

-(i++)i=3;printf(“%d”,-i++);//-3

例-i++i=3;printf(“%d”,-i++);

自增、自減運算符++--3/14/202434形式:表達式1,表達式2,……表達式n結(jié)合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表達式值60//a=15,表達式值20//賦值表達式,表達式值18,x=18//逗號表達式,表達式值18,x=3//1,2,3//3,2,32.7逗號運算符和表達式例:/*ch2_6.c*/#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運行結(jié)果:x=33/14/2024351、假設所有變量均為整型,那么表達式〔a=2,b=5,b++,a+b〕的值是。A、7B、8C、6D、22、假設有以下定義,那么能使值為3的表達式是。Intk=7,X=12;A、X%=〔k%=5〕B、X%=〔k-k%5〕C、X%=k-k%5D、〔X%=k〕-〔k%=5〕3、以下不能定義為用戶標識符是。

A、MainB、_0C、_intD、sizeof4、以下選項中,不能作為合法常量的是。

A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e05.用C語言描述:“X是偶數(shù)”的表達式是______。6.利用減1運算符“--”,下面的兩個語句:b=5+a;a-=1;表達的功能,可由一個語句來實現(xiàn)。這個語句是______?!纠}分析】3/14/202436第3章順序結(jié)構程序設計ABAB流程圖N-S圖順序結(jié)構3/14/202437第3章順序結(jié)構程序設計3.1C語言的順序結(jié)構語句1.表達式語句表達式的后面加一個分號就構成了一個語句,例如:sum=a+b;。事實上,C語言中有使用價值的表達式語句主要有3種:(1)賦值語句。例如:sum=a+b;(2)自動增1、減1運算符構成的表達式語句。例如:i++;(3)逗號表達式語句。例:x=1,y=2;2.空語句語句僅有一個分號“;”,它表示什么也不做。一般和后面章節(jié)所講循環(huán)語句結(jié)合使用起到延時作用。3.復合語句由"{"和"}"把一些變量定義和執(zhí)行語句組合在一起,稱之為復合語句,又稱語句塊。復合語句的語句形式如下:{語句1;語句2;…;語句n;}3/14/202438例如:{inta=0,b=1,sum;sum=a+b;printf("%d",sum);}【注意】與C語言中的其他語句不同,復合語句不以分號作為結(jié)束符,假設復合語句的"}"后面出現(xiàn)分號,那不是該復合語句的組成成分,而是單獨的一個空語句。在復合語句起始局部可以有變量定義,如:"inta=0,b=1,sum;",也可以沒有。復合語句的"{}"內(nèi)可能會有多個語句,但在語法上把它整體上視為一條語句看待。4.函數(shù)調(diào)用語句由一個函數(shù)調(diào)用加上一個分號組成一個語句,如:scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);3/14/202439在C語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。在使用C語言庫函數(shù)時,要用預編譯命令#include將有關“頭文件”包括到源文件中。使用標準輸入輸出庫函數(shù)時要用到“stdio.h”文件,因此源文件開頭應有以下預編譯命令:#include<stdio.h>或#include“stdio.h”stdio是standardinput&outupt的意思。3.2數(shù)據(jù)輸入與輸出3/14/202440格式輸入輸出函數(shù)一、printf的一般形式

printf()和scanf()是C語言中使用得最多的一種輸出輸入函數(shù),它可按指定的格式輸出和輸入多個不同類型的數(shù)據(jù)。printf(格式控制序列,輸出表列);輸出表列–––用“,”號隔開的變量或表達式序列,其變量的值按對應的格式控制符所指定的格式輸出。3/14/202441格式控制序列–––用雙引號“...”括起來的格式符序列。格式控制序列由格式說明符和普通字符組成。2.普通字符原樣輸出1.格式說明符:由%加–格式字符組成如:%f,%d等3/14/202442例:a=3;b=4;printf("a=%d,b=%d",a,b);輸出結(jié)果:a=3,b=4無論a,b中位數(shù)多少,均為上述形式.假設:a=123,b=45那么:printf("a=%d,b=%d",a,b);輸出結(jié)果:a=123,b=45而:printf("%d%d",a,b);那么輸出結(jié)果為:123453/14/202443二、scanf()的一般形式功能:在標準輸入裝置(鍵盤)上按指定格式輸入各種類型的數(shù)據(jù)地址表列–––變量的地址或字符串首地址。形式:scanf(格式控制序列,地址表列)格式控制序列–––同printf(…..)用&(變量名)表示取<變量名>的地址如:&a,&b等等。3/14/202444例:main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);prinft("%d,%d,%d\n,"a,b,c);}結(jié)果3,4,5運行,機器等待你輸入:345↙

3/14/202445注意:

1.scanf函數(shù)采用地址量接受數(shù)據(jù)。2.數(shù)據(jù)之間的間隔為↙,Tab.空格。3.允許在格式符中插入附加字符。格式字符及附加字符的定義祥見表。3/14/202446表scanf〔〕函數(shù)中的局部格式字符格式字符d用來輸入十進制整數(shù)。oxcsfe用來輸入八進制整數(shù)。用來輸入十六進制整數(shù)。用來輸入單個字符。說明用來輸入字符串,將字符串送到一個字符數(shù)組中,在輸入時以非空白字符開始,以第一個空白字符結(jié)束。字符串以串結(jié)束標志‘\0’作為其最后一個字符。用來輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入。以f作用相同,e與f可以互相替換。3/14/2024474.對于輸入unsigned型數(shù)據(jù),不用%u,而用%d,%o,%x.5.指定數(shù)據(jù)長度時,系統(tǒng)自動截取。scanf("%3d%3d",&a,&b);例如:inta,bprintf("a=%d,b=%d",a,b)則當輸入123456789后顯示:a=123,b=4563/14/2024487.輸入數(shù)據(jù)不能規(guī)定精度.6.在%后加“*”表示跳過相應的數(shù)據(jù)那么當輸入為1234567↙那么a12b67scanf("%2d%*3d%2d",&a,&b);scanf("%7.2f",&a);是錯誤的3/14/2024498.在格式控制中除格式說明符外假設還有其它字符,那么應按順序原樣輸入。例:scanf("%d,%d",&a,&b);這必須輸入:21,28↙又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);必須這樣輸入:a=34,b=58,c=1003/14/202450提示:輸入格式要求比較嚴格,稍有疏忽,就會出錯。例:inta,bscanf("%d,%d",&a,&b);printf("a=%d,b=%d",a,b);那么結(jié)果顯示:a=12345,b=23266顯然b的結(jié)果是錯誤的。若輸入:12345↙(或1234523456↙)應輸入:12345,23456↙3/14/202451【例3.1】由鍵盤輸入兩個整數(shù)給變量a和b,然后輸出a和b,在交換a和b中的值后,再輸出a和b,驗證兩個變量中的數(shù)值是否正確地進行了交換。#include"stdio.h"main(){inta,b,t;printf("Enteraandb:\n");scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);}3.3程序舉例3/14/202452程序運行情況如下:Enteraandb:123456<CR>a=123,b=456a=456,b=123

注意:在程序中交換兩個變量a和b的值,不可以簡單地用:a=b;b=a;兩條語句來實現(xiàn)。假設a和b的值分別為23和78,賦值語句a=b;將使a的值變?yōu)?8,接下來的b=a;使b的值變?yōu)?8,這樣,a和b的值最終都變?yōu)?8。所以在本例中引入了中間變量t,用來臨時存放a的值,這樣才能完成變量a和b的正確交換。3/14/202453【例3.2】輸入一個double類型的數(shù),使該數(shù)保存小數(shù)點后兩位,對第三位小數(shù)進行四舍五入處理,然后輸出此數(shù),以便驗證處理是否正確。#include"stdio.h"main(){doublex;printf("Inputx:\n");scanf("%lf",&x);3/14/202454printf("(1)x=%f\n",x);/*將x輸出*/x=x*100;x=x+0.5;x=(int)x;x=x/100;/*將x擴大100倍,加上0.5之后取整,再縮小100倍*/printf("(2)x=%f\n",x);/*將四舍五入后的x輸出*/}程序運行情況如下:Inputx:3.14159<CR>那么輸出的結(jié)果為:(1)x=3.141590(2)x=3.1400003/14/202455

2011年9月全國計算機等級考試

C語言程序設計(16)假設有定義:inta,b;,通過語句scanf("%d;%d",&a,&b);,能把整數(shù)3賦給a,5賦給b的輸入數(shù)據(jù)是___________。A)35B)3,5C)3;5D)35(6)假設程序中已給整型變量a和b賦值10和20,請寫出按以下格式輸出a、b值的語句【6】。****a=10,b=20****(7)以下程序運行后輸出結(jié)果是【7】。#include<stdio.h>main(){inta=37;a%=9;printf("%d\n",a);}3/14/2024562011年3月全國計算機等級考試

C語言程序設計(6)以下程序運行后的輸出結(jié)果是【6】。#includemain(){inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%d\n",a);}3/14/202457

1.以下程序運行時假設從鍵盤輸入:102030<回車>.輸出結(jié)果是______

#include

main()

{

inti=0,j=0,k=0;

scanf(“%d%*d%d”,&i,&j,&k);printf(“%d%d%d\n”,i,j,k);

}

2.假設變量a,b已定義為int類型并賦值21和55,要求用printf函數(shù)以a=21,b=55的形式輸出,請寫出完整的輸出語句______。3/14/202458第4章選擇結(jié)構程序設計4.1關系運算符與關系表達式4.2邏輯運算符與邏輯表達式4.3if語句4.4switch語句4.5goto語句3/14/202459關系運算符種類:<<===>=>!=結(jié)合方向:自左向右優(yōu)先級別:<<=>>===!=優(yōu)先級6(高)優(yōu)先級7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關系表達式的值:是邏輯值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表達式值1//表達式值1//表達式值0//d=1//f=04.1關系運算符與關系表達式3/14/202460例假設a=0;b=0.5;x=0.3;那么a<=x<=b的值為0例5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);那么a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10關系運算注意〔1〕3/14/202461例注意區(qū)分“=”與“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例應防止對實數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結(jié)果為可改寫為:fabs(1.0/3.0*3.0-1.0)<1e-60關系運算注意〔2〕3/14/202462ab!a!ba&&ba||b真假真假假假真真邏輯運算符種類:!&&||邏輯運算真值表C語言中,運算量:

0表示“假”,非0表示“真”,

運算結(jié)果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真邏輯運算符和表達式〔1〕4.2邏輯運算符與邏輯表達式3/14/202463!(2)&&(11)||(12)高低例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b優(yōu)先級:結(jié)合方向:!:從右向左&&:從左向右||:從左向右//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)邏輯運算符和表達式〔2〕3/14/202464!(2)&&(11)||(12)高低優(yōu)先級:結(jié)合方向:!:從右向左&&:從左向右||:從左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值為1值為0值為1值為1值為1值為1//(5>3)&&2||(8<(4-(!0)))值為1邏輯運算符和表達式〔3〕3/14/202465!(2)&&(11)||(12)高低優(yōu)先級:結(jié)合方向:!:從右向左&&:從左向右||:從左向右短路特性:邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符<>例a&&b&&c//只在a為真時,才判別b的值;只在a、b都為真時,才判別c的值例a||b||c//只在a為假時,才判別b的值;只在a、b都為假時,才判別c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//結(jié)果m=0,n=1邏輯運算符和表達式〔4〕3/14/202466很多問題是順序結(jié)構解決不了的看這樣一個例子:計算分段函數(shù)x在大于等于0和小于0兩種不同的情況時,函數(shù)將用不同的表達式來求y的值,這時就需要在計算y的值之前,先對x的值進行判斷,C語言中用選擇語句來實現(xiàn)這一判斷。算法N-S圖如右上圖所示。x<0YNy=3-xy=2xN-S圖3/14/202467PAB真假PBA真假A1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結(jié)構多分支選擇結(jié)構選擇結(jié)構3/14/202468C語言中的選擇語句有兩種:雙分支選擇語句if多分支選擇語句switch

3/14/202469§4.3if選擇結(jié)構–––條件判斷一、if的三種形式功能:當表達式值非0時,執(zhí)行語句體A,否那么不執(zhí)行語句體A.形式1if(表達式)語句體A3/14/202470表達式語句體A=00例如:if(x>y)

{x=x%2;

printf("%d",x);

}其流程圖:3/14/202471形式2if(表達式)功能:表達式為非0,執(zhí)行語句體A表達式為0,執(zhí)行語句體Belse語句體B語句體A3/14/202472表達式語句體A語句體B0=0例:if(x>y) printf("%d",x); else

printf("%d",y);3/14/202473形式3if(表達式1)elseif(表達式2)elseif(表達式3)……elseif(表達式n)else語句體1語句體2語句體3語句體n語句體n+13/14/202474expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0流程:例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;3/14/202475如:if(3)prinf("o.k");if('a')…1.表達式可以是邏輯、關系,甚至是算術表達式。2.語句必須以分號結(jié)束3.假設語句不止一條,那么必須用{}括起來。在{}外可以不用分號.二、注意的問題:3/14/202476如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);if后面的表達式類型任意語句可以是復合語句

if(x)

if(x!=0)if(!x)

if(x==0)例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!說明:3/14/202477一般形式:expr1?expr2:expr3執(zhí)行過程功能:相當于條件語句,但不能取代一般if語句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a(chǎn)’&&c<=‘z’)?c-’a’+’A’:c條件運算符可嵌套

如x>0?1:(x<0?-1:0)優(yōu)先級:13結(jié)合方向:自右向左

如a>b?a:c>d?c:d

a>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,表達式值取較高的類型例x?‘a(chǎn)’:‘b’//x=0,表達式值為‘b’;x?0,表達式值為‘a(chǎn)’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5◆

條件運算符與表達式3/14/202478三、if語句的嵌套if(表達式1)內(nèi)嵌ifelse內(nèi)嵌注意:else與最近的if配對.一般形式在上述形式的if語句中,又可以是if語句–––稱為嵌套。if(表達式2)語句1if(表達式3)語句3else語句2else語句43/14/202479例:if()if()語句2else語句3if(){if()語句1}else…所以:必要時加{}.if()語句1else3/14/202480§4.4switch多分支選擇語句用if或if/else或它們的嵌套也可使程序?qū)崿F(xiàn)多路分支,但容易出現(xiàn)下面的問題:

可讀性差

破壞結(jié)構解決問題的方法:采用switch語句。3/14/202481switch(變量){case常量表達式1:語句體1case常量表達式2:語句體2

case常量表達式n:語句體ndefault:語句體(n+1)}一般形式:3/14/2024821、語句形式:switch〔表達式〕{ case常量1:語句1;case常量2:語句2;case常量3:語句3;.......case常量n:語句n;default:語句n+1;}根據(jù)表達式的不同值,選擇不同的程序分支,又稱開關語句。數(shù)值型或字符型常量表達式的值必須互不相同,否那么執(zhí)行時將出現(xiàn)矛盾,即同一個開關值,將對應多種執(zhí)行方案。千萬不能接(;)號3/14/202483根據(jù)表達式的取值,判斷其與哪一個常量表達式相等。如=表達式i,那么自語句i開始執(zhí)行,直到語句n+1止。假設與所有常量表達式值不相等,那么從default后的語句開始執(zhí)行。功能:注:default可有可無。3/14/2024842、語句執(zhí)行流程:指語句的最后一條是否為break簡單語句或復合語句breakbreak有無break有無有計算表達式常量1常量2常量n=語句1…===語句2語句n其它=語句n+1無值case語句出現(xiàn)的次序并不影響執(zhí)行結(jié)果。3/14/202485例:根據(jù)成績等級打印百分數(shù)段.switch(grade){case'A':printf("85~100\n");case'B':printf("70~84\n");case'C':printf("60~69\n");case'D':printf("<60\n");default:printf("error\n");}3/14/202486程序如下:#include<stdio.h>main(){chargrade;scanf("%c",&grade);switch(grade){case'A':printf("85-100\n");case'B':printf("70-84\n");case'C':printf("60-69\n");case'D':printf("<60\n");default:printf("Error\n");}}3/14/202487運行結(jié)果為:A

程序運行結(jié)果不在預料之中!產(chǎn)生錯誤的原因:沒有完全起到分支作用。85-10070-8460-69<60Error3/14/202488switch(表達式)

{case常表1:語句1;

break;

case常表2:語句2;

break;

……

case常表n:語句n;

break;

default:語句n+1;

}一般形式為:解決方法:增加break語句,使之跳出switch結(jié)構。3/14/202489修改程序為:#include<stdio.h>main(){chargrade;scanf("%c",&grade);switch(grade){case'A':printf("85-100\n");break;case'B':printf("70-84\n");break;case'C':printf("60-69\n");break;case'D':printf("<60\n");break;default:printf("Error\n");}}3/14/2024901.常量表達式的值必須互不相等,否那么會有二異性。2.case順序無關緊要。3.不一定非用break不可,有時幾種情況合并執(zhí)行一組語句。注意:3/14/202491switch(grade){case'A':case'B':case'C':printf(">60\n");break;case'D':printf("<60\n");break;}例如:3/14/2024922008年9月二級C語言筆試試題以下程序運行后的輸出結(jié)果是____。

main()

{inta,b,c;

a=10;b=20;c=(a%b<1)||(a/b>1);

printf(“%d%d%d\n”,a,b,c);}3/14/2024932007年4月二級C語言筆試試題二.(9)以下程序的運行結(jié)果是

。main(){inta=2,b=7,c=5;switch(a>0){case1:switch(b<0){case1:printf(“@”);break;case2:printf(“!”);break;}case0:switch(c==5){case0:printf(“*”);break;case1:printf(“#”);break;case2:printf(“$”);break;}default:printf(“&”);}printf(“\n”);}3/14/2024942006年4月二級C語言筆試試題31〕假設有以下程序

main()

{

inta=0,b=0,c=0,d=0;

if(a=1)b=1;c=2;

elsed=3;

printf(“%d,%d,%d,%d\n”,a,b,c,d);

}

程序輸出

A〕0,1,2,0

B)0,0,0,3

C)1,1,2,0

D)編譯有錯

3/14/2024952006年4月二級C語言筆試試題7〕以下程序用于判斷a,b,c能否構成三角形,假設能輸出YES,假設不能輸出NO。當a,b,c輸入三角形三條邊長時,確定a,b,c能構成三角形的條件是需要同時滿足三條件:a+b>c,a+c>b,b+c>a。請?zhí)羁铡?/p>

main()

{

floata,b,c;

scanf(“%f%f%f”,&a,&b,&c);

if(__[7]__)printf(“YES\n”);/*a,b,c能構成三角形*/

elseprintf(“NO\n”);/*a,b,c不能構成三角形*/

}

3/14/202496第五章循環(huán)結(jié)構程序設計本章目標1.掌握while循環(huán)結(jié)構的運用。2.掌握do~while循環(huán)結(jié)構的運用。3.掌握for循環(huán)結(jié)構的運用。4.理解break和contiue在程序控制中的作用。學習要求:詳細閱讀第5章:循環(huán)結(jié)構3/14/202497

循環(huán)的本質(zhì):不斷地重復某種動作。

對計算機程序而言,循環(huán)必須具備兩個重要因素:1.在一定的條件下,重復執(zhí)行一組指令2.必然出現(xiàn)不滿足條件的情況,使循環(huán)終止循環(huán)控制3/14/202498

計算機程序的循環(huán)方式有兩種:1.計算器控制的循環(huán)2.標記控制的循環(huán)3/14/202499§5.1while語句初始表達式;

while(條件表達式)

{語句;

循環(huán)表達式;

}3/14/2024100一般形式:while(表達式)循環(huán)體語句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)whilewhile語句3/14/2024101特點:先判斷表達式,后執(zhí)行循環(huán)體說明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句以下情況,退出while循環(huán)條件表達式不成立〔為零〕循環(huán)體內(nèi)遇break,return,goto無限循環(huán):while(1)循環(huán)體;While語句特點和說明3/14/2024102例:用while循環(huán)求

#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體3/14/2024103#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例:顯示1~10的平方3/14/2024104§5.2do/while語句一、語法結(jié)構do語句體while(條件表達式);3/14/2024105二、執(zhí)行過程先執(zhí)行語句體,再判斷條件表達式的值,

假設0,再執(zhí)行語句,否那么結(jié)束循環(huán)。3/14/2024106三、流程語句表達式0=03/14/2024107#include<stdio.h>

main()

{inti,sum=0;

i=1;

do

{sum=sum+i;

i++;

}

while(i<=100);

printf("%d",sum);

}程序如下:四、實例求3/14/2024108注:1、do·······while結(jié)構的作用

與while根本相同。2、語句至少要執(zhí)行一次。3/14/2024109一、語法結(jié)構for(初始表達式;條件表達式;循環(huán)表達式)§5.3for循環(huán)屬計算器控制的循環(huán)。語句體3/14/2024110

、計算初始表達式的值。、判斷條件表達式,假設條件表達式的值0,那么執(zhí)行語句體,轉(zhuǎn)第步;

假設條件表達式的值=0,那么跳出循環(huán)體。

、計算循環(huán)表達式。

、轉(zhuǎn)到第

步。二、執(zhí)行過程3/14/2024111三、流程計算初始表達式求條件表達式的值語句體計算循環(huán)表達式for循環(huán)外的語句=0(假)

0(真)3/14/2024112可用for語句寫成:for(i=1;i<=100;i++)

sum=sum+i;四、實例求可表示成:sum=1+2+3+…+1003/14/2024113用for循環(huán)來計算,程序如下:#include<stdio.h>main(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("sum=%d",sum);}可以用while代替for循環(huán)3/14/2024114五、for語句的幾種特例可以省略初始表達式,但須保存分號;且在for之前必須給循環(huán)變量賦值;3/14/2024115例:任意輸入兩個整數(shù)a,b,求#include<stdio.h>

main()

{inti,j,a,b,sum;

printf("pleaseinputtwonumber!\n");

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

i=a;j=b;if(a>b){i=b;j=a;}

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

sum=sum+i;

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

}3/14/2024116條件表達式一般不可省略,否那么為無限循環(huán)相當于:while(1){sum=sum+i;i++;}例:for(i=1;;i++)

sum=sum+i;相當于條件永真、永不為0,假設用while表示3/14/2024117

循環(huán)表達式亦可省略,但在循環(huán)體中必須有語句

來修改循環(huán)變量,以使條件表達式在某一時刻

為0而正常結(jié)束循環(huán)。例:for(sum=0,i=1;i<=100;)/*沒有循環(huán)表達式*/{sum=sum+i;i++;}3/14/2024118假設同時省略初始表達式,和循環(huán)表達式,那么相當于while語句。相當于while(i<=100){sum+=i;i++;}例:for(;i<=100;){sum+=i;i++;}3/14/2024119三個表達式均省略即for(;;)語句那么相當于while(1)語句,為無限循環(huán)。

初始表達式、循環(huán)表達式可以是逗號表達式,以使循環(huán)變量值在修改時可以對其它變量賦值。如:

for(sum=0,i=1;i<=100;i++,i++)相當于:sum=0;

for(i=1;i<=100;i=i+2)3/14/2024120

條件表達式可以是關系表達式,也可以是數(shù)值表達式或字符表達式。只要值0.即執(zhí)行循環(huán)體.例:for(i=0;(c=getchar())!='\n';i+=c);條件表達式3/14/2024121附加:if…goto…循環(huán)一、goto語句的語法功能:無條件轉(zhuǎn)向標號處。標號:用標識符命名。goto標號;特別提醒:goto語句有可能使得程序混亂3/14/2024122二、與if構成循環(huán).例:求#include<stdio.h>

main()

{inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;

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

}程序結(jié)構相當于while循環(huán)3/14/2024123#include<stdio.h>

main()

{intsum=0,i=0;

loop:sum=sum+i;

i++;

if(i<=100)

gotoloop;

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

}也可以寫成do/while型循環(huán)建議:盡可能的不用goto語句,以免破壞程

序的結(jié)構化。3/14/2024124

§5.4循環(huán)的嵌套例1:while(){…

while() {…}}一、for循環(huán)

while循環(huán)do/while循環(huán)三種結(jié)構可以互相嵌套3/14/2024125例2:for(;<條件表達式>;) {… while()

{} do {}

while(); … }為正確的嵌套。3/14/2024126但:while(){…while(){}…}for(;;){for(;;){…}}不能理解為正確的形式。要注意語句的包含關系。3/14/20241271.對于同一問題,三種循環(huán)可相互替代。但不要用goto語句。2.假設循環(huán)次數(shù)、初始值、終止值不是明顯地給出,可用while或do…while。以增強程序的結(jié)構化和可讀性。二、幾種循環(huán)比較3/14/20241283.要防止無限循環(huán)––死循環(huán)。4.循環(huán)過程中,為了結(jié)束本次循環(huán)或跳出整個循環(huán)。分別要用到continue和break語句。3/14/2024129三、程序舉例例1:求Fibonacci數(shù)例:1,1,2,3,5,8,…前20個數(shù)。規(guī)律:F1=1,F2=1

Fn=Fn–1+Fn–2(n>2)程序要點:每輸出4個數(shù)時換行。f1=f1+f2;f2=f1+f2;交替的結(jié)果正好為一序列3/14/2024130程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論