




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2022年山西省晉中市全國(guó)計(jì)算機(jī)等級(jí)考試C語言程序設(shè)計(jì)真題(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________
一、2.填空題(10題)1.以下程序的運(yùn)行結(jié)果是【】。
#include<stdio.h>
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:a++;break;
case1:b++;break;
}
case2:a++;b++;break;
case3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
2.在C語言中,可以利用【】,將一個(gè)表達(dá)式的值轉(zhuǎn)換成指定的類型。
3.以下程序的輸出結(jié)果是【】。
main()
{charc='z';
printf("%c",c-25);}
4.軟件測(cè)試是保證軟件質(zhì)量的重要手段,而軟件測(cè)試的主要和重要的測(cè)試方法是通過測(cè)試數(shù)據(jù)和【】的設(shè)計(jì)來實(shí)現(xiàn)。
5.閱讀下面程序,則執(zhí)行后的輸出結(jié)果是【】。
#include"stdio.h"
main()
{intx,y,z;
x=1;y=2;z=3;
if(x>y)if(x>z)printf("%d",x);
elseprintf("%d",y);
printf("%d\n",z);}
6.以下程序運(yùn)行后的輸出結(jié)果是【】。
#include<stdio.h>
main()
{ihtx=0210;printf("%x\n",x);
}
7.若由以下定義,則不移動(dòng)指針p,且通過指針p引用值為98的數(shù)組元素的表達(dá)式是【】。
intw[10]={23,54,10,33,47,98,72,80,61},*p=w;
8.在關(guān)系模型中,把數(shù)據(jù)看成一個(gè)二維表,每一個(gè)二維表稱為一個(gè)______。
9.以下程序運(yùn)行后的輸出結(jié)果是【】。
#include<stdio,h>
main()
charc1,c2;
for(el='0',c2='9';e1<c2;c1++,c2--)printf("%c%c",c1,c2);
printf("\n");
}
10.設(shè)有下列程序:
#include<stdio.h>
#include<string.h>
main()
{inti;
charsi10],ti10];
gets(t);
for(i=0;i<2;i++)
{gets(s);
if(strcmp(t,s)<0)strcpy(t,s);
}
printf("%s\n",t);
}
程序運(yùn)行后,從鍵盤上輸入(<CR>代表回車符):CDEF<CR>BADEF<CR>QTHRG<CR>,則程序的輸出結(jié)果是______。
二、單選題(10題)11.設(shè)一個(gè)廣義表中結(jié)點(diǎn)的個(gè)數(shù)為n,則求廣義表深度算法的時(shí)間復(fù)雜度為____。
A.O(1)B.O(n)C.O(n2)D.O(log2n)
12.若要說明一個(gè)類型名STP,使得定義語句STPs;等價(jià)于Char*s;,以下選項(xiàng)中正確的是()。
A.typedefChar*s;
B.typedefChar*STP;
C.typedefSTP*Char;
D.typedef*CharSTP;
13.若某表最常用的操作是在最后一個(gè)結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)或刪除最后一個(gè)結(jié)點(diǎn),則采用()存儲(chǔ)方式最節(jié)省運(yùn)算時(shí)間。
A.單鏈表B.給出表頭指針的單循環(huán)鏈表C.雙鏈表D.帶頭結(jié)點(diǎn)的雙循環(huán)鏈表
14.以下敘述中正確的是()。
A.用C語言編寫的程序只能放在一個(gè)程序文件中
B.C語言程序書寫格式嚴(yán)格,要求一行內(nèi)只能寫一個(gè)語句
C.C語言程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面
D.C語言程序書寫格式自由,一個(gè)語句可以寫在多行上
15.設(shè)n個(gè)待排序的記錄關(guān)鍵字,則在堆排序中需要()個(gè)輔助記錄單元。
A.1B.12C.60D.15
16.在面向?qū)ο蠓椒ㄖ?,一個(gè)對(duì)象請(qǐng)求另一對(duì)象為其服務(wù)的方式是通過發(fā)送()。A.調(diào)用語句B.命令C.口令D.消息
17.若已知一個(gè)棧的進(jìn)棧序列是l,2,3…n,其輸出序列是P1,P2,P3,…PN,若P1=3,則P2為()。
A.可能是2B.一定是2C.可能是1D.一定是1
18.設(shè)有序順序表中有n個(gè)數(shù)據(jù)元素,則利用二分查找法查找數(shù)據(jù)元素X的最多比較次數(shù)不超過()。A.log2+1
B.log2(n-1)
C.log2n
D.log2(n+1)
19.以下選項(xiàng)中,當(dāng)x為大于l的奇數(shù)時(shí),值為0的表達(dá)式是
A.x%2==1B.x/2C.x%2!=0D.x%2==0
20.下列敘述中正確的是A.C語言中既有邏輯類型也有集合類型
B.C語言中沒有邏輯類型但有集合類型
C.C語言中有邏輯類型但沒有集合類型
D.C語言中既沒有邏輯類型也沒有集合類型
三、程序設(shè)計(jì)題(10題)21.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,定義了NxN的二維數(shù)組,并在主函數(shù)中自動(dòng)賦值。請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是使數(shù)組上三角元素中的值乘以m。若m的值為2,a數(shù)組中的值為197238456則返回主程序后a數(shù)組中的值應(yīng)為2181426164512注意:部分源程序在文件prog1.c中。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:1#include2#include3#include4#include5#defineN56voidfun(inta[][N],intm)7{89}10main()11{12inta[N][N],m,i,j;13FILE*out;14printf("***Thearray***\n");15for(i=0;i<n;i++)16{for(j=0;j<n;i++)27{for(j=0;j38{for(j=0;j<n;j++)39fprintf(out,"%4d",a[i][j]);40fprintf(out,"\n");41}42fclose(out);43/*********found********/44}1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j<n;j++)5:for(i=0;i<=j;i++)6:a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/
22.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的記錄已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),其功能是把低于平均分的學(xué)生記錄放入b所指的數(shù)組中,低于平均分的學(xué)生人數(shù)通過形參n返回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN8typedefstruct{ charnum[10]; doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}voidmain(){ STRECs[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},{“GA01”,91},{“GA07”,72},{“GA08”,64},{“GA06”,87}}; STRECh[N]; inti,n; doubleave; ave=fun(s,h,&n); printf(“The%dstudentdatawhichislowerthan%7.3f:\n”,n,ave); for(i=0;i<n;i++)<p=""></n;i++)<> /*輸出成績(jī)低于平均分的學(xué)生記錄*/ printf(“%s%4.1f\n”,h[i].num,h[i].s); printf(“\n”);}
23.假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)proc,它的功能是:將字符串中的前導(dǎo)*號(hào)全部刪除,中間和后面的*號(hào)不刪除。 例如,若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是a*bc*def*g****。 注意:部分源程序給出如下。 請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號(hào)中填入所編寫的若干語句。 試題程序: #include<stdio.h=:{> #include<conio.h> woidproc(char*str) { } voidmaincharstr[81];printf("Enterastring:\n");gets(str);proc(str):printf("Thestringafterdeleted:\n");puts(str);}24.規(guī)定輸入的字符串中只包含字母和*號(hào)。編寫函數(shù)fun,其功能是:刪除字符串中所有的*號(hào)。編寫函數(shù)時(shí),不得使用C語言提供的字符串函數(shù)。
例如,字符串中的內(nèi)容為“****A*BC*DEF*G****”,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是“ABCDEFG”。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)maini)函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(chara)
{
voidmain
{
chars[81];
print{("Enterastring:\n");
gets(s):
fun(S);
printf("Thestringafterdeleted:\n");
puts(s);
}
25.三個(gè)整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的一個(gè)數(shù)。
26.m個(gè)人的成績(jī)存放在score數(shù)組中,請(qǐng)編寫函數(shù)proc(),它的功能是:將高于平均分的人數(shù)作為函數(shù)值返回,將高于平均分的分?jǐn)?shù)放在up所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為100,80,76,60,59,48,43,35,59時(shí),函數(shù)返回的人數(shù)應(yīng)該是4,up中的數(shù)據(jù)應(yīng)為100,80,76,95。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語句。試題程序:27.使用VC++2010打開考生文件夾析下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,編寫程序,實(shí)現(xiàn)矩陣(3行、3列)的轉(zhuǎn)置(即行列互換)。例如,若輸入下面的矩陣:100200300400500600700800900則程序輸出:100400700200500800300600900注意:部分源程序在文件prog1.c中。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:11#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4voidfun(intarray[3][3])5{67}8voidmain()9{10FILE*wf;11inti,j;12intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};13system("CLS");14for(i=0;i<3;i++)15{for(j=0;j<3;j++)16printf("%7d",array[i][j]);17printf("\n");18}19fun(array);20printf("Convertedarray:\n");21for(i=0;i<3;i++)22{for(j=0;j<3;j++)23printf("%7d",array[i][j]);24printf("\n");25}26/*********found*********/27wf=fopen("out.datn,"w");28for(i=0;i<3;i++)29{for(j=0;j<3;j++)30fprintf(wf,"%7dn,array[i][j]);31fprintf(wf,"\n");32}33fclose(wf);34/*********found********/35}
28.編寫一個(gè)函數(shù),該函數(shù)可以統(tǒng)計(jì)一個(gè)長(zhǎng)度為2的字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為abcdefabcdeabceabcdef,子字符串為cd,則應(yīng)當(dāng)輸出3。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號(hào)中填入所編寫的若干語句。試題程序:
29.使用VC++2010打開考生文件夾夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是刪除一維數(shù)組中所有相同的元素,使之只剩一個(gè)。數(shù)組中的元素已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中元素的個(gè)數(shù)。例如,若一維數(shù)組中的元素是2223445666677899101010刪除后,數(shù)組中的元素應(yīng)該是2345678910注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(inta[],intn){}voidmain(){ inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20; printf(“Theoriginaldata:\n”); for(i=0;i<n;i++)<p=""></n;i++)<> printf(n%3d”,a[i]); n=fun(a,n); printf(“\n\nThedataafterdeleted:\n”); for(i=0;i<n;i++)<p=""></n;i++)<> printf(“%3d”,a[i]); printf(“\n\n”);}
30.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,編寫函數(shù)fun(),其功能是將a、b兩個(gè)兩位正整數(shù)合并成一個(gè)新的整數(shù)放在c中。合并的方式是將a中的十位數(shù)和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位數(shù)和個(gè)位數(shù)依次放在變量c的千位和十位上。例如,當(dāng)a=45,b=12,調(diào)用該函數(shù)后c=1425。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){ inta,b; longc; printf(“Inputa,b:”); scanf(“%d%d”,&a,&b); fun(a,b,&c); printf(“Theresultis:%ld\n”,c);}
四、2.程序修改題(10題)31.下列給定程序中函數(shù)fun()的功能是:求出字符串中最后一次出現(xiàn)的子字符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則函數(shù)值為NULL。例如,當(dāng)字符串中的內(nèi)容為abcdabfabcdx,t中的內(nèi)容為ab時(shí),輸出結(jié)果應(yīng)是abcdx。當(dāng)字符串中的內(nèi)容為abcdabfabcdx,t中的內(nèi)容為abd時(shí),則程序輸出未找到的信息:Notfound!
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意;不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
#include<string.h>
char*fun(char*s,char*t)
{
char*p,*r,*a;
/*************found**************/
a=Null;
while(*s)
{p=s;r=t;
while(*r)
/*************found**************/
if(r==p){r++;p++;}
elsebreak;
if(*r=='\0')a=s;
s++;
}
returna;
}
main()
{chars[100],t[100],,*p;
clrscr();
printf("\nPleaseenterstringS:");
scanf("%s",s);
printf("\nPleaseentersubstringt:");
scanf("%s",t);
p=fun(S,t);
if(p)printf("\nTheresultis:%s\n",p);
elseprintf("\nNotfound!\n");
}
32.下列給定程序中,函數(shù)fun()的功能是:從N個(gè)字符串中找出最長(zhǎng)的那個(gè)中,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<string.h>
#include<stdio.h>
#defineN5
#defineM81
/*************found**************/
fun(char(*sq)[N])
{inti;char*sp;
sp=sq[0];
for{i=0;i<N;i++)
if(strlen(sp)<strlen(sq[i]))
sp=sq[i];
/*************found**************/
returnsq;
}
main()
{charstr[N][M],*longest;inti;
printf("Enter%dlines:\n",N);
for(i=0;i<N;i++)gets(str[i]);
printf("\nThe%dstring:\n",N);
for(i=0;i<N;i++)puts(str[i]);
longest=fun(str);
printf("\nThelongeststring:\n");
puts(longest);
}
33.下列給定程序中,函數(shù)fun()的功能是:根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
例如,若輸入2,則輸出12
24
輸入4,則輸出1234
2468
36912
481216
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM10
intaiM][MI={0};
/***************found*******************/
fun(int**a,intm)
{intj,k;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
/***************found*******************/
a[j][k]=k*j;
}
main()
{inti,j,n;
clrscr();
printf("Entern\n");scanf("%d",&n);
fun(a,n);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
34.給定程序MODll.C中函數(shù)。fun的功能是:從3個(gè)紅球,5個(gè)白球,6個(gè)黑球中任意取出8個(gè)作為一組,進(jìn)行輸出。在每組中,可以沒有黑球,但必須要有紅球和白球。
組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應(yīng)該是15。程序中i的值代表紅球數(shù),j的值代表白球數(shù),k的值代表黑球數(shù)。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
35.下列給定程序中,fun()函數(shù)的功能是:根據(jù)形參m,計(jì)算下列公式的值。
t=-1+1/2+1/3+1/4+…+1/m
例如,若輸入5,則應(yīng)輸出2.283333。
請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
doublefun(intm)
{
doublet=1.0;
inti;
for(i=2;i<=m;i++)
/*************found**************/
t+=1.0/k;
/*************found**************/
returni;
}
main()
{intm;
clrscr();
printf("\nPleaseenterlintegernumber:");
scanf("%d",&m);
printf("\nTheresultis%1f\n",fun(m));
}
36.下列給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字符(包括Tab字符、回車符及換行符)。輸入字符串時(shí)用’#’結(jié)束輸入。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<string.h>
#include<stdio.h>
#include<ctype.h>
fun(char*p)
{int!i,t;charc[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i)))c[t++]=p[i];
/**********************************/
c[t]='\0';
strcpy(p,c);
}
main()
{charc,s[80];
inti=0;
printf("Inputastring:");
c=getchar();
while(c!='#')
(s[i]=c;i++;c=getchar();}
s[i]="\0";
fun(s);
puts(s);
}
37.下列給定的程序中,函數(shù)fun()的功能是:計(jì)算并輸出k以內(nèi)最大的10個(gè)能被13或17整除的自然數(shù)之和。K的值由主函數(shù)傳入,若k的值為500,則函數(shù)的值為4622。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
intfun(intk)
{intm=0,mc=0,j;
while((k>=2)&&(mc<10))
{
/*************found**************/
if((k%13=0)||(k%17=0))
{m=m+k;mc++;}
k--;
/*************found**************/
returnm;
}
main()
{clrscr();
printf("%d\n",fun(500));
}
38.給定程序MODll.C中函數(shù)fun的功能是:計(jì)算n!。
例如,給n輸入5,則輸出120.000000。
請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
39.給定程序MODll.C中fun函數(shù)的功能是:分別統(tǒng)計(jì)字符串中大寫字母和小寫字母的個(gè)數(shù)。
例如,給字符串s輸入:AAaaBBb123CCccccd,則應(yīng)輸出結(jié)果:upper=6,lower=8。
請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
40.下列給定程序中,函數(shù)fun()的功能是:用選擇法對(duì)數(shù)組中的n個(gè)元素按從小到大的順序進(jìn)行排序。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
[注意]不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdio.h>
#defineN20
voidfun(inta[],intn)
{
inti,j,t,p;
for(j=0;j<n-1;j++){
/***********found***********/
p=j
for(i=j;i<n;i++)
if(a[i]<a[p])
/***********found***********/
p=j;
t=a[P];
a[p]=a[j];
a[j]=t;
}
}
msin()
{
inta[N]=(9,6,8,3,-1),i,m=5;
printf("排序前的數(shù)據(jù):”);
for(i=0;i<m;i++)
printf("%d",a[i]);
printf("\n");
fun(a,m);
printf("排序后的數(shù)據(jù):");
for(i=0;i<m;i++)
printf("%d",a[i]);
printf("\n");
}
五、程序改錯(cuò)題(2題)41.下列給定程序中函數(shù)fun的功能是:用遞歸算法計(jì)算斐波拉契數(shù)列中第n項(xiàng)的值。從第l項(xiàng)起,斐波拉契數(shù)列為:1,1,2,3,5,8,13,21,…
例如,若給n輸入7,則該項(xiàng)的斐波拉契數(shù)值為l3。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
試題程序:
#include<stdio.h>
longfun(intg)
{
//****found****
switch(g);
{
case0:return0;
//****found****
casel:case2:return1;
}
return(fun(g-1)+fun(g-2));
}
voidmain
{
longfib;intn;
printf("Inputn:");
scanf("%d",&n);
printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n",fib);
}
42.已知一個(gè)數(shù)列,從0項(xiàng)開始的前3項(xiàng)為0、0、1,以后的各項(xiàng)都是其相鄰的前3項(xiàng)之和。下列給定的程序中,函數(shù)proc()的功能是:計(jì)算并輸出該數(shù)列前n項(xiàng)的平方根之和sum。n的值通過形參傳入。例如,當(dāng)n=11時(shí),程序的輸出結(jié)果應(yīng)為32.197745。請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
六、操作題(2題)43.下列給定程序中,函數(shù)fun()的功能是:按順序給s所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序?qū)γ?個(gè)元素求一個(gè)平均值,并將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個(gè)數(shù)不是5的倍數(shù),多余部分忽略不計(jì)。例如,s所指數(shù)組有14個(gè)元素,則只對(duì)前10個(gè)元素進(jìn)行處理,不對(duì)最后的4個(gè)元素求平均值。
請(qǐng)改正函數(shù)fun()中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#defineSIZE20
fun(double*s,double*w)
{intk,i;doublesum;
for(k=2,i=0;i<SIZE;i++)
{s[i]=k;k+=2;}
sum=0.0;
for(k=0,i=0;i<SIZE;i++)
{sum+=s[i];
/*************found**************/
if(i+1%5==0)
{w[k]=sum/5;Sum=0;k++;}
}
returnk;
}
main()
{doublea[SIZE],b[SIZE/5];
inti,k;
k=fun(a/b);
printf("Theoriginaldata:\n");
for(i=0;i<SIZE;i++)
{
if(i%5==0)printf("\n");
printf("%4.0f"/a[i]);
}
printf{"\n\nTheresult:\n");
for(i=0;i<k;i++)printf("%6.2f",b[i]);
printf("\n\n");
}
44.請(qǐng)編寫函數(shù)fun,它的功能是:計(jì)算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
例如,在主函數(shù)中從鍵盤給n輸入20后,輸出為:s=0.583333。注意:要求n的值不大于100。
部分源程序在文件PROGl.C中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
參考答案
1.a=2b=1a=2,b=1解析:本題考查了switch結(jié)構(gòu)的內(nèi)容。C語言中,程序執(zhí)行完一個(gè)case標(biāo)號(hào)的內(nèi)容后,如果沒有break語句,控制結(jié)構(gòu)會(huì)轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行,因?yàn)閏ase常量表達(dá)式只是起語句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。本題程序在執(zhí)行完內(nèi)部switch結(jié)構(gòu)后,繼續(xù)執(zhí)行了外部switch結(jié)構(gòu)的case2:分支,最后a和b的值分別為2和1。
2.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換
3.aa解析:“z”的ASCII碼值為122,經(jīng)過c-25運(yùn)算后得97,以字符形式輸出是a。
4.測(cè)試實(shí)例測(cè)試實(shí)例解析:進(jìn)行軟件測(cè)試時(shí),應(yīng)精心設(shè)計(jì)測(cè)試實(shí)例和選擇測(cè)試數(shù)據(jù),以對(duì)系統(tǒng)進(jìn)行全面測(cè)試。
5.33解析:C語言的語法規(guī)定:else子句總是與前面最近的不帶else的if相結(jié)合。因?yàn)閤不大于y,所以執(zhí)行printf('%d\\n',z);語句。
6.8888解析:程序中的0210表示八進(jìn)制數(shù),%x是以十六進(jìn)制形式輸出。本題可先將0210轉(zhuǎn)換為十進(jìn)制數(shù),再將其轉(zhuǎn)換為十六進(jìn)制數(shù)。
7.*(p+5)或p[5]*(p+5)或p[5]解析:本題的考查點(diǎn)是通過指針引用數(shù)組元素。98是數(shù)組w的第5個(gè)元素(最開始的為第0個(gè)),而通過*p=w已經(jīng)將p指向了數(shù)組w,要想不移動(dòng)指針p而引用98,可以有以下兩種方法:p[5]、*(p+5)。
8.關(guān)系關(guān)系解析:關(guān)系模型用;維表表示,則每個(gè);維表代表一種關(guān)系。
9.918273645918273645解析:程序通過for循環(huán)將字符'0'~'9'從前向后,同時(shí)從后向前依次輸出,所以輸出結(jié)果為:0918273645。
10.QTHRGQTHRG解析:strcmp(t,s)函數(shù)用來比較t和s所指字符串的大小,若t>s,則函數(shù)值大于0;若t=s,則函數(shù)值等于0;若t<s,則函數(shù)值小于0。strcpy(t,s)函數(shù)的功能是把字符數(shù)組,所指字符串的內(nèi)容復(fù)制到字符數(shù)組t所指的存儲(chǔ)空間中。
本題中,t[10]='CDEF'.第一次循環(huán),s[10]='BADEF',if語句的控制條件strcmp(t,s)<0不成立,接著執(zhí)行第二次循環(huán),s='QTHRG”,if語句的控制條件strcmp(t,s)<0成立,執(zhí)行下列的語句,將字符數(shù)組s所指字符串的內(nèi)容復(fù)制到字符數(shù)組t所指的存儲(chǔ)空間中,然后輸出字符數(shù)組t。
11.D
12.B用關(guān)鍵字typedef聲明一種新的類型的形式為typedef類型名標(biāo)識(shí)符。本題中的類型為char*。
13.D
14.D用C語言編寫的程序可以放置于多個(gè)程序文件中,所以A選項(xiàng)錯(cuò)誤。C語言程序中的一行可以有多條語句,所以B選項(xiàng)錯(cuò)誤。C語言中的注釋語句可以與原語句放在一行,也可以不放在一行,所以C選項(xiàng)錯(cuò)誤。故本題答案為D選項(xiàng)。
15.A
16.D解析:面向?qū)ο蟮氖澜缡峭ㄟ^對(duì)象與對(duì)象間彼此的相互合作來推動(dòng)的,對(duì)象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為消息。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息,它請(qǐng)求對(duì)象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流。
17.A
18.A
19.D解析:因?yàn)閤的值為大于1的奇數(shù),所以x除以2的余數(shù)等于1,因此,選項(xiàng)A)、C)中表達(dá)式的結(jié)果為真,不為0;對(duì)于選項(xiàng)B)來說,x除以2的商不會(huì)等于0;選項(xiàng)D)中表達(dá)式的結(jié)果為假,即等于0。
20.D解析:在C語言中沒有邏輯類型,邏輯類型用整型來表示,故選項(xiàng)A和選項(xiàng)C不正確,C語言中沒有集合類型,故選項(xiàng)B不正確。所以,D選項(xiàng)為所選。
21.1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j
<="">5for(i=0;i<=j;i++)6a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/7}本程序?qū)崿F(xiàn)的是:矩陣上三角元素的值乘以m。上三角元素下標(biāo)的特點(diǎn)是行下標(biāo)小于等于列下標(biāo),即“i<=j”使用循環(huán)語句遍歷數(shù)組元素,第1個(gè)循環(huán)用于控制列坐標(biāo),第2個(gè)循環(huán)用于控制行下標(biāo)。22.doublefun(STREC*a,STREC*b,int*n){ inti,j=0; doubleav=0.0; for(i=0;i<=""p=""> av=av+a[i].s; av=av/N; /*求平均分*/ for(i=0;i<=""p=""> if(a[i].s<av)<p=""></av)<> b[j++]=a[i];/*將低于平均分的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/ *n=j;/*傳回低于平均分的學(xué)生人數(shù)*/ returnav;/*返回平均分*/}本題使用循環(huán)語句和條件判斷語句來實(shí)現(xiàn)題目要求。第1個(gè)循環(huán)語句的作用是求出總分,然后求出平均分av。第2個(gè)循環(huán)語句的作用是將分?jǐn)?shù)低于平均分的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中。23.voidproc(char*str){char*p=str:while(*p==*)p++;//通過P的移動(dòng)來達(dá)到使P指向第一個(gè)不是*號(hào)的字符for(;*p!=\0;p++,str++)//把從第一個(gè)不是*號(hào)的字符放到a中*str=*P:*str=\0;//最后用\0作為字符串結(jié)束標(biāo)志}【解析】題目中要求將字符串中的前導(dǎo)*號(hào)全部刪除首先將指針p移動(dòng)到第一個(gè)不是*的字符,將指針P之后的字符放入原來的字符串中,并為新的字符串添加結(jié)束符。24.\n\tvoidfun(char*a)
\n{
\ninti,j=0;
\nfor(i=0;a[i]!=\0;i++)
\nif(a[i]!=*)
\na[j++]=a[i];//若不是要?jiǎng)h除的字符*則保留
\na[j]=\0;//最后加上字符串結(jié)束符\0
\n}
\n【解析】此題是刪除字符串中的星號(hào)。思路是通過for循環(huán)完成對(duì)字符串的遍歷,通過if判斷,找到不是“*”的字符,將其賦值到數(shù)組a中星號(hào)前的位置,“if(a[i]!=*)”“a[i++]=a[i]”,最后返回主函數(shù)將刪除*后的字符串輸出即可。\n25.\n\tmain
\n{inta,b,c;
\nprintf(“請(qǐng)輸入三個(gè)整數(shù):”);
\nscanf(“%d,%d,%d”,&a,&b,&c);
\nif(aif(belseprintf(“max=%d\\n”,b);
\nelseif(aelseprintf(“max=%d\\n”,a);}
\n
26.
【解析】要找出低于平均分?jǐn)?shù)的學(xué)生記錄,首先應(yīng)該算出所有學(xué)生的平均成績(jī),然后將每一個(gè)學(xué)生的成績(jī)與平均成績(jī)相比較,將低于平均成績(jī)的學(xué)生記錄放入數(shù)組below中,最后將低于平均分的人數(shù)返回給主函數(shù)。
27.1voidfun(intarray[3][3])2{3inti,j,t;4for(i=0;i<3;i++)/*將上三角和下三角對(duì)換,實(shí)現(xiàn)行列互換*/5for(j=i+l;j<3;j++)6{t=array[i][j];7array[i][j]=array[j][i];8array[j][i]=t;9}10}要實(shí)現(xiàn)矩陣轉(zhuǎn)置,即將上三角數(shù)組元素和下三角數(shù)組元素對(duì)換,本題通過數(shù)組元素交換方法,完成矩陣轉(zhuǎn)置操作。因?yàn)閷?duì)矩陣轉(zhuǎn)置后仍然存回其本身,所以只能循環(huán)矩陣中的一本程序選擇的是上三角)??刂粕先堑姆椒ㄊ窃趦?nèi)層循環(huán)中從i+1或i開始循環(huán)變量j。
28.
【解析】要計(jì)算出主字符串中包含子字符串的個(gè)數(shù),應(yīng)該檢查主字符串中從第一個(gè)到最后一個(gè)字符。每出現(xiàn)一個(gè)計(jì)數(shù)變量加1,最后將得到的個(gè)數(shù)返回給主函數(shù)。
29.intfun(inta[],intn){ inti,j=1; for(i=1;i<n;i++) if(a[j-1]!=a[i])/*若該元素與前一個(gè)元素不相同,則保留*/ a[j++]=a[i]; returnj;/*返回不相同元素的個(gè)數(shù)*/}該程序的流程:定義變量i和j,其中j用于控制刪除后剩下的元素在數(shù)組中的下標(biāo),i用于搜索原數(shù)組中的元素。j始終是新數(shù)組中最后一個(gè)元素的下一個(gè)元素的下標(biāo)。所以if語句中的條件是a[j-1]!=a[i],其中a[j-1]是新數(shù)組中的最后一個(gè)元素,若條件成立,則表示出現(xiàn)了不同的值,所以a[i]要保留到新數(shù)組中。注意本題中i和j的初值都要從1開始,該算法只能用于數(shù)組已排序的題目中。30.voidfun(inta,intb,long*c){/*b%10獲取b的個(gè)位數(shù),a/10獲取a的十位數(shù),a%10獲取a的個(gè)位數(shù),b/10獲取b的十位數(shù)*/ *c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;}本題主要考核如何取出變量a和b的個(gè)位數(shù)和十位數(shù),取出后如何將其表示成c中相應(yīng)的位數(shù)。由于變量a和b都是只有兩位的整數(shù),因此分別對(duì)它們除以10可得到它們的十位數(shù),分別用10對(duì)它們求余可得到它們的個(gè)位數(shù)。將得到的數(shù)對(duì)應(yīng)乘以1000、100、10、1,即可得到c的千位數(shù)、百位數(shù)、十位數(shù)、個(gè)位數(shù)。注意使用變量c時(shí)要進(jìn)行指針運(yùn)算。
31.(1)錯(cuò)誤:a=NuLL;正確:a=NULL;(2)錯(cuò)誤;if(r==p){r++;p++;}正確:if(*r==*p){r++;p++;}(1)錯(cuò)誤:a=NuLL;正確:a=NULL;\r\n(2)錯(cuò)誤;if(r==p){r++;p++;}正確:if(*r==*p){r++;p++;}解析:題目要求將最后一次出現(xiàn)的輸入字符后面的字符串做一復(fù)制處理,并在主函數(shù)中輸出從此地址開始的字符串。a=NuLL;是明顯的常識(shí)性錯(cuò)誤。題目中已經(jīng)定義了指針變量chaf*p,*r,*a;,循環(huán)條件應(yīng)該是if(*r==*p){r++;p++;},而非iRf(r==p){r++;p++;}。
32.(1)fun(char(*sq)[N]正確:char*fun(char(*sq)[M])(2)錯(cuò)誤:returnsq;正確:returnsp;(1)fun(char(*sq)[N]正確:char*fun(char(*sq)[M])\r\n(2)錯(cuò)誤:returnsq;正確:returnsp;解析:函數(shù)fun()的肜參為字符串指針數(shù)組,每個(gè)元素指向一個(gè)長(zhǎng)度為M的字符串。從主函數(shù)中的語句可以看出,字符串指針數(shù)組的每個(gè)元素指向一個(gè)字符串,要求函數(shù)fun()找出其中最長(zhǎng)的字符串??上燃僭O(shè)指針數(shù)組的第1個(gè)元素所指的字符串最長(zhǎng),之后對(duì)字符串指針數(shù)組進(jìn)行遍歷,若遇字符串長(zhǎng)度大于待定最長(zhǎng)字符期,則令該字符串為待定最長(zhǎng)字符串,如此循環(huán)直至指針數(shù)組末尾,即可得到最氏字符中的地址。
33.(1)錯(cuò)誤:fun(int**aintm)正確:voidfun(int(*a)[M]intm)(2)錯(cuò)誤:a[j][k]=k*j;正確:a[j][k]=(k+1)*(j+1);(1)錯(cuò)誤:fun(int**a,intm)正確:voidfun(int(*a)[M],intm)\r\n(2)錯(cuò)誤:a[j][k]=k*j;正確:a[j][k]=(k+1)*(j+1);解析:對(duì)于二維數(shù)組,應(yīng)該理解成為是由幾個(gè)一維數(shù)組作元素組成的一維數(shù)組,或者說,二維數(shù)組實(shí)際是一個(gè)一維數(shù)組,只不過它的每個(gè)數(shù)組元素又都是一個(gè)一維數(shù)組。我們先來看看指針數(shù)組的表示形式:
(1)p+i和a+i均表示a[i]的地址,或者講,它們均指向數(shù)組第i號(hào)元素,即指向a[i]。
(2)*(p+i)和*(a+i)都表示p+i和a+i所指對(duì)象的內(nèi)容,即為a[i]。
(3)指向數(shù)組元素的指針,也可以表示成數(shù)組的形式,也就是說,它允許指針變量帶下標(biāo),如p[i]與*(p+i)等價(jià)。因此,二維數(shù)組元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),它們都與a[i][j]等價(jià),或者還可寫成(*(a+i))[j]。了解了以上這些內(nèi)容后本題就好解決了。
34.(1)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)(1)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)解析:本題中函數(shù)的功能是從3個(gè)紅球、4個(gè)白球、5個(gè)黑球中任意取出8個(gè)作為一組,進(jìn)行輸出。在每組中,可以沒有黑球,但必須要有紅球和白球。其實(shí)就是實(shí)現(xiàn)這三種球的組合取值。
35.(1)錯(cuò)誤:t+=1.0/k;正確:t+=1.0/i;(2)錯(cuò)誤:returni;正確:returnt;(1)錯(cuò)誤:t+=1.0/k;正確:t+=1.0/i;\r\n(2)錯(cuò)誤:returni;正確:returnt;解析:該題目考查分母成等差數(shù)列遞增的一個(gè)數(shù)學(xué)公式,我們先看看循環(huán)條件for(i=2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高級(jí)管理人員競(jìng)業(yè)禁止合同
- 農(nóng)業(yè)生產(chǎn)資金投入與財(cái)務(wù)管理手冊(cè)
- 開幕式致辭與未來發(fā)展展望報(bào)告
- 員工年終工作總結(jié)報(bào)告模板集萃
- 互聯(lián)網(wǎng)廣告投放及推廣合作協(xié)議
- 農(nóng)業(yè)生產(chǎn)投入品減量增效技術(shù)指導(dǎo)手冊(cè)
- 農(nóng)業(yè)產(chǎn)業(yè)扶貧政策及項(xiàng)目申報(bào)指導(dǎo)手冊(cè)
- 智能家居技術(shù)研發(fā)推廣合作協(xié)議
- 健身房客戶服務(wù)手冊(cè)
- 健身房健身器材租賃合同
- 2.0MWp屋頂太陽能分布式光伏發(fā)電項(xiàng)目監(jiān)理大綱2
- 小學(xué)夢(mèng)想開《去遠(yuǎn)方》教學(xué)設(shè)計(jì)
- Q∕SY 06349-2019 油氣輸送管道線路工程施工技術(shù)規(guī)范
- CEO自戀及其經(jīng)濟(jì)后果研究:以格力電器為例
- 紅土鎳礦濕法冶煉技術(shù)綜述
- 六鑫伺服刀塔說明書LS系列
- 19.骨折術(shù)后內(nèi)固定取出臨床路徑
- 水利水電工程金屬結(jié)構(gòu)與機(jī)電設(shè)備安裝安全技術(shù)規(guī)程
- 腎內(nèi)科臨床診療規(guī)范(南方醫(yī)院)
- 珍愛生命 安全第一 中小學(xué)主題教育班會(huì)
- 二十八星宿(課堂PPT)
評(píng)論
0/150
提交評(píng)論