第三章(C語言程序設(shè)計(jì)同步練習(xí)指導(dǎo))_第1頁
第三章(C語言程序設(shè)計(jì)同步練習(xí)指導(dǎo))_第2頁
第三章(C語言程序設(shè)計(jì)同步練習(xí)指導(dǎo))_第3頁
第三章(C語言程序設(shè)計(jì)同步練習(xí)指導(dǎo))_第4頁
已閱讀5頁,還剩104頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第三章C語言程序設(shè)計(jì)同步練習(xí)指導(dǎo)簡介:本章從歷屆“國家計(jì)算機(jī)等級考試二級C語言筆試”試題中精選出典型的試題,按照C語言程序設(shè)計(jì)教學(xué)內(nèi)容編排,供學(xué)生們邊學(xué)習(xí)邊練習(xí),達(dá)到即學(xué)即會(huì),舉一反三,觸類旁通的效果。C語言基本知識考試要求一、C語言的結(jié)構(gòu).C語言源程序的構(gòu)成,main函數(shù)和其他函數(shù).頭文件、數(shù)據(jù)說明、函數(shù)的開始和結(jié)束.源程序的書寫格式.C語言的風(fēng)格二、數(shù)據(jù)類型及其運(yùn)算.C語言的數(shù)據(jù)類型(基本類型、構(gòu)造類型、指針類型、空類型)及其定義方法.C語言運(yùn)算符的種類、優(yōu)先級和結(jié)合性.不同類型數(shù)據(jù)之間的轉(zhuǎn)換與運(yùn)算.各種類型的C語言表達(dá)式(賦值表達(dá)式、算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、條件表達(dá)式、逗號表達(dá)式)及其計(jì)算規(guī)則要點(diǎn)指導(dǎo).C語言源程序的構(gòu)成、main函數(shù)和其它函數(shù)每個(gè)C語言程序都是由若干個(gè)函數(shù)組成的,這其中包含一個(gè)“主函數(shù)"main。和其它函數(shù)。其它函數(shù)包括用戶編寫的函數(shù)和C語言本身提供的標(biāo)準(zhǔn)庫函數(shù)。程序的運(yùn)行總是從main。函數(shù)開始執(zhí)行。函數(shù)是C程序的基本單位。.函數(shù)的組成每個(gè)函數(shù)是由函數(shù)說明部分和函數(shù)體兩部分組成的。函數(shù)的說明部分包括函數(shù)名、函數(shù)的形式參數(shù)、函數(shù)的值的類型等。函數(shù)體是由大括號{}括起的部分,由變量定義和執(zhí)行部分組成。函數(shù)的執(zhí)行部分是由C語句組成的。這些C語句是按照結(jié)構(gòu)組成起來的,這些結(jié)構(gòu)有三類即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。結(jié)構(gòu)之間可以并列和嵌套。.頭文件包含頭文件的格式:include"頭文件名"或include<頭文件名〉例如: #include"stdio.h"它的作用是將文件stdio.h的內(nèi)容插入在#include"stdio.h"所在的位置。當(dāng)調(diào)用C語言標(biāo)準(zhǔn)函數(shù)庫中輸入輸出類函數(shù)時(shí),要把頭文件stdio.h包含在程序的開頭;當(dāng)調(diào)用C語言標(biāo)準(zhǔn)函數(shù)庫中數(shù)學(xué)類函數(shù)(如sin、sqrt)時(shí),要把頭文件math.h包含在程序的開頭;.數(shù)據(jù)的說明C語言的數(shù)據(jù)分為常量和變量,常量可以直接使用,符號常量在使用前需要定義(宏定義),變量在使用前必須先定義名稱和類型。變量的定義格式為:類型名變量名;或類型名變量名=常量;.源程序的書寫格式C語言的書寫格式比較自由,一行可以寫幾條語句,一條語句可以寫在幾行里,每條語句和數(shù)據(jù)定義的最后一個(gè)字符必須是分號C語言的注釋信息格式為:/*注釋信息*/C語言區(qū)分字母的大、小寫。.C語言的風(fēng)格語言簡練、使用方便:有32個(gè)關(guān)鍵字、9種控制語句;運(yùn)算符豐富:32種運(yùn)算符;數(shù)據(jù)類型豐富:有整型、實(shí)型、字符型、枚舉類型等基本數(shù)據(jù)類型,有數(shù)組、結(jié)構(gòu)體、共用體等構(gòu)造類型和指針類型,能夠?qū)崿F(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu);可直接訪問地址;可以進(jìn)行位操作;可移植性好。.C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)類型分為:基本類型、構(gòu)造類型、指針類型、空類型。其中基本類型包含:整型(帶符號整型int、shortint.longint;無符號整型unsigned>unsignedshort,unsignedlong)實(shí)型(單精度型float、雙精度型double)字符型char枚舉類型C語言中int數(shù)據(jù)用2個(gè)字節(jié)(16位二進(jìn)制數(shù))的補(bǔ)碼表示,表示整數(shù)的范圍是-32768到32767。unsigned數(shù)據(jù)用2個(gè)字節(jié)二進(jìn)制數(shù)(16位二進(jìn)制數(shù))表示,表示整數(shù)的范圍是0到65535。.運(yùn)算符和表達(dá)式C語言程序是由若干個(gè)函數(shù)組成的,每個(gè)函數(shù)由函數(shù)說明部分和函數(shù)體兩部分組成的。函數(shù)體是由大括號{}括起的部分,由變量定義和執(zhí)行部分組成。函數(shù)的執(zhí)行部分是由C語句組成的。因此在學(xué)習(xí)C語言的過程中注意熟練掌握C語言中的各種語句,達(dá)到能夠靈活運(yùn)用C語言中的各種語句。而構(gòu)成C語句的核心是表達(dá)式,C語言中有算術(shù)表達(dá)式、賦值表達(dá)式、逗號表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式和條件表達(dá)式。而表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符構(gòu)成的。C語言共有34個(gè)運(yùn)算符,這些運(yùn)算符的優(yōu)本級和縝合性十分重要,在學(xué)習(xí)中要牢記。C語言的運(yùn)算符按照優(yōu)先級從高到低排列如下:優(yōu)先級運(yùn)算符結(jié)合方向1()[]->.自左至右2!?++--(類型)*&sizeof自右至左3*/%算術(shù)運(yùn)算符自左至右4+-算術(shù)運(yùn)算符自左至右5??位操作運(yùn)算符自左至右6<<=>>=關(guān)系運(yùn)算符自左至右7=!=關(guān)系運(yùn)算符自左至右8&位操作運(yùn)算符自左至右9A位操作運(yùn)算符自左至右101位操作運(yùn)算符自左至右11&&邏輯運(yùn)算符自左至右12II邏輯運(yùn)算符自左至右13?:條件運(yùn)算符自右至左14=+=-=*=/=%=?=&=賦值運(yùn)算符自右至左15逗號運(yùn)算符自左至右從而,C語言表達(dá)式的計(jì)算順序從高到低:算術(shù)表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式條件表達(dá)式賦值表達(dá)式逗號表達(dá)式.輸入輸出函數(shù)輸出函數(shù)printf字符輸出函數(shù)putchar輸入函數(shù)scanf字符輸入函數(shù)getchar常用格式編輯符:輸出整數(shù)格式編輯符%d%u%x%o輸出實(shí)數(shù)格式編輯符%f%e輸出字符和字符串格式編輯符%c%s同步練習(xí).C語言中,int型數(shù)據(jù)在計(jì)算機(jī)內(nèi)部是由( )表示的。答:int型數(shù)據(jù)在計(jì)算機(jī)內(nèi)部是由16位補(bǔ)碼表示的。.下列可以作為C語言用戶標(biāo)識符的是()oA)_123B)alb2c3C)intD)123abc答:A)和B)C語言標(biāo)識符必須是以英文字母(a到z)、或者下劃線一開頭的字符串。字符串中只能包含英文字母、下劃線和數(shù)字(0到9)。但字符串不能是C語言中的32個(gè)保留字(例如int,short,long,unsigned,float,char.if.switch,for.while等)。.在C語言中,如果下面的變量都是int類型,則輸出的結(jié)果是( ).sum=pad=5,pAd=sum++,pAd++,++pAd;printf(*%d\n*,pad);答:輸出結(jié)果是5。因?yàn)镃語言是字母大小寫敏感的,也就是說區(qū)分大小寫字母。pad和pAd是兩個(gè)不同的變量。.以下程序的輸出結(jié)果是()o#include<stdio.h>main()printf(%d\n”,NULL);答:o因?yàn)閟tdio.h頭文件中NULL的定義如下:ttdefineNULL0.下面程序的輸出是( )(.main(){intx=10,y=3;printf("%d\n",y=x/y);)答:3因?yàn)閮蓚€(gè)同類型的數(shù)據(jù)作算術(shù)運(yùn)算,其結(jié)果仍為該類型。即整數(shù)除以整數(shù),商仍為整數(shù)。10/3的商為3。.下面程序的輸出是( ).main(){intx=023;printf(*%d\n*,-x);)答:18因?yàn)?23是一個(gè)八進(jìn)制數(shù),表達(dá)式一x的值為022,按照%d帶符號的十進(jìn)制數(shù)輸出,結(jié)果為18o注意:023是八進(jìn)制數(shù);23是十進(jìn)制數(shù);0x23是十六進(jìn)制數(shù)。.在C語言中,不正確的int類型的常數(shù)是( ).A)32768 B)0 C)037D)OxAF答:A).執(zhí)行下面程序中的輸出語句后a的值是( ).main(){inta;printf("%d\n”,(a=3*5,a*4,a+5));)答:15因?yàn)樵谟?jì)算逗號表達(dá)式a=3*5,a*4,a+5時(shí),依次計(jì)算下面3個(gè)表達(dá)式:a=3*5(結(jié)果變量a的值為15,該賦值表達(dá)式的值也為15)a*4(該算術(shù)表達(dá)式的值為60)a+5(該算術(shù)表達(dá)式的值為20,輸出函數(shù)printf輸出20)逗號表達(dá)式的值為20,但變量a的值認(rèn)為15。.以下程序的輸出結(jié)果是( )。#include<stdio.h>main(){inta=2,c=5;printf("a=%%d,b=%%d\n”,a,c);)A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d答:D)因?yàn)樨适歉袷秸f明符,輸出%,其它原樣輸出。如果輸出函數(shù)語句改成printf(*a^%%%d,b=%%%d\n",,a,c):,那么輸出結(jié)果為A)。.以下程序的輸出結(jié)果是( )。#include<stdio.h>main(){inta,b,d=241;a=d/100%9;b=(-l)&&(-l);printf(*%d,%d\n*,a,b);}A)6,1 B)2,1 C)6,0 D)2,0答:B)241/100的值為2,2%9的值為2。(T)&&(-1)的值為1。在邏輯運(yùn)算中,非。的值為真,真“與”真結(jié)果為真,關(guān)系和邏輯運(yùn)算的結(jié)果如果為真用“1”表示,如果為假用“0”表示。.請選出以下語句的輸出結(jié)果( )?printf("%d\n",strlen(*\t\*\065\xff\n*));答:5函數(shù)strlen的功能是計(jì)算字符串長度。那么字符串"\t\"\065\xff\n”包含多少個(gè)字符呢?\t是橫向跳格字符;'"是字符";\065是ASCII碼值為八進(jìn)制數(shù)065的字符;\xff是ASCII碼值為十六進(jìn)制數(shù)Oxff的字符;\n是換行字符。該字符串共有5個(gè)字符。注意:記住常用的轉(zhuǎn)義字符。.下面程序的輸出結(jié)果是( )。inti=65536;printf("%d'n”,i);答:T因?yàn)閕nt型變量i在C語言中是用16位補(bǔ)碼表示的,而65535變成二進(jìn)制數(shù)為1111111111111111,因此i的值為1111111111111111,按照帶符號的十進(jìn)制數(shù)機(jī)1輸出-1,因?yàn)?111111111111111是T的補(bǔ)碼。.若有說明和語句:inta=5;a++;此處表達(dá)式a++的值是( ).答:5表達(dá)式a++的值是5表達(dá)式計(jì)算后,變量a的值是6。.若k為int變量,則以下語句( ).k=8567;printf(*|%-06d|\n*?k);答:18567|兩個(gè)I原樣輸出,格式符%-06d說明輸出變量k的值長度為6且左對齊。.若x為float型變量,則以下語句()ox=213.82631;printf(*%-4.2f\n*,x);答:213.83.若x為double變量,則以下語句()ox=213.82631;printf("%-6.2e\n",x);答:2.14e+02.若ch為char型變量,k為int型變量(已知字符a的ASCII十進(jìn)制代碼為97),則執(zhí)行下列語句ch='a*;k=12;printf("%x,%o,*,ch,ch,k);printf("k=%%d\n”,k);輸出為()。答:61,141,k=%d.若有以下定義:chars=,\092f;則該語句()。.使s的值包含1個(gè)字符.定義不合法,s的值不確定.使s的值包含4個(gè)字符.使s的值包含3個(gè)字符答:B)因?yàn)樽址?,\092,中的092應(yīng)該是八進(jìn)制數(shù),但八進(jìn)制數(shù)中不可能出現(xiàn)9。.執(zhí)行以下語句后,輸出結(jié)果是( )?inta=1;printf(*%d,%d”,a,a++);答:2,1因?yàn)镃語言中函數(shù)的實(shí)參計(jì)算順序是從右至左。即首先計(jì)算a++,然后計(jì)算a。.以下程序的輸出結(jié)果是( )?#include<stdio.h>main()(inti=010,j=10;printf("%d,%d\n”,++i,j—);)A)11,10B)9,10C)010,9D)10,9答:B)010是八進(jìn)制數(shù)。.已知字母A的ASCII碼為65,以下程序的輸出結(jié)果是( ).#include<stdio.h>main(){charcl='A',c2='Y';printf(線d,%d\n”,cl,c2);)答:65,89.以下語句

inta=110,b=017;printf("%x,%d\n”,a++,++b);輸出結(jié)果是( )答:6e,16110的十六進(jìn)制數(shù)為6e,八進(jìn)制數(shù)017加1為020,等于十進(jìn)制數(shù)16。.以下程序main(){inti=3,j=2,a,b,c;a=( i==j++)? i:++j;b=i++;J!printf("%d,%d,%d\n”,a,b,c);)輸出結(jié)果是( )答:1,1,3.請讀程序#include<stdio.h>main()inta;floatb,c;scanf("%2d%3f%4f”,&a,&b,&c);printf(*\na=%d,b=%f,c=%f”,a,b,c);若運(yùn)行時(shí)從鍵盤上輸入9876543210<CR>(<CR>表示回車),則上面程序的輸出結(jié)果是( )答:a=98,b=765.000000,c=4321.000000.請讀程序片段(字符串內(nèi)沒有空格字符):printf("%d\n”,strlen(*AST\n012\l\\*));上面程序的輸出結(jié)果是(答:上面程序的輸出結(jié)果是(答:9)o字符串中包含9個(gè)字符,分別是AST\n012\1\\o.以下程序的輸出結(jié)果是( )main(){inti=-1;printf("%d,%u\n”,i,i);}答:-1,655353.2選擇結(jié)構(gòu)程序考試要求用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)選擇結(jié)構(gòu)的嵌套要點(diǎn)指導(dǎo)關(guān)系運(yùn)算符、關(guān)系表達(dá)式邏輯運(yùn)算符、邏輯表達(dá)式if語句三種形式:1.if(表達(dá)式)語句2.if(表達(dá)式)語句1else語句23.if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3elseif(表達(dá)式n)語句nelse語句n+1switch語句形式:switch(表達(dá)式)(case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2case常量表達(dá)式n:語句ndefault: 語句n+1)break語句break語句的作用是本層結(jié)束循環(huán)或switch語句。選擇結(jié)構(gòu)的嵌套3.2.3同步練習(xí).判斷型char變量cl是否為小寫字母的正確表達(dá)式為()o'a'<=cl<='z'(cl>=a)&&(cK=z)Ca>>=cl)IICz>>=cl)(cl>=,a')&&{cl<=,z')答:D).程序的運(yùn)行結(jié)果是()omain()(inta=l,b=2,c=3,d=4,m=2,n=2;(m=a>b)&&(n=c>d);printfn);)答:2首先計(jì)算m=a〉b,因?yàn)殛P(guān)系運(yùn)算符)優(yōu)先級高于賦值運(yùn)算符二,a>b的結(jié)果為假(0),賦值后m的值為0。因?yàn)镃語言計(jì)算邏輯表達(dá)式0&&(n二c>d)時(shí),已經(jīng)知道結(jié)果為0,因此n=c>d就不計(jì)算了。N的值仍為2。.執(zhí)行以下語句后a的值為( );b的值為()ointa,b,c;a=b=c=l;++a||++b&&++c;答:a的值為2;b的值為lo.程序的運(yùn)行結(jié)果是()omain(){intx=10,y=20,z=30;if(x>y)z=x;x=y;y=z;printf(*%d,%d,%d”,x,y,z);}答:20,30,30因?yàn)閕f(x>y)z=x;x=y;y=z;是三條語句,即:if(x>y)z=x;x=y;y=z;而不是:if(x>y){z=x;x=y;y=z;}.程序的運(yùn)行結(jié)果是()omain()(intm=5;if(m++>5)printfr%d\n",m);else printf("%d\n”,m--);}答:6因?yàn)楸磉_(dá)式m++>5的值為假,m的值為6,執(zhí)行語句printf("%d\n為m-);時(shí)輸出6,m的值又變?yōu)?。。.程序的運(yùn)行結(jié)果是( )。main()(inta=100,x=10,y=20,m=5,n=0;if(x<y)if(y!=m)

a=l;elseif(n)a=10;a=-l;printf("%d\n',a);答:T在if嵌套中,else總是與它上面最近的if結(jié)合,因此本程序變?yōu)?if(x<y){if(y!=m)a=l;elseif(n)a=10;}a=-l;最后變量a的值為-1。.若有條件表達(dá)式(exp)?a++:b—;則以下表達(dá)式中能完全等價(jià)于表達(dá)式(exp)的是( )A)(exp==O) B)(exp!=O)C)(exp==l) d)(exp!=l)答:B)因?yàn)楸磉_(dá)式(exp)的意義是:當(dāng)變量exp的值為。時(shí)表示假;當(dāng)變量exp的值為非0時(shí)表示真。因此它與(exp!=O)等價(jià)。.程序的運(yùn)行結(jié)果是( ).main()(intk=4,a=3,b=2,c=l;printf(*%d\n*,k<a?k:c<b?c:a);}答:1因?yàn)檫\(yùn)算符?的結(jié)合性是自右至左。因此首先計(jì)算c〈b?c:a,結(jié)果為1,然后計(jì)算k〈a?k:l,結(jié)果仍為lo.已知A=7.5,B=2,C=3.6,表達(dá)式A>B&&C>A||!A<B&&!C>B的值是( )。答:0.當(dāng)m=2,n=l,a=l,b=2,c=3時(shí),執(zhí)行完d=(m=a!=b)&&(n=b>c)后,n=( ),m=( ),,答:n=0,m=1因?yàn)槭紫扔?jì)算關(guān)系運(yùn)算a!=b,結(jié)果為真即1,再計(jì)算賦值運(yùn)算m=l:再計(jì)算b>c,結(jié)果為假即0,賦值n=0;最后d的值為假即0,.程序的運(yùn)行結(jié)果是()omain()(intx,y,z;x=l;y=2;z=3;x=y-<=x||x+y!=z;printf(*%d,%d*,x,y);因?yàn)殛P(guān)系運(yùn)算符優(yōu)先級高于邏輯運(yùn)算符,因此首先計(jì)算y-<=x,結(jié)果表達(dá)式的值為假(0),y的值為1;再計(jì)算x+y!=z,結(jié)果為真(1),x的值為真(1)。.以下程序main()(inti=0,j=0,k=6;if((++i>0)||(++j>0))k++;printf(w%d,%d,%d\n”,i,j,k);}輸出結(jié)果是( )答:1,0,7首先計(jì)算++i>0,結(jié)果表達(dá)式的值為真,變量i的值為1。在計(jì)算(++j>0)時(shí),因?yàn)榻Y(jié)果為真(1),C語言不再計(jì)算表達(dá)式(++j>0)了。因?yàn)閕f()中的邏輯表達(dá)式值為真,因此計(jì)算k++,結(jié)果k值7。.程序的運(yùn)行結(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(,z*z/);break;casel:printf("#");break;default:printf("?");break;)default:printf(zz&*);}printfC\n");}答:#&因?yàn)楸磉_(dá)式a>0的值為真(1),計(jì)算case1:后面的語句switch(b<0){case1:printf("礦);break;case2:printf(zz!,z);break;)由于表達(dá)式b<0的值為假(0),因此本語句執(zhí)行結(jié)束。又由于本語句后面無break語句,因此繼續(xù)執(zhí)行switch(c==5){case0:printf(**^);break;case1:printf(zz#/z);break;default:printf("?");break;結(jié)果輸出#,由于上面的語句后面也無break語句,因此繼續(xù)執(zhí)行語句printf("&");輸出&..下面程序的輸出是( )。main(){inta=-l,b=4,k;k=(a++<=0)&&(!(b—<=0)):printf("%d%d%d\n”,k,a,b);}答:103關(guān)系表達(dá)式a++<=0的值為真(即1),因?yàn)槭紫扰袛?l〈=0,然后執(zhí)行a++,變量a的值為0;關(guān)系表達(dá)式!(b-<=0)的值為真(即1),因?yàn)槭紫扰袛?<=0,然后執(zhí)行b-,變量b的值為3,最后執(zhí)行邏輯非運(yùn)算??;邏輯表達(dá)式6++<=0)&&(!(1)—<=0))的值為真(即1),執(zhí)行賦值運(yùn)算后,變量k的值為1。.下面的程序片段所表示的數(shù)學(xué)函數(shù)關(guān)系是( ).y=-l;if(x!=0)if(x>0)y=l;elsey=0;A)y=T(x<0)B)y=1(x<0)C)y=0(x<0)D)y=-1(x<0)0(x=0)-1(x=0)-1(x=0)1(x=0)1(x>0)0(x>0)1(x>0)0(x>0)答:O.下面程序的輸出是( )(,main(){intx=100,a=10,b=20,okl=5,ok2=0;if(a<b)if(b!=15)if(!okl)

x=l;elseif(ok2)x=10;x=T;printfC%\n*?x);}A)-lB)0 C)1 D)下面定的值答:A)因?yàn)檎Z句x=T;并不在if語句之中。.與y=(x>O?l:x〈O?-l:O)功能相同的if語句是( ),a)if(x>0)y=l; b)if(x)elseif(x<0)y=-l; if(x>0)y=l;elsey=0; elsey=-l;c)y=-l; d)y=0;if(x) if(x>0)if(x>O)y=l; if(x>0)y=l;elseif(x==0)y=0; elsey="l;elsey=-l;答:A).設(shè)a=6,b=-8,c=3,以下邏輯表達(dá)式的值為('d'&&(a>b)&&(b>c)&&(a-c)答:0 ).若執(zhí)行下面的程序時(shí)從鍵盤上輸入3和4,則輸出是()omain(){inta,b,s;scanf("%d%d”,&a,&b);s=a;if(a<b)s=b;s=s*s;printf("%d\n',s);)答:16.下面的程序main(){intx=3,y=0,z=0;if(x二y+z)printf("****");elseprintf('####");答:####.兩次運(yùn)行下面的程序,如果從鍵盤上分別輸入6和4,則輸出的結(jié)果是( )。main(){intx;scanf("%d",&x);if(x++>5)printf(*%d*,x);elseprintf("%d\n",x—);)答:75.假定所有變量均已正確說明,下列程序段運(yùn)行后x值是()oa=b=c=O;x=35;if(!a)x-;elseif(b);if(c)x=3;elsex=4;答:4該程序:a=b=c=O;x=35;if(!a)x—;elseif(b);if(c)x=3;elsex=4;.以下兩條if語句合并成一條if語句為()oif(a<=b)x=l;elsey=2;if(a>b)printf("****y=%d\n”,y);elseprintf二%d\n”,x);答:if(a<=b){x=l;printf二%d\n”,x);)else{y=2;printf("****y=%d\n〃,y);3.3循環(huán)結(jié)構(gòu)程序考試要求for循環(huán)while循環(huán)dowhile循環(huán)goto語句continue語句和break語句循環(huán)的嵌套要點(diǎn)指導(dǎo)1.for循環(huán)結(jié)構(gòu)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體熟練掌握for循環(huán)的執(zhí)行過程:①首先計(jì)算表達(dá)式1;②計(jì)算表達(dá)式2;③如果計(jì)算表達(dá)式2的值為真,則執(zhí)行循環(huán)體,計(jì)算表達(dá)式3,然后轉(zhuǎn)到②如果計(jì)算表達(dá)式2的值為假,則循環(huán)結(jié)束。表達(dá)式1主要作用是對循環(huán)條件的初始化,在循環(huán)開始時(shí)僅執(zhí)行一次。表達(dá)式2是判斷是否繼續(xù)循環(huán)的條件;每次執(zhí)行完循環(huán)體,都要計(jì)算表達(dá)式3,然后計(jì)算表達(dá)式2判斷是否繼續(xù)循環(huán)。.while循環(huán)結(jié)構(gòu)while(表達(dá)式)循環(huán)體執(zhí)行過程:①計(jì)算表達(dá)式;②如果表達(dá)式的值為真,則執(zhí)行循環(huán)體,然后轉(zhuǎn)到①如果表達(dá)式的值為假,則循環(huán)結(jié)束。亦即當(dāng)表達(dá)式為真時(shí)執(zhí)行循環(huán)體。.dowhile循環(huán)結(jié)構(gòu)do循環(huán)體while(表達(dá)式);執(zhí)行過程:①執(zhí)行循環(huán)體;②計(jì)算表達(dá)式;③如果表達(dá)式的值為真,則轉(zhuǎn)到①如果表達(dá)式的值為假,則循環(huán)結(jié)束。即執(zhí)行循環(huán)體,當(dāng)表達(dá)式值為真時(shí)繼續(xù)執(zhí)行循環(huán)體。.continue語句的作用是結(jié)束本次循環(huán)。break語句的作用是結(jié)束循環(huán)和結(jié)束switch語句。當(dāng)循環(huán)是多層嵌套時(shí),break語句的作用是結(jié)束本層循環(huán)。.循環(huán)的嵌套各種循環(huán)可以互相嵌套。3.3.3同步練習(xí).下面程序段的運(yùn)行結(jié)果是()ox=y=0;while(x<15)y++,x+=++y;printf("%d,%d”,y,x);答:8f20y++,x+=++y;是一個(gè)逗號表達(dá)式語句,首先計(jì)算y++,然后計(jì)算x+=++y。.程序的運(yùn)行結(jié)果是(#include<stdio.h>main(){intc=0;while(c<=2){c++;printfC%d\n*,c);)}答:123.輸入2473<CR>,下面程序的運(yùn)行結(jié)果是()o#include<stdio.h>main()(intc;while((c=getchar())!=,\n)switch(c-,2'){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}printf('\n");)答:668977第一次函數(shù)getcharO從鍵盤讀取字符2,變量c的值為字符2,因此c」2'的值為0,執(zhí)行case0:后面的語句putchar(c+4);和putchar(c+4);執(zhí)行break;語句后,switch語句執(zhí)行結(jié)束。此次輸出字符66o.下面程序段輸出結(jié)果為( )。intx=3;do{printf(*%d\n*,x-=2);}whi1e(!(-x));答:1-2.不是無限循環(huán)的語句為()ofor(y=0,x=l;x>++y;x=i++)i=x;for(;;x++=i);while(l){x++;}for(i=10;;i-)sum+=i;答:A).下面程序段的運(yùn)行結(jié)果是()ofor(y=l;y<10;)y=((x=3*y,x+1),xT);printf("x二%d,y=%d*,x,y);答:x=15,y=14執(zhí)行完第1次循環(huán)后x=3 y=2執(zhí)行完第2次循環(huán)后x=6 y=5執(zhí)行完第3次循環(huán)后x=15y=14.程序的運(yùn)行結(jié)果是()o#include<stdio.h>main(){inta,b;for(a=l,b=l;a<=100;a++){if(b>=20)break;if(b%3==l){b+=3;continue;}b-=5;}printf("%d'n",a);}答:88.下面程序段不是無限循環(huán)的是()ointi=100;while(l){i=i%100+l;if(i>100)break;}for(;;);intk=0;do{++k;}while(k>=0);ints=36;while(s);—s;答:C))i值只能是從1至IJ100之間變化,i>100永遠(yuǎn)是假,因此break永遠(yuǎn)也不會(huì)被執(zhí)行。)for循環(huán)語句的第2個(gè)表達(dá)式?jīng)]有,意味著永遠(yuǎn)為真。0每次循環(huán)k的值加1,當(dāng)k的值為32767時(shí),再執(zhí)行++k,k的值變?yōu)?32768,循環(huán)結(jié)束。D)因?yàn)檎Z句-s并不在循環(huán)中,while(s);永遠(yuǎn)執(zhí)行一個(gè)空語句。.下面程序段( )?x=3;do{y=x-;if(!y){printf("*");continue;}printf("#");}while(K=x<=2);A)輸出## B)輸出##*C)無限循環(huán) D)含有不合法的控制表達(dá)式答:O第一次循環(huán)執(zhí)行丫=*一;后x和y的值分別為2和3,因此輸出1個(gè)#。執(zhí)行l(wèi)〈=x<=2時(shí)由于邏輯運(yùn)算符<=的結(jié)合性是從左至右,因此首先計(jì)算結(jié)果為真(即1),然后計(jì)算1<=2,結(jié)果仍為真,再次執(zhí)行循環(huán)??梢钥闯鰺o論K=x為真(即1)或者為假(即0),K=x<=2的值始終為真,因此循環(huán)為無限循環(huán)。.程序的運(yùn)行結(jié)果是( )。#include<stdio.h>main(){intk=0;charc='A';do{switch(c++){case'A':k++;break;case'B):k―;case'C':k+=2;break;case'D':k=k%2;continue;case'E':k=k*10;break;default:k=k/3;}k++;}while(c<*G');printf("k=%d\n”,k);}答:k=4第1次循環(huán)執(zhí)行前c=,A"k=0,循環(huán)執(zhí)行后c='Bz,k=2

c=,C,,k=4c=,D,,k=7c='E',k=lc='F',c=,C,,k=4c=,D,,k=7c='E',k=lc='F',k=llc='G',k=4.程序的運(yùn)行結(jié)果是( )。main()(intt=l;fun(fun(t));)fun(inth)(staticinta[3]={l,2,3};intk;for(k=0;k<3;k++)a[k]+=a[k]-h;for(k=0;k<3;k++)printf(*%d,a[k]);printf("\n");return(a[h]);}答:1,3,5,-L3,7,.程序的運(yùn)行結(jié)果是()omain()(inti,j,a=0;for(i=0;i<2;i++){for(j=0;j<4;j++){if(j%2)break;a++;)a++;}printf("%d\n",a);}答:4.求兩個(gè)正整數(shù)的最大公約數(shù),填空。#include<stdio.h>main()(intr,m,n;scanf("%d%d〃,&in,&n);if(m<n) (1) ; /*填空*/r=m%n;while(r){m=n;n=r;r=(2);}/*填空*/printf("%d\n',n);答:(1){r=m;m=n;n=r;}m%n輾轉(zhuǎn)相除法求兩個(gè)正整數(shù)的最大公約數(shù)。.程序的運(yùn)行結(jié)果是( )。#include<stdio.h>main(){inti,x,y;i=x=y=O;do{++i;if(i%2!=0){x=x+i;i++;}y=y+i++;}while(i<=7);printf(*x=%d,y=%d\n*,x,y);)答:x=l,y=20.程序的運(yùn)行結(jié)果是()omain(){intx=10,y=10,i;for(i=0;x>8;y=++i)printf(*%d,%d,”,x一,y);}A)10,1,9,2, B)9,8,7,6,C)10,9,9,0, D)10,10,9,1,答:D).下面程序的功能是計(jì)算1-3+5-7+...-99+101的值,請?zhí)羁铡?include<stdio.h>main()(inti,t=l,s=0;for(i=l;i<=101;i+=2){ ⑴ ;s=s+t;(2) ;}/*填空*/printf("刎\n",s);}答:(1)t=t*it=-t.程序的運(yùn)行結(jié)果是( )?#include<stdio.h>main(){inti,k=0;for(i=l;;i++){k++;while(k<i*i){k++;if(k%3==0)gotoloop;))loop:printf("%d,%d*,i,k);)答:2,318.以下程序是利用互減法求三個(gè)自然數(shù)的最大公約數(shù),請?zhí)羁铡?include<stdio.h>main()(inta,b,i;printf("Enterthefirstnumbertoa:");scanf("%d",&a);for(i=l;i<3;i++){printfC/Enternextnumber:");scanf("%d”,&b);a=gcd(a,b);)printf("Thegreatestcommondivisoris%d\n”,a);)intgcd(intx,inty){if(x>y); /*填空*/elseif(x<y=; /*填空*/elsereturnx;}答:(1)gcd(x-y,y)(2)gcd(x,y-x)19.以下程序通過命令行參數(shù)將命令行中給出的若干個(gè)字符串連接起來并輸出到屏幕上。程序文件名為p9.c,執(zhí)行該程序的命令是:p9abed9712請?zhí)羁詹懗鲚敵鼋Y(jié)果。/*p9.c*/#include<stdio.h>char*hx(char*sl,char*s2){char*temp;temp=si;while(*sl)sl++;while(*s2){CD; /*填空*/sl++;s2++;)*sl=z\Of;returntemp;}main(intargc,char*argv[]){inti;for(i=l;(2) ;i++)/*填空*/hs(argv[i], (3) );/*填空*/printf("%s\n”,argv[1]);}答:(1)*sl=*s2i<argc-largv[i+l]程序的輸出結(jié)果為abcd9712.請寫出以下程序的運(yùn)行結(jié)果()o#include<stdio.h>main()(char**pd;staticchar*d[]={"up","down","left","right",“"};pd=d;while(**pd!=NULL)printf("%s\n",*pd++);}答:updownleftright.若i為整型變量,i=0;while(i=0)i++;則以上循環(huán)A)執(zhí)行10次 B)執(zhí)行1次C)一次也不執(zhí)行 D)無限循環(huán)答:C)因?yàn)閕=0是賦值表達(dá)式,其值為0即假,而非條件表達(dá)式i==0。.下面的程序中有錯(cuò)誤的是()e(每行程序前面的數(shù)字是行號)。#include<stdio.h>main()3{floata[3]={0.0};inti;for(i=0;i<3;i++)scanf&a[i]);for(i=l;i<3;i++)a[0]=a[0]+a[i]);printf(*%f\n*,a[0]);)答:第6行因?yàn)閿?shù)組元素a[i]是浮點(diǎn)型變量,因此不能用%d作為格式編輯符,應(yīng)該用格式編輯符%已.下列程序執(zhí)行后的結(jié)果是()ointa,y;a=10;y=0;do{a+=2;y+=a;printf("a=%dy=%d\n〃,a,y);if(y>20)break;}while(a=14);A)a=12y=12B)a=12y=12a=14y=16a=16y=28a=16y=20D)a=12y=12a=18y=24a=14y=260a=12y=12答:B)a=14y=44注意a=14是賦值表達(dá)式,其值為14(表示真),而非條件表達(dá)式a=14。.下面程序的功能是:計(jì)算1到10之間的奇數(shù)之和及偶數(shù)之和,請?zhí)羁?。^include*stdio.h*main(){inta,b,c,i;a=c=0;for(i=0;i<=10;i+=2){a+=i;;/*填空*/c+=b;)printf("偶數(shù)之和=%d\n",a);printf("奇數(shù)之和=%d\n”,c-11);)答:(1)b=i+l25.下面程序的功能是:輸出100以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù),請?zhí)羁铡?include“stdio.h"main(){inti,j;for(i=0;(1) ;i++) /*填空*/{j=i*10+6:if((2)Continue:/*填空*/printf("%d",j);答:(1)i<=9j%3!=026.C語言中()oA)沒有-while語句構(gòu)成的循環(huán)B)do-while語句構(gòu)成的循環(huán)必須用break語句才能結(jié)束循環(huán)C)do-while語句構(gòu)成的循環(huán),當(dāng)while語句中的表達(dá)式值為非零時(shí)結(jié)束循環(huán)D)do-while語句構(gòu)成的循環(huán),當(dāng)while語句中的表達(dá)式值為零時(shí)結(jié)束循環(huán)答:D)27.請讀程序:include<stdio.h>include<math.h>main()(floatx,y,z;scanf(,z%f%f/z,&x,&y);z=x/y;while(l)(if(fabs(z)>1.0){x=y;y=z;z=x/y;}elsebreak;)printf(*%f\n*,y);}若運(yùn)行時(shí)從鍵盤上輸入3.62.4<CR>(<CR>表示回車),則輸出結(jié)果是()。答:1.600000.下面程序的輸出結(jié)果是()o#include<stdio.h>fun(intx)(intp;if(x==0|?x=1)return(3);p=x-fun(x-2);returnp;}main()(printf("%d\n”,fun(9));}答:7.若有以下程序段,w和k都是整型變量:w=k;LB:if(w==0)gotoLE;w-;printf;gotoLB;LE:則不能與上面程序段輸出相同的循環(huán)語句是( )?A)for(w=k:w!=0;w--)printf(***);B)w=k;while(w—!=0)printf("*");w++;C)w=k;do{w—;printf(***);}while(w!=0)D)for(w=k;w;-w)printf("*");答:0.定義如下變量:intn=10;則下列循環(huán)的輸出結(jié)果是( )while(n>7){n—;printfn);)答:987.以下程序的功能是:從鍵盤上輸入若干個(gè)學(xué)生的成績,統(tǒng)計(jì)并輸出最高成績和最低成績,當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束輸入。請?zhí)羁铡ain(){floatx,amax,amin;scanf&x);amax=x;amin二x;while(1) /*填空*/{if(x>amax)amax=x;if(2)amin=x;/*填空*/scanf(*%f*,&x);}printf('\namx=%f\namin二%f\n”,amax,amin);)答:(1)(x>=0)(2)(x<amin).下面程序的輸出是( )。main()(intx=3,y=6,a=0;while(x++!=(y-=l))

a+=l;if(y<x)break;printf("x=%d,y=%d,a=%d\n〃,x,y,a);}答:x=5,y=4,a=l.下面程序的輸出是( ).main(){intx=2;while(x-);printf("%d\n”,x);}答:-1的值為T。循環(huán)while(x-);的循環(huán)體為一條空語句。當(dāng)x為0時(shí),循環(huán)結(jié)束,執(zhí)行x的值為T。.以下循環(huán)體的執(zhí)行次數(shù)是()omainO{inti,j;for(i=0,j=l;i<=j+l;i+=2,j―)printf('%d"\n",i);}A)3 B)2 C)1 D)0答:C).下列程序執(zhí)行后的輸出結(jié)果是(main(){inta[3][3],*p,i;p=&a[O][0];for(i=0;i<9;i++)p[i]=i+l;printfC%d\n*答:6printfC%d\n*答:6a[0][0]=p[0]=la[l][0]=p[3]=4a[2][0]=p[6]=7,a[l]⑵);)a[0][l]=p[l]=2a[l][l]=p[4]=5a[2][l]=p[7]=8a[0][2]=p[2]=3a[l][2]=p[5]=6a[2][2]=p[8]=9.下列程序執(zhí)行后的結(jié)果是()omain(){inti,j,m=0,n=0;for(i=0;i<2;i++)for(j=0;j<2,j++)if(j>=i)m=l;n++;printf("%d'n",n);}答:1語句n++;并不在循環(huán)體內(nèi)。循環(huán)體僅包含語句if(j>=。.閱讀下列程序:??include<stdio.h>^defineMAX_COUNT4voidfun();main()intcount;for(count=1;count〈=MAX_COUNT;count++)fun();}voidfun()(staticinti;i+=2;printf("%d”,i);}上述程序的輸出結(jié)果是( )?答:24683.4編譯預(yù)處理考試要求(1)宏定義不帶參數(shù)的宏定義:帶參數(shù)的宏定義。(2)文件包含要點(diǎn)指導(dǎo).宏定義不帶參數(shù)的宏定義:^define宏名字符串在編譯之前,將宏名替換成字符串。帶參數(shù)的宏定義:define宏名(形式參數(shù)表)含形式參數(shù)的字符串宏替換過程:先把實(shí)際參數(shù)與形式參數(shù)一一對應(yīng),再把每個(gè)實(shí)際參數(shù)替換到字符串中對應(yīng)形式參數(shù)出現(xiàn)的位置,將這個(gè)形成的字符串替換到程序中宏名出現(xiàn)的位置。.文件包含文件包含就是在一個(gè)文件中把另一個(gè)文件的內(nèi)容包含進(jìn)來。文件包含格式:#include”文件名”或#include〈文件名)3.4.3同步練習(xí).以下for語句構(gòu)成的循環(huán)執(zhí)行了( )次。#include<stdio.h>??defineN2#defineMN+l^defineNUM(M+l)*M/2main()inti,n=0;for(i=l;i<=NUM;i++)n++;printfC%d",n);)printf("\n");)答:8宏定義NUM先替換為(M+l)*M/2,(N+l+1)*N+l/2,(2+1+1)*2+1/2.以下程序的輸出結(jié)果是( )。#include<stdio.h>ftdefineFUDGE(y)2.84+y#(iefinePR(a)printf("%d\n”,(int)(a))#definePRINTI(a)PR(a);putcharC\n')main(){intx=2;PRINTl(FUDGE(5)*x);)A)11 B)12C)13D)15答:12宏替換過程:PRINTI(FUDGE(5)*x)PR(FUDGE(5)*x)printf("%d\n”,(int)(FUDGE(5)*x))printf("%d\n\(int)(2.84+5*x))printf("機(jī)l\n”,(int)12.84).程序的運(yùn)行結(jié)果是( ).#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti=10,j=15,k;k=10*MIN(i,j);printf(線d\n”,k);}A)10B)15C)100D)150答:B)宏替換過程:k=10*MIN(i,j)k=l0*⑴<(j)?⑴:(j)k=10*i<j?i:j.程序的運(yùn)行結(jié)果是( ).ttdefineMAX(A,B)(A)>(B)?(A):(B)#definePRINT(Y)printf("Y-%d\t”,Y)main(){inta=l,b=2,c=3,d=4,t;t=MAX(a+b,c+d);PRINT(t);}答:Y=3.程序的運(yùn)行結(jié)果是()o#definePT5.5^defineS(x)PT*x*xmain(){inta=l,b=2;printf(*%4.lf\n*?S(a+b));}答:9.5宏替換過程:S(a+b)PT*a+b*a+b*a+b*a+b*l+2*l+2.程序的運(yùn)行結(jié)果是()o#defineMING0main(){charstr[20]二"CLanguage^,c;inti=O;while((c=str[i])!='\O'){i++;#ifMINGif(c>=,a&&c<=,z')c=c-32;#elseif(c>=,A*&&c<='Z')c=c+32;#endifprintfc);})答:CLANGUAGE因?yàn)镸ING已定義,因此執(zhí)行if(c>='a'&&c<='zf)c=c-32;t即將小寫字母轉(zhuǎn)換成大寫字母。.下列程序執(zhí)行后的輸出結(jié)果是()o#defineMA(x)x*(xT)main(){inta=l,b=2;printf(,z%d\n/z,MA(l+a+b));}答:8宏替換過程:l+a+b*(l+a+b-l).程序的運(yùn)行結(jié)果是()o#defineXFmain(){inta=14,b=15,c;c=a/b;#ifndefXFprintf(*a=%o,b=%o"a,b);ttendifprintf("c=%d\n”,c);}答:c=0.下面程序的輸出結(jié)果是()o#include<stdio.h>#defineSUB(X,Y)(X)*Ymain()(inta=3,b=4;printf("%d\n”,SUB(a++,b++));}答:12.下面程序執(zhí)行后的輸出結(jié)果是()oA)6 B)8C)10D)12#defineMA(x)x*(x-l)main()(inta=l,b=2;printfC%d\n*,MA(1+a+b));}答:8宏替換過程:MA(l+a+b)l+a+b*(l+a+b-l)l+l+2*(l+l+2-l).在宏定義#(10圻聯(lián)PI3.14159中,用宏名PI代替一個(gè)()oA)單精度數(shù) B)雙精度數(shù)C)常數(shù)D)字符串答:D).下列程序的輸出結(jié)果是()。^defineN2^defineCUBE(X)(X*X*X)#include<stdio.h>main()inti=N+2;i=CUBE(i);printf("%d'n",i);答:64i=N+2i=2+2i=4CUBE(i)(i*i*i)(4*4*4)第五章函數(shù)3.5.1考試要求.函數(shù)的定義方法.函數(shù)的類型和返回值.形式參數(shù)和實(shí)際參數(shù)、參數(shù)值的傳遞.函數(shù)的調(diào)用、標(biāo)準(zhǔn)庫函數(shù)、嵌套調(diào)用、遞歸調(diào)用.局部變量和全局變量.變量的存儲(chǔ)類別(自動(dòng)、靜態(tài)、寄存器),變量的作用域和生存期.內(nèi)部函數(shù)與外部函數(shù)要點(diǎn)指導(dǎo)1、概述一個(gè)C程序由若干個(gè)文件構(gòu)成;每個(gè)文件由若干函數(shù)構(gòu)成。2、函數(shù)定義類型標(biāo)識符 函數(shù)名(形式參數(shù))形式參數(shù)說明{說明部分語句)3、函數(shù)參數(shù)和函數(shù)的值(1)形式參數(shù)和實(shí)際參數(shù)main(){inta,b,c;scanf("%d,%d”,&A&b);c=max(a,b);printf(u%dM,c);)實(shí)際參數(shù) 形式參數(shù)(常量、變量、表達(dá)式) (變量)實(shí)參與形參類型一致,單向值傳遞(2)函數(shù)的返回值return語句returuz;return(x>y?x,y);函數(shù)值的類型intmax(x,y)charletter(cl,c2)doublemin(x,y)voidprintstar()4、函數(shù)的調(diào)用函數(shù)名(實(shí)際參數(shù))printstar();c=max(a,b);d=max(max(a,b),c);printf("%d”,max(4b));5、函數(shù)的嵌套調(diào)用函數(shù)嵌套執(zhí)行過程6、函數(shù)的遞歸調(diào)用floatfactor(intn){floatf;if(n==1)f=l;elsef=factor(n-l)*n;return(f);)7、數(shù)組作為函數(shù)的參數(shù)實(shí)際參數(shù) 形式參數(shù)(數(shù)組名) (數(shù)組名)地址傳送8、局部變量和全局變量(1)局部變量在一個(gè)函數(shù)內(nèi)部定義的變量,它只在本函數(shù)內(nèi)有效。(2)全局變量在函數(shù)外定義的變量稱為外部變量。其有效范圍:從定義變量的位置開始到本文件結(jié)束。9、動(dòng)態(tài)存儲(chǔ)變量和靜態(tài)存儲(chǔ)變量(1)從變量的作用域(既從空間)角度來分,可分為全局變量和局部變量。從變量的時(shí)間(既生存期)角度來分,可分為靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量。每一個(gè)變量和函數(shù)有兩個(gè)屬性:數(shù)據(jù)類型和數(shù)據(jù)的存儲(chǔ)類別。存儲(chǔ)方法分為二大類:靜態(tài)存儲(chǔ)類和動(dòng)態(tài)存儲(chǔ)類。具體包含四種:H動(dòng)的(auto),第部](static),寄存器的(register),夕卜部的(extern)?(2)局部變量的存儲(chǔ)方式autostaticregister(3)全局變量的存儲(chǔ)方式inta; externa;staticinta;10、內(nèi)部函數(shù)和外部函數(shù)(1)內(nèi)部函數(shù)staticintmax(x,y)只能被本文件內(nèi)的函數(shù)調(diào)用(2)外部函數(shù)externintmax(x,y)intmax(x,y)同步練習(xí).程序的運(yùn)行結(jié)果是( )。#include<stdio.h>voidnum(){externintx,y;inta=15,b=10;x=a-b;y=a+b;}intx,y;main(){inta=7,b=5;x=a+b;y=a-b;num();printf(*%d,%d\n*,x,y);)答:5,25因?yàn)閤和y是全局變量,它的有效范圍是從定義點(diǎn)開始到本文件尾,但是在定義點(diǎn)前的函數(shù)num中對它們進(jìn)行了說明即externintx,y;,因此變量x和y在函數(shù)num中也有效。而函數(shù)main中的局部變量a和b與函數(shù)num中的局部變量互不相干。.程序的運(yùn)行結(jié)果是( )。main(){inta=2,i;for(i=0;i<3;i++)printf("%3d”,f(a));}f(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);)答:7,8,9在函數(shù)f中變量c為靜態(tài)存儲(chǔ)類型,在編譯時(shí)就分配了存儲(chǔ)單元并且賦了初值3,在整個(gè)程

序的運(yùn)行過程中變量C始終存在,但只有在運(yùn)行函數(shù)f時(shí)變量C才有效。而變量b只有在開始運(yùn)行函數(shù)f時(shí)才分配內(nèi)存單元,并且語句intb=0;相當(dāng)于intb;b=0;,當(dāng)函數(shù)f運(yùn)行結(jié)束時(shí),變量b的存儲(chǔ)單元又被收回,既變量b只有在運(yùn)行函數(shù)b時(shí)才存在。綜上所述,調(diào)用函數(shù)f三次返回的函數(shù)值分別為2+1+4,2+1+5,2+1+6。.程序的運(yùn)行結(jié)果是()。main(){inti=2,x=5,j=7;fun(j,6);printf("i=%d,j=%d,x或d\n”,i,j,x);}fun(inti,intj){intx=7;printfj=%d,x=%d\n",i,j,x);}答:i=7,j=6,x=7i=2,j=7,x=5在執(zhí)行函數(shù)fun時(shí),fun函數(shù)中的局部變量i,j,x的值分別為7,6,7。在執(zhí)行函數(shù)main時(shí),main函數(shù)中的局部變量i,j,x的值分別為2,7,5。.程序的運(yùn)行結(jié)果是()omain(){mingO;ming();mingO;)mingO{intx=0;x+=l;printfx);)答:111局部變量定義intx=0;相當(dāng)于intx;x=0;。5.已有函數(shù)pow,要求取消變量i后pow函數(shù)的功能不變,請?zhí)顚懞瘮?shù)程序。修改前pow函數(shù)pow(intx,inty)inti,j=l;for(i=l;i<=y;++i)j=j*x;return(j);)答:函數(shù)pow是計(jì)算X,修改后pow函數(shù)pow(intx,inty)intj;for(j=l;y>0;y)j=j*x;return(j);6.程序6.程序的運(yùn)行結(jié)果是()olongfib(intg){switch(g){case0:return0;case1:case2:return1;}return(fib(g-l)+fib(g-2));)main(){longk;k=fib(7);printf("k=%d\n\k);}答:k=13函數(shù)遞歸調(diào)用,實(shí)現(xiàn)函數(shù)fib:fib(g)=0 當(dāng)g=0時(shí)fib(g)=l 當(dāng)g=l時(shí)fib(g)=l 當(dāng)g=2時(shí)fib(g)=fib(g-l)+fib(g-2)當(dāng)g>=3時(shí)即計(jì)算斐波納奇數(shù)列函數(shù)。7.程序的運(yùn)行結(jié)果是()omain(){inta[3][3]={1,3,5,7,9,11,13,15,17};intsum;sum=fun(a);printf("\nsum=%d\n”,sum);}fun(inta[][3]){inti,j,suitfO;for(i=0;i<3;i++)for(j=0;j<3;j++){a[i][j]=i+j;if(i==j)sum=sum+a[i][j];)return(sum);)答:sum=6012在函數(shù)fun中對數(shù)組a賦值,數(shù)組a的9個(gè)元素的值分別為123,并計(jì)算主對角線上234各元素的和即0+2+4。8.程序的運(yùn)行結(jié)果是()ofun(intx){staticinta=3;a+=x;return(a);}main(){intk=2,m=l,n;n=fun(k);m=fun(m);printf(*%d%d*,n,m);)答:56.程序的運(yùn)行結(jié)果是()ointx=5,y=7;ming(intx,inty){intz;z=x+y;return(z);}main(){inta=4,b=5,c;c=ming(a,b);printf("X+Y二%d\n”,c);}答:X+Y=9.程序的運(yùn)行結(jié)果是()ointm=13;intfun(intx,inty){intm=3;return(x*y-m);}main(){inta=7,b=5;printf("%d\n”,fun(a,b)/m);)答:2雖然全局變量m的有效范圍是從定義點(diǎn)到文件尾,但是在函數(shù)fun中又定義了局部變量m,因此在函數(shù)fun中其局部變量m有效,而在函數(shù)main中全局變量m有效,結(jié)果為(7*5-3)/13o.下面的程序(main(){intx=3;do{printf("%d\n”,x-=2);}while(!(-x));答:1-2第一次執(zhí)行輸出函數(shù)時(shí)printfr%d\n",x-=2),賦值表達(dá)式x-=2的值為1,輸出1,當(dāng)計(jì)算?。ㄒ粁)時(shí),表達(dá)式一x和變量x的值均為0,表達(dá)式?。ㄒ粁)的值為真,再次執(zhí)行循環(huán)。賦值表達(dá)式x-=2的值為-2,輸出-2,當(dāng)計(jì)算!(一x)時(shí),表達(dá)式一x和變量x的值均為-3,表達(dá)式?。ㄒ粁)的值為假,循環(huán)結(jié)束。.卜面程序的輸出是()omain(){inty=9;for(;y>0;y—){if(y%3=0){printf("%d〃,-y);continue;}答:852.下面程序的輸出是( )?unsignedfun6(unsignednum)(unsignedk=l;do{k*=num%10;num/=10;}while(num);return(k);}main()(unsignedn=26;printf("%d\n",fun6(n));}答:12將變量num的值的各位相乘。.F面程序的輸出是()olongfun5(intn)(longs;if((n==l)||(n=2))s=2;elses=n+fun5(n-l);return(s);}main()longx;x=fun5(4);printf("%ld\n”,x);}答:9函數(shù)遞歸調(diào)用。.下面程序的輸出是().ftdefineMAX5inta[MAX],k;main()(funl();fun3();fun2();fun3();printf("\n");}funl()(for(k=O;k<MAX;k++)a[k]=k+k;)fun2()(inta[MAX],k;for(k=O;k<MAX;k++)a[k]=k;}fun3()(intk;for(k=0;k<MAX;k++)printf*(a+k));}答:0246802468函數(shù)funl給全局?jǐn)?shù)組a賦值:函數(shù)fun2給其局部數(shù)組賦值:函數(shù)fun3輸出全局?jǐn)?shù)組各元素的值。.以下程序輸出結(jié)果是( ).ttinclude<stdio.h>main()inti=l,j=3;printf(線d,",i++);{inti=0;i+=j*2;printf(*%d,%d,",i,j);)printf("%d,%d,*,i,j);答:1,6>3,2,3,變量i在復(fù)合語句{inti=0;i+=j*2;printf%d,”,i,j);}中定義,其有效范圍僅是該復(fù)合語句。而在main函數(shù)中定義的變量i的有效范圍是除了上面的復(fù)合語句以外的main函數(shù)的其它部分。.以下程序輸出結(jié)果是()o#include<stdio.h>main(){intk=4,m=l,p;p=func(k,m);printf("/d,”,p);p=func(k,m)printf("d\n”,p);}func(a,b)inta,b;{staticintm=0,i=2;i+=m+l;m=m+l;m=i+a+b;return(m))答:8,17,.程序填空,以下程序中的trap函數(shù)是用梯形法求定積分的通用函數(shù)。被積函數(shù)是f(x)=x*x+3*x+2。#include<stdio.h>#include<math.h>doubletrap(fun,a,b)double(*fun)(),a,b;(doublet,h;inti,n=1000;t=0.5*((*fun)(a)+(*fun)(b));h=fabs(a-b)/(double)(n);for(i=l;i<=n-l;i++)t=t+(1); /*填空*/t=t*h;return(t);}doublemypoly(x)doublex;{return(x*x+3,0*x+2.0);)main(){doubley,(*pf)();pf=(2) ; /*填空*/y=trap(pf,0.0,4.0);printf("%f\n",y);)答(1)(*fun)(a+i*b)(2)mypoly19.程序填空,以下程序求a數(shù)組中所有素?cái)?shù)的和,函數(shù)isprime用來判斷自變量是否為素?cái)?shù)。素?cái)?shù)是只能被1和本身整除且大于1的自然數(shù)。??include<stdio.h>main(){inti,a[10],*p=a,sum=0;printf("Enter10num:\n");for(i=0;i<10;i++)scanf("%d”,&a[i]);for(i=0;i<10;i++)if(isprime(*(p+(1) ))=1) /*填空*/(printf*(a+i));sum+=*(a+i);}printfC*\nThesum=%d\n*,sum);)isprime(x)intx;{inti;for(i=2;i<=x/2;i++)if(x%i==0)return(0);⑵ ; /*填空*/答⑴i(2)return(1)20.程序填空,以下程序調(diào)用invert函數(shù)按逆序重新放置a數(shù)組中元素的值。a數(shù)組中元素的值在main函數(shù)中讀入。#include<stdio.h>#defineN10invert(s,i,j)int*s,i,j;(intt;f(i<j){t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;invert(s,⑴ ,j-1); /*填空*/main()(inta[N],i;for(i=0;i<N;i++)scanf('%d”,a+(2));/*填空*/invert(a,0,N-l);for(i=0;i<N;i++)printfa[i]);printf("n");}答(1)i+1(2)i.執(zhí)行下面的語句段的結(jié)果是()ointx=23do{printf("%2d”,x一);)whi1e(!x);答:23.下面函數(shù)的功能是()。sss(s,t)char*s,*t;{while((*s)&&(*t)&&(*t++=*s++));return(*s-*t);)答:比較兩個(gè)字符串的大小。.請選出以下程序的輸出結(jié)果()o^include<stdio.h>sub(x,y,z)intx,y,*z;{*z=y-x;}main(){inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printfC/%d,%d,%d\*,a,b,c);}答:-5,-12,-7.下面程序的輸出結(jié)果是( )?#include<stdio.h>main(){inti=2,p;p=f(i,i+1);printfp);intf(a,b)inta,b;{intc;c=a;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);}答:T25.下面程序的輸出結(jié)果是()ovoidfun()staticinta=0;a+=2;printfa);)main()intcc;for(cc=1;cc<4;cc++)fun();printf("\n");}答:246.請選出以下程序的輸出結(jié)果( )。#include<stdio.h>fun(s,nl,n2)int*s,nl,n2;{inti,j,t;=nl;j=n2;while(i<j){t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;i++;j—;}main()(inta[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;fun(p,0,3);fun(p,4,9);fun(p,0,9);for(i=0;i<10;i++)printf*(a+i));printf("\rT);}}答:5678901234.請選出以下程序的輸出結(jié)果()o#include<stdio.h>main()inta[]={1,2,3,4},i;intx=0;forCi=0;i<4;i++){sub(a,x);printfx);}printf('\n");}sub(s,y)int*s,y;(staticintt=3;y=s[t];t—;}答:0000因?yàn)閷?shí)參X單向傳遞值給形參y,盡管在函數(shù)sub中y的值發(fā)生變化,但函數(shù)main中x的值不改變。.設(shè)有如下程序段:inti=0,sum=1;do{sum+=i++;}while(i<6);printf("%d\n",sum);上述程序段的輸出結(jié)果是( )o答:16.設(shè)有下列程序:#include<stdio.h>#include<string.h>main(){inti;charstr[10],temp[10];gets(temp);for(i=0;i<4;i++)(gets(str);if(strcmp(temp,str)<0)strcpy(temp,str));}printftemp);}上述程序運(yùn)行后,如果從鍵盤上輸入:C++<CR>BASIC<CR>QuickC<CR>Ada<CR>Pascal<CR>則程序的輸出結(jié)果是( )答:QuickC從鍵盤輸入5個(gè)字符串,輸出最大的字符串。.若輸入3個(gè)整數(shù)3、2、1,則下面程序的輸出結(jié)果是( )?#include<std

溫馨提示

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

評論

0/150

提交評論