第一篇:全國計算機等級考試二級C語言題型總結(二)——選擇循環結構程序設計部分
C語言第二部分上機題型總結
一、選擇結構部分;
1、if結構題型總結(案例1)企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高
于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于
40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
(習題1)
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
2、switch結構(案例2)
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
(習題2)要求從鍵盤輸入一組字符,對該組字符中的數字0-9字符個數分別進行統計,其他字符共同統計,統計完成后輸出各種字符的個數。(結合數組完成)
二、循環結構
1、for循環(案例3)
題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 1.程序分析:在10萬以內判斷,先將該數加上100后再開方,再將該數加上268后再開方,如果開方后的結果滿足如下條件,即是結果。請看具體分析:
(習題3)按照指定的格式輸出9*9乘法表。
* * * * * * * * * *
2.while循環
*
* *
* * * * * * *
*
* *
* * * * * * * * * * * *(案例4)請編寫一個函數fun,它的功能是:根據以下公式求PI的值(要求滿足精度0.0005,即某項小于0.0005時停止迭代):
PI/2 = 1 + 1/3 +(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+ …… +(1*2*3*……*n)/(3*5*7*……(2*n+1))
(練習4)題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
(習題5)題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
(習題6)對數組的10個數進行排序
課后習題
題目:打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等于該數
本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。
編寫函數fun,它的功能是:利用以下所示的簡單迭代方法求方程cos(x)-x=0的一個實根。
X(n+1)=cos(X(n))
迭代步驟如下:
(1)取x(1)初值為0.0;
(2)x(0)=x(1),把x(1)的值賦給x(0);
(3)x(1)=cos(x(0)),求出一個新的x(1);
(4)若x(0)-x(1)的絕對值小于0.000001,則執行步驟(5),否則執行步驟(2);
(5)所求x(1)就是方程cos(x)-x=0的一個實根,作為函數值返回。
(案例1)
#include“stdio.h” main(){
} long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld”,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)
bonus=i*0.1;bonus=bonus1+(i-100000)*0.075;bonus=bonus2+(i-200000)*0.05;bonus=bonus4+(i-400000)*0.03;bonus=bonus6+(i-600000)*0.015;bonus=bonus10+(i-1000000)*0.01;else if(i<=200000)else if(i<=400000)else if(i<=600000)else if(i<=1000000)else printf(“bonus=%d”,bonus);
案例2 main(){
int day,month,year,sum,leap;printf(“nplease input year,month,dayn”);scanf(“%d,%d,%d”,&year,&month,&day);switch(month)/*先計算某月以前月份的總天數*/ { case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;
} case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf(“data error”);break;} sum=sum+day;/*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;leap=0;sum++;else if(leap==1&&month>2)/*如果是閏年且月份大于2,總天數應該加一天*/ printf(“It is the %dth day.”,sum);
案例3 #include “math.h” main(){ long int i,x,y,z;for(i=1;i<100000;i++)
{ x=sqrt(i+100);
/*x為加上100后開方后的結果*/
y=sqrt(i+268);
/*y為再加上168后開方后的結果*/
if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等于該數,這說明此數是完全平方數*/
printf(“n%ldn”,i);
} }
(案例4)
#include
{ double x;int i;
printf(“eps=%lf, PI=%lfn”, x, fun(x));
} } 習題4 程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼:
/* zheng int is divided yinshu*/ main(){ int n,i;printf(“nplease input a number:n”);scanf(“%d”,&n);printf(“%d=”,n);for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf(“%d*”,i);
n=n/i;
}
else
break;
} } printf(“%d”,n);}(習題5)main(){ int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++)
{
s=s+a/b;
t=a;a=a+b;b=t;
} printf(“sum is %9.6fn”,s);}
(課后習題6)
1.程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,下次類推,即用第二個元素與后8個進行比較,并進行交換。
2.程序源代碼: #define N 10 main(){int i,j,min,tem,a[N];/*input data*/ printf(“please input ten num:n”);for(i=0;i 《全國計算機等級考試二級教程——C語言程序設計》 課后題及參考答案 第一章 程序設計基本概念 1.1 在TRUBO C環境中用RUN命令運行一個C程序時,所運行的程序的后綴是______。答案:.exe 1.2 C語言源程序文件的后綴是_____,經過編譯后,生成文件的后綴是_____,經過連接后,生成文件的后綴是_____。 答案:.c.obj.exe 1.3 結構化程序由_____、_____、_____三種基本結構組成。答案:順序、選擇、循環 第二章 C程序設計的初步知識 一、選擇題 2.1 以下選項中正確的整型常量是 A)12.B)-20 C)1,000 D)4 5 6 答案:B 2.2 以下選項中正確的實型常量是 A)0 B)3.1415 C)0.329×10(2)(10的2次方) D).871 答案:D 2.3 以下選項中不正確的實型常量是 A)2.607E-1 B)0.8103e 2 C)-77.77 D)456e-2 答案:B 2.4 以下選項中不合法的用戶標識符是 A)abc.c B)file C)Main D)PRINTF 答案:A 2.5 以下選項中不合法的用戶標識符是 A)_123 B)printf C)A$ D)Dim 答案:C 2.6 C語言中運算對象必需是整型的運算符是 A)% B)/ C)! D)** 答案:A 2.7 可在C程序中用作用戶標識符的一組標識符是 A)void define WORD B)as_b3 _123 If C)For -abc case D)2c DO SIG 答案:B 2.8 若變量已正確定義并賦值,符合C語言語法的表達式是 A)a=a+7; B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b 答案:B 2.9 以下敘述中正確的是 A)a是實型變量,C允許進行以下賦值a=10,因此可以這樣說:實型變量中允許存放整型值。 B)在賦值表達式中,賦值號右邊既可以是變量也可以是任意表達式。 C)執行表達式a=b后,在內存中a和b存儲單元中的原有值都將被改變,a的值已由原值改變為b的值,b的值由原值變為0。 D)已有a=3,b=5。當執行了表達式a=b,b=a之后,已使a中的值為5,b中的值為3。 答案:B 2.10 以下敘述中正確的是 A)在C程序中無論是整數還是實數,只要在允許的范圍內都能準確無誤的表示。 B)C程序由主函數組成。 C)C程序由函數組成。 D)C程序由函數和過程組成。 答案:C 2.11 TURBO C中int類型變量所占字節數是 A)1 B)2 C)3 D)4 答案:B 2.12 不合法的八進制數是 A)0 B)028 C)077 D)01 答案:B 2.13 不合法的十六進制數是 A)oxff B)0Xabc C)0x11 D)0x19 答案:A 二、填空題 2.14 若k為int整型變量且賦值11。請寫出運算k++后表達式的值A)_____和變量的值B)_____。 答案: 11、12 2.15 若x為double型變量,請寫出運算x=3.2,++x后表達式的值A)_____和變量的值B)_____。 答案:4.2、4.2 2.16 函數體由符號____開始,用符號____結束。函數體的前面是____部分,其后是____部分。 答案:{、}、定義、執行 2.17 C語言中的標識符可分為____、____、和預定義標識符三類。 答案:關鍵字、用戶標識符 2.18 在C語言程序中,用關鍵字____定義基本整型量,用關鍵字____定義單精度實型變量,用關鍵字___定義雙精度實型變量。 答案:int、float、double 2.19 把a1、a2定義成單精度實型變量,并賦初值1的定義語句是____。 答案:float a1=1.0,a2=1.0; 2.20 C程序中定義的變量,代表內存中的一個____。 答案:存儲單元 2.21 表達式3.5+1/2的計算結果是____。 答案:3.5 2.22 對以下數學式,寫出三個等價的C語言表達式____、____、____。 a×b —— c 答案:a*b/c、a/c*b、b/c*a 2.23 表達式s=10應當讀做“____”。 答案:將10賦給變量s 2.24 計算機中內存儲器的最小存儲單位稱____,其中能容納的數是____。 答案:位、0或1 2.25 通常一個字節包含____個二進制位。在一個字節中能存放的最大(十進制)整數是____,它的二進制數的形式是____;最?。ㄊM制)整數是____,它的二進制數的形式是____。 答案:8、255、1111 1111、-128、1000 0000 2.26 當計算機用兩個字節存放一個整數時,其中能存放的最大(十進制)整數是____、最?。ㄊM制)整數是____,它的二進制數的形式是____。 答案:65535、-32768、1000 0000 0000 0000 2.27 在C語言中整數可用____進制數、____進制數和____進制數三種數制表示。 答案:十、八、十六 三、上機改錯題 2.24 【分析與解答】 第1行的錯誤: (1)include是一個程序行,因此在此行的最后不應當有分號(;)。 (2)include程序行中后面的stdio.h是一個文件名,按規定,文件名應當放在一對雙引號(″ ″)內,或放在一對尖括號(< >)內。 第2行的錯誤: (1)main()是主函數的起始行,不是語句,因此最后不應當有分號(;)。 (2)在同一行上的/ * main function * / 顯然是注釋;C語言規定:注釋由/*開頭,由*/結束,但在*號和/之間不得插入任何空格,而在此處“/ *”和“/ *”之間存在空格,因此,/ * main function * /的寫法式是錯誤的,而應寫成:/* main function */。 第3行的錯誤: (1)在主函數的起始行main()的后面是函數體,函數體由左花括號({)開始。但在函數體的第一行:float的前面缺少了左花括號({)。 (2)在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 顯然是注釋;C語言規定:注釋由/*開頭,由*/結束,并且開頭的/*將去找最近的*/去配對,因此在/* /*r is radius*/中,第一個/*與最后的那個*/配上了對,結果緊跟在后面的那個逗號(,)落在了注釋的外面,而構成了一個多余符號,為此,在編譯時將報告“語法錯”。 第6行的錯誤: (1)printf(″%f \[KG-*3]n″,s)應當是一條輸出語句,但在最后缺少了一個分號。 (2)printf(″%f \[KG-*3]n″,s);是程序的最后一條語句,程序應當結束;但缺少了程序體結束所需的右花括號(});此右花括號可以放在printf(″%f \[KG-*3]n″,s);的后面,也可以放在printf(″%f \[KG-*3]n″,s);的下一行上。 2.25 【分析與解答】 第1行的錯誤:在include行中的文件名應該是stdio.h,而不是stdio.a。 第2行的錯誤:在main的后面缺少一對圓括號。 第4行的錯誤:在c=40的后面缺少分號。 第6行的錯誤:在printf(″%f \〖KG-*3〗n″,v)的后面缺少分號。 第三章、順序結構 一、選擇題 3.1 若a、b、c、d都是int類型變量且初值為0,以下選項中不正確的賦值語句是 A)a=b=c=100; B)d++; C)c+b; D)d=(c=22)-(b++); 答案:C 3.2 以下選項中不是C語句的是 A){int i;i++;printf(“%d”, i);} B); C)a=5,c=10 D){;} 答案:C 3.3 以下合法的C語言賦值語句是 A)A=B=58 B)k=int(a+b); C)a=58,b=58 D)--i; 答案:D 3.4 以下程序的輸出結果是 A)0 B)1 C)3 D)不確定的值 main() { int x=10,y=3; printf(“%d”, y=x/y); } 答案:C 3.5 若變量已正確說明為int類型,要給a、b、c輸入數據,以下不正確的輸入語句是 A)read(a,b,c); B)scanf(“%d%d%d”,a,b,c); C)scanf(“%D%D%D”,&a,&b,&c); D)scanf(“%d%d%d”,&a,&b,&c); 答案:D 3.6 若變量已正確說明為float類型,要通過以下賦值語句給a賦予 10、b賦予 22、c賦予33,以下不正確的輸入形式是 A)10 B)10.0,22.0,33.0 C)10.0 D)10 22 scanf(“%f %f %f”, &a, &b, &c); 答案:B 3.7 若變量以正確定義,要將a和b中的數進行交換,下面不正確的語句組是 A)a=a+b,b=a-b,a=a-b; B)t=a,a=b,b=t; C)a=t;t=b;b=a; D)t=b;b=a;a=t; 答案:C 3.8 若變量已正確定義,以下程序段的輸出結果是 A)輸出格式說明與輸出項不匹配,輸出無定值 B)5.17000 C)5.168000 D)5.169000 x=5.16894; printf(“%f”,(int)(x*1000+0.5)/(float)1000); 答案:D 3.9 若有以下程序段,c3中的值是 A)0 B)1/2 C)0.5 D)1 int c1=1,c2=2,c3; c3=c1/c2; 答案:A 3.10 若有以下程序段,其輸出結果是 A)0,0,-10 B)0,0,5 C)-10,3,-10 D)3,3,-10 int a=0,b=0,c=0; c=(a-=a-5),(a=b,b+3); printf(“%d,%d,%d”,a,b,c); 答案:B 3.11 當運行以下程序時,在鍵盤上從第一列開始輸入9876543210 A)a=98,b=765,c=4321 B)a=10,b=432,c=8765 C)a=98,b=765.000000,c=4321.000000 D)a=98,b=765,c=4321.0 main(){ int a;float b,c; scanf(“%2d%3f%4f”,&a,&b,&c); printf(“a=%d,b=%f,c=%f”,a,b,c);} 答案:C 3.12 以下程序的輸出結果是 A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d main(){ int a=2,b=5; printf(“a=%%d,b=%%d”,a,b);} 答案:D 3.13 若int類型占兩個字節,則以下程序段的輸出是 A)-1,-1 B)-1,32767 C)-1,32768 D)-1,65535 int a=-1; printf(“%d,%u”,a,a); 答案:D 3.14 以下程序段的輸出是 A)*496 * B)* 496* C)*000496* D)輸出格式符不合法 int x=496; printf(“*%-06d*”,x); 答案:A 3.15 以下程序段的輸出是 A)|3.1415| B)| 3.0| C)| 3| D)| 3.| float a=3.1415; printf(“|%6.0f|”,a); 答案:C 3.16 以下程序段的輸出是 A)|2345.67800| B)|12345.6780| C)|12345.67800| D)|12345.678| printf(“|%10.5f|”,12345.678); 答案:C 3.17 以下程序段的輸出是 A)*0000057.66* B)* 57.66* C)*0000057.67* D)* 57.67* float a=57.666; printf(“*%010.2f*”,a); 答案:C 3.18 若從終端輸入以下數據,要給變量C賦以283.19,則正確的輸入語句是 A)scanf(“%f”,c); B)scanf(“%8.4f”,&c); C)scanf(“%6.2f”,&c); D)scanf(“%8”,&c); 283.1900 答案:由于印刷錯誤,本題沒有正確答案。改正意見: 把選項A改為:scanf(“%f”,&c);或者把選項D改為:scanf(“%8f”,&c);則可分別選擇A或者D為正確答案。 3.19 若變量已正確說明,要求用以下語句給a賦予3.12、給b賦予9.0,則正確的輸入形式是(□代表空格) A)3.12□□9.0 B)a=□□3.12b=□□□9 C)a=3.12,b=9 D)a=3.12□□,b=9□□□□ scanf(“a=%f,b=%f”,&a,&b); 答案:C 3.20 以下程序的輸出結果是 A)9 8 B)8 9 C)6 6 D)以上三個都不對 #include “math.h” main(){ double a=-3.0, b=2; printf(“%3.0f %3.0f”,pow(b,fabs(a)),pow(fabs(a),b));} 答案:B 二、填空題 3.21 若有以下定義,請寫出以下程序段中輸出語句執行后的輸出結果。(1)____(2)____(3)____ int i=-200,j=2500; printf(“(1)%d %d”,i,j); printf(“(2)i=%d, j=%d”,i,j); printf(“(3)i=%d j=%d”,i,j); 答案: -200 2500 i=-200, j=2500 i=-200 j=2500 3.22 變量i、j、k已定義為int類型并有初值0,用以下語句進行輸入時 scanf(“%d”,&i);scanf(“%d”,&j);scanf(“%d”,&k);當執行第一個輸入語句,從鍵盤輸入: 12.3 則變量i、j、k的值分別是____、____、____。 答案:12、0、0 3.23 復合語句在語法上被認為是____??照Z句的形式是____。 答案:一條語句、; 3.24 C語句的最后用____結束。 答案:; 3.25 以下程序段,要求通過scanf語句給變量賦值,然后輸出變量的值。寫出運行時給k輸入100,給a輸入25.81,給x輸入1.89234時的三種可能的輸入形式____、_____、____。 int k;float a;double x; scanf(“%d%f%lf”,&k,&a,&x); printf(“k=%d,a=%f,x=%f”,k,a,x); 答案: (1)100 25.81 1.89234 (2)100 25.81 (3)100 int x=0177; printf(“x=%3d,x=%6d,x=$%6o,x=%6x,x=%6u”,x,x,x,x,x); 答案:x=127,x= 127,x= 177,x= 7f,x= 127 3.27 以下程序段的輸出結果是____。 int x=0177; printf(“x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%%06d”,x,x,x,x,x); 答案: 27、x=127,x=127,x=$127,x=$000127,x=%06d 3.28 以下程序段的輸出結果是____。 double a=513.789215; printf(“a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf”,a,a,a,a);答案:a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500 三、編程題和改錯題 3.16 【分析與解答】 (1)主函數名main后應有一對圓括號。(2)變量定義語句中,v的前面缺逗號。 (3)第三行的printf語句用以提示輸入,但是原樣輸出的字符串沒有用雙引號括起來;另外,從輸入的形式看,輸入的數據緊跟在提示之后,因此,printf格式串中最后不應該有換行符——\n。 (4)因為輸入項a、b、c從定義和計算結果來看都是double類型,因此,第四行scanf語句格式串中的格式說明不應當用%d而應當用%lf;且每一個變量之前應該加地址運算符&。 (5)第七行的printf語句中應當把%d都改成%lf或%f;按輸出要求在格式串中應添加相應的原樣輸出的字符;因為下一個printf的輸出從新的一行開始,因此在本輸出語句的格式串的最后應當加換行符——\n。 (6)第八行的printf語句中應當把格式串整理合并放在輸出項的前面,輸出項放在后面,%d都改成%lf或%f;中間的\n刪去。 (7)請讀者自己寫出修改后的程序,并上機調試。 3.17【分析與解答】 (1)分析:可用算術式560÷60把分鐘換算成小時和分鐘,商數就是小時數,余數就是分鐘數。 (2)確定變量的名字和定義變量的類型:在程序中把小時數放在變量h中,把分鐘數放在變量m中。這兩個變量的類型可以是整型(本題中采用整型),也可以是實型。 (3)確定所用算法:求〖SX()560〖〗60〖SX〗〗的商數,在C語言中可以用整除的算法,語句是h=560/60。求余數可用求余運算符 %:560%60,其值放入變量m中的語句是:m=560%60。(4)設計輸出格式。若輸出的形式定為:小時:分鐘,則按此形式設計輸出語句。(5)把以上內容放在主函數的一對花括號中。(6)編寫程序如下: main() { int h, m; h=560/60; m=560%60; printf(″The result: %3d : %3d\n″, h,m); } 運行結果是: The result: : 20 3.18 【分析與解答】 (1)確定變量的名字和定義變量的類型。若用a存放1500,用b存放350;用q存放商數,用r存放余數,所有變量應定義成int類型。 (2)設計輸入語句從終端輸入1500和350;在輸入語句之前,應當設計一個輸出語句,用以提示輸入。(3)可用整除求商數,結果放在變量q中??捎们笥噙\算符%求兩數之余數,結果放在變量r中。(4)設計輸出語句。輸出a、b、q、r。 (5)把以上內容放在主函數的一對花括號中。 本題的程序與3.30相似,請讀者參考上題并根據本題的解釋自己編程,并上機調試。 3.19 【分析與解答】 (1)定義4個雙精度變量a、b、c和ave,變量a、b、c分別存放讀入的3個雙精度數,ave存放它們的平均值。 (2)設計輸入語句,以及在此之前用于提示輸入的(printf)語句。(3)設計求平均值的算法,把所求得的平均值放入變量ave中。 (4)設計把變量ave中的數,從小數點后第二位數進行四舍五入的算法?,F舉例說明:若ave中的數為123.4644,為了保留此值小數點后一位,可用表達式:(int)(123.4644*10)/10.0;依次推算,為了保留此值小數點后二位,可用表達式:(int)(123.4644*100)/100.0;其他依此類推。 (5)若要求對小數點后第二位數進行四舍五入,則可對原數加0.05后再進行以上運算。如要求保留123.4644小數點后一位且對第二位數進行四舍五入,可用表達式:(int)((123.467+0.05)*10)/10.0。注意:分母一定要用實數10.0而不能用整數10,否則就變成整除了;若要求保留123.4644小數點后兩位且對第三位數進行四舍五入,可用表達式:(int)((123.467+0.005)*100)/100.0;其他依此類推。(6)設計輸出語句。輸出a、b、c和ave。(7)把以上內容放在主函數的一對花括號中。(8)編寫程序如下: main() { double a,b,c,ave; printf(″Enter a ,b ,c : ″); scanf(″%lf%lf%lf″, &a, &b, &c); ave=(a+b+c)/3; printf(″ave=%f\n″, ave); /*用以比較四舍五入前后的數據*/ ave=(int)((ave+0.05)*10)/10.0; printf(″a=%f, b=%f, c=%f, ave=%f\n″, a,b,c,ave); } 3.20 【分析與解答】 (1)關于對變量中的數進行交換的算法請參考3.7題中的解釋和《教程》中有關的例題。 (2)定義4個整型變量a、b、c和t,變量a、b、c分別存放讀入的3個整數,t用作臨時存儲單元。(3)設計輸入語句,以及在此之前用于提示輸入的(printf)語句。(4)輸出a、b、c中的值,以便于比較。(5)交換的步驟如下: ① 把c中的值賦給t。 ② 把b中的值賦給c。 ③ 把a中的值賦給b。 ④ 把t中的值賦給a。 經過以上步驟,已按要求進行了交換。(6)輸出a、b、c中的值。(7)編寫程序如下: main() { int a, b, c, t; printf(″Enter a, b, c :\n″); scanf(″%d%d%d″,&a,&b,&c); printf(″(1)a=%d,b=%d,c=%d\n″,a,b ,c); t=c;c=b;b=a;a=t; printf(″(2)a=%d,b=%d,c=%d\n″,a,b,c); } 第四章、選擇結構 一、選擇題 4.1 下列運算符中優先級最高的運算符是 A)! B)% C)-= D)&& 答案:A 4.2 下列運算符中優先級最低的運算符是 A)|| B)!= C)<= D)+ 答案:A 4.3 為表示關系x≥y≥z,應使用的C語言表達式是 A)(x>=y)&&(y>=z) B)(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z) 答案:A 4.4 設a、b和c都是int型變量,且a=3,b=4,c=5;則以下的表達式中,值為0的表達式是 A)a&&b B)a<=b C)a||b+c&&b-c |1) 答案:D 4.5 以下程序的輸出結果是 A)0 B)1 C)2 D)3 main() { int a=2,b=-1,c=2; if(a if(b<0)c=0; else c+=1; printf(“%d”,c); } D)!((a 答案:C 4.6 以下程序的輸出結果是 A)1 B)2 C)3 D)4 main(){ int w=4,x=3,y=2,z=1; printf(“%d”,(w 答案:A 4.7 若執行以下程序時從鍵盤上輸入3和4,則輸出結果是 A)14 B)16 C)18 D)20 main(){ int a,b,s; scanf(“%d%d”,&a,&b); s=a; if(a s*=s; printf(“%d”,s);} 答案:B 4.8 下面的程序片段所表示的數學函數關系是 -1(x<0)A)y= 0(x=0) 1(x>0) 1(x<0)B)y=-1(x=0) 0(x>0) 0(x<0)C)y=-1(x=0) 1(x>0) -1(x<0)D)y= 1(x=0) 0(x>0) y=-1;if(x!=0)y=1; if(x>0)y=1;else y=0;答案:A 4.9 運行以下程序后,輸出 A)**** B)&&&& C)####&&&& D)有語法錯誤不能通過編譯 main(){ int k=-3; if(k<=0)printf(“****”) else printf(“&&&&”);} 答案:D 4.10 若a和b均是正整型變量,以下正確的switch語句是 A)switch(pow(a,2)+pow(b,2)) { case 1: case 3: y=a+b;break; case 0: case 5: y=a-b; } B)switch(a*a+b*b); { case 3: case 1: y=a+b;break; case 0: y=b-a;break; } C)switch a { default: x=a+b; case 10: y=a-b;break; case 11: x=a*d;break; } D)switch(a+b) { case10 : x=a+b;break; case11 : y=a-b;break; } 答案:沒有正確答案。如果C選項改為: switch(a){ default: x=a+b; case 10: y=a-b;break; case 11: x=a*b;break;} 則答案可以選擇C 二、填空題 4.11 C語言中用____表示邏輯值“真”,用____表示邏輯值“假”。 答案:非0、0 4.12 C語言中的關系運算符按優先級別是____、____、____、____。 答案:>、<、>=、<=、==、!= 4.13 C語言中的邏輯運算符按優先級別是____、____、____。 答案:!、&&、|| 4.14 C語言中的關系運算符和邏輯運算符的優先級別是____、____、____、____、____、____、____。 答案:!、<、>、==、!=、&&、|| 4.15 C語言中邏輯運算符____的優先級高于算術運算符。 答案:! 4.16 將下列數學式改寫成C語言的關系表達式或邏輯表達式A)____B)____。 A)a=b或a B)|x|>4 答案:A)a==b||a main(){ int a=100; if(a>100)printf(“%d”,a>100); else printf(“%d”,a<=100);} 答案:1 4.18 請寫出與以下表達式等價的表達式A)____B)____。A)!(x>0) B)!0 答案:A)x<=0 B)1 4.19 當a=1,b=2,c=3時,以下if語句執行后,a、b、c中的值分別為____、____、____。 if(a>c) b=a;a=c;c=b; 答案:3、2、2 4.20 若變量已正確定義,以下語句段的輸出結果是____。 x=0;y=2;z=3; switch(x) { case 0: switch(y==2) { case 1: printf(“*”);break; case 2: printf(“%”);break; } case 1: switch(z) { case 1: printf(“$”); case 2: printf(“*”);break; default : printf(“#”); } } 答案:*# 三、編程題 4.21 【分析與解答】 相關內容請參考《教程》4.2節和4.4節。(1)改寫如下: switch(a/10) { default : m=5;break; case 0 : case 1 : case 2 : m=1;break; case 3 : m=2;break; case 4 : m=3;break; case 5 : m=4;break; }; (2)本題中對a的判斷條件有一定的規律可尋;關鍵是,在switch語句后的表達式中利用了a/10,從而簡化了case標號。 4.22 【分析與解答】 編寫本題的程序,首先要解決如何計算學生當前的年齡(設存放實足年齡的變量是age)。(1)如果當前的月份大于生日的月份,則學生的實足年齡age=y1-y0。 (2)如果當前的月份等于生日的月份,就要看日數,當前的日數大于或等于生日的日數,則學生的實足年齡age=y1-y0。 (3)如果不滿足以上的條件,就可斷定當前的日期沒有超過生日日期,就是說學生的年齡應當是age=y1-y0-1。 以上3條,用C語言可以描述如下: if((m1>m0)[JB>1|][JB>1|](m1==m0&&d1>=d0))age=y1-y0; else age=y1-y0-1; 讀者可以參考以上語句寫出程序,也可以根據分析寫出與此形式不同的語句和程序。 4.23【分析與解答】 (1)若輸入的整數a是奇數,輸出 dd number,是偶數輸出:even number。 (2)若一個a是偶數,它就能被2除盡,即a%2==0,輸出even number;若是奇數,它就不能被2除盡,即a%2!〖KG-*2〗=0,輸出odd number。 讀者可以參考以上給出的算法,寫出相應的C語句,并編寫出完整的程序。 4.24 【分析與解答】 本題的主要算法是從3個數中找出最大的那個數。假定始終把最大的數放在變量max中。(1)假定a中的數最大,把a賦給max。 (2)用b去和max比較,若b大于max,則把b賦給max;若不大于max,則什么也不做。(3)用c去和max比較,若c大于max,則把c賦給max;若不大于max,則什么也不做。(4)經過以上操作,max中已放入了a、b、c三個數中的最大數,輸出max即可。 讀者可以參考以上給出的算法,寫出相應的C語句,并編寫出完整的程序。 4.25 【分析與解答】 (1)本題已給出了非常明確的條件,只要寫出正確的條件判斷語句就可基本完成程序的編寫。 (2)由給出的函數可知,只有x的值在規定的范圍內時,才求出y的值,因此程序應當對輸入的x進行判斷,若超過范圍就不求y的值。 (3)現以使用if[CD#*2]else語句為例寫出程序供參考。 main() { int x,y;printf(″Enter x : ″);scanf(″%d″, &x); if(x>-5&&x<10) { if(x==0)y=x-1; else if(x<10 && x>0)y=x+1; else if(x<0 && x>-5)y=x; printf(″x=%d y=%d\n″, x,y); } printf(″***END***\n\n″); } 第五章、循環結構 一、選擇題 5.1 以下程序段的輸出結果是 A)9 B)1 C)11 int k,j,s; for(k=2;k<6;k++,k++) { s=1; for(j=k;j<6;j++)s+=j; } printf(“%d”, s); 答案:D 5.2 以下程序段的輸出結果是 A)12 B)15 C)20 int i,j,m=0; for(i=1;i<=15;i+=4) for(j=3;j<=19;j+=4)m++; printf(“%d”, m); 答案:C 5.3 以下程序段的輸出結果是 A)10 B)9 C)10 D)9 D)10 D)25 int n=10; while(n>7) { n--; printf(“%d”, n); } 答案:B 5.4 以下程序段的輸出結果是 A)1 B)3 0 C)1-2 int x=3; do { printf(“%3d”,x-=2);} while(!(--x)); 答案:C 5.5 以下程序段的輸出結果是 A)15 B)14 C)不確定 main() { int i,sum; for(i=1;i<6;i++)sum+=sum; printf(“%d”,sum); } 答案:C 5.6 以下程序段的輸出結果是 A)741 B)852 C)963 main() { int y=10; for(;y>0;y--) if(y%3==0) { printf(“%d”,--y);continue; } 答案:B 5.7 若x是int型變量,以下程序段的輸出結果是 A)**3 ##4 **5 B)##3 **4 ##5 C)##3 **4##5 D)**3##4 **5 for(x=3;x<6;x++) printf((x%2)?(“**%d”):(##%d“),x); D)死循環 D)0 D)875421 } 答案:D 5.8 以下程序的輸出結果是 A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$ main(){ int i; for(i=1;i<=5;i++) { if(i%2)printf(”*“); else contionue; printf(”#“); } printf(”$“);} 答案:A 5.9 以下敘述正確的是 A)do_while語句構成的循環不能用其它語句構成的循環來代替。 B)do_while語句構成的循環只能用break語句退出。 C)用do_while語句構成循環時,只有在while后的表達式為非零時結束循環。 D)用do_while語句構成循環時,只有在while后的表達式為零時結束循環。 答案:D 5.10 以下程序的輸出結果是 A)39 81 B)42 84 C)26 68 D)28 70 main(){ int x,i; for(i=1;i<=100;i++) { x=i; if(++x%2==0) if(++x%3==0) if(++x%7==0) printf(”%d “, x); } printf(”“);} 答案:D 二、填空題 5.11 當執行以下程序段后,i的值是____、j的值是____、k的值是____。 int a,b,c,d,i,j,k;a=10;b=c=d=5;i=j=k=0;for(;a>b;++b)i++;while(a>++c)j++;do k++;while(a>d++); 答案:5、4、6 5.12 以下程序段的輸出結果是____。 int k,n,m;n=10;m=1;k=1;while(k<=n)m*=2;printf(”%d“,m); 答案:死循環 5.13 以下程序的輸出結果是____。 main(){ int x=2; while(x--); printf(”%d“,x);} 答案:-1 5.14 以下程序段的輸出結果是____。 int i=0,sum=1; do { sum+=i++;}while(i<5); printf(”%d“,sum); 答案:11 5.15 有以下程序段: s=1.0; for(k=1;k<=n;k++)s=s+1.0/(k*(k+1)); printf(”%f“,s);請填空,使下面的程序段的功能完全與之等同。 s=0.0; ____; k=0; do { s=s+d; ____; d=1.0/(k*(k+1)); } while(____); printf(”%f“,s); 答案:d=1.0、k++、k<=n 5.16 以下程序的功能是:從鍵盤上輸入若干個學生的成績,統計并輸出最高成績和最低成績,當輸入負數時結束輸入。請填空。 main() { float x,amax,amin; scanf(”%f“,&x); amax=x;amin=x; while(____) { if(x>amax) amax=x; if(____) amin=x; scanf(”%f“,&x); } printf(”amax=%famin=%f“,amax,amin); } 答案:x>=0、x 三、編程題 5.17【分析與解答】 (1)本題的基本算法是求累加值。累加項的值有規律的遞增,每一項的絕對值比前一項增2,因此可以利用循環的控制變量的遞增來得到累加項的絕對值。例如: for(i=1;i<=101;i+=2)? (2)按所給的算式可以看到,累加項的符號是在交叉改變的,為此應當在循環體內設 置一個變量,使它的符號按此規律交叉改變,這可用:s=-s;來實現,s的初值為1;當s的值為1時,賦值后s中新的值為-1,當s的值為-1時,賦值后s中新的值為1。用s去乘累加項,將使累加項的符號也隨之有規律地改變。(3)若累加和放在變量sum中,累加項放在變量t中,按照以上敘述,for循環體內的語句可以設計如下: s=-s;t=s*i;sum=sum+t;(4)sum的值是51。 (5)請讀者自己對變量做出正確的定義并賦初值,設計輸出語句,完善程序。 5.18 【分析與解答】 (1)本題的基本算法是求累加值。累加項的分子部分都是1;分母的值有規律的遞增,依次為1!、2!、?、n!,即,若第i-1項的累加項為 t(i-1),則第i項的累加項是 t(i-1)*i,在程序中可用表達式:t=t/i(i從1變化到n)來表示。(2)根據以上分析,若用變量t來存放累加項,當i的值從1變化到n時,可用以下語句來實現累加: t=t/i;e+=t; (3)為了實現累加過程,以上語句應當放在循環內,循環控制變量從1變化到n。 (4)若用for循環,按題目要求已指定n的值是50。若用while循環,并沒有指定n的值,但已指定了循環結束的條件,當t的值小于10-4結束循環。(5)現例示用while循環來求e值的部分程序: i=1;e=1.0;t=1.0; while(t>=1e-4) { t=t/i; e+=t; i++; } (6)請讀者自己對變量做出正確的定義,設計輸出語句,完善程序;也可以參考此程序段,按照自己的思路獨立地完成程序。(7)e的值應當是:2.71828。 (8)根據以上分析,讀者已不難用for循環來實現求e值的計算。 (9)注意:在完成此程序時,不要對分母中的階乘值進行單獨計算,因為17!的值已超過long類型的最大值,更無法求到50!。 5.19【分析與解答】 (1)從1880年至2000年的年數可用一個for循環來取得。 (2)對每一年,用以上指定的條件來進行判斷,若滿足條件即為閏年,進行輸出。 (3)按輸出的要求,需要設一個變量用于統計一行中輸出的個數,若在一行上已連續輸出了5個年數,就需輸出一個換行符,使下一個輸出項在新的一行上開始;若用變量n來做此統計,則當表達式n%5==0時就應輸出一個換行符,同時使n重新置0值。 (4)若變量y代表年數,if語句的邏輯表達式可以寫成如下: (y%4==0 && y%100!=0[JB>1|][JB>1|]y%400==0)(5)以下程序段供參考: for(y=1880;y<=2000;y++) if(y%4==0 && y%100![KG-*2]=0[JB>1|][JB>1|]y%400==0) { printf(″%d ″,y); n++; if(n%5==0) { printf(″\n″);n=0;} } (6)請讀者自己對變量做出正確的定義并賦初值,完善程序;也可以參考此程序段,按照自己的思路獨立地完成程序。從1880年至2000年有30個閏年。 5.20 【分析與解答】 (1)不難理解利用以下的for循環可以在一行上連續輸出n個*號: for(i=1;i<=n;i++)printf(″*″); printf(″\n″); 若n的值是6,則連續輸出6個*號。 (2)以上圖形是在各行上輸出數目不等的*號,只是*號的數目依次有規律地變化。在上半部分各行依次是1、3、5、7個,因此可以用以下的程序段來實現這樣的輸出: for(k=1;k<=7;k++,k++) { for(i=1;i<=k;i++)printf(″*″); printf(″\n″); } 在下半部依次是5、3、1個;因此可以用以下的程序段來實現這樣的輸出: for(k=5;k>=1;k--,k--) { for(i=1;i<=k;i++)printf(″*″); printf(″\n″); } 以上程序段從第一列起輸出的結果如下: * *** ***** ******* ***** *** * 現在我們已完成了在每行輸出指定數目的*號。 (3)輸出結果與題目要求不同,它們的區別是:按題目每一行之前有不同的空格,而這里則是所有的行都在第一列上開始輸出*號;所以接著就應當解決這一問題。(4)分析題目要求,每行第一個*號位置的縮進是有規律的,假定中間這一行第一個*號位置是在第一列,則可看出,第一至第三行的縮進分別是3、2、1個空格;而圖形下半部的縮進數則剛好相反。這可在以上循環中添加輸出連續空格的for循環來實現,對于上半部程序如下: b=3; for(k=1;k<=7;k++,k++) { for(j=1;j<=b;j++)printf(″ ″);b--; for(i=1;i<=k;i++)printf(″*″); printf(″\n″); } (5)請讀者在理解以上給出的示例的基礎上,自己添加下半部空格的輸出。 第六章、字符型數據 一、選擇題 6.1 C語言中的簡單數據類型有 A)整型、實型、邏輯型 B)整型、實型、字符型 C)整型、字符型、邏輯型 D)整型、實型、邏輯型、字符型 答案:B 6.2 C語言中,字符(char)型數據在微機內存中的存儲形式是 A)反碼 B)補碼 C)EBCDIC碼 D)ASCII碼 答案:D 6.3 設有語句char a=''72'';,則變量a A)包含1個字符 B)包含2個字符 C)包含3個字符 D)說明不合法 答案:A 6.4 C語言中不合法的字符常量是 A)''
主站蜘蛛池模板:
亚洲欭美日韩颜射在线|
成年午夜免费韩国做受视频|
精品日产卡一卡二卡麻豆|
熟妇人妻系列av无码一区二区|
亚洲熟妇丰满xxxxx国语|
国产精品久久无码一区二区三区网|
国产精品偷伦视频免费还看旳|
久久香港三级台湾三级播放|
无码中文字幕乱在线观看|
国产白嫩漂亮美女在线观看|
欧美成人看片一区二区|
国产亚洲av片在线观看18女人|
在线精品一区二区三区|
内射人妻视频国内|
日日碰狠狠躁久久躁|
性大毛片视频|
97狠狠狠狼鲁亚洲综合网|
伊人久久大香线蕉无码综合|
人人人妻人人人妻人人人|
无遮挡又黄又刺激的视频|
少妇厨房愉情理伦bd在线观看|
久久久综合香蕉尹人综合网|
无码人妻精品一区二区|
国产精品亚洲专区无码蜜芽|
夜夜爽77777妓女免费看|
少妇人妻中文字幕hd|
韩国主播av福利一区二区|
玩弄少妇的肉体k8经典|
亚洲av片劲爆在线观看|
午夜嘿嘿嘿在线观看|
精品无码国产自产拍在线观看|
新婚人妻不戴套国产精品|
黑人巨大精品欧美一区二区免费|
无码熟妇人妻av在线电影|
国产玖玖玖九九精品视频靠爱|
99久久99久久久精品齐齐|
色五月丁香五月综合五月亚洲|
国产亚洲色婷婷久久99精品|
国产一本一道久久香蕉|
国产情侣草莓视频在线|
一区一区三区产品乱码亚洲|
第二篇:《全國計算機等級考試二級教程C語言程序設計》