程序設(shè)計基礎(chǔ)教程(c語言版)課后答案_第1頁
程序設(shè)計基礎(chǔ)教程(c語言版)課后答案_第2頁
程序設(shè)計基礎(chǔ)教程(c語言版)課后答案_第3頁
程序設(shè)計基礎(chǔ)教程(c語言版)課后答案_第4頁
程序設(shè)計基礎(chǔ)教程(c語言版)課后答案_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序設(shè)計基礎(chǔ)教程(c語言版)課后答案程序設(shè)計基礎(chǔ)教程(c語言版)課后答案程序設(shè)計基礎(chǔ)教程(c語言版)課后答案資料僅供參考文件編號:2022年4月程序設(shè)計基礎(chǔ)教程(c語言版)課后答案版本號:A修改號:1頁次:1.0審核:批準(zhǔn):發(fā)布日期:z習(xí)題解答目錄習(xí)題解答............................................................................................................3選擇題....................................................................................................3填空題....................................................................................................3編程題....................................................................................................4習(xí)題解答............................................................................................................5選擇題....................................................................................................5填空題....................................................................................................7編程題....................................................................................................8習(xí)題解答...........................................................................................................11選擇題...................................................................................................11填空題..................................................................................................12編程題..................................................................................................12習(xí)題解答..........................................................................................................15選擇題..................................................................................................15填空題..................................................................................................17編程題..................................................................................................18習(xí)題解答..........................................................................................................29選擇題..................................................................................................29填空題..................................................................................................31編程題..................................................................................................33習(xí)題解答..........................................................................................................37選擇題..................................................................................................37填空題..................................................................................................41編程題..................................................................................................43習(xí)題解答..........................................................................................................67選擇題..................................................................................................67填空題..................................................................................................68編程題..................................................................................................682習(xí)題解答選擇題1、B【分析】在一個C程序中必須有且只能有一個main函數(shù),而且main函數(shù)可以在任何地方出現(xiàn).2、C【分析】C語言中合法以的標(biāo)識符組成為:字母,數(shù)字,下劃線,且數(shù)字不能打頭,亦不能為關(guān)鍵字。A中,-sub不合法。B中4d不合法。D中void為關(guān)鍵字。3、【分析】4、C【分析】轉(zhuǎn)義字符中,第一個\”輸出“,第二\\輸出\,第三個\b退格,把前一個\去掉了,第四個\’輸出’,第五個\t跳格,第六個\”輸出”,第七個\n輸出換行。5、C【分析】本題將10進(jìn)制17,分別按8、16進(jìn)制輸出。8的進(jìn)制21=2*8+1*1=17(10,16制11=1*16+1*1=17(10)填空題1、主【分析】一個C源程序中至少包括一個主函數(shù),其他函數(shù)沒有限制。2、雙引號?!痉治觥績煞N寫法都是允許的,使用尖括號表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時設(shè)置的),而不在源文件目錄去查找.使用雙引號則表示首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。用戶編程時可根據(jù)自己文件所在的目錄來選擇某一種命令形式。3、261,b1【分析】將10進(jìn)制的177,按8進(jìn)制和16進(jìn)制兩種形式輸出。4、a=3b=7x=y(tǒng)=c1=Ac2=a【分析】scanf函數(shù)中,格式說明符以外的原樣輸入。5、printf函數(shù)中,格式說明符以外的原樣輸出。%控制輸出結(jié)果中共m位,小數(shù)3占n位?!痉治觥烤幊填}1.#include""voidmain(){floatqianmi,yingli;#include""voidmain(){charx;printf("請輸出一個小寫小母\n");scanf("%c",&x);printf("輸出字母的大寫型式為:%c",x+32);}3、#include<>voidmain(){floatc,f;printf("請輸入一個攝氏溫度:");scanf("%f",&c);f=32*c+5*c;4printf("華氏溫度為:%\n",f);}4.#include<>voidmain(){inta=3,b=4,c=5;floatx=,y=,z=;doubleu=51274,n=128765;printf("a=%-3d,b=%-3d,c=%d\n",a,b,c);printf("x=%,y=%,z=%\n",x,y,z);printf("x+y=%,y+z=%,x+z=%\n",x+y,y+z,x+z);printf("u=%.0lfn=%.0lf\n",u,n);printf("c1='a'or97\nc2='b'or98\n");}習(xí)題解答選擇題1、C.【分析】C語言的運算符按運算對象的個數(shù)可以分為單目、雙目和三目運算符和多目運算符。2、C.【分析】%運算符要求參加運算的數(shù)必須是整數(shù)3、A.【分析】B.賦值運算的作用是用將常量賦給變量,而不能給表達(dá)形式所以a*3=2不對。C.%運算符要求參加運算的數(shù)必須是整數(shù),而x是float類型所以x%(-3)不對。D.y=float(i),由于i是int類型,向float類型轉(zhuǎn)換是自由轉(zhuǎn)的,不需要強(qiáng)制轉(zhuǎn)。4、A.【分析】因為k=7,x=12;x%=k,則x=12%7,此時x=5,而k%=5,即k=7%5此時K=2,所以(x%=k)-(k%=5)就等價于5-2=3。同理,x%=(k%=5)的值為0;x%=(k-k%5)的值為2;x%=k-k%5的值也為25、A.5【分析】首先通過n*100+將原數(shù)擴(kuò)大100,并通過+判斷是否進(jìn)位。之后/100進(jìn)行舍去小數(shù)點后第三位的運算。6、B.【分析】分析根據(jù)優(yōu)先級別,先計算小括號里,y與3相等成立所以表達(dá)式的值為1,再將1賦給x,而x的值就是表達(dá)式的值為1.7、A.【分析】略8、D.【分析】“a大于等于10”、“a小于等于0”兩者分別為關(guān)系運算,一個“或”字又表明為邏輯或運算,所以D對。9、B.【分析】在邏輯表達(dá)式求解中,并不是所有的邏輯運算符都被執(zhí)行,對&&運算符來說,只有前一個表達(dá)式不等于0時,才繼續(xù)進(jìn)行右邊的運算。由于a>b為0,所以左邊的表達(dá)式為0,所以右邊的++n將不被計算,所以n的值不變?nèi)詾?。10、B【分析】241的二進(jìn)制形式為,15的二進(jìn)制形式為00011111,進(jìn)行按位&運算后為00010001;a的二進(jìn)制形式為01100001,z的二進(jìn)制形式為01111010,進(jìn)行按位|運算后為0。00010001與0都為非0元素,所以再進(jìn)行&&時結(jié)果一定為1。11、A【分析】b>>2表示向右移動兩位,相當(dāng)于除以兩個2結(jié)果為8/2=4;同理,b>>1相當(dāng)于除一個2,結(jié)果為6,4/6為0。12、B【分析】3的二進(jìn)制數(shù)為00000011。10的二進(jìn)制為00001010,a<<2的結(jié)果為00001100,b==1的值為0,所以00001100與0按位或之后結(jié)果為00001100。即10進(jìn)進(jìn)制的12。13、D.【分析】就運算符的優(yōu)先級別而言,單目>雙目,算術(shù)運算>關(guān)系運算>邏輯運算。14、B【分析】19的二制數(shù)為00010011,23的二進(jìn)制數(shù)為00010100,兩者進(jìn)行按位與后結(jié)果為00010000十進(jìn)制16,即為16進(jìn)制的13。15、C【分析】0x39的二進(jìn)制形式為00111001,0xf的二進(jìn)制形式為00001111,兩者進(jìn)行異或運算,異或結(jié)算的規(guī)則,參加運算的兩個二進(jìn)制位同號,則結(jié)果為假,異號則為真。結(jié)果為:00110110即為16進(jìn)制的36。16、A6【分析】進(jìn)行按位或運算,要a的低8位為1,則要求b的低8位全為1,高8位要求不變,則要求高8位全為0,即b應(yīng)該為:00000000,即為8進(jìn)制的0377。17、A【分析】由題得1>2不成立,所以x>y++x:++y表達(dá)式的值為++y,則此時Y的值為3,而++x沒有被執(zhí)行,所以x的仍值為1,而Z的值與表達(dá)式的值相同所以選A。18、C【分析】賦值運算符的作和是將一個表達(dá)式或一個變量,常量賦給另一個變量,賦值號的左邊只能是變量,不能是常量,所以A、B、D不對。19、B【分析】逗號運算符是級別最紙的運算符,逗號表達(dá)式也是值是所有表達(dá)式中最右邊的值。即a+b的值,由題從左向右算起,b++后b為6,則a+b為8.20、D【分析】在不同種數(shù)據(jù)類型進(jìn)行計算時的轉(zhuǎn)換規(guī)則是:數(shù)據(jù)類型低的全部轉(zhuǎn)換成運算過程中級別最高的。在int、long、unsigned和char四個類型中,long的類型級別最高,所以結(jié)果的類型為long.填空題1.【分析】“/”要求兩操作數(shù)如果一個為實數(shù)結(jié)果都為實數(shù),如果都為整數(shù)結(jié)果也為整數(shù),所以a/=,a/4=2.所以原式=*10=。2.5,32【分析】x++表示將x的值拿來用,然后再++;而y*=x++等價于y=y*x,即y=8*4=32,此計算結(jié)束之后x的值才增加1,變?yōu)?。3.-40【分析】賦值運算符的結(jié)合方向是從右向左的,所以先計算a*a=25,所以a+=a-=a*a等價于a+=(a-=25),而此時a仍為5.接下來計算a-=25得a=2-25=-20;則a+=(a-=25)等價于a+=-20,所以a=a-20=-20-20=-40。4.16【分析】x+=--x%--y等價于x+=(--x)%(--y),--放在變量的前面時,要先對變量進(jìn)行變化,然后再用,所以原式即為x+=14%3,而14%3=2,即x+=2,而此時x=14,所以x=x+2=16。5.x>1&&x<10||x<0&&x!=-1【分析】略6.07【分析】根據(jù)運算符的優(yōu)先級別,算術(shù)運算>關(guān)系運算>邏輯運算可知,要先算a+b=7,接下來計算7>c即7>5成立為1,然后計算b==c,而4==5不成立,所以值為0,即最終表達(dá)式等價于1&&0,所以結(jié)果為0.7.0【分析】略,同第6題。8.-17【分析】條件運算符優(yōu)先級別高于賦值運算符,所以先算(a<b)a:b的值,由于13<25成立,所以(a<b)a:b的值為a的值,并將a的值賦給y,此時,原式等價于(13<-17)y:c,而13<-17不成立,所以表達(dá)式的值為C的值,即為-17。9.18,3,3【分析】對逗號表達(dá)式的值,即為從左向右最后一個表達(dá)式的值,本題中表達(dá)式的值即為6*a的值即18。10.【分析】算術(shù)運算符中同一級別的運算符按從左向右的順序進(jìn)行,所以先算a%43=8,再計算8*(int)(x+y)=8*9=72,再計算72%3=0,再計算0/5=0.最后計算與X相加,所以最終結(jié)果為。編程題1.編寫一個程序,要求輸入圓的半徑r,計算并輸出該圓的周長和面積。#definePI#include""voidmain(){floatr,S=0,L=0;printf("inputr:\n");scanf("%f",&r);S=PI*r*r;假設(shè)美元與人民幣的匯率是1美元兌換元人民幣,歐元與人民幣的匯率是1歐元兌換元人民幣,編程實現(xiàn)輸入人民幣的錢數(shù),輸出能兌換的美元及歐元金額。#include""voidmain(){floatrenminbi,meiyuan,ouyuan;8printf("inputrenminbi:\n");scanf("%f",&renminbi);meiyuan=renminbi*;編寫一個程序,從鍵盤上輸入3個字符后,按各字符的ASCII碼從小到大順序輸出這些字符。編程實現(xiàn)輸入一個無符號整數(shù)(unsigned類型),分別輸出它的低四位和高四位。#include<>(待查)main(){unsignedu=0xffff;h=u>>8;根據(jù)當(dāng)前銀行的利率表,編程實現(xiàn)從鍵盤輸入存款金額money,存期year和年利率rate,計算銀行存款的本息sum(保留1位小數(shù))。#include<>intmain(){intyear;floatmoney,rate,sum;printf("請輸出金額,利率,存款時間\n");scanf("%f,%f,%d",&money,&rate,&year);sum=money*year*rate;printf("存款的本息sum=%.1f\n",sum);10}習(xí)題解答選擇題1.D【分析】在此要注意,else總是于之前面最近的且沒有用過的if進(jìn)行配對,所以在本題中,else與第二個if配對,且整體做為第一個if語句的語句體。又因,10>20不成立,所以第一個if根本不被執(zhí)行,所以m的值沒有任何變化。2.A【分析】else總是于之前面最近的且沒有用過的if進(jìn)行配對,所以在本題中,if(a>b)t=s+t;elseif(a==b)t=5;elset=2*s;相當(dāng)于t=s+t;(a>b)t=5(a=b);t=2*s(a<b);3.C【分析】while(E)的含義是當(dāng)E為真。為真即為不等于0,而A、B、D都是表示非零。4.D【分析】i=0,++i后,i為1,i%2=1,所以執(zhí)行j+=i;即j=1,i=1小于5所以還執(zhí)行++i,此時i為2,則i%2等于0,跳出本次判斷。同理當(dāng)i等于4,6時同樣跳出判斷,而當(dāng)i為3,5時,都要執(zhí)行j+=i。5.A【分析】while(1)進(jìn)行判斷時,條件永遠(yuǎn)成立,所以執(zhí)行循環(huán)體。輸出一個“*”后,i++,i變?yōu)?,又1<3成立,所以結(jié)束循環(huán)。6.D【分析】當(dāng)i=1時,執(zhí)行s+=i后s=1;執(zhí)行循環(huán)體中i++后,i為2,而后還要執(zhí)行一次for結(jié)構(gòu)中的i++,則i為小于6成立,則再執(zhí)行s+=i;i++;則s為4,i為4,而后還要執(zhí)行一次for結(jié)構(gòu)中的i++,則i為5,同樣5小于6成立,則再執(zhí)行s+=i;i++;則s為9,i為6,而后還要執(zhí)行一次for結(jié)構(gòu)中的i++,則i為7,且7小于6已不再成立。所以最后輸出977.B【分析】在for(語句1;語句2;語句3)結(jié)構(gòu)中,語句1為初值,語句2為循環(huán)體執(zhí)行的條件,語句3為變量自增語句。本題中i為2,i==0不成立,所以循環(huán)體不被執(zhí)行。8.D11【分析】a=1,a<8成立,所以執(zhí)行循環(huán)體b+=a;a+=2;后,a=3,b=3,再執(zhí)行for結(jié)構(gòu)中的a++,則a=4,b=3.以后同理。9.B【分析】當(dāng)a=1時b=1,執(zhí)行循環(huán)體,b>=20不成立,b%3==1成立,則執(zhí)行b+=3;continue;則b=4,然后跳出本次行循環(huán),則此時a=2,b=4.以后同理進(jìn)行判斷。10.A【分析】對于雙重循環(huán),外層循環(huán)變化一次,內(nèi)層變化一個循環(huán)。本題。當(dāng)i=1時,j可以為3、2、1,同理當(dāng)當(dāng)i=2時,j可以為3、2、1;當(dāng)i=3時,j可以為3、2、1;而語句if(i*j>3)break;則表時,如果i*j>3時結(jié)束整個for循環(huán)。條件不成立時再執(zhí)行m*=i*j;填空題1.hn*2【分析】sn為第n次落地時共經(jīng)過的米數(shù),hn為第n次反彈的高度n>=2,hn*2才為第n次經(jīng)過的距離。2.n!=0j++【分析】由輸出語句可知,定義的變量i,j分別用于存放正數(shù)和負(fù)數(shù)的個數(shù)。所以只要輸入的數(shù)不是0,則進(jìn)行判斷。3.0k/10count++【分析】count作為累計的和所以初值一定為0;而while循環(huán)的作用是將指定的數(shù)k的各各位上的字?jǐn)?shù)字取出來。k%10負(fù)責(zé)實現(xiàn)取出K的個位。則前兩位則需通過k/10來實現(xiàn)。if(t==10)成立即是需要的數(shù)字,則總數(shù)需要自增。所以count++.4.50(i*【分析】本題的累加問題中,累加50次,即i<=50,兩個相除時如果都為整數(shù)則結(jié)果一定為整數(shù),為此,需要將分母轉(zhuǎn)化成FLOAT類型。所以填(i*。5.2*i-1printf("\n");i【分析】略編程題1.編寫一個程序,計算并輸出下列分段函數(shù)值:26,356010,2,3153,2,3,10xxxxyxxxxxxxxxxx?+?<=≠?=?+≤<≠≠????=?==≥?12其中,x從鍵盤輸入。#include""intmain(){floatx,y;printf("輸入X");scanf("%f",&x);printf("\n");if(x<0&&x!=-3){y=x*x+2*x-6;}elseif(0<=x&&x<10&&x!=2&&x!=3){y=x*x-5*x+6;}elsey=x*x-x-15;printf("y=%f",y);}2.編寫一個程序,從鍵盤輸入年和月,計算并輸出該年的該月份共有多少天。算法分析:要考慮大月有31天,小月有30天,閏年的二月有29天以及非閏年的二月有28天這幾種情況。源程序:#include<>intmain(){intyear,month,days;printf("Enteryearandmonth:");scanf("%d%d",&year,&month);switch(month){case1:case3:case5:case7:case8:case10:case12:/*處理"大"月*/days=31;break;case4:case6:case9:case11:/*處理"小"月*/days=30;break;case2:/*處理"平"月*/if(year%4==0&&year%100!=0||year%400==0)days=29;/*如果是閏年*/13elsedays=28;/*不是閏年*/break;default:printf("Inputerror!\n");/*月份輸入錯誤*/days=0;}if(days!=0)printf("%d,%dis%ddays\n",year,month,days);return0;}3.編寫一個程序,計算并輸出下列級數(shù)之和:1...2!3!!xxxexn=+++++其中n與x從鍵盤輸入。#include""#include""main(){inti,n;doubles=,s1=,x;scanf("%d,%f",&n,&x);for(i=1;i<=n;i++){s1=s1*i;/*各項中的階乘*/s=s+pow(x,i)/s1;/*按公式求出*/}printf("s=%f",s);}4.輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其他字符的個數(shù)。#include""main(){charc;inti=0,j=0,k=0,l=0;while((c=getchar())!='\n'){if(c>=65&&c<=90||c>=97&&c<=122)i++;編寫一個程序,解決猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個;第二天早上又將剩下的桃子吃掉一半,又多吃了一個;以后每天早上都吃了前一天剩下的一半零一個;到第10天早上想再吃時,只剩一個桃子了。問猴子第一天共摘了多少桃子14#include""main(){inti=1,sum=0;for(;i<=10;i++)sum=2*sum+1;printf("sum=%dn",sum);}習(xí)題解答選擇題1.D【分析】定義一維數(shù)組的語法格式為“類型標(biāo)識符數(shù)組名[整型常量表達(dá)式];”,其中“整型常量表達(dá)式”是用來說明數(shù)組元素的個數(shù),可以是整型常量、整型常量表達(dá)式或符號常量,但不能包含變量。選項A用圓括號定義數(shù)組a,是錯誤的;而選項B和C中,用變量n來說明數(shù)組a長度,是錯誤的。2.C【分析】一維數(shù)組的初始化的語法格式為“類型標(biāo)識符數(shù)組名[整型常量表達(dá)式]={常量1,常量2,...常量n};”,所賦初值放在賦值號后的一對花括號中。選項A把初值放在一對圓括號內(nèi),是錯誤的;選項B花括號中沒有初值,而且語句沒有“;”,是錯誤的;選項D中初值沒有用花括號括起來,是錯誤的。3.B【分析】選項A定義數(shù)組art有5個元素,而花括號中只提供2個初值,分別賦值給art[0]和art[1],其余元素自動賦值為0;選項B通過花括號的初值確定數(shù)組art有2個元素;選項C和D定義的數(shù)組art是等價的,表示含有5個元素,其值分別為“89、-23、0、0、0”。4.A【分析】C語言中,二維數(shù)組排列的順序是“按行存放”的,即先存放第0行的元素,再存放第1行的元素,以此類推。5.B【分析】C語言中,二維數(shù)組是“按行存放”的,元素a[i][j]前面存放了i行,共i*m個元素,在第i行的第j列前面有j個元素,因此元素a[i][j]前的元素個數(shù)為i*m+j。6.D【分析】選項A定義了a是一個1行4列的二維數(shù)組,但初值{1,2,3,4,5}卻是1行5列,是錯誤的;選項B在初始化語句中省略了第二維的長度,是錯誤的;選項C定義了b是一個2行3列的二維數(shù)組,但初值{{1},{1,2},{1,2,3}}卻是3行,是錯誤的;選項D省略了第一維的長度,第二維長度為3,因此選項D等價于“doubley[1][3]={0};”。7.D【分析】字符串"ABCDEFGH"占9個字節(jié),其中字符串結(jié)束標(biāo)志'\0'多占用了1個字節(jié)。選項A、B和C都只定義了8個元素的字符數(shù)組,是錯誤的。158.D【分析】語句“chara[]="ABCDEF";”定義了一個字符數(shù)組,并字符個數(shù)確定數(shù)組的長度,而"ABCDEF"使以字符'\0'為結(jié)束標(biāo)志的一個字符序列,共7個字符,因此數(shù)組a長度為7;而語句“charb[]={'A','B','C','D','E','F'};”則定義了長度為6的字符數(shù)組,因此a數(shù)組比b數(shù)組長度長。9.B【分析】格式說明符“%.4s”可以用來輸出字符串中前4個字符,因此選項B正確。10.B【分析】字符串輸入函數(shù)gets(),其語法格式為“gets(字符數(shù)組名)”,選項A包含2個字符數(shù)組名,是錯誤的;選項D中g(shù)ets函數(shù)的參數(shù)是字符串,也是不正確的;scanf函數(shù)使用%s格式說明符進(jìn)行字符串輸入,其輸入項為數(shù)組名,選項C在數(shù)組名a和b前加“&”符號,是錯誤的。11.D【分析】strcmp(s1,s2)將字符串s1和s2自左向右按字符的ASCII碼值逐對進(jìn)行比較,直到出現(xiàn)不同的字符或遇到'\0'為止,如果s1等于s2,則strcmp(s1,s2)等于0;如果s1大于s2,則strcmp(s1,s2)大于0;如果s1小于s2,則strcmp(s1,s2)小于0。12.C【分析】字符串復(fù)制函數(shù)strcpy(str1,str2)將字符串str2同串結(jié)束標(biāo)志'\0'復(fù)制到字符串str1中,函數(shù)返回str1的指針。字符串連接函數(shù)strcat(str1,str3)將字符串str3連接到字符串str1之后。因此本題答案為選項C。13.A【分析】結(jié)構(gòu)體變量占內(nèi)存的大小是該結(jié)構(gòu)體各成員所需內(nèi)存量的總和。14.D【分析】程序中定義了一個結(jié)構(gòu)體數(shù)組cnum[2],包含2個元素,并將初值{1,3,2,7}依次賦值給cnum[0].x、cnum[0].y、cnum[1].x和cnum[1].y。因此,表達(dá)式“cnum[0].y/cnum[0].x*cnum[1].x”的值為6。15.C【分析】將初值{"John",17,"Paul",19,"Mary",18,"adam",16}分別賦值給c[0].name、c[0].age、c[1].name、c[1].age、c[2].name、c[2].age、c[3].name、c[3].age,因此選項C能夠打印出Mary。16.C【分析】程序中定義了一個共用體類型的變量u1,共用體各成員共同使用4字節(jié)內(nèi)存空間,初值=’A’,所以=65,輸出是以%c格式符輸出的,因此本題答案為選項C。17.D【分析】變量a是一個結(jié)構(gòu)體類型,所占內(nèi)存的大小是該結(jié)構(gòu)體各成員所需內(nèi)存量的總和。整型變量c占4字節(jié)內(nèi)存,共用體類型變量k占內(nèi)存的大小是該共用體中最大的一個成員j所占用的內(nèi)存量,為4字節(jié),因此本題答案為選項D。18.A【分析】變量u是一個共用體類型變量,共用體類型變量u占內(nèi)存的大小是該共用體中最大的一個成員c所占用的內(nèi)存量共4個字節(jié),共用體的所有成員公用一個存儲空間,同一時間只能存儲一個成員,并且所引用的是最后一次存入成員的值。因此本題答案為4,34,12。1619.B【分析】選項A定義枚舉類型不能使用“=”,是錯誤的;選項C定義枚舉類型時,花括號中的一些名字是程序設(shè)計者自己指定的,命名規(guī)則與標(biāo)識符相同。無固定含義,只是一個符號。選項C中以數(shù)字作為標(biāo)識符是錯誤的,選項D有雙引號是錯誤的,因此本題答案為選項B。20.B【分析】選項A的正確定義語句為typedefchar*STRING[255];選項C的正確定義語句為typedefcharSTRING;選項D的正確定義語句為typedefchar*STRING;因此本題答案為選項B。填空題1.04【分析】二維數(shù)組x[3][5]由3行5列組成,行列下標(biāo)都從0開始,即元素從x[0][0]開始到x[2][4],因此最小行下標(biāo)為0,最大列下標(biāo)為4。2.a[k]!=y【分析】while循環(huán)用于訪問a數(shù)組中的每個元素,從最后一個元素到第一個,直到一個等于y的元素被找到為止,如果查找成功,輸出下標(biāo)值k,否則繼續(xù)查找,直到數(shù)組元素全部查找一遍。因此while循環(huán)的條件為a[k]!=y。3.&a[i]i%4==0printf("\n");【分析】scanf語句要求給數(shù)組a中的每個元素賦初值,因此為&a[i];程序要求以每行4個數(shù)據(jù)的形式輸出a數(shù)組,在for循環(huán)語句中加入條件判斷語句,如果一行輸出4個元素(i%4==0)則打印輸出一個回車換行符printf("\n")。4.j=2j>=0【分析】前一個嵌套的for循環(huán)輸出數(shù)組a主對角線上的元素之和。后一個嵌套的for循環(huán)輸出數(shù)組a次對角線上的元素之和。次對角線上的元素滿足的特點是行下標(biāo)和列下標(biāo)的和為2,內(nèi)層for循環(huán)第三條語句為j--,所以j的初值為2,條件為j>=0。5.s[len]!='\0'【分析】本程序是輸出字符數(shù)組s中存放的字符串的長度,從s[0]開始,向后搜索,每搜索一個元素,len增1,直到遇到字符串結(jié)束標(biāo)志‘\0’為止。重復(fù)過程結(jié)束。這時,len中所保存的就是s中有效字符的個數(shù)。6.str[0]s【分析】strcpy(s,str[0])函數(shù)是將字符串str[0]復(fù)制到字符數(shù)組s中,先假設(shè)字符串str[0]中存放的是三個字符串中最小的,strcmp()函數(shù)是將兩個字符串比較,總把最小的字符串放到s中。最后輸出s。177.12【分析】結(jié)構(gòu)體變量占內(nèi)存的大小是該結(jié)構(gòu)體各成員所需內(nèi)存量的總和。結(jié)構(gòu)體類型structdate中共定義三個成員都為int類型,共占12個字節(jié)。8.【分析】嵌套結(jié)構(gòu)體類型定義變量,采用逐級訪問的方式對變量賦值。式中的圓點“.”稱為成員運算符。9.48【分析】共用體類型的所有成員公用一個存儲空間,同一時間只能存儲一個成員,并且所引用的是最后一次存入成員的值。則10.16【分析】枚舉類型變量的值是一些整數(shù),從花括號的第一個名字開始,系統(tǒng)自動賦予從0開始的值。Red=0,yellow=1;若在定義類型時對枚舉常量進(jìn)行了初始化,則按照初始化的值計算,blue=4,green=5,white=6。編程題1.編寫一個程序,計算Fibonacci數(shù)列的前15個數(shù),并將其存儲到一維數(shù)組fib中,然后輸出結(jié)果。Fibonacci數(shù)列的定義為:11011>==?????+=nnnFFF【問題分析】【程序代碼】#include<>intmain(){intfib[15]={1,1};inti;for(i=2;i<15;i++)fib[i]=fib[i-1]+fib[i-2];for(i=0;i<15;i++)printf("%5d",fib[i]);printf("\n");return0;}2.有一個已經(jīng)排好序的數(shù)組,編寫一個程序,實現(xiàn)輸入一個數(shù),并按原來排序次序?qū)⒃摂?shù)插入到數(shù)組中。【程序代碼】18#include<>intmain(){constintN=10;隨機(jī)生成50個1~200之間的整數(shù),并存入數(shù)組a中,然后輸出這些整數(shù);同時找出數(shù)組a中的所有素數(shù),存入數(shù)組b,并按每行5個元素的格式由大到小輸出這些素數(shù)?!境绦虼a】#include<>#include<>#include<>#include<>intmain(){inta[50],b[25]={0};intnum=0,flag;inti,j,t;編寫一個程序,實現(xiàn)在一個5行6列的矩陣中查找指定數(shù)據(jù),并輸出該數(shù)據(jù)及其在矩陣中的位置?!境绦虼a】#include<>intmain(){inta[5][6]={{23,56,78,90,12,45},{13,14,16,17,18,19},{32,35,36,38,39,31},{41,43,45,46,48,49},{51,52,53,55,57,58}};inti,j,c,r;intd;編寫一個程序,用二維數(shù)組來實現(xiàn)輸出如下形式的楊輝三角形(要求輸出前6行)。11112113311464115101051【程序代碼】#include<>intmain(){inta[6][6],i,j;for(i=0;i<6;i++){a[i][i]=1;輸入一個3×4的實數(shù)矩陣a和一個4×2的實數(shù)矩陣b,編寫一個程序,計算兩矩陣的積c=a×b。c中各元素保留2位小數(shù),第3位小數(shù)四舍五入?!境绦虼a】#include<>intmain(){21floata[3][4],b[4][2],c[3][2];inti,j,k;printf("輸入矩陣a:\n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%f",&a[i][j]);printf("輸入矩陣b:\n");for(i=0;i<4;i++)for(j=0;j<2;j++)scanf("%f",&a[i][j]);輸入一個5行5列的矩陣,編寫一個程序,計算并顯示輸出該矩陣最外圈元素的合計值?!境绦虼a】#include<>intmain(){inta[5][5];inti,j,sum=0;printf("輸入矩陣a:\n");for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<5;i++)22for(j=0;j<5;j++)if((i==0)||(i==4)||(j==0)||(j==4))sum=sum+a[i][j];printf("矩陣最外圈元素的合計值為%d",sum);return0;}8.輸入一個字符串,編寫一個程序,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔。【程序代碼】#include<>intmain(){charstr[100];inti,num=0,word=0;charc;gets(str);輸入一個字符串,編寫一個程序,將該字符串中的所有大寫字母轉(zhuǎn)換成相應(yīng)的小寫字母,所有小寫字母轉(zhuǎn)換成相應(yīng)的大寫字母?!境绦虼a】#include<>intmain(){charstr[100];inti=0;printf("Enterthestring:\n");gets(str);while(str[i]!='\0'){if((str[i]>='A')&&(str[i]<='Z')){str[i]=str[i]+32;i++;}elseif((str[i]>='a')&&(str[i]<='z')){str[i]=str[i]-32;i++;}23elsei++;}printf("Outputthestring:\n");puts(str);return0;}10.輸入兩個字符串str與substr,編寫一個程序,刪除主字符串str中的所有子字符串substr?!境绦虼a】#include<>#include<>intmain(){charstr[100],substr[100];chart[100]={'\0'},s[100]={'\0'};inti=0,j,k=0,len;printf("請輸入主字符串:\n");gets(str);printf("請輸入子字符串:\n");gets(substr);len=strlen(substr);編寫一個程序,輸入N個學(xué)生的學(xué)號、姓名和成績,每個學(xué)生有三門課程的考試成績,查詢總分高于240和任意一科不及格的學(xué)生,并輸出查詢結(jié)果?!境绦虼a】#include<>constintN=3;structstudentum,stu[j].name);for(i=0;i<3;i++)scanf("%d",&stu[j].score[i]);}core[i];if(stu[j].score[i]<60)flag=1;}if((sum>=240)||(flag==1))printf("%d%s\n",stu[j].num,stu[j].name);}return0;}12.采用結(jié)構(gòu)體類型編寫一個程序,實現(xiàn)輸入三個學(xué)生的學(xué)號以及數(shù)學(xué)、語文、英語成績,然后計算每位學(xué)生的總成績以及平均成績并按總分由大到小輸出成績表?!境绦虼a】#include<>structstudentum);for(i=0;i<3;i++)scanf("%d",&stu[j].score[i]);}otal=0;for(i=0;i<3;i++)stu[j].total=stu[j].total+stu[j].score[i];stu[j].avg=(float)(stu[j].total/;}core>stu[k].score)k=j;,stu[i].total,stu[i].avg);return0;}13.采用共用體類型編寫一個程序,實現(xiàn)零件清單的數(shù)據(jù)的輸入和輸出。零件數(shù)據(jù)包含零件編號、零件名稱、本廠生產(chǎn)、零件來源等字段,若零件是本廠生產(chǎn)的,則“零件來源”用車間代碼(整型)表示;若零件不是本廠生產(chǎn)的,則“零件來源”用來源單位(字符數(shù)組)填寫?!境绦虼a】#include<>constintN=2;intmain(){struct{charnum[10];charname[15];26charcreate;union{intno;charaddr[20];}from;}sp[N];inti;printf("請輸入零件清單:\n");for(i=0;i<N;i++){scanf("%s%s",sp[i].num,sp[i].name);getchar();reate);if(sp[i].create=='y'||sp[i].create=='Y')scanf("%d",&sp[i].;elsescanf("%s",sp[i].;}printf("%10s%10s%10s%10s\n","零件編號","零件名稱","本廠生產(chǎn)","零件來源");for(i=0;i<N;i++){printf("%10s%10s%5c",sp[i].num,sp[i].name,sp[i].create);if(sp[i].create=='y'||sp[i].create=='Y')printf("%15d\n",sp[i].;elseprintf("%15s\n",sp[i].;}return0;}14.盒子中有紅、黃、藍(lán)、白、黑5種顏色的球若干個,每次從盒子中先后取出3個球,得到3個不同顏色的球的可能取法,輸出每種排列情況?!境绦虼a】#include<>intmain(){enumColor{red,yellow,blue,white,black};enumColori,j,k,pri;intn,loop;n=0;for(i=red;i<=black;i=enumColor(i+1))for(j=red;j<=black;j=enumColor(j+1))if(i!=j){for(k=red;k<=black;k=enumColor(k+1))27if((k!=i)&&(k!=j)){n++;printf("%4d",n);for(loop=1;loop<=3;loop++){switch(loop){case1:pri=i;break;case2:pri=j;break;case3:pri=k;break;default:break;}switch(pri){casered:printf("%10s","red");break;caseyellow:printf("%10s","yellow");break;caseblue:printf("%10s","blue");break;casewhite:printf("%10s","white");break;caseblack:printf("%10s","black");break;}}printf("\n");}}printf("total:%5d\n",n);return0;}15.編寫一個程序,聲明一個顏色的枚舉類型,根據(jù)鍵盤輸入的非負(fù)整數(shù)值,顯示輸出顏色的英文名稱?!境绦虼a】#include<>intmain(){enumColor{red,yellow,blue,white,black};enumColorcolor;intc;scanf("%d",&c);switch(c){【分析】C源程序是由函數(shù)組成的。C程序的全部工作都是由各式各樣的函數(shù)完成的,所以也把C語言稱為函數(shù)式語言。由于采用了函數(shù)模塊式的結(jié)構(gòu),C語言易于實現(xiàn)結(jié)構(gòu)化程序設(shè)計。使程序的層次結(jié)構(gòu)清晰,便于程序的編寫、閱讀、調(diào)試。2.B【分析】在C語言中,所有的函數(shù)定義,包括主函數(shù)main在內(nèi),都是平行的。也就是說,在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌套定義。但是函數(shù)之間允許相互調(diào)用,也允許嵌套調(diào)用。習(xí)慣上把調(diào)用者稱為主調(diào)函數(shù)。函數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用。3.C【分析】有參函數(shù)定義的一般形式為“類型標(biāo)識符函數(shù)名(類型形參,類型形參…){函數(shù)體}”。很顯然,A、B和D錯誤。4.B【分析】函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換。如函數(shù)值為整型,在函數(shù)定義時可以省去類型說明。5.B【分析】函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。296.B【分析】在C語言中,實參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會發(fā)生類型不匹配的錯誤。根據(jù)題中main()函數(shù)中函數(shù)調(diào)用語句“fun(x,a)”可知,函數(shù)fun的實參有兩個,依次為“float類型和int類型”,所以函數(shù)fun的首部也應(yīng)包含兩個形參,并且類型和順序應(yīng)與實參一致。7.C【分析】函數(shù)f有兩個參數(shù)(e1,e2)和(e3,e4,e5),每個參數(shù)都是一個逗號表達(dá)式。8.D【分析】函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換,所以D的說法不正確。A、B和C選項的說法正確,并且,在函數(shù)中允許有多個return語句,但每次調(diào)用只能有一個return語句被執(zhí)行,因此只能返回一個函數(shù)值。9.D【分析】C語言中,形參和實參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送,所以形參只能是變量。10.D【分析】C語言中,可以用以下3種方式調(diào)用函數(shù):函數(shù)語句:函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運算。這種方式要求函數(shù)是有返回值的。函數(shù)實參:函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。11.D【分析】main()函數(shù)中,函數(shù)調(diào)用語句“r=func(func(x,y),z);”的調(diào)用過程是,先調(diào)用函數(shù)“func(x,y)”即將“x”和“y”的值傳給函數(shù)func的形參,計算“x+y”結(jié)果為“7”,然后將結(jié)果“7”作為函數(shù)“func(func(x,y),z)”的實參,再調(diào)用函數(shù)“func”,計算“7+z”結(jié)果為“15”,最后將返回值“15”賦給變量“r”。12.C【分析】題中語句“intx,y;”定義了兩個外部變量“x”和“y”,即全局變量,是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。外部變量“x”和“y”不在文件的開頭定義,其有效的作用范圍只限于定義處到文件終了。在定義點之前的函數(shù)“num()”想引用外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對該變量作“外部變量聲明”。表示該變量是一個已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。該程序從“main()”函數(shù)開始執(zhí)行,改變了外部變量“x”和“y”的值,接下來調(diào)用函數(shù)“num()”,將外部變量“x”和“y”的值重新賦值為“5”和“25”,最后返回“main()”函數(shù),輸出結(jié)果。13.A30【分析】根據(jù)題意,π值的應(yīng)該為小數(shù)形式,所以正確答案應(yīng)該從“A”和“B”中選,結(jié)合題中給出的計算π值的公式,s應(yīng)為“s=s+(i*i)”,顯示A答案正確。14.B【分析】語句“while(s[i]!='\0')i++;”的執(zhí)行過程是,先判斷字符串“S”是否結(jié)束,如果不結(jié)束,則“i++”,即取下一個字符繼續(xù)判斷,所以當(dāng)遇到字符串結(jié)束標(biāo)志后,變量i不再執(zhí)行“i++”操作,此時i的值即為字符串的長度,所以應(yīng)返回i的值。15.B【分析】局部變量是在函數(shù)內(nèi)作定義說明的。其作用域僅限于函數(shù)內(nèi),離開該函數(shù)后再使用這種變量是非法的。主函數(shù)main中定義的變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用。同時,主函數(shù)中也不能使用其它函數(shù)中定義的變量。因為主函數(shù)也是一個函數(shù),它與其它函數(shù)是平行關(guān)系。所以在main函數(shù)體內(nèi)定義的變量也是局部變量,因此B的說法不正確。16.A【分析】在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。17.A【分析】在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。18.A【分析】函數(shù)中的局部變量,如不專門聲明為static存儲類別,都是動態(tài)地分配存儲空間的,數(shù)據(jù)存儲在動態(tài)存儲區(qū)中。自動變量用關(guān)鍵字auto作存儲類別的聲明。關(guān)鍵字auto可以省略,auto不寫則隱含定為“自動存儲類別”,屬于動態(tài)存儲方式。19.A【分析】在C語言源程序中凡是以“#”開頭的均為預(yù)處理命令。20.A【分析】對帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實參去代換形參。本題中宏“Y(n)”的形參為“n”,宏定義為“((N+1)*n)”,所以調(diào)用宏“Y(5+1)”時,“n”由“5+1”代換,最終結(jié)果為:Z=2*(3+((3+1)*5+1))=48。通常在宏定義中,字符串內(nèi)的形參通常要用括號括起來以避免出錯。填空題1.全局局部【分析】全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),它屬于一個源程序文件。其作用域是整個源程序。形參變量是屬于被調(diào)函數(shù)的局部變量。2.定義調(diào)用31【分析】在C語言中,所有的函數(shù)定義,包括主函數(shù)main在內(nèi),都是平行的。也就是說,在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌套定義。但是函數(shù)之間允許相互調(diào)用,也允許嵌套調(diào)用。習(xí)慣上把調(diào)用者稱為主調(diào)函數(shù)。函數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用。3.函數(shù)值的類型【分析】函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換。4.從變量定義處開始到本程序文件的末尾【分析】外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。5.14【分析】函數(shù)fun的功能是將兩個參數(shù)的值相加求和,再把結(jié)果返回給主調(diào)函數(shù)。main函數(shù)在調(diào)用函數(shù)fun時,將“x+4”和“x”作為實參傳遞給對應(yīng)形參,所以計算后結(jié)果為“x+4+x=5+4+5=14”。6.maxis55【分析】函數(shù)max的功能是求包含了n個元素的數(shù)組的最大值,并將結(jié)果返回給主調(diào)函數(shù)。main函數(shù)定義并初始化了一個包含了8個元素的數(shù)組,并將數(shù)組名與數(shù)組中元素的個數(shù)作為max函數(shù)的實參傳遞給對應(yīng)的形參,所以求出的最大值是55.7.sum(i)sum(n-1)+n【分析】main()函數(shù)使用變量“i”接收用戶輸入的數(shù)值,并將“i”作為sum函數(shù)的實參,調(diào)用sum函數(shù)計算“1到i的和”。函數(shù)sum(intn)的功能是使用形參“n”接收實參“i”傳遞過來的值,求1到n的和,當(dāng)n=1時,sum=1;當(dāng)n=2時,sum=1+2可以寫成sum=sum(1)+2;當(dāng)n=3時,sum=1+2+3可以寫成sum=sum(2)+3;所以sum=1+2+3+…+n可以寫成sum(n-1)+n。8.(3,2)(6,5)(9,8)(12,11)【分析】main函數(shù)使用“for”語句,循環(huán)調(diào)用“fun()”函數(shù)共4次。“fun()”函數(shù)中,變量“a”為局部靜態(tài)變量,因為在定義時沒有賦初值,所以編譯時自動賦初值0,并且“a”值在函數(shù)調(diào)用結(jié)束后不消失仍保留上次計算后的值。在“fun()”函數(shù)中,“printf("(%d,%d)\n",a+=3,a+b);”語句在執(zhí)行時,調(diào)用printf函數(shù)時要輸出兩個表達(dá)式的值(a+=3和a+b分別是兩個表達(dá)式),大多數(shù)系統(tǒng)中,對函數(shù)參數(shù)的求值順序是自右而左,所以是先求第2個表達(dá)式“a+b”的值,然后求第1個表達(dá)式“a+=3”的值。當(dāng)i=1時,a=0,b=2,輸出結(jié)果為先計算“a+b”的值為2,再計算“a+=3”的值為“a=a+3”即a的值為3;當(dāng)i=2時,a=3(此時a值為上一次的計算結(jié)果),b=2,輸出結(jié)果為先計算“a+b”的值為5,再計算“a+=3”的值為“a=a+3”即a的值為6;32當(dāng)i=3和i=4時依次類推。9.7【分析】根據(jù)宏定義,形參為N。宏調(diào)用f(2+3)中實參為2+3,是一個表達(dá)式,在宏展開時,用2+3代換N,得2*2+3=7,這與函數(shù)的調(diào)用是不同的,函數(shù)調(diào)用時要把實參表達(dá)式的值求出來再賦予形參。而宏代換中對實參表達(dá)式不作計算直接地照原樣代換。10.50,25【分析】本題為不帶參數(shù)的宏定義,一共定義了3個宏,在執(zhí)行“printf("%d,%d\n",2*MN,MN/2);”語句時,利用宏代換自右而左輸出兩個表達(dá)式“2*MN”和“MN/2”的值。MN/2=N*M/2=M*3+4*M/2=5*3+4*5/2=25,2*MN=2*N*M=2*M*3+4*5=2*5*3+4*5=50。編程題1.編寫一個函數(shù),求兩個整數(shù)的最大公約數(shù)?!締栴}分析】求兩個整數(shù)的最大公約數(shù)可使用輾轉(zhuǎn)相除法。其方法是:以小數(shù)除大數(shù),如果能整除,那么小數(shù)就是所求的最大公約數(shù)。否則就用余數(shù)來除剛才的除數(shù);再用這新除法的余數(shù)去除剛才的余數(shù)。依此類推,直到一個除法能夠整除,這時作為除數(shù)的數(shù)就是所求的最大公約數(shù)。設(shè)兩個整數(shù)為u和v,則求最大公約數(shù)的算法見圖所示。【程序代碼】#include""hcf(intu,intv){inta,b,t,r;Tu>vF變換u、v,使用大者為被除數(shù)a=u(除數(shù)),b=v(被除數(shù))r=b對a求余,若r不為0使除數(shù)變?yōu)楸怀龜?shù):b=a,余數(shù)為除數(shù):a=r返回除數(shù)a的值。圖33if(u>v){t=u;u=v;v=t;}a=u;b=v;while((r=b%a)!=0){b=a;a=r;}return(a);}main(){intu,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("",h);}2.編寫一個計算n次勒讓德多項式的遞歸程序。n次定義為:110/))()1()()12((1)(>==????????=nnnnxpnxxpnxxp【程序代碼】#include""main(){intx,n;floatp(int,int);printf("\n輸入整數(shù)n,x:");scanf("%d,%d",&n,&x);printf("N=%d,X=%d.\n",n,x);printf("P%d(%d)=%\n",n,x,p(n,x));}floatp(inttn,inttx){if(tn==0)return(1);elseif(tn==1)return(tx);elsereturn(((2*tn-1)*tx*p((tn-1),tx)-(tn-1)*p((tn-2),tx))/tn);34}3.設(shè)有兩個整型數(shù)組a和b,試統(tǒng)計這兩個數(shù)組中對應(yīng)元素相等與不相等的個數(shù)?!境绦虼a】#include<>#include<>voidfun(intp[],intq[]){intm=0,n=0,i;for(i=0;i<10;i++){if(p[i]==q[i])m++;elsen++;}printf("兩個數(shù)組中對應(yīng)元素相同的個數(shù):%d個,\n不相同的個數(shù):%d個.\n",m,n);}main(){inta[10],b[10],i;printf("請向數(shù)據(jù)組a輸入10個數(shù):");for(i=0;i<10;i++)scanf("%d,",&a[i]);printf("數(shù)據(jù)組a:");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n請向數(shù)據(jù)組b輸入10個數(shù):");for(i=0;i<10;i++)scanf("%d,",&b[i]);printf("數(shù)據(jù)組b:");for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");fun(a,b);35}4.回文是從前向后和從后向前讀起來都一樣的句子。寫一個函數(shù),判斷一個字符串是否為回文,注意處理字符串中有中文也有西文的情況?!境绦虼a】#include<>#include<>intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p){n++;p++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}voidmain()/*主函數(shù)*/{charstr[80];intc;printf("inputstr:\n");gets(str);c=fun(str);if(c==1)printf("huiwen:YES!");elseprintf("huiwen:NO!");getchar();}5.三角形的面積為))()((csbsassarea???=,其中)++×=,a、b、c為三角形的三邊。定義兩個帶參的宏,分別用來求s和area。然后在程序用宏來求三角形的周長和面積。【程序代碼】#include""#include""#defineS(a,b,c)((a+b+c)/2)#defineAREA(a,b,c)(sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)))36main(){floata,b,c;printf("請輸入三角形的三條邊:");scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)printf("其面積為:%.\n",AREA(a,b,c));elseprintf("不能構(gòu)成三角形!\n");}習(xí)題解答選擇題1.D【分析】用&操作符可以獲取變量的地址,指針變量用于存放地址。2.D【分析】scanf的一般形式為:scanf(格式控制字符串,地址1,地址2,…)。printf的一般形式為:printf(格式控制字符串,輸出項1,輸出項2,…)。格式控制字符串中有格式說明也有普通字符。printf的輸出項n是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。scanf的地址n是變量的地址。3.D【分析】指針變量初始化的值是該指針類型的地址值。int*p=&a;是定義語句,*是指針定義符,C為p分配一指針空間,并用a的地址值初始化,*p=a是執(zhí)行語句,是間接引用指針變量p。*操作符在指針上的兩種用途要分開:定義或聲明時,建立一指針;執(zhí)行時,間接引用一指針。4.A【分析】NULL是空指針值,它不指向任何地方,NULL是個不確定值。字符串的結(jié)束符是‘\0’,文件的結(jié)束符EOF。5.C37【分析】指針在使用前要進(jìn)行初始化。指針忘了賦值比整形變量忘了賦值危險得多。C選項中,沒有賦初始值的指針p是一個隨機(jī)地址,然后把從鍵盤讀的一個字符賦到內(nèi)存中的隨機(jī)位置,嚴(yán)重者可能造成計算機(jī)死機(jī)或進(jìn)入死循環(huán)。6.C【分析】new用來從堆上分配對象或?qū)ο髷?shù)組,delete用來從堆上釋放對象或?qū)ο髷?shù)組。7.B【分析】字符指針s指向字符數(shù)組str1的起始地址,字符指針t指向字符數(shù)組str2的起始地址,通過移動指針(即s++,t++)可以對數(shù)組元素進(jìn)行遍歷。字符指針的間接引用(即*s和*t)是輸出單個字符。8.C【分析】數(shù)組名就是數(shù)組的第一個元素的地址。訪問第i個元素可以有以下形式:a[i],*(a+i),p[i],*(p+i)訪問第i個元素地址可以有以下形式:&a[i],a+i,p+i,&p[i]9.D【分析】s[i]表示字符數(shù)組s的第i個字符,&s[i]表示字符數(shù)組s的第i個字符的地址,即&s[i]是字符指針,輸出字符指針就是輸出字符串。10.D【分析】strcpy的聲明原形為:char*strcpy(char*dest,constchar*src);答案D不符合參數(shù)類型11.D【分析】通過第三條語句p=&a[1],浮點型指針p指向數(shù)組a的第二個元素即a[1],通過for循環(huán),計算數(shù)組中從第二個元素開始連續(xù)三個元素的和。12.B【分析】通過第二條語句char*chp=&b[3]使字符指針chp指向數(shù)組b的第四個元素即b[3],語句while(chp>&b[0])為字符指針chp的地址值與數(shù)組b的首地址值比較。13.B【分析】語句while(*p!='\0')p++;執(zhí)行后,字符指針p指向字符串“Morning”的最后38一個字符‘\0’,字符指針s仍然指向字符串“Morning”的首字符‘M’,兩個字符指針型變量值加減后結(jié)果為7。14.D【分析】對字符數(shù)組進(jìn)行輸出時,遇到‘\0’就結(jié)束。15.B【分析】字符串常量總是以‘\0’結(jié)束,字符串"abcde"在內(nèi)存中的表示為連續(xù)的6個內(nèi)存單元,所以A選項錯誤。指針在使用前要進(jìn)行初始化,C選項和D選項沒有對指針變量s初始化,結(jié)果會將字符串"abcde"存入內(nèi)存中的隨機(jī)位置,產(chǎn)生嚴(yán)重錯誤。16.A【分析】語句strcpy(s,sp)把sp所指字符串"HELLO"復(fù)制到字符數(shù)組s中,s的值為"HELLO",s[5]=‘\0’,s[6]~s[9]的內(nèi)容不確定。接著執(zhí)行語句s[6]='!',雖然s[6]的值被改為了'!',但s[5]仍然是‘\0’,字符指針的輸出結(jié)束符是‘\0’,所以答案A正確。17.A【分析】字符指針s指向字符串常量"0123214"的首地址。通過移動指針s對字符串常量"0123214"進(jìn)行遍歷。有關(guān)switch語句需要注意以下幾點:·switch后面括號中的表達(dá)式只能是整數(shù)、字符型或枚舉表達(dá)式?!ぎ?dāng)表達(dá)式的值與某一個case后面的常量表達(dá)式值相等時,就執(zhí)行此case后面的語句,若所有case中的常量表達(dá)式值沒有與表達(dá)式匹配,就執(zhí)行default后面的語句?!ase語句起標(biāo)號作用?!ひ驗閏ase語句起語句標(biāo)號的作用,所以case與default并不改變控制流程。18.A【分析】變量p為整形指針變量,指向二維數(shù)組a的第一個元素(a[0][0])位置,我們可以通過移動指針來對數(shù)組元素進(jìn)行操作。移動指針是對指針本身進(jìn)行加減運算,并不是對指針的間接引用。指針的間接引用是用來獲得指針指向的變量內(nèi)容的。所以本題應(yīng)先移動指針然后獲得指針的內(nèi)容,只有A答案的表達(dá)正確。19.D【分析】C語言允許把一個二維數(shù)組分解為多個一維數(shù)組來處理。因此數(shù)組a可分解為三個一維數(shù)組,即a[0],a[1],a[2]。從二維數(shù)組的角度來看,a是二維數(shù)組名,a代表整個二維數(shù)組的首地址,也是二維數(shù)組0行的首地址,a+i代表第i行的首地址,

溫馨提示

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

評論

0/150

提交評論