國家二級(jí)(C語言)機(jī)試模擬試卷18(共27題)_第1頁
國家二級(jí)(C語言)機(jī)試模擬試卷18(共27題)_第2頁
國家二級(jí)(C語言)機(jī)試模擬試卷18(共27題)_第3頁
國家二級(jí)(C語言)機(jī)試模擬試卷18(共27題)_第4頁
國家二級(jí)(C語言)機(jī)試模擬試卷18(共27題)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

國家二級(jí)(C語言)機(jī)試模擬試卷18(共9套)(共27題)國家二級(jí)(C語言)機(jī)試模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請(qǐng)補(bǔ)充main函數(shù),改函數(shù)的功能是,把一個(gè)二維字符數(shù)組每行字符串最大的字符拷貝到字符數(shù)組s中。例如,如果str[3]={"efjh","cfimls","owys"},則s;"hsy"。注意:部分源程序給出如下.請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdio,h>main(){inti=0;char*str[3]={"efjh","efknls","owys"};char**p;chars[8];clrscr0;【】;for(i=O;i<3;i++){s[i]=*p[i];while(*p[i]){if(S[i]<*p[i])s[i]=*p[i];【】;}}【】;printf("newstring\n");puts(s);}標(biāo)準(zhǔn)答案:p=strp[i]++s[i]=’\0’知識(shí)點(diǎn)解析:第一空:sb是一個(gè)大小為3的指針數(shù)組,每個(gè)指針指向一個(gè)字符串,p是指向指針的指針,首先要使指針p指向數(shù)組sb的首地址。第二空:通過p[i]++使p[i]指向第i個(gè)字符串的下一個(gè)字符。第三空:將每行字符串的最大字符都拷貝到字符數(shù)組s中后,不要忘了在數(shù)組s最后加上字符串結(jié)束標(biāo)記符‘\0’。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是:將長整型數(shù)中每一位上為偶數(shù)的數(shù)依次取出,構(gòu)成一個(gè)新數(shù)放在沖。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為87653142時(shí),t中的數(shù)為8642。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main,~數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>voidfun(longs,long*t)/**********************************/{intd;longs1=l;*t=0;while(s>0){d=s%10;/**********************************/if(d%2=0){*t=d*sl+*t;sl*=10}/**********************************/s\=10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:intd;正確longd;(2)錯(cuò)誤:if(d%2=0)正確:if(d%2==0)(3)錯(cuò)誤:s\=10;正確:s/=10知識(shí)點(diǎn)解析:其實(shí),不論取出偶數(shù)還是奇數(shù),思路應(yīng)該是一樣的。我們?cè)趧傞_始學(xué)習(xí)C語言的時(shí)候就學(xué)習(xí)過強(qiáng)制類型轉(zhuǎn)換以及運(yùn)算級(jí)別的問題,所以,這里的int就沒有存在的理由。錯(cuò)誤2中的問題是怎么表達(dá)一個(gè)偶數(shù)的問題,歸根結(jié)底還是“=”和“==”的區(qū)別問題。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是:找出成績最低的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。己給出函數(shù)的首部,請(qǐng)完成該函數(shù)。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。試題程序:#include<stdio.h>#include<string.h>#include<aonio.h>#defineN10typedefstructss{charnum[10];ihts;}STU;fun(STUail,STU*s){}main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80),{"Al0",71}},m;inti;clrscr0;printf("*****Theoriginaldata*****");for(i=0;i<N;i++)printf("No=%sMark=%d\n",ail].num,a[i].s);fun(a,&m);printf("*****THERESULT*****\n");printf("Thelowest:%s,%d\n",m.num,m.s);}標(biāo)準(zhǔn)答案:fun(STUa[],STU*s){inti;*s=a[0];for(i=0;i<N;i++)/*先認(rèn)為第1個(gè)值最小*/if(s->s>aIi].s)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個(gè)值更小的則賦給*s*/*s=a[i];}知識(shí)點(diǎn)解析:我們先認(rèn)為第1個(gè)值最小,即*s=a[0]語句,如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個(gè)值更小的隨即賦給該*s就可以了。另外,還涉及到結(jié)構(gòu)體中的指向運(yùn)算符,請(qǐng)學(xué)習(xí)者注意。若要找出最高成績則if()中的條件改成s->s<a[i].s即可。國家二級(jí)(C語言)機(jī)試模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是將形參給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個(gè)讀入并顯示在終端屏幕上。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includevoidfun(char*s,inta,doublef){/**********found**********/【1】fp;charch;fp=fopen("file1.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);fclose(fp);fp=fopen("file1.txt","r");printf("\nTheresult:\n\n");ch=fgetc(fp);/**********found**********/while(!feof(【2】)){/**********found**********/putchar(【3】);ch=fgetc(fp);}putchar(’\n’);fclose(fp);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}標(biāo)準(zhǔn)答案:FILE*fpch知識(shí)點(diǎn)解析:第一空:由“fp=fopen("file1.txt","w");”可知fp是文件型指針,故第一空處的變量fp定義類型為“FILE*”。第二空:“while(!feof(__2__))”是在沒有達(dá)到文件未尾的時(shí)候執(zhí)行循環(huán)體內(nèi)容,文件狀態(tài)檢測(cè)函數(shù)feof的一般調(diào)用形式是:feof(fp),其中fp是文件型指針,故第二空處應(yīng)為“fp”。第三空:題干要求從文件當(dāng)中逐個(gè)讀入數(shù)據(jù)并顯示在終端屏幕上,第三空處是將從文件當(dāng)中讀取的字符ch顯示在屏幕上,故第三空處應(yīng)為“ch”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:將s所指字符串中出現(xiàn)的與t1所指字符串相同的子串全部替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。在此處,要求t1和t2所指字符串的長度相同。例如,當(dāng)s所指字符串中的內(nèi)容為:”abcdabfab”,t1所指子串中的內(nèi)容為:”ab”,t2所指子串中的內(nèi)容為:”99”時(shí),結(jié)果在W所指的數(shù)組中的內(nèi)容應(yīng)為:”99cd99f99”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includevoidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=t1;/************found************/while(r)if(*r==*p){r++;p++;}elsebreak;if(*r==’\0’){a=w;r=t2;while(*r){/************found************/*a=*r;a++;r++}w+=strlen(t2);}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf("Error:strlen(t1)!=strlen(t2)\n");}標(biāo)準(zhǔn)答案:while(*r)*a=*r;a++;r++;知識(shí)點(diǎn)解析:(1)函數(shù)通過while語句比較r所指字符串是否和p所指的子串相同,若有相同,會(huì)一直循環(huán)到*r是’\0’才退出循環(huán)。所以第二個(gè)標(biāo)識(shí)下的“while(r)”改為“while(*r)”。(2)C語言中,語句應(yīng)該以“;”結(jié)束,在第二個(gè)標(biāo)識(shí)處,“r++”語句沒有以“;”結(jié)束,因此第二個(gè)標(biāo)識(shí)處應(yīng)該是“*a=*r;a++;r++;”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,其功能是:將所有大于1小于整數(shù)m的非素?cái)?shù)存入xx所指數(shù)組中,非素?cái)?shù)的個(gè)數(shù)通過k傳回。例如,若輸入:17,則應(yīng)輸出:46891012141516。注意:部分源程序在文件PROGl.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#includevoidfun(intm,int*k,intxx[]){}main(){intm,n,zz[100];voidNONO();printf("\nPleaseenteranintegernumberbetween10and100:");scanf("%d",&n);fun(n,&m,zz);printf("\n\nThereare%dnon-primenumberslessthan%d:",m,n);for(n=0;n<m;n++)printf("\n%4d",zz[n]);NONO();}voidNONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/intm,n,zz[100];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");fscanf(rf,"%d",&n);fun(n,&m,zz);fprintf(wf,"%d\n%d\n",m,n);for(n=0;n<m;n++)fprintf(wf,"%d\n",zz[n]);fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:{inti,j;intt=0;//初始化數(shù)組個(gè)數(shù)for(i=2;i知識(shí)點(diǎn)解析:(1)根據(jù)求素?cái)?shù)的方法判斷數(shù)i是否為素?cái)?shù)。(2)把不是素?cái)?shù)的數(shù)留下來,其方法是:如果該數(shù)是素?cái)?shù)則不處理;如果不是素?cái)?shù)則放到數(shù)組xx中,并且把數(shù)組的下標(biāo)加1,為下一個(gè)不是素?cái)?shù)的數(shù)放在數(shù)組中做準(zhǔn)備。(3)返回個(gè)數(shù),把xx數(shù)組中已經(jīng)寫入的數(shù)的個(gè)數(shù)返回即可,即把數(shù)組xx的最大下標(biāo)加1返回即可。國家二級(jí)(C語言)機(jī)試模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個(gè)讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點(diǎn)數(shù),然后將其顯示在屏幕上。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includevoidfun(char*s,inta,doublef){/******************found*******************/【1】fp;charstr[100],strl[i00],str2[100];inta1;doublef1;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/******************found*******************/【2】;fp=fopen("filel.txt","r");/******************found*******************/fscanf(【3】,"%s%s%s",str,str1,str2);fclose(fp);a1=atoi(str1);f1=atof(str2);printf("\nTheresult:\n\n%s%d%f\n",str,a1,f1);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}標(biāo)準(zhǔn)答案:(1)FILE*(2)fclose(fp)(3)fp知識(shí)點(diǎn)解析:第一空:“fp=fopen("filel.txt","w");"可知fp是文件型指針,故第一空處fp的定義應(yīng)為"FILE*"。第二空:第二處的后面一句是“邱=fopen("filel.txt","r");"再次打開filel.txt,因此在第二次打開filel.txt之前必須將文件關(guān)閉,故第二處是關(guān)閉文件,即“fclose(fp)"。第三空:fscanf的調(diào)用形式是:fscanf(fp,格式字符串,輸入列表),因此第三空處應(yīng)為“fp",從文件當(dāng)中讀出字符串、整數(shù)、浮點(diǎn)數(shù)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:比較兩個(gè)字符串,將長的那個(gè)字符串的首地址作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/**************found**************/charfun(char*s,char*t){ints1=0,t1=0;char*ss,*tt;ss=s;tt=t;while(*ss){s1++;/****************found****************/(*ss)++;)while(*tt){tl++;/****************found****************/(*tt)++;}if(tl>s1)returnt;elsereturns;}main(){chara[80],b[80];printf("\nEnterastring:");gets(a);printf("\nEnterastringagain:");gets(b);printf("\nThelongeris:\n\n\"%s\"\n",fun(a,b));}標(biāo)準(zhǔn)答案:(1)char*fun(char*s,char*t)(2)ss++;(3)tt++;知識(shí)點(diǎn)解析:(1)題目中要求返回字符串的首地址,fun函數(shù)中的返回值類型應(yīng)該是char*類型而不是char型,所以“charfhn(chin*s,chat*t)"應(yīng)該改為“char*fun(char*s,char*t)"。(2)第二個(gè)標(biāo)識(shí)下應(yīng)該是指向第一個(gè)字符串的下一個(gè)字符,而“(*ss)++;"是對(duì)指針指向字符的值加1,所以“(*ss)++;"改為“ss++;"。(3)同理,第三個(gè)標(biāo)識(shí)符下的“(*tt)++;"改為“tt++;"。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、函數(shù):fun的功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的千位和十位上,b數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=415Z;注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件iff.dat中的數(shù)據(jù)不得修改。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%d\n",c);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:{*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);}知識(shí)點(diǎn)解析:(1)分解兩位數(shù)的正整數(shù)n的個(gè)位和十位數(shù),可分別用n%10和n/10實(shí)現(xiàn)。(2)設(shè)x0、x1、x2、x3為一位數(shù),則x0、x1×10、x2×100、x3×1000,可以分別使x0、x1、x2、x3構(gòu)成個(gè)、十、百、千帶權(quán)數(shù),而x0+x1×10+x2×100+x3×1000構(gòu)成四位數(shù)。本題最多只考慮四位數(shù)。國家二級(jí)(C語言)機(jī)試模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:從字符串str中取出所有數(shù)字字符,并分別計(jì)數(shù),然后把結(jié)果保存在數(shù)組b中并輸出,把其他字符保存在N[10]中。例如:當(dāng)str1=“ab123456789cde090”時(shí),結(jié)果為:0:21:12:13:14:15:16:17:18:19:2othercharactor:5注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdio.h>#include<conio.h>main(){inti,b[11];char*str="abl23456789cde090";char*p=str;clrscr();printf("***theorigialdata***\n");puts(str);for(i=0;i<11;i++)b[i]=0;while(*p){switch(【】){case’0’:b[0]++;break;case’1’:b[1]++;break;case’2’:b[2]++;break;case’3’:b[3]++;break;case’4’:b[4]++;break;case’5’:b[5]++;break;case’6’:b[6]++;break;case’7’:b[7]++;break;case’8’:b[8]++;break;case’9’:b[9]++;break;【】}【】}printf("******theresult********\n");for(i=0;i<10;i++)printf("\n%d:%d",i,b[i]);printf("\nothercharactor:%d",b[i]);}標(biāo)準(zhǔn)答案:*pdefault:b[10]++;p++;知識(shí)點(diǎn)解析:第一空:根據(jù)switch語句中case后面的常量表達(dá)式,可以看出,switch后面括號(hào)中的表達(dá)式應(yīng)該是字符串str中的各字符,而指針p就是指向字符串str。第二空:和各個(gè)case后面的常量表達(dá)式不匹配的都屬于其他字符,保存在b[10]中。第三空:指針p指向字符串s仕,通過p自加1來移動(dòng)指針,訪問字符串中的所有字符。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是求出數(shù)組中最小數(shù)和次最小數(shù),并把最小數(shù)和a[0]中的數(shù)對(duì)調(diào),次最小數(shù)和a[1]中的數(shù)對(duì)調(diào)。請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>#defineN20voidfun(int*a,intn){inti,m,t,k;/*************found**************/for(i=O;i<n;i++){m==i;for(k=i;k<n;k++)if(a[k]<a[m])/*************found**************/k=m;t=a[i];a[i]=a[m];a[m]=t;}}main(){intx,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;clrscr();for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");fun(b,n);for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:for(i=0;i<n;i++)正確:for(i=0;i<2;i++)(2)錯(cuò)誤:k=m;正確:m=k;知識(shí)點(diǎn)解析:錯(cuò)誤1:由于題目要求將最小數(shù)和次最小數(shù)分別與a[0]和a[1]中的數(shù)對(duì)調(diào),因此這層循環(huán)只需循環(huán)兩次。錯(cuò)誤2:賦值語句的執(zhí)行方向是從右向左,即把右邊的值賦給左邊的變量。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫一個(gè)函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是將大于整數(shù)m且緊靠m的k個(gè)非素?cái)?shù)存入所指的數(shù)組中。例如,若輸入15,5,則應(yīng)輸出16,18,20,21,22。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(intm,intk,intxx[]){}main(){intm,n,zz[1000];clrscr();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m<n;m++)printf("%d",zz[m]);printf("\n");}標(biāo)準(zhǔn)答案:voidfun(intm,intk,intxx[]){inti,j,n;for(i=m+1,n=0;n<k;i++)/*找大于m的非素?cái)?shù),循環(huán)k次,即找出緊靠m的k個(gè)非素?cái)?shù)*/for(j=2;j<i;j++)/*判斷一個(gè)數(shù)是否為素?cái)?shù)*/if(i%j==0){xx[n++]=i;/*如果不是素?cái)?shù),放入數(shù)組xx中*/break;/*并跳出本層循環(huán),判斷下一個(gè)數(shù)*/}}知識(shí)點(diǎn)解析:本題只要掌握了判斷非素?cái)?shù)和素?cái)?shù)的算法即不難完成了,其實(shí)程序缺少部分也正是這部分。國家二級(jí)(C語言)機(jī)試模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:將形參n中,各位上為偶數(shù)的數(shù)取出,并按原來從高位到低位的順序組成一個(gè)新的數(shù),并作為函數(shù)值返回。例如,從主函數(shù)輸入一個(gè)整數(shù):27638496,函數(shù)返回值為:26846。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeunsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;s=n;/*****************found***************/i=【1】;/*****************found***************/while(【2】){t=s%10;if(t%2==0){/*****************found***************/x=x+t*i;i=【3】;}s=s/10;}returnx;}main(){unsignedlongn=一1;while(n>99999999||n<0){printf("Pleaseinput(0標(biāo)準(zhǔn)答案:(1)1(2)s(3)i*10知識(shí)點(diǎn)解析:第一空:由“if(t%2=0){x=x+-t*i;i=【3】;}"可知,如果t是偶數(shù),那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*l;下一次得到了t=4,那么此時(shí)x的值應(yīng)該是2+2*10;再下一次得到t=2,那么x=22+2*100,即x的值是在上一次值的基礎(chǔ)上加上新得到的值乘以其權(quán)值,因此i是代表權(quán)值。第一空處是初始化i,第一次進(jìn)入if語句時(shí),x是個(gè)1位數(shù),此時(shí)權(quán)值i應(yīng)為1,做第一空處應(yīng)為“1",第二空:第二空處是填循環(huán)的終止條件,在循環(huán)體內(nèi),s每次縮小10倍,在最后一次進(jìn)入循環(huán)的時(shí)候,s是一個(gè)一位數(shù),s/10之后s變成0,下次就不應(yīng)該進(jìn)入while循環(huán),因此while循環(huán)的終止條件是s不為0,故第二空處為“s"或“s!=0"。第三空:由第一空的分析可知權(quán)值i是在上一次的基礎(chǔ)上增加10倍,故第三空處應(yīng)為“i*10"。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun和funx的功能是:用二分法求方程2x3-4x3+3x-6=0的一個(gè)根,并要求絕對(duì)誤差不超過0.001。例如,若給m輸入-100,給n輸入90,則函數(shù)求得的一個(gè)根值為2.000。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#includedoublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen){/************found************/intr;r=(m+n)/2;/************found************/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;elsen=r;r=(m+n)/2;}returnr;}main(){doublem,n,root;printf("Entermn:\n");scanf("%lf%lf",&m,&n);root=fun(m,n);printf("root=%6.3f\n",root);}標(biāo)準(zhǔn)答案:doubler;while(fabs(n-m)>0.001)知識(shí)點(diǎn)解析:(1)fun函數(shù)要求返回方程的一個(gè)根,由return語句來實(shí)現(xiàn),而函數(shù)fun是定義為double型的,但第一個(gè)標(biāo)識(shí)下面的r卻被定義為int類型。所以“intr;”改為“doubler;”。(2)檢查while循環(huán)的控制表達(dá)式“(fabs(n-m)<0.001)”,知道開始的循環(huán)值為80,必然不會(huì)進(jìn)入循環(huán)體,不符合邏輯,所以應(yīng)改為:“while(fabs(n-m)>0.001)”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun(),其功能是:根據(jù)以下公式求的值(要求精度0.0005,即某項(xiàng)小于0.0005時(shí)停止迭代)。程序運(yùn)行后,若輸入精度0.0005,則程序應(yīng)輸出為3.14…。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填人你編寫的若干語句。試題程序:#include#include#includedoublefun(doubleeps){}voidmain(){doublex;printf("Inputeps:");scanf("%1f",&x);printf("\neps=%1f,PI=%lf\n",x,fun(x));}標(biāo)準(zhǔn)答案:doublefun(doubleeps){doubles=1.0,s1=1.0;intn=1;while(s1>=eps)//當(dāng)某項(xiàng)大于精度要求時(shí),繼續(xù)求下一項(xiàng){s1=s1*n/(2*n+1);//求多項(xiàng)式的每一項(xiàng)s=s+s1;//累加求和n++;}return2*s;}知識(shí)點(diǎn)解析:此題考查的是用迭代法求多項(xiàng)式的值。通過觀察題目中給出的數(shù)學(xué)公式可知,后面一項(xiàng)是前面一項(xiàng)乘以n/(2*n+1),發(fā)現(xiàn)這個(gè)規(guī)律后,問題迎刃而解。通過定義double類型變量,并且賦初值,用來存放多項(xiàng)式的總和。此題中需要注意的是,表示每一項(xiàng)的s1和表示多項(xiàng)式之和的s,兩者的初值都是1.0。國家二級(jí)(C語言)機(jī)試模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、從鍵盤輸入一組無符號(hào)整數(shù)并保存在數(shù)組arr[N]中,以整數(shù)0結(jié)束輸入,即第N+1個(gè)數(shù)是0,要求這些數(shù)的最大位數(shù)不超過4位,其元素的個(gè)數(shù)通過變量num傳人函數(shù)proc()。請(qǐng)補(bǔ)充函數(shù)proc(),其功能是:從數(shù)組arr中找出個(gè)位和十位的數(shù)字之和大于5的所有無符號(hào)整數(shù),結(jié)果保存在數(shù)組yy中,其個(gè)數(shù)由函數(shù)proe返回。例如,當(dāng)arr[8]={13,1,205,252,2,333,4444,21)時(shí)實(shí)際輸入時(shí),數(shù)與數(shù)之間用Enter鍵分開,bb[4]={252,333,4444)。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include#defineM1000intproc(intarr[],intbb[],intnum){inti,m=0;intg,s;for(i=0;i5)【2】;}return【3】;}voidmain(){intarr[M];intyy[M];intnum=0,m=0,i=0;printf("Inputnumber:\n");do{scanf("%u",&arr[num]);}while(arr[num++]!=0);m=proc(arr,yy,num);printf("\nyy=");for(i=0;i標(biāo)準(zhǔn)答案:【1】arr[i]%10【2】bb[m++]=arr[i]【3】m知識(shí)點(diǎn)解析:將一個(gè)整數(shù)對(duì)10取余,則得到該整數(shù)的個(gè)位數(shù),將一個(gè)整數(shù)除以10再對(duì)10取余,則得到該整數(shù)的十位數(shù)。由程序可以看出,變量s保存了整數(shù)的十位數(shù),所以應(yīng)該將整數(shù)的個(gè)位數(shù)保存在變量g中;根據(jù)題意,當(dāng)整數(shù)的個(gè)位與十位的數(shù)字之和大于5時(shí),則將該整數(shù)保存到數(shù)組bb中;變量m記錄了滿足條件的無符號(hào)整數(shù)的個(gè)數(shù),題目要求將滿足條件的無符號(hào)整數(shù)的個(gè)數(shù)由proc()函數(shù)返回,所以函數(shù)返回m。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)proc()的功能是:用遞歸算法計(jì)算斐波拉契級(jí)數(shù)列中第n項(xiàng)的值。從第一項(xiàng)起,斐波拉契級(jí)數(shù)序列為1,1,2,3,5,8,13,21,…例如,若給n輸入8,該項(xiàng)的斐波拉契級(jí)數(shù)值為21。請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#inciudelongproc(intg){//****found****switch(g);{case0:return0;//****found****case1;case2:return1;}return(proc(g-1)+proc(g-2));}voidmain(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d\n",n);fib=proc(n);printf("fib=%d\n\n",fib);}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:switch(g);正確:switch(g)(2)錯(cuò)誤:case1;case2;return1;正確:case1;return1;case2:return1;知識(shí)點(diǎn)解析:由C語言的語法規(guī)則可知,switch語句后面是沒有分號(hào)的,因此,“switch(g);”要把后面的分號(hào)去掉;在C語言中,case語句后面是冒號(hào)而不是分號(hào),因此,“case1;case2:return1;”應(yīng)改為“case1:return1;case2:return1;”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根之和。例如,在主函數(shù)中從鍵盤給n輸入100后,輸出為:sum=148.874270。注意:要求13的值大于2但不大于100。部分源程序在文件PROGI.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#includedoublefun(intn){}NONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){intn;doublesum;printf("\n\nInputn:");scanf("%d",&n);sum=fun(n);printf("\n\nsum=%f\n\n",sum);NONO();}標(biāo)準(zhǔn)答案:inti,j=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j知識(shí)點(diǎn)解析:(1)素?cái)?shù)是指能被1和本身整除的正整數(shù)(>1),所以判別i是否為素?cái)?shù),只要用2、3、…、i-1這些數(shù)逐個(gè)去除i,觀察余數(shù)是否為0即可,只要有一次相除余數(shù)為0,i就不是素?cái)?shù),否則i為素?cái)?shù)。(2)在循環(huán)中找到每一個(gè)素?cái)?shù),然后對(duì)其求平方根,然后進(jìn)行累加求和。國家二級(jí)(C語言)機(jī)試模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:計(jì)算下式前n項(xiàng)的和作為函數(shù)值返回。例如,當(dāng)形參n的值為10時(shí),函數(shù)返回:-0.204491。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意;源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includedoublefun(intn){inti,k;doubles,t;s=0;/**********found***********/k=【1】;for(i=1;i<=n;i++){/**********found***********/t=【2】;s=s+k*(2*i-1)*(2*i+1)/(t*t);/*********found************/k=k*【3】;}returns;}main(){intn=-1;while(n<0){print;f("Pleaseinput(n>0):");scarlf("%d",&n);)printf("\nTheresultis:%f\n",fun(n));}標(biāo)準(zhǔn)答案:(1)1(2)2*i(3)(一1)知識(shí)點(diǎn)解析:第一空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知t*t表示的是級(jí)數(shù)項(xiàng)的分母,t=2*i,t=2,4,6…,故t的初始化值應(yīng)為1,因此第一空處應(yīng)為“1"。第二空:由第一空的分析可知,第二空處應(yīng)為“2*i"。第三空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知,k是級(jí)數(shù)項(xiàng)的(-1)n-1部分,所以在循環(huán)中k是每次都乘以-1,故第三處應(yīng)為“(-1)"。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODIl.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中偶數(shù)位上的數(shù),依次構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為:7654321時(shí),t中的數(shù)為:642。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/***********found**********/voidfun(10ngs,longt){longsl=10;s/=10;*t=s%10;/*********found*********/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;printf("\nPleaseenLers:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}標(biāo)準(zhǔn)答案:(1)voidfun(longs,long*t)(2)while(s>0)知識(shí)點(diǎn)解析:(1)第一個(gè)標(biāo)識(shí)下的形參t被定義為一個(gè)long型變量,而對(duì)應(yīng)的主函數(shù)中的實(shí)參卻是一個(gè)地址值。因此,t在函數(shù)定義中應(yīng)該被定義為一個(gè)指針變量,即“voidfun(10ngs.longt)"改為“voidfun(longs,long*t)"。(2)第二個(gè)標(biāo)識(shí)下的while循環(huán)控制表達(dá)式“s<0"要求s小于0才進(jìn)入循環(huán)。而s的值總是大于0,因此將“whilet(s<0)"改為“while(s>0)"。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返給主函數(shù)中的s。例如:a數(shù)組中的值為:則返回主程序后s的值應(yīng)為:3.375。注意:部分源程序存在文件PROGI.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#include#defineN5doublefun(intw[][N]){}main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;voidNONO();doubles;printf("*****Thearray*****\n");for(i=0;i標(biāo)準(zhǔn)答案:inti,j,n=0;doublesum=0;for(i=0;i知識(shí)點(diǎn)解析:進(jìn)入fun函數(shù),根據(jù)前面的分析,采用循環(huán)分別對(duì)符合周邊元素條件的元素進(jìn)行統(tǒng)計(jì)求平均值。國家二級(jí)(C語言)機(jī)試模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,將所有串長超過k的字符串中右邊的字符刪除,只保留左邊的k個(gè)字符。ss所指字符串?dāng)?shù)組中共有N個(gè)字符串,且串長小于M。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN5#defineM10/**************found**************/voidfun(char(*ss)【1】,intk)(inti=0;/***********found**************/while(i<【2】){/************found************/ss[i][k]=【3】;i++;}}main(){charX[N][M]={"Create","Modify","Sort","Skip","Delete"};inti;printf("\nTheoriginalstring\n\n");for(i=0;i標(biāo)準(zhǔn)答案:【1】[M]【2】N【3】0或’\0’知識(shí)點(diǎn)解析:第一空:第一空補(bǔ)充函數(shù)定義,在主函數(shù)內(nèi)fun函數(shù)的調(diào)用形式是“fun(x,4)",x是二維數(shù)組名,故fun函數(shù)的第一參數(shù)是指向二維數(shù)組的指針,因此第一空為“[M]"。第二空:“while(i<2)"是填循環(huán)終止條件,根據(jù)題意,fun函數(shù)是將所有串長超過k的字符串中右邊的字符刪除,因此循環(huán)次數(shù)為N,故第二空處為“N"。第三空:“ss[i][k]=【3】;i++;"是將串長超過k的字符串中右邊的字符刪除,即在ss[i][k]位置為0或"’\0’"。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:計(jì)算n的5次方的值(規(guī)定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計(jì)算該值的個(gè)位、十位、百位上數(shù)字之和作為函數(shù)值返回。例如,7的5次方是16807,其低3位數(shù)的和值是15。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includeintfun(intn,int*value){intd,s,i;/******************found******************/d=0;s=0;for(i=1;i<=5;i++)d=d*n;*value=d;for(i=1;i<=3;i++){s=s+c1%10;/******************found******************/d=d\10;}returns;}main(){intn,sum,v;do{printf("\nEntern(2=8);sum=fun(n,&v);printf("\n\nTheresult:\nvalue=%dsum=%d\n\n",v,sum);}標(biāo)準(zhǔn)答案:(1)d=1;s=0;(2)d=d/10;知識(shí)點(diǎn)解析:(1)第一個(gè)標(biāo)識(shí)下的“d=0:"求出的次方一直是0,所以將“d=0:"改為"d=1"。(2)第二個(gè)標(biāo)識(shí)下的“d=d\10;"是對(duì)d的截取,這里的“\"本意應(yīng)該是除號(hào),但這個(gè)在C語言中是不可識(shí)別的,所以第二個(gè)標(biāo)識(shí)下“d=d\10;"應(yīng)該改為“d=d/10;"。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、學(xué)生的記錄由學(xué)號(hào)和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中,注意:分?jǐn)?shù)最高的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最高的學(xué)生的人數(shù)。注意:部分源程序在文件PROGl.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#defiheN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRBCs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",77},{"GA017",64},{"GA018",64},"GA016",72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf{"The%dhighestscore:\n",n);for(i=0;i標(biāo)準(zhǔn)答案:inti,max=a[0].s,n=0;for(i=1;i知識(shí)點(diǎn)解析:(1)要把最高分?jǐn)?shù)的學(xué)生數(shù)據(jù)放在數(shù)組中,首先求出最高分?jǐn)?shù),再使用一個(gè)for循環(huán)把所有的成績進(jìn)行比較,找出最高的分?jǐn)?shù)來。(2)找出所有與最高分?jǐn)?shù)相等的學(xué)生,并將最高分?jǐn)?shù)的人數(shù)累加。國家二級(jí)(C語言)機(jī)試模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:逆置數(shù)組元素中的值。例如:若a所指數(shù)組中的數(shù)據(jù)依次為:1、2、3、4、5、6、7、8、9,則逆置后依次為:9、8、7、6、5、4、3、2、1。形參n給出數(shù)組中數(shù)據(jù)的個(gè)數(shù)。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論