




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023年貴州省遵義市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)預(yù)測試題(含答案)學(xué)校:________班級:________姓名:________考號(hào):________
一、2.填空題(10題)1.測試的目的是暴露錯(cuò)誤,評價(jià)程序的可靠性;而______的目的是發(fā)現(xiàn)錯(cuò)誤的位置并改正錯(cuò)誤。
2.關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件,包括實(shí)體完整性、______和自定義完整性。
3.若給fun函數(shù)的形參s傳送字符串:"abc-6354abc",則函數(shù)的返回值是()。(字符串中包括空格)
longfun(charS[])
{longn;intsign;
for(;isspace(*s)||islower(*s);s++);
sign=(*s=='-')?-1:1;
if(*s=='+'||*s=='-')s++;
for(n=0;isdigit(*s);s++)
n=10*n+(*S-'0');
returnsign*n;
}
4.在面向?qū)ο蠓椒ㄖ?,信息隱蔽是通過對象的______性來實(shí)現(xiàn)的。
5.以下程序的輸出結(jié)果是【】。
#defineMAX(x,y)(x)>(y)?(x)L:(y)
main()
{inta=5,b=2,C=3,d=3,t;
t=MAX(a+b,c+D)*10;
printf("%d\n",t);
}
6.下面程序的輸出結(jié)果是【】。
charb[]="ABCD";
main()
{
charb[30];
strcpy(&b[0],"GH");
strcpy(&b[1],"GH");
strcpy(&b[2],"GH");
printf("%s\n",b);
}
7.以下程序運(yùn)行后的輸出結(jié)果是【】。
#include<stdio.h>
main()
{intp=30;
printf("%d\n",(p/3>0?p/10:p%3));
}
8.數(shù)據(jù)庫理論中,數(shù)據(jù)的獨(dú)立性一般可分為物理獨(dú)立性和______。
9.在運(yùn)算過程中,能夠使空表與非空表的運(yùn)算統(tǒng)一的結(jié)構(gòu)是【】。
10.一個(gè)項(xiàng)目具有一個(gè)項(xiàng)目主管,一個(gè)項(xiàng)目主管可管理多個(gè)項(xiàng)目,則實(shí)體“項(xiàng)目主管”與實(shí)體“項(xiàng)目”的聯(lián)系屬于______的聯(lián)系。
二、單選題(10題)11.以下程序中,while循環(huán)的循環(huán)次數(shù)是main(){inti=0;while(i<10){if(i<1)continue;if(i==5)break;i++;}}
A.1B.10C.6D.死循環(huán),不能確定次數(shù)
12.定義學(xué)生選修課程的關(guān)系模式如下:SC(S#,Sn,C#,Cn,G,Cr)(其屬性分別為學(xué)號(hào)、姓名、課程號(hào)、課程名、成績、學(xué)分)則對主屬性部分依賴的是()。
A.C#→CnB.(S#,C#)→GC.(S#,C#)→S#D.(S#,C#)→C#
13.下列定義數(shù)組的語句中正確的是______。
A.#definesize10charstr1[size],str2[size+2];
B.charstr[];
C.intnum['10'];
D.intn=5;inta[n][n+2];
14.以下敘述中不正確的是()。
A.在一個(gè)函數(shù)中,可以有多條return語句
B.函數(shù)的定義不能嵌套,但函數(shù)的調(diào)用可以嵌套
C.函數(shù)必須有返回值
D.不同的函數(shù)中可以使用相同名字的變量
15.交換兩個(gè)變量的值,不允許用臨時(shí)變量,應(yīng)該使用下列()位運(yùn)算符。
A.&.B.^C.||D.~
16.若一棵二叉樹具有10個(gè)度為2的結(jié)點(diǎn),5個(gè)度為1的結(jié)點(diǎn),則度為0的結(jié)點(diǎn)的個(gè)數(shù)是()。
A.9B.11C.15D.不能確定
17.數(shù)據(jù)的邏輯關(guān)系是指數(shù)據(jù)元素的()。
A.關(guān)聯(lián)B.結(jié)構(gòu)C.數(shù)據(jù)項(xiàng)D.存儲(chǔ)方式
18.若d為double型變量,則表達(dá)式d=1,d+5,d++的值是()。
A.1B.6.0C.2.0D.1.0
19.有以下程序(注:字符a的ASCIl碼值為97)#include<stdio.h>main(){char*s={"abc")do{printf("%d",*S%10");++S;}while(*s);}隉序運(yùn)行后的輸出結(jié)果是()。A.abcB.789C.7890D.979899
20.判斷char型變量c1是否為小寫字母的正確表達(dá)式為()。
A.'a'<=c1<='z'
B.(c1>=A)‖(c1<=z)
C.('a'=>c1‖('z'<=c1)
D.(c1>='a')&&(c1<='z')
三、程序設(shè)計(jì)題(10題)21.三個(gè)整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的一個(gè)數(shù)。
22.假定輸人的字符串中只包含字母和*號(hào)。請編寫函數(shù)proc,它的功能是:將字符串中
的前導(dǎo)*號(hào)全部刪除,中間和后面的*號(hào)不刪除。
例如,若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的內(nèi)容則
應(yīng)當(dāng)是a*bc*def*g****。
注意:部分源程序給出如下。
請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號(hào)中填入所編
寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
voidproc(char*str)
{
}
voidmain
{
charstr[81];
printf("Enterastring:kn");
gets(str);
proc(str);
printf("Thestringafterdeleted:kn");
puts(str);}
23.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請編寫函數(shù)fun(),該函數(shù)的功能是判斷字符串是否為回文,若是,則函數(shù)返回1,在主函數(shù)中輸出“YES”,否則返回0,在主函數(shù)中輸出“NO”?;匚淖址侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件prog1.c中。第3部分無紙化考武題庠請勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:1#include2#defineN803intfun(char*str)4{56}7main()8{9chars[n];10FILE*out;11char*test[]={"1234321","123421","123321","abcdCBA"};12inti;13printf("Enterastring:");14gets(s);15printf("\n\n");16puts(s);17if(fun(s))18printf("YES\n");19else20printf("NO\n");21/******************/22out=fopen("out.dat","w");23for(i=0;i<4/i++)24if(fun(test[i]))25fprintf(out,"YES\n");26else27fprintf(out,"NO\n");28fclose(out);29/******************/30}
24.請編寫fun()函數(shù),其功能是:計(jì)算并輸出3~m所有素?cái)?shù)的平方根之和。例如,若主函數(shù)從鍵盤給m輸入50后,則輸出為s=63.665791。注意:m的值要大于2但不大于l00。部分源程序給出如下。請勿改動(dòng)main()函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫的若干語句。試題程序:
25.編寫函數(shù)proc(),它的功能是求m以內(nèi)(不包括m)同時(shí)能被5與11整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。
例如,m為100時(shí),函數(shù)值應(yīng)為s=7.416198。
注意:部分源程序給出如下。
請勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語句。
試題程序:
26.規(guī)定輸入的字符串中只包含字母和*號(hào)。編寫函數(shù)fun,其功能是:刪除字符串中所有的*號(hào)。編寫函數(shù)時(shí),不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為“****A*BC*DEF*G****”,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是“ABCDEFG”。注意:部分源程序給出如下。請勿改動(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);}
27.數(shù)組point中存放著m個(gè)人的成績,請編寫函數(shù)fun().它的功能是:返回高于平均分的人數(shù),并將高于平均分的分?jǐn)?shù)放在high所指的數(shù)組中。例如,當(dāng)point數(shù)組中的數(shù)據(jù)為50,60,65,70.75,80.88,90,95時(shí),函數(shù)返回的人數(shù)應(yīng)該是5,high中的數(shù)據(jù)應(yīng)為75,80,88,90,95。請勿改動(dòng)main()函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫的若干語句。注意:部分源程序給出如下。試題程序:
28.請編寫一個(gè)函數(shù)proc,它的功能是:求出1~m(含m)能被7或11整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個(gè)數(shù)。
例如,若傳給m的值為70,則程序輸出:
7111421222833354244495556636670
注意:部分源程序給出如下。
請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號(hào)中填人所編寫的若干語句。
試題程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#defineN100
voidproc(intm,int*a,int*n)
{}
voidmain
{
intarr[N],n,k;
system("CLS");
proc(70,arr,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)//每行輸出20個(gè)數(shù)
{printf("%4d",arr[k]);
printf("\n");
}
else
printf("%4d",arr[k]);
printf("\n");
}
29.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,規(guī)定輸入的字符串中只包含字母和*號(hào)。編寫函數(shù)fun(),其功能是刪除字符串中所有的*號(hào)。編寫函數(shù)時(shí),不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為“****A*BC*DEF*G*******”,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是“ABCDEFG”。注意:部分源程序給出如下。請勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(char*a){}voidmain(){ chars[81]; printf(“Enterastring:\n”); gets(s); fun(s); printf(“Thestringafterdeleted:\n”); puts(s);}
30.請編寫一個(gè)函數(shù)voidproc(char*str),其功能是:將字符串str中所有下標(biāo)為偶數(shù)位置上的字母轉(zhuǎn)化為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入字符串:“thankyou6verymuch”,則應(yīng)輸出:“TbAnKYoU6vErYMuCh”。注意:部分源程序給出如下。請勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語句。試題程序:
四、2.程序修改題(10題)31.下列給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字符(包括Tab字符、回車符及換行符)。輸入字符串時(shí)用’#’結(jié)束輸入。
請改正程序中的錯(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);
}
32.給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。
例如,若m中的值為5,則應(yīng)輸出:1.463611。
請改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
[注意]不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdi0.h>
doublefun(intm)
{
doubley=1.0;
inti;
/*************found*************/
for(i=2;i<m;i++)
/*************found*************/
y+=1/(i*i);
return(y);
}
main()
{
intn=5;
printf("\nTheresultis%1f\n",fun(n));
}
33.下列給定程序中,函數(shù)fun()的功能是:根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
例如,若輸入2,則輸出12
24
輸入4,則輸出1234
2468
36912
481216
請改正程序中的錯(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.下列給定程序是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun()的作用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。
請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedefstructaa
{intdata;
structaa*next;
}NODE;
/*************found**************/
fun(NODE*h)
{intmax=-1;
NODE*p;
p=h->next;
while(p)
{if(p->data>max)
max=p->data;
/*************found**************/
p=h->next;
}
returnmax;
}
outresult(ints,FILE*pf)
{fprintf(pf,"\nThemaxinlink:%d\n
",s);}
NODE*creatlink(intn,intm)
{NODE*h,*p,*s,*q;
inti,x;
h=p=(NODE*)malloc(sizeof(NODE));
h->data=9999;
for(i=1;i<=n;i++)
{s=(NODE*)malloc(sizeof(NODE));
s->data=rand()%m;s->next=p->next;
p->next=s;p=p->next;
}
p->next=NULL;
returnh;
}
outlink(NODE*h,FILE*pf)
{NODE*p;
p=h->next;
fprintf(pf,"\nTheLIST:\n\nHEAD");
while(p)
{fprintf(pf,"->%d",p->data);
p=p->next;}
fprintf(pf,"\n");
}
main()
{NODE*head;intm;
clrscr();
head=creatlink(12,100);
outlink(head,stdout);
m=fun(head);
printf("\nTheRESULT:\n");outresult
(m,stdout);
}
35.給定程序MODll.C中函數(shù)fun的功能是:為一個(gè)偶數(shù)尋找兩個(gè)素?cái)?shù),這兩個(gè)素?cái)?shù)之和等于該偶數(shù),并將這兩個(gè)素?cái)?shù)通過形參指針傳回主函數(shù)。
請改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
36.給定程序MODll.c中函數(shù)fun的功能是;由形參給定n個(gè)實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)在平均值以上(含平均值)的實(shí)數(shù)個(gè)數(shù)。
例如,n=8時(shí),輸入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763
所得平均值為:195.838745,在平均值以上的實(shí)數(shù)個(gè)數(shù)應(yīng)為:5
請改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
37.下列給定程序中,函數(shù)fun()的功能是:應(yīng)用遞歸算法求某數(shù)a的平方根。求平方根的迭代公式如下:
例如,2的平方根為1.414214。
請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<math.h>
#include<stdio.h>
/*************found**************/
fun(doublea,doublex0)
{doublexl,y;
xl=(x0+a/x0)/2.0;
/*************found**************/
if(fabs(xl-x0)>0.00001)
y=fun(a,xl);
elsey=x1;
returny;
}
main()
{doublex;
printf("Enterx:");scanf("%1f",&x);
printf("Thesquarerootof%1fis%1f\n",
x,fun(x,l.O));
}
38.下列給定程序中,函數(shù)fun()的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返回。
請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
#defineN80
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
while(*s)
{p=s;
/**************found***************/
r=p;
while(*r)
if{*r==*p){r++;p++;}
elsebreak;
/**************found***************/
if(*r==0)
n++;
s++;
}
returnn;
}
main()
{chara[N],b[N];intm;
clrscr();
printf("\nPleaseenterstringa:");
gets(a);
printf("\nPleaseentersubstringb:");
gets(b);
m=fun{a,b);
printf("\nTheresultis:m=%d\n",m);
}
39.給定程序中函數(shù)fun的功能是:將一個(gè)由八進(jìn)制數(shù)字字符組成的字符串轉(zhuǎn)換為與其值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含5位八進(jìn)制數(shù)字字符。
例如,若輸入:77777,則輸出將是:32767。
請改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
[注意]不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intfun(char*p)
{
intn;
/**********found**********/
n=*p-'o';
p++;
while(*p!=0){
/**********found**********/
n=n*8+*p-'o';
p++;
}
returnn;
}
main()
{
chars[6];inti;intn;
printf("Enterastring(Ocataldigits):");
gets(s);
if(strlen(s)>5)
{
printf("Error:Stringtoolonger!\n\n");
exit(0);
}
for(i=0;s[i];i++)
if(s[i]<'0'||s[i]>'7')
{
printf("Error:%cnotisocataldigits!\n\n",s[i]);
exit(0);
}
printf("Theoriginalstring:");
puts(s);
n=fun(s);
printf("\n%siSconveredtointegernumber:%d\n\n",s,n);
}
40.假如整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。下列給定的程序中,函數(shù)fun()的功能是:刪除數(shù)列中值為X的元素。N中存放的是數(shù)列中元素的個(gè)數(shù)。
請改正程序中的錯(cuò)誤,使它能夠得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#defineN20
fun(int*a,intn,intx)
{intp=0,i;
a[n]=x;
while(x!=a[p])
p=p+1;
if(p==n)return-1;
else
{for(i=p;i<n;i++)
/*************found**************/
a[i+1]=a[i];
returnn-1;
}
}
main()
{intw[N]={-3,0,1,5,7,99,10,15,30,90},
x,n,i;
n=10;
printf("Theoriginaldata:\n");
for(i=0;i<n;i++)printf("%5d",w[i]);
printf("\nInputx(todelete):");
scanf("%d",&x);
printf("Delete:%d\n",x);
n=fun(w,n,x);
if(n==-1)printf("***Nobefound!
***\n\n");
else
{printf("Thedataafterdeleted:\n");
for(i=0;i<n;i++)printf("%5d",
w[i]);printf("\n\n");
}
}
五、程序改錯(cuò)題(2題)41.已知一個(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=20時(shí),程序的輸出結(jié)果應(yīng)為42762.000000。請修改程序中的錯(cuò)誤,使它能得到正確結(jié)果。注意:不要改動(dòng)maiil函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>doubleproc(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;//****found****for(k=4;k<n;k++)}{s=s0+s1+s2;sum+=S:s0=s1;s1=s2;//****found****s2=s;returnsum;}voidmain{intn;system("CLS");printf("InputN=");scanf("%d",&nJ;printf("%f\n",proc(n));}
42.下列給定程序中,函數(shù)proc()的功能是:依次取出字符串中所有的字母字符,形成新的字符串,并取代原字符串。例如,若輸入的字符串是:“ab232bd34bkw”,則輸出結(jié)果是:“abbdbkw”。請修改程序中的錯(cuò)誤,使它能得到正確結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
六、操作題(2題)43.已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun(),該函數(shù)的功能是;找出成績最高的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最高分)。已給出函數(shù)的首部,請完成該函數(shù)。
注意:部分源程序給出如下。
請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#defineN10
typedefstructss/*定義結(jié)構(gòu)體*/
{charnum[10];
ints;
}STU;
fun(STUa[],STU*s)
{
}
main()
{
STUa[N]={{"A01",81},{"A02",89},
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}},m;
inti;
clrscr();
printf("*****Theoriginaldata*****");
for(i=0;i<N;i++)
printf("No=%sMark=%d\n",a[i].hum,
a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thetop:%s,%d\n",m.num,m.s);
}
44.以下函數(shù)用來求出數(shù)組的最大元素在數(shù)組中的下標(biāo)并存放在k所指的存儲(chǔ)單元中。請?zhí)羁铡?/p>
#include<conio.h>
#include<stdio.h>
intfun(int*s,intt,int*k)
{inti;
*k=0;
【】
if(s[*k]<s[i])*k=i;
return【】;}
main()
{inta[10]={876,675,896,101,301,401,980,431,451,777},k;
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);}
參考答案
1.調(diào)試調(diào)試
2.參照完整性參照完整性
3.-6354-6354解析:本題的考查點(diǎn)是函數(shù)的返回值。這個(gè)函數(shù)的目的是提取出由函數(shù)的形參傳送來的字符串中的數(shù)字字符,并通過相應(yīng)字符位置計(jì)算出它們數(shù)值形式的冪,最后返回字符串中的數(shù)字字符的數(shù)值形式,所以函數(shù)的返回值應(yīng)當(dāng)是“-6354”。
4.封裝封裝
5.77解析:在C語言中,宏定義是直接替換的,所以在對表達(dá)式MAX(a+b,c+d)*10進(jìn)行替換后,表達(dá)式變?yōu)?a+b)>(c+d)?(a+b):(c+d)*10。
在這個(gè)條件表達(dá)式中,(a+b)>(c+d)為真,所以用(a+b)的值為整個(gè)表達(dá)式的值(否則用(c+d)*10的值作為整個(gè)表達(dá)式的值),而(a+b)的值為7。所以整個(gè)表達(dá)式的值為7。
6.GGGHGGGH解析:由于在函數(shù)main中定義了數(shù)組變量b,其將屏蔽全局變量b。對于一維數(shù)紐變量,其值為一常數(shù),等于數(shù)組首元素地址。strcpy(&b[0],'GH'),是將字符串'GH'復(fù)制到數(shù)組b中從首元數(shù)開始的空間中,此是b中的字符串為”叫”:strcpy(&b[1],'GH'),是將字符串'GH'復(fù)制到數(shù)組b中從第二個(gè)元素開始的空間中,此是b中的字符串為“GH”。執(zhí)行第三次strcpy函數(shù)后,b中的字符串為'GGGH'。
7.33解析:(p/3>0?p/10:p%3)是一個(gè)條件表達(dá)式。題中p=30,p/3>0為真,所以p/10的結(jié)果3作為整個(gè)表達(dá)式的值。
8.邏輯獨(dú)立性邏輯獨(dú)立性解析:數(shù)據(jù)的獨(dú)立性一般可分為物理獨(dú)立性和邏輯獨(dú)立性。
9.循環(huán)鏈表循環(huán)鏈表解析:在鏈表的運(yùn)算過程中,采用鏈接方式即循環(huán)鏈表的結(jié)構(gòu)把空表與非空表的運(yùn)算統(tǒng)一起來。循環(huán)鏈表具有兩個(gè)特點(diǎn):①在循環(huán)鏈表中增加了一個(gè)表頭結(jié)點(diǎn),其數(shù)據(jù)域?yàn)槿我饣蚋鶕?jù)需要來設(shè)置,指針域指向線性表的第一個(gè)元素的結(jié)點(diǎn)。循環(huán)鏈表的頭指針指向表頭結(jié)點(diǎn)。②循環(huán)鏈表中最后一個(gè)結(jié)點(diǎn)的指針不是空,而是指向表頭結(jié)點(diǎn)。
10.1對多(或1:N)1對多(或1:N)
11.D解析:break語句只能在循環(huán)體和switch語句體內(nèi)使用,當(dāng)break出現(xiàn)在switch語句體內(nèi)時(shí),其作用只是跳出該switch語句體。當(dāng)break出現(xiàn)在循環(huán)體中,但不在switch語句體內(nèi)時(shí),則在執(zhí)行break后,跳出本層循環(huán)體.而continue語句的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)中余下尚未執(zhí)行的語句,接著再一次進(jìn)行循環(huán)的條件判定。本程序中,變量i的初始值為0,判斷while后面括號(hào)內(nèi)表達(dá)式的值為真,執(zhí)行循環(huán)體內(nèi)的if語句,判斷if后面括號(hào)內(nèi)表達(dá)式的值為真,執(zhí)行“continue;”語句.因continue的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進(jìn)行循環(huán)的條件判斷,所以i的值未發(fā)生變化,循環(huán)條件仍然為真,if語句也仍然成立,因此循環(huán)將無止境地進(jìn)行下去。所以,4個(gè)選項(xiàng)中D為所選。
12.A關(guān)系SC中的主鍵是(S#,C#),但C#(課程號(hào))單獨(dú)就可以決定Cn(課程名),存在著對主鍵的部分依賴。本題答案為A選項(xiàng)。
13.A
14.C
15.B按邏輯位運(yùn)算特點(diǎn):①用按位與運(yùn)算將特定位清為0或保留特定位;②用按位或運(yùn)算將特定的位置為1;③用按位異或運(yùn)算將某個(gè)變量的特定位翻轉(zhuǎn)或交換兩個(gè)變量的值。
16.B
17.A
18.D
19.B程序中的*s%10是求余運(yùn)算,分別是a、b、C的ASCIl碼值對10進(jìn)行求余運(yùn)算然后輸出,所以輸出的答案為789。r
20.D解析:C語言規(guī)定,字符常量在程序中要用單引號(hào)括起來。判斷c1是否為小寫字母的充要條件c1>='a'和c1<='z',用邏輯與(&&)來表示。A選項(xiàng)的這種形式在C語言中沒有,所以選項(xiàng)D)正確.21.\n\tmain
\n{inta,b,c;
\nprintf(“請輸入三個(gè)整數(shù):”);
\nscanf(“%d,%d,%d”,&a,&b,&c);
\nif(aif(belseprintf(“max=%d\\n”,b);
\nelseif(aelseprintf(“max=%d\\n”,a);}
\n
22.voidproc(char*str)
\n{
\nchar*p=str;
\nwhile(*p==*)p++;//通過p的移動(dòng)來達(dá)到使p指向第一個(gè)不是*號(hào)的字符
\nfor(;*p!=\0;p++,str++)//把從第一個(gè)不是*號(hào)的字符放到a中
\n*str=*P:
\n*str=\0;//最后用\0作為字符串結(jié)束標(biāo)志
\n}
\n【解析】題目中要求將字符串中的前導(dǎo)*號(hào)全部刪除,首先將指針P移動(dòng)到第一個(gè)不是*的字符,將指針P之后的字符放入原來的字符串中,并為新的字符串添加結(jié)束符。
\n
23.1intfun(char*str)2{3inti,n=0,fg=1;4char*p=str;5while(*p)/*將指針p指向字符串末尾,并統(tǒng)計(jì)字符數(shù)*/6{7n++8P++;10}10for(i=0;i24.
【解析】首先判斷循環(huán)中n是否為素?cái)?shù),如果不是素?cái)?shù),求其平方根的累加和,并返回計(jì)算結(jié)果,否則跳出判斷循環(huán)。其中,對于平方根的求解可以使用C語句中的sqrt()函數(shù)。
25.
【解析】按照題目中要求求m以內(nèi)(不包括m)同時(shí)能被5與11整除的所有自然數(shù)之和的平方根s,需要判斷m以內(nèi)的所有整數(shù)是否能同時(shí)被5與11整除,首先求出同時(shí)能被5與
11整除的所有自然數(shù)之和,然后再求和的平方根,最后返回到主函數(shù)當(dāng)中。
26.voidfun(char*a){inti,j=0;for(i=0;a[i]!=\0;i++)if(a[i]!=*)a[j++]=a[i];//若不是要?jiǎng)h除的字符*則保留a[j]=\0;//最后加上字符串結(jié)束符\0}【解析】此題是刪除字符串中的星號(hào)。思路是通過for循環(huán)完成對字符串的遍歷,通過if判斷,找到不是“*”的字符,將其賦值到數(shù)組a中星號(hào)前的位置,“if(a[i]!=*)”“a[i++]=a[i]”,最后返回主函數(shù)將刪除*后的字符串輸出即可。
27.
【解析】(1)該程序功能是返回高于平均分的人數(shù)。它的解題思路可以分解為以下幾步:求總分一求平均分一元素逐個(gè)與平均分比較一統(tǒng)計(jì)高于平均分的人數(shù)。
(2)從已給部分源程序的main()函數(shù)開始入手,核心函數(shù)fun(point,9,high)中的參數(shù)由題目可知,point存放著m個(gè)人的成績,high存放著高于平均分的分?jǐn)?shù)。另外,根據(jù)point的定義,可知9為point數(shù)組中元素的個(gè)數(shù),傳給函數(shù)funee的參數(shù)n。
28.\n\tvoidproc(intm,int*a,int*n)
\n{
\ninti,j=0;
\nfor(i=1;i<=m;i++)//進(jìn)行m次循環(huán)
\nif(i%7==0||i%11==0)//能被7或11整除的所有整數(shù)
\na[j++]=i;//符合條件的數(shù)放在數(shù)組a中
\n*n=j;//返回這些數(shù)的個(gè)數(shù)
\n}
\n【解析】本題需要先判斷1~m每一個(gè)整數(shù)能否被7或11整除,然后將符合條件的整數(shù)放在數(shù)組a中,最后將符合條件的數(shù)的個(gè)數(shù)通過形參n返回主函數(shù)。\n29.voidfun(char*a){ inti,j=0; for(i=0;a[i]!=‘\0’;i++) if(a[i]!=‘\*’) a[j++]=a[i];/*若不是要?jiǎng)h除的字符‘*’則保留*/ a[j]=‘\0’;/*最后加上字符串結(jié)束標(biāo)志‘\0’*/}該題考核的是刪除字符串中所有*,需用循環(huán)語句遍歷字符串,用判斷語句判斷字符是否為*,由此可以決定該程序應(yīng)使用循環(huán)判斷結(jié)構(gòu)。用循環(huán)操作從字符串開始向后逐個(gè)進(jìn)行比較,若不是要?jiǎng)h除的字符(用if(a[i]!=‘*’)來控制)則保留。變量i和j用來表示原字符串的下標(biāo)和刪除*后新字符串的下標(biāo)。注意,下標(biāo)變量j要從0開始,最后還要加上字符串結(jié)束標(biāo)志‘\\0’。
30.
【解析】要將字符串str中下標(biāo)為偶數(shù)位置上的字符轉(zhuǎn)化為大寫字母,首先應(yīng)該判斷字符串str中下標(biāo)為偶數(shù)位置上的字符是否為小寫字母,若是將其轉(zhuǎn)化為大寫字母.若不是不做任何變化。
31.錯(cuò)誤:c[t]="\0"正確:c[t]='\0'錯(cuò)誤:c[t]='\\0',正確:c[t]=\'\\0\'解析:注意,該程序的if條件中應(yīng)用了isspace函數(shù),該函數(shù)的功能是檢查ch是否空格、跳格符(制表符)或換行符。
32.(1)錯(cuò)誤:for(i=2;i<m;i++)正確:for(i=2;i<=m;i++)(2)錯(cuò)誤:y+=1/(i*i)正確:y+=1./(i*i)錯(cuò)誤2:在除法運(yùn)算中如果除數(shù)和被除數(shù)都是整數(shù)所以所除結(jié)果也是整數(shù)因此應(yīng)改為y+=1./(i*i)。(1)錯(cuò)誤:for(i=2;i<m;i++)\r\n正確:for(i=2;i<=m;i++)\r\n(2)錯(cuò)誤:y+=1/(i*i)\r\n正確:y+=1./(i*i)\r\n錯(cuò)誤2:在除法運(yùn)算中,如果除數(shù)和被除數(shù)都是整數(shù),所以所除結(jié)果也是整數(shù),因此應(yīng)改為y+=1./(i*i)。
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);解析:對于二維數(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所指對象的內(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)錯(cuò)誤:fun(NODE*h)正確:intfun(NODE*h)(2)錯(cuò)誤:p=h->next;正確:p=p->next;(1)錯(cuò)誤:fun(NODE*h)正確:intfun(NODE*h)\r\n(2)錯(cuò)誤:p=h->next;正確:p=p->next;解析:本題考查的這種鏈表的數(shù)據(jù)結(jié)構(gòu)中,必須利用指針變量才能實(shí)現(xiàn)。即一個(gè)結(jié)點(diǎn)中應(yīng)包含一個(gè)指針變量,用它存放下一結(jié)點(diǎn)的地址。建立單向鏈表的一般步驟是:建立頭指針一建立第一個(gè)節(jié)點(diǎn)一頭指針指向第一個(gè)節(jié)點(diǎn)一建立第二個(gè)節(jié)點(diǎn)一第一個(gè)節(jié)點(diǎn)的指針域指向第二個(gè)節(jié)點(diǎn)→……→最后一個(gè)節(jié)點(diǎn)指向NULL。本題重點(diǎn)是:了解鏈表的基本思想和相關(guān)算法,其實(shí)考試時(shí)的程序根本沒有書上的難。在這里我們要說,重點(diǎn)理解有關(guān)鏈表插入及刪除時(shí)指針移動(dòng)的先后順序問題。注意指針的保存和歸位。(即頭指針的保存和鏈表遍歷時(shí)指針的歸位)。這都是考試重點(diǎn)!
35.(1)y=1;(2)d=a-i;(1)y=1;(2)d=a-i;解析:本題中函數(shù)的功能是為一個(gè)偶數(shù)查找兩個(gè)素?cái)?shù),這兩個(gè)素?cái)?shù)之和等于該偶數(shù)。其中,函數(shù)fun用形參a放偶數(shù),指針b和c放兩個(gè)素?cái)?shù)。把一個(gè)偶數(shù)分解成1和(x-1)兩個(gè)數(shù)是否是素?cái)?shù),再分解為3和(x-3)這兩個(gè)數(shù),判斷是否是素?cái)?shù),依此類推,直到找出這兩個(gè)素?cái)?shù)為止。本題中把偶數(shù)分解為i和d兩個(gè)素?cái)?shù)。判斷i是否是素?cái)?shù),如果i不是素?cái)?shù),則i+2再循環(huán);如果i是素?cái)?shù),則d=x-i,然后判斷d是否是素?cái)?shù)。
36.(1)intj-c=0;doublexa=0.0;(2)if(x[j]>=xa)(1)intj-c=0;doublexa=0.0;(2)if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題開題報(bào)告:湖北民辦高校發(fā)展困境與突破路徑研究
- 薄壁鋼管安裝施工方案
- 鋼結(jié)構(gòu)橋梁施工方案
- 傳媒公司運(yùn)營工作總結(jié)
- 氣象檢測施工方案
- 皮手套及皮革制衣著附件企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 高爾夫球包企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 紀(jì)念幣批發(fā)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 中老年奶粉企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 保險(xiǎn)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 印象主義、后印象主義課件
- 《中華傳統(tǒng)文化》第1課-炎黃始-華夏悠遠(yuǎn)教學(xué)課件
- 日常監(jiān)督檢查表
- 隊(duì)列訓(xùn)練教程ppt課件(PPT 86頁)
- 第三章-農(nóng)村公共管理組織課件
- 注塑員工培訓(xùn)
- 《麻精藥品培訓(xùn)》ppt課件
- JMP操作簡要培訓(xùn)
- 勝利油田壓驅(qū)技術(shù)工藝研究進(jìn)展及下步工作方向
- 立方智能停車場管理系統(tǒng)解決方案(課堂PPT)
- 研究生復(fù)試匯報(bào)ppt
評論
0/150
提交評論