- 相關推薦
2024年計算機二級考試C語言模擬真題
無論是在學校還是在社會中,我們都離不開試題,試題是參考者回顧所學知識和技能的重要參考資料。那么問題來了,一份好的試題是什么樣的呢?以下是小編為大家收集的2024年計算機二級考試C語言模擬真題,僅供參考,歡迎大家閱讀。
計算機二級考試C語言模擬真題 1
一、程序填空題
請補充fun()函數,該函數的功能是:把字符的ASCII 碼為奇數的字符從字符串str中刪除,結果仍然保存在字符串str中,字符串str從鍵盤輸入,其長度作為參數傳人fur ()函數。
例如,輸入“abcdef”,則輸出“bdf”。
注意:部分源程序給出如下。
請勿改動main()函數和其他函數中的任何內容,僅在main()函數的橫線上填入所編寫的若干表達式或語句。
試題程序:
#include
#define N 100
void【1】
{
int 1,J;
【2】 ;
for(i=0;i if(s[i]%2==0)
s[j++]=s[i];
【3】 ;
}
void main()
{
int i=0,len=0;
char str[N];
printf("please input a string:\n");
gets(str);
while(str[i]!=’\0’)
{
len++;
i++;
}
fun(str,len);
printf("The result strin9:\n");
puts(str);
}
二、程序改錯題
下列給定程序中,函數fun()的功能是:計算函數F(x,y,z)=(x+v)/(x-y)+(z+y)/(z-y)的值。其中x和Y 的值不相等,2和Y的值不相等。例如,當X的'值為1,y的值為2,z的值為3,函數值為2.00。
注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。
試題程序:
#include
#include
//****found****
#define F(m,n)(m/n)
float fun(float a,float b,float c)
{
float s;
s=F((a+b),(a-b))+F((c+b),(c-b));
//****found****
Return(s);
}
void main()
{
float x,y,z,sum;
printf("input x y z:");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n”,x,y,z);
if(x==Y||y==z)
{
printf("Data error!\n");
exit(0);
}
sum=fun(x,y,z)
printf("the result is:%5.2f\n",sum);
}
三、程序設計題
編寫一個函數,輸入n個字符串,串與串之間以Enter 鍵分隔,找出最短字符串中第一個字符串,傳回該串地址(用一個新串“*”作為結束輸入的標志)。
注意:部分源程序給出如下。
請勿改動main()函數和其他函數中的任何內容,僅在函數fun()的花括號中填人所編寫的若干語句。
試題程序:
#include
#include
#include
char*fun(*s)[100],int num)
{
}
void main()
{
char strFl0][100],*min;
int n,i=0;
FILE*out:printf("input strings with’*’
as end:");
gets(str[i]);
puts(str[i]);
while(!strcmp(str[i],"*")==0)
{
i++:
gets(str[i]):
puts(str[i]);
}
n=1;
min=fun(str,n);
printf("\nmin=%s\n",min);
out=fopen("outfile.dat","w");
strcpy(str[O],"fust,");
strcpy(str[1],"a");
strcpy(str[2],"test");
strcpy(str[3],"some");
strcpy(str[4],"tool?!?");
fprintf(out,"%s",fun(str,5));
fclose(out);
}
【試題答案與解析 】
一、程序填空題
【1】fun(char s[],int n)【2】j=0【3】s[i]=’\0 ’
【解析】先判斷ASCIl碼的奇偶。
第一空:根據主函數“fun(str,len);”調用語句,其中1en 為字符串str的長度,用來控制循環。根據主函數中對應的調用語句,補全fun()函數定義,第一空填“fun(char s[],int n)”。
第二空:“s[j++]=s[i];”語句中j的變量在使用前要對其取值進行初始化,因為數組下標是由0開始,初始化值為0,所以第二空填“j=0”。
第三空:新生成的字符串要加尾符標志,所以第三空填“s[j]=’\0’”。
二、程序改錯題
(1)錯誤:#defineF(m,n)(m/n)
正確:#define F(m,n)(m)/(n)
(2)錯誤:Return(s);
正確:return(s)
【解析】程序中函數的功能是計算題目中給出的公式值,第一個標識:fun()函數兩次調用宏F來計算“s=F((a+b),(a- b))+F((c+b),(c-b));”。檢查宏的定義是否正確,可以用實參代入宏進行展開:并非(a十b)/(a-b),而是(a+b/a-b),因為“/”的優先級高于“+”或“-”,所以要使用括號限定計算優先順序。所以將“#define F(m,n)(m/n)”改為“#define F(m,n) (m)/(n)”。
第二個標識下返回語句的關鍵字有誤。因為C語言中區分大小寫,所以應將“Relurn(s);”改成“return(s);”。
三、程序設計題
int i;
char*min;
rain=s[o];//min初始化
for(i=0;i if(strlen(rain)>strlen(s[i]))//rain指向的字符串與其他的字符串長度進行比較
min=s[i];
return min;//返回最小值的字符串
【解析】首先指定第一個字符串為長度最小的字符串,然后在循環過程中將其與其他的所有串的長度進行比較,求出最小的串。設置一個指針變量min,使它的初值為第一個字符串,再使其他的所有串的長度與min的長度進行比較,若其他字符串的長度小于min,則將其他字符串的首地址賦值給min。最后使用返回語句,返回最短長度min的字符串的地址。
計算機二級考試C語言模擬真題 2
二、填空題(每空2分,共30分)
(1)某二叉樹有5個度為2的結點以及3個度為1的結點,則該二叉樹中共有【1】 個結點。
(2)程序流程圖中的菱形框表示的是 【2】 。
(3)軟件開發過程主要分為需求分析、設計、編碼與測試四個階段,其中 【3】 階段產生“軟件需求規格說明書。
(4)在數據庫技術中,實體集之間的'聯系可以是一對一或一對多或多對多的,那么“學生”和“可選課程”的聯系為 【4】 。
(5)人員基本信息一般包括:身份證號,姓名,性別,年齡等。其中可以作為主關鍵字的是 【5】 。
(6)若有定義語句:int a=5;,則表達式:a++的值是 【6】 。
(7)若有語句double x=17;int y;,當執行y=(int)(x/5)%2;之后y的值為 【7】 。
(8)以下程序運行后的輸出結果是 【8】 。
#include
main()
{ int x=20;
printf(“%d”,0
printf(“%d ”,0
(9)以下程序運行后的輸出結果是 【9】 。
#include
main()
{ int a=1,b=7;
do {
b=b/2;a+=b;
} while (b>1);
printf(“%d ”,a);}
(10)有以下程序
#include
main()
{ int f,f1,f2,i;
f1=0;f2=1;
printf(“%d %d”,f1,f2);
for(i=3;i<=5;i++)
{ f=f1+f2; printf(“%d”,f);
f1=f2; f2=f;
}
printf(“ ”);
}
程序運行后的輸出結果是 【10】 。
(11)有以下程序
#include
int a=5;
void fun(int b)
{ int a=10;
a+=b;printf(“%d”,a);
}
main()
{ int c=20;
fun(c);a+=c;printf(“%d ”,a);
}
程序運行后的輸出結果是 【11】 。
(12)設有定義:
struct person
{ int ID;char name[12];}p;
請將scanf(“%d”, 【12】 );語句補充完整,使其能夠為結構體變量p的成員ID正確讀入數據。
(13)有以下程序
#include
main()
{ char a[20]=”How are you?”,b[20];
scanf(“%s”,b);printf(“%s %s ”,a,b);
}
程序運行時從鍵盤輸入:How are you?<回車>
則輸出結果為 【13】 。
(14)有以下程序
#include
typedef struct
{ int num;double s}REC;
void fun1( REC x ){x.num=23;x.s=88.5;}
main()
{ REC a={16,90.0 };
fun1(a);
printf(“%d ”,a.num);
}
程序運行后的輸出結果是 【14】 。
(15)有以下程序
#include
fun(int x)
{ if(x/2>0) run(x/2);
printf(“%d ”,x);
}
main()
{ fun(6);printf(“ ”); }
程序運行后的輸出結果是 【15】 。
計算機二級考試C語言模擬真題 3
一、選擇題((1)—(10)、(21)—(40)每題2分,(11)—(20)每題1分,共70分)
(1)下列數據結構中,屬于非線性結構的是
A.循環隊列
B.帶鏈隊列
C.二叉樹
D.帶鏈棧
(2)下列數據結果中,能夠按照“先進后出”原則存取數據的是
A.循環隊列
B.棧
C.隊列
D.二叉樹
(3)對于循環隊列,下列敘述中正確的是
A.隊頭指針是固定不變的
B.隊頭指針一定大于隊尾指針
C.隊頭指針一定小于隊尾指針
D.隊頭指針可以大于隊尾指針,也可以小于隊尾指針
(4)算法的空間復雜度是指
A.算法在執行過程中所需要的計算機存儲空間
B.算法所處理的數據量
C.算法程序中的語句或指令條數
D.算法在執行過程中所需要的臨時工作單元數
(5)軟件設計中劃分模塊的一個準則是
A.低內聚低耦合
B.高內聚低耦合
C.低內聚高耦合
D. 高內聚高耦合
(6)下列選項中不屬于結構化程序設計原則的是
A.可封裝。
B. 自頂向下
C.模塊化
D. 逐步求精
(7)軟件詳細設計產生的圖如下:
該圖是
A.N-S圖
B.PAD圖
C.程序流程圖
D. E-R圖
(8)數據庫管理系統是
A.操作系統的一部分
B.在操作系統支持下的系統軟件
C.一種編譯系統
D. 一種操作系統
(9)在E-R圖中,用來表示實體聯系的圖形是
A.橢圓圖
B.矩形
C.菱形
D. 三角形
(10)有三個關系R,S和T如下:
其中關系T由關系R和S通過某種操作得到,該操作為
A.選擇
B.投影
C.交
D.并
(11)以下敘述中正確的是
A.程序設計的任務就是編寫程序代碼并上機調試
B.程序設計的任務就是確定所用數據結構
C.程序設計的任務就是確定所用算法
D.以上三種說法都不完整
(12)以下選項中,能用作用戶標識符的'是
A.void
B.8_8
C._0_
D.unsigned
(13)閱讀以下程序
#include
main()
{ int case; float printF;
printf(“請輸入2個數:”);
scanf(“%d %f”,&case,&pjrintF);
printf(“%d %f ”,case,printF);
}
該程序編譯時產生錯誤,其出錯原因是
A.定義語句出錯,case是關鍵字,不能用作用戶自定義標識符
B.定義語句出錯,printF不能用作用戶自定義標識符
C.定義語句無錯,scanf不能作為輸入函數使用
D.定義語句無錯,printf不能輸出case的值
(14)表達式:(int)((double)9/2)-(9)%2的值是
A.0
B.3
C.4
D.5
(15)若有定義語句:int x=10;,則表達式x-=x+x的值為
A.-20
B.-10
C.0
D.10
(16)有以下程序
#include
main()
{ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d ”,a=2*b);
}
程序運行后的輸出結果是
A.0,0
B.1,0
C.3,2
D.1,2
17)設有定義:int a=1,b=2,c=3;,以下語句中執行效果與其它三個不同的是
A.if(a>B. c=a,a=b,b=c;
B.if(a>B. {c=a,a=b,b=c;}
C.if(a>B. c=a;a=b;b=c;
D.if(a>B. {c=a;a=b;b=c;}
(18)有以下程序
#include
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d ”,C.;
}
程序運行后的輸出結果是
A.3
B.5
C.7
D.9
(19)以下程序段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是
A.if((a>b)&&(b>C.) k=1;
else k=0;
B.if((a>b)||(b>C. k=1;
else k=0;
C.if(a<=B. k=0;
else if(b<=C.k=1;
D.if(a>B. k=1;
else if(b>C.k=1;
else k=0;
20)有以下程序
#include
main()
{ char s[]={“012xy”};int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
printf(“%d ”,n);
}
程序運行后的輸出結果是
A.0
B.2
C.3
D.5
(21)有以下程序
#include
main()
{ int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d ”,k,n);
}
程序運行后的輸出結果是
A.0 2
B.1 3
C.5 7
D.1 2
(22)有以下定義語句,編譯時會出現編譯錯誤的是
A.char a=’a’;
B.char a=’ ’;
C.char a=’aa’;
D.char a=’x2d’;
(23)有以下程序
#include
main()
{ char c1,c2;
c1=’A’+’8’-‘4’;
c2=’A’+’8’-‘5’;
printf(“%c,%d ”,c1,c2);
}
已知字母A的ASCII碼為65,程序運行后的輸出結果是
A.E,68
B.D,69
C.E,D
D.輸出無定值
(24)有以下程序
#include
void fun(int p)
{ int d=2;
p=d++; printf(“%d”,p);}
main()
{ int a=1;
fun(a); printf(“%d ”,a);}
程序運行后的輸出結果是
A.32
B.12
C.21
D.22
(25)以下函數findmax擬實現在數組中查找最大值并作為函數值返回,但程序中有錯導致不能實現預定功能
#define MIN -2147483647
int findmax (int x[],int n)
{ int i,max;
for(i=0;i
{ max=MIN;
if(max
return max;
}
造成錯誤的原因是
A.定義語句int i,max;中max未賦初值
B.賦值語句max=MIN;中,不應給max賦MIN值
C.語句if(max
D.賦值語句max=MIN;放錯了位置
(26)有以下程序
#include
main()
{ int m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d ”,m,n,*p,*q);
}
程序運行后的輸出結果是
A.1,2,1,2
B.1,2,2,1
C.2,1,2,1
D.2,1,1,2
(27)若有定義語句:int a[4][10],*p,*q[4];且0≤i<4,則錯誤的賦值是
A.p=a
B.q[i]=a[i]
C.p=a[i]
D.p=&a[2][1]
(28)有以下程序
#include
#include
main()
{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s ”,p);
}
程序運行后的輸出結果是
A.9,One*World
B.9,One*Dream
C.10,One*Dream
D.10,One*World
(29)有以下程序
#include
main()
{ int a[ ]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0:switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;
}break;
case 1:a[i[=0;
}
for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“ ”);
}
A.3 3 4 4
B.2 0 5 0
C.3 0 4 0
D.0 3 0 4
(30)有以下程序
#include
#include
main()
{ char a[10]=”abcd”;
printf(“%d,%d ”,strlen(a),sizeof(a));
}
程序運行后的輸出結果是
A.7,4
B.4,10
C.8,8
D.10,10
(31)下面是有關C語言字符數組的描述,其中錯誤的是
A.不可以用賦值語句給字符數組名賦字符串
B.可以用輸入語句把字符串整體輸入給字符數組
C.字符數組中的內容不一定是字符串
D.字符數組只能存放字符串
(32)下列函數的功能是
fun(char * a,char * b)
{ while((*b=*a)!=’’) {a++,b++;} }
A.將a所指字符串賦給b所指空間
B.使指針b指向a所指字符串
C.將a所指字符串和b所指字符串進行比較
D.檢查a和b所指字符串中是否有’’
(33)設有以下函數
void fun(int n,char * s) {……}
則下面對函數指針的定義和賦值均是正確的是
A.void (*pf)(); pf=fun;
B.viod *pf(); pf=fun;
C.void *pf(); *pf=fun;
D.void (*pf)(int,char);pf=&fun;
(34)有以下程序
#include
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf(“%d ”,s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序運行以后的輸出結果是
A.7
B.8
C.9
D.10
(35)有以下程序
#include
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d ’,s,t);
}
程序運行后的輸出結果是
A.10,64
B.10,10
C.64,10
D.64,64
(36)下面結構體的定義語句中,錯誤的是
A.struct ord {int x;int y;int z;}; struct ord a;
B.struct ord {int x;int y;int z;} struct ord a;
C.struct ord {int x;int y;int z;} a;
D.struct {int x;int y;int z;} a;
(37)設有定義:char *c;,以下選項中能夠使字符型指針c正確指向一個字符串的是
A.char str[ ]=”string”;c=str;
B.scanf(“%s”,C.;
C.c=get);
D.*c=”string”;
(38)有以下程序
#include
#include
struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main()
{ struct A a={1001,”ZhangDa”,1098.0};
a=f(a);jprintf(“%d,%s,%6.1f ”,a.a,a.b,a.C.;
}
struct A f(struct A t)
( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )
程序運行后的輸出結果是
A.1001,ZhangDa,1098.0
B.1001,ZhangDa,1202.0
C.1001,ChangRong,1098.0
D.1001,ChangRong,1202.0
(39)若有以下程序段
int r=8;
printf(“%d ”,r>>1);
輸出結果是
A.16
B.8
C.4
D.2
(40)下列關于C語言文件的敘述中正確的是
A.文件由一系列數據依次排列組成,只能構成二進制文件
B.文件由結構序列組成,可以構成二進制文件或文本文件
C.文件由數據序列組成,可以構成二進制文件或文本文件
D.文件由字符序列組成,其類型只能是文本文件
【計算機二級考試C語言模擬真題】相關文章:
計算機等級考試二級C語言真題12-02
計算機二級C語言筆試真題精選04-02
計算機二級C語言真題填空題03-04
計算機二級C語言新增無紙化真題12-06
計算機二級C語言歷年真題及答案05-29
下半年計算機二級C語言考試真題06-29
計算機二級考試C語言模擬練習題03-19
全國計算機二級考試C++真題09-20