2015上海計(jì)算機(jī)等級考試二級C(B卷).doc
2015二級C( B卷)一、單項(xiàng)選擇題(答案在最后)二、填空題(答案在最后)程序功能:輸入一個正整數(shù),將其各位上為偶數(shù)的數(shù)字去除,剩余的數(shù)按原來從高位到低位的順序組成一個新的數(shù),并將其輸出到文件out1.txt中。例如,輸入:134456779,輸出到文件:135779。代碼:#include <stdio.h>int main(void) long n; int k,i=1; int _(1)_; FILE *fp; fp=fopen("out1.txt","w"); scanf("%ld",&n); while ( _(2)_ ) k = _(3)_; n = n/10; if (k%2 = 1) z = z+k*i; i = 10*i; fprintf(fp,"%dn",z); _(4)_; /* 關(guān)閉文件 */ return 0;程序功能:從鍵盤輸入一個字符串和一個字符,統(tǒng)計(jì)字符串中該字符出現(xiàn)的次數(shù),并輸出結(jié)果。例如,輸入字符串:aBEddfghDdd,輸入字符:d,輸出結(jié)果:4。代碼:#include <stdio.h>int num(char str) char ch; int i=0,count=0; printf("輸入字符:"); scanf("%c",&ch); while( _(1)_ ) if( _(2)_ ) count+; i+; return count;int main(void) char str80; int n; printf("輸入字符串:"); gets( _(3)_ ); n = _(4)_; printf("輸出結(jié)果: %dn",n); return 0;三、操作題(一)程序調(diào)試題(3小題,第1、2小題各3處錯,第3小題4處錯,每錯誤點(diǎn)3分,共30分)1. 程序調(diào)試題1調(diào)試要求:下列程序(C:KSB_2_1.c)包含3個錯誤,請按題中的功能要求,調(diào)試并修改該程序(在所修改語句后加/*/字樣的注釋),使其運(yùn)行能得到正確的結(jié)果。將程序結(jié)果(包括B_2_1.c文件和B_2_1.EXE文件)保存到目錄C:KS中。功能說明:輸入某人某一個月的月收入(在2500元到8000元之間),計(jì)算并輸出該月份他應(yīng)繳的個人所得稅。個人所得稅采用分段計(jì)算方法計(jì)算,具體為:月收入不超過3500元(含3500元,以下同)免稅;月收入超過3500元但不超過5000元的,超過部分的稅率為3%;月收入超過5000元但不超過8000元的,超過5000元部分的稅率為10%。運(yùn)行示例:輸入:請輸入月收入: 7000輸出:個人所得稅為: 245.00說明:月收入7000元中3500元免稅,1500元的稅利為3%,2000元的稅利為10%。含錯誤源程序:#include <stdio.h>int main(void) float salary,tax; printf("請輸入月收入: "); scanf("%d", &salary); if (salary<=3500) tax=0 else if (salary<=5000) tax=(salary-3500)*0.03; else tax=1500*0.03+(salary-3500)*0.1; printf("個人所得稅為: %.2fn", tax); return 0;參考答案:#include <stdio.h>int main(void) float salary,tax; printf("請輸入月收入: "); scanf("%f", &salary); /*/ if (salary<=3500) tax=0; /*/ else if (salary<=5000) tax=(salary-3500)*0.03; else tax=1500*0.03+(salary-5000)*0.1; /*/ printf("個人所得稅為: %.2fn", tax);return 0;2. 程序調(diào)試題2調(diào)試要求:下列程序(C:KSB_2_2.c)包含3個錯誤,請按題中的功能要求,調(diào)試并修改該程序(在所修改語句后加/*/字樣的注釋),使其運(yùn)行能得到正確的結(jié)果。將程序結(jié)果(包括B_2_2.c文件和B_2_2.EXE文件)保存到目錄C:KS中。功能說明:自定義一個表示分?jǐn)?shù)的結(jié)構(gòu)體類型,在主函數(shù)中輸入兩個分?jǐn)?shù),通過調(diào)用函數(shù)計(jì)算兩個分?jǐn)?shù)的和,最后在主函數(shù)中輸出計(jì)算的結(jié)果(不化簡)。運(yùn)行示例:含錯誤源程序:#include<stdio.h>struct Frac int Mol; int Den;struct add(struct Frac a,struct Frac b) struct Frac c; c.Mol=a.Mol*b.Den+a.Den*b.Mol; c.Den=a.Den+b.Den; return c;int main(void) struct Frac n,m,t ; printf("請輸入第一個分?jǐn)?shù):"); scanf("%d/%d",&n.Mol,&n.Den); printf("請輸入第二個分?jǐn)?shù):"); scanf("%d/%d",&m.Mol,&m.Den); t= struct add(n,m); printf("%d/%d+%d/%d=%d/%dn",n.Mol,n.Den,m.Mol,m.Den,t.Mol,t.Den); return 0;參考答案:#include<stdio.h>struct Frac int Mol; int Den;struct Frac add(struct Frac a,struct Frac b) /*/ struct Frac c; c.Mol=a.Mol*b.Den+a.Den*b.Mol; c.Den=a.Den*b.Den; /*/ return c;int main(void) struct Frac n,m,t ; printf("請輸入第一個分?jǐn)?shù):"); scanf("%d/%d",&n.Mol,&n.Den); printf("請輸入第二個分?jǐn)?shù):"); scanf("%d/%d",&m.Mol,&m.Den); t= add(n,m); /*/ printf("%d/%d+%d/%d=%d/%dn",n.Mol,n.Den,m.Mol,m.Den,t.Mol,t.Den); return 0; 3. 程序調(diào)試題3調(diào)試要求:下列程序(C:KSB_2_3.c)包含4個錯誤,請按題中的功能要求,調(diào)試并修改該程序(在所修改語句后加/*/字樣的注釋),使其運(yùn)行能得到正確的結(jié)果。將程序結(jié)果(包括B_2_3.c文件和B_2_3.EXE文件)保存到目錄C:KS中。功能說明:輸入兩個由整型數(shù)構(gòu)成的集合(元素個數(shù)均為5)分別放到數(shù)組A和B中,求這兩個集合的交集(交集的元素由兩個集合中的相同元素構(gòu)成),最后輸出交集中的元素。運(yùn)行示例:含錯誤源程序:#include <stdio.h>void inter(int s1,int s2,int s3);int main(void ) int a5,b5,c5; int i,n; printf ("請輸入第一個集合內(nèi)容,5個整型數(shù)n"); for(i=0;i<5;i+) scanf("%d",&ai); printf ("請輸入第二個集合內(nèi)容,5個整型數(shù)n"); for(i=0;i<5;i+) scanf("%d",&bi); n=inter(a,b,c); printf ("A,B交集元素為:n"); for(i=0;i<5;i+) printf("%4d", ci); printf("n"); return 0;int inter(int s1,int s2,int s3) int j,i=k=0; for(i=0;i<5;i+) for(j=0;j<5;j+) if (s1i=s2j) break; if(j<5) s3k=s1i ; return k;參考答案:#include <stdio.h>int inter(int s1,int s2,int s3); /*/int main(void ) int a5,b5,c5; int i,n; printf ("請輸入第一個集合內(nèi)容,5個整型數(shù)n"); for(i=0;i<5;i+) scanf("%d",&ai); printf ("請輸入第二個集合內(nèi)容,5個整型數(shù)n"); for(i=0;i<5;i+) scanf("%d",&bi); n=inter(a,b,c); printf ("A,B交集元素為:n"); for(i=0;i<n;i+) /*/ printf("%4d", ci); printf("n"); return 0;int inter(int s1,int s2,int s3) int j,i,k=0; /*/ for(i=0;i<5;i+) for(j=0;j<5;j+) if (s1i=s2j) break; if(j<5) s3k+=s1i ; /*/ return k;(二)編程題(2小題,共35分,其中第1小題15分,第2小題20分)1編程題1編程要求:請按題中的功能要求,編寫程序并能得到正確的結(jié)果。將程序結(jié)果(包括B_4_1.c文件和B_4_1.EXE文件)保存到目錄C:KS中。程序功能:按示例格式完成以下要求。(1)輸入10個整數(shù)(存入數(shù)組a),再輸入整數(shù)x。(2)輸出數(shù)組a中大于等于x的所有元素。運(yùn)行示例:輸入:22 55 66 99 44 33 77 11 0 88 60輸出:66 99 77 88參考答案:#include <stdio.h>#define N 10int main(void) int aN,i,x; for (i=0;i<N;i+) scanf("%d",&ai); scanf("%d",&x); for (i=0;i<N;i+) if (ai>=x) printf("%d ",ai); printf("n");2編程題2編程要求:請按題中的功能要求,編寫程序并能得到正確的結(jié)果。將程序結(jié)果(包括B_4_2.c文件和B_4_2.EXE文件)保存到目錄C:KS中。程序功能:按示例格式完成以下要求(驗(yàn)證數(shù)學(xué)上考拉茲猜想:任意一個大于1正整數(shù),連續(xù)進(jìn)行特定運(yùn)算,經(jīng)有限步驟后,計(jì)算結(jié)果得到1)。(1)輸入整數(shù)n,如果n小于2,輸出"Error"并結(jié)束運(yùn)行。(2)如果整數(shù)n為偶數(shù),計(jì)算n/2,否則計(jì)算3*n+1,生成新的整數(shù)(仍存為n)。(3)如果生成的整數(shù)結(jié)果等于1,則結(jié)束運(yùn)行,否則重復(fù)步驟(2)與(3)。運(yùn)行示例1:輸入:12輸出:12 16 23 310 45 516 68 74 82 91說明:輸入12,第1次計(jì)算生成6,第2次計(jì)算生成3,第9次計(jì)算生成1。示例中1、2至9為生成的次數(shù)標(biāo)記,、與間隔空格都必須保留。運(yùn)行示例2:輸入:0輸出:Error說明:輸入為0、1或負(fù)數(shù),輸出"Error"。參考答案:#include <stdio.h>int main(void) long n; int i,j; scanf("%ld",&n); if (n<=0) printf("Errorn"); return -1; printf("%ld ",n); for (i=1;1;i+) if (n%2=0) n = n/2; else n = 3*n + 1; printf("%d%ld ",i,n); if (n=1) break; printf("n"); return 0;二級 C 程序設(shè)計(jì) B 場 參考答案一、單選題1. D2. D3. B4. B5. B6. C7. D8. A9. D10. C二、程序填空題參考答案1. 1):【z=0】2):【n!=0】【n】【n>0】【n>=1】3):【n%10】【k=n%10】【n-n/10*10】4):【fclose(fp)】2. 1):【stri!=0】【stri】【stri!=0】【i<strlen(str)】2):【stri=ch】【ch=stri】3):【str】4):【num(str)】三、改錯題四、編程題17