版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
國家二級C語言機(jī)試(程序設(shè)計(jì)題)模擬試卷3(共4套)(共20題)國家二級C語言機(jī)試(程序設(shè)計(jì)題)模擬試卷第1套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、請編寫函數(shù)fun,其功能是求出數(shù)組的最大元素在數(shù)組中的下標(biāo)并存放在k所指的存儲單元中。例如,輸入如下整數(shù):876675896101301401980431451777則輸出結(jié)果為:6,980注意:部分源程序在文件PROG1.C文件中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#inoludevoidfun(int*s,intt,int*k){}main(){inta[10]={876,675,896,101,301,401,980,431,451,777),k;voidNONO();fun(a,10,&k);printf("%d,%d\n",k,a[k]);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/inta[10],i,k,j;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<10;j++)fscanf(rf,"%d",&a[j]);fun(a,10,&k);fprintf(wf,"%d,%d\n",k,a[k]);}fclOse(rf);fclOse(wf);}標(biāo)準(zhǔn)答案:inti,pos=0,max=*s,for(i=1;i知識點(diǎn)解析:(1)該程序功能是求最大元素在數(shù)組中的下標(biāo)。它的解題思路是,用最大值變量max標(biāo)記第一個(gè)待找數(shù)據(jù),逐個(gè)把所有待找數(shù)據(jù)和max進(jìn)行比較,并用pos標(biāo)記其當(dāng)前最大值所在位置,從而找出最大值。(2)從已給部分源程序的main主函數(shù)開始入手,核心函數(shù)“fun(a,10,&k);”中的參數(shù)a存放著給出的整數(shù),fun函數(shù)實(shí)現(xiàn)查找最大元素的下標(biāo)。2、請編寫函數(shù)fun,功能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如:若輸入的數(shù)據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。拄意:部分源程序存在PROG1.C中,請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。1#include<stdio.h>2voidNONO();3intfun(intn)4{5}6main()7{intn,place;8do{9printf(’’請輸入一個(gè)4位以內(nèi)的正整數(shù):’’);10scarlf(”%d”,&n);11}while(n<0||n>9999);12place=fun(n);13printf(’’輸入的數(shù)字是%d位\n’’,place);14NONO();15}16voidNONO()17{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/18FILE*fp,*wf;19inti,n,place;20fp=fopen(’’in.dat’’,’’r’’);21wf=fopen(’’out.dat’’,’’w’’);22for(i=0;i<10;i++)23{fscanf(fp,’’%d’’,&n);24place=fun(n);25fprfntf(wf,’’%d\n’’,place);26}27fclose(fp);28fclose(wf);29}標(biāo)準(zhǔn)答案:1intfun(intn)2{3intk=0;4if(n>999)k=4;5elseif(n>99)k=3;6elseif(n>9)k=2;7elsek=1;8returnk;9}知識點(diǎn)解析:本題fun函數(shù)的主要功能是判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。首先我們能想到這一題主要在于判斷,因?yàn)轭}目已經(jīng)限制了條件,就是數(shù)字的大小要不超過四位數(shù)的數(shù)字,而且要求只要輸出這個(gè)數(shù)字的位數(shù),這樣我們就能想到,只要判斷這個(gè)數(shù)字的大小就能知道位數(shù)了,小于10位1位,大于等于10小于100為2位,大于等于100小于1000位3位,大于等于1000小于等于9999為4位。所以只需要很簡單的幾個(gè)判斷語句就能實(shí)現(xiàn)函數(shù)的功能,然后輸出結(jié)果。主函數(shù)中首先要定義數(shù)據(jù),然后需要手動(dòng)輸入一個(gè)用來進(jìn)行判斷的數(shù)字,注意數(shù)字要不超過4位,見程序代碼第14~16行,而且這里為了防止輸入時(shí)不小心的錯(cuò)誤或者是有人故意錯(cuò)誤輸入而引發(fā)的不好的后果,在數(shù)據(jù)進(jìn)入fun函數(shù)處理之前還要一個(gè)while函數(shù)來進(jìn)行判斷數(shù)據(jù)是否合理在進(jìn)行處理,見程序代碼第17行。然后數(shù)字進(jìn)入fun函數(shù),這里很明顯會出現(xiàn)四種情況,數(shù)字的位數(shù)為1位,2位,3位或4位,所以我們用if…elseif來區(qū)別這四種情況見程序第6~9行,在判斷完之后我們就可以返回?cái)?shù)字位數(shù)k的值然后再到主函數(shù)main函數(shù)中進(jìn)行輸出處理。3、函數(shù)fun的功能是:將s所指字符串中除了下標(biāo)為偶數(shù)、同時(shí)ASCII值也為偶數(shù)的字符外,其余的全都刪除;串中剩余字符所形成的一個(gè)新串放在t所指的數(shù)組中。例如,若s所指字符串中的內(nèi)容為:”ABCDEFG123456”,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當(dāng)刪除;其中字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標(biāo)為奇數(shù),因此也應(yīng)當(dāng)刪除;而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標(biāo)也為偶數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是:”246”。注意:部分源程序存在文件PROG1.C中。請勿改動(dòng)主函數(shù)mam和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();)voiclNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen(”in.dat","r");wf=fopen("out.dat","W");for(i=0;i<10;i++){fscanf(rf,"%s"s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);)標(biāo)準(zhǔn)答案:1inti,j=0;2for(i=0;i知識點(diǎn)解析:該程序功能是將字符串中除了下標(biāo)為偶數(shù)、ASCII值也為偶數(shù)的字符外,其余的全都刪除。解題過程利用if條件判斷表達(dá)式選擇符合條件的字符,然后將符合條件的字符放入指定的字符串。(1)判斷一個(gè)字符串中的某一字符下標(biāo)i是否為偶數(shù),可用“i%2=0”來判斷;也可以從下標(biāo)0開始,每次增2。判斷字符中的ASCII碼值是否為偶數(shù),則可用“s[i]%2==0”來判定。(2)對串s中下標(biāo)為偶數(shù)的字符進(jìn)行考查,滿足ASCII碼值是偶數(shù)條件的字符就順序放在新串s中,否則就不存放。(3)所有字符處理完后,記得在新串s的末尾加上結(jié)束符“’\of’”。字符數(shù)組和字符串、if語句及其構(gòu)成的選擇。4、請編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計(jì)一行字符串中單詞的個(gè)數(shù),作為函數(shù)值返回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間由若干個(gè)空格隔開,一行的開始沒有空格。注意:部分源程序在文件PROG1.C中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。1#include<stdio.h>2#include<string.h>3#defineN804intfun(char*a)5{67}8main()9{charline[N];intnum=0;voidNONO();10printf(’’Enterastring:\n’’);gets(line);11num=fun(lihe);12printf(’’Thenumberofwordis:%od\n\n’’,num);13NONO();14}15voidNONO()16{/*請?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/17FILE*rf,*wf;inti,num;charline[N],*p;18rf=fopen(’’in.dat’’,’’r’’);19wf=fopen(’’out.dat’’,’’w’’);20for(i=0;i<10;i++){21fgets(line,N,rf);22p=strchr(line,’\n’);23if(p!=NULL)*p=0;24num=fun(line);25fprintf(wf,’’%d\n’’,num);26}27fclose(rf);fclose(wf);28}標(biāo)準(zhǔn)答案:1inti,n=0;//字符統(tǒng)計(jì)初始值設(shè)置為02for(i=0;i<strlen(s);i++)3//小于字符串長度進(jìn)行字符循環(huán)判斷4{5if(s[i]>=’a’&&s[i]<=’z’&&s[i+1]=’’||s[i+1]==’\0’)//單詞判斷條件6n++;//單詞統(tǒng)計(jì)計(jì)數(shù)器加17}8returnn;//返回統(tǒng)計(jì)值知識點(diǎn)解析:該程序功能是統(tǒng)計(jì)一行字符串中單詞的個(gè)數(shù),作為函數(shù)值返回。單詞之間以空格為分割,所以,對單詞個(gè)數(shù)的統(tǒng)計(jì)可以理解為對空格字符的統(tǒng)計(jì),其中,最后一個(gè)單詞以字符串的結(jié)尾符為分割。(1)首先,求得字符串的長度。(2)只要小于字符串的長度,就對字符進(jìn)行循環(huán)判斷。(3)根據(jù)題干要求,只要字符是小寫字母,并且下一個(gè)緊靠的字符是空格或者尾符,那么單詞統(tǒng)計(jì)計(jì)數(shù)器就加1。5、已知學(xué)生的記錄由學(xué)號和學(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的花括號中填入你編寫的若干語句。試題程序:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.h>#defineN10typedefstructss/*定義結(jié)構(gòu)體*/{charnHm[10];ints;}STU;fun(STUa[],STU*s){}voidmain(){STUa[N]={{"A0l",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;system("CLS");printf("****Theoriginaldata****");for(i=0;i<N;i++)pr2ntf("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);}標(biāo)準(zhǔn)答案:fun(sTua[],STU*s){inti;*s=a[0]jfor(i=0;i<N;i++)/*找出成績最高的學(xué)生記錄*/if(s一>s<a[i].s)*s=a[i];}知識點(diǎn)解析:本題考查:成績最高的學(xué)生記錄查找;for循環(huán)語句;if條件語句。本題的流程是先使s指向第1名學(xué)生,利用循環(huán)語句遍歷所有學(xué)生的成績,利用條件語句判斷當(dāng)前學(xué)生成績是否最高,所以if語句的條件是s一>s<a[i].s。此外,做題時(shí)應(yīng)該熟練掌握“指向運(yùn)算符”和“成員運(yùn)算符”的相關(guān)知識,題中“s一>s”等價(jià)于“(*s).s”。國家二級C語言機(jī)試(程序設(shè)計(jì)題)模擬試卷第2套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、請編寫函數(shù)fun,該函數(shù)的功能是:判斷字符串是否為回文,若是,則函數(shù)返回1,主函數(shù)中輸出”YES”,否則返回0,主函數(shù)中輸出”NO”?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。請勿改動(dòng)主函數(shù)maln和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(char*str){main(){chars[N];FILE*out;char*test[]={"1234321","123421","123321","abcdCBA"};inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/******************/out=fopen("out.dat"’"w");if(fun(test[i]))fprintf(out,"YES\n");elsefprintf(out,"NO\n");fclose(out);/******************/}標(biāo)準(zhǔn)答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*將指針p置位到字符串末尾,并統(tǒng)計(jì)字符數(shù)*/{n++;p++;}for(i=0;i<n/2;i++)/*循環(huán)比較字符*/if(str[i]==str[n一1一1]);/*相同,什么都不作*/else/*不同,直接跳出循環(huán)*/{fg=0;break;}returnfg;}知識點(diǎn)解析:判斷圓文就是將第一個(gè)字符與最后一個(gè)字符比較,第二個(gè)字符與倒數(shù)第二個(gè)字符進(jìn)行比較,依此類推,直到中間的字符,如果比較的結(jié)果都相同,那么這個(gè)字符串就是回文,否則不是。程序中循環(huán)語句用來遍歷字符串,條件語句用來判斷當(dāng)前字符與對應(yīng)位置的字符是否相同。2、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請編寫函數(shù)fun,該函數(shù)的功能是:將s所指字符串中ASCII碼值為偶數(shù)的字符刪除,串中剩余字符形成一個(gè)新串放在t所指的數(shù)組中。例如,若s所指字符串中的內(nèi)容為“ABCDEFG12345”,其中字符B的ASCII碼值為偶數(shù),字符2的ASCII碼值為偶數(shù),都應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是“ACEG135”。注意:部分源程序給出如下。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<st(tlib.h>#include<stdio.h>#include<string.h>#include<conio.h>voidfun(char*s,chart[]){}voidmain(){chars[100],t[100];system("CLS");printf("\nPleaseenterstrings:");SCanf("%s",s);fun(s,t);print:f("\nTheresultis:%s\n",t);}標(biāo)準(zhǔn)答案:voidfun(char*s,chart[]){inti=0;for(*s!=’\0’;s++)/*找出ASCII值為奇數(shù)的字符依次存入數(shù)組t中*/if(*s%2==1)t[i++]=*s;t[i]=’\0’;/*在字符串的末尾加上串結(jié)束符*/}知識點(diǎn)解析:要?jiǎng)h除ASCII碼值為偶數(shù)的字符,也就是要留下ASCII碼值為奇數(shù)的字符。由于最終是要求出剩余字符(即ASCII碼值為奇數(shù))形成的新串,所以本題程序的算法是對原字符串從頭到尾掃描,并找出ASCII碼值為奇數(shù)的字符并將其依次存人數(shù)組t中。此外,還要注意數(shù)組t的下標(biāo)變化和下標(biāo)的初值(初值必須為0,即i=0),t[i++]的作用是先使用t[i],然后再使i自增1。3、學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,其功能是:把低于平均分的學(xué)生數(shù)據(jù)放入b所指的數(shù)組中,低于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN8typedefstruct{charFILIm[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++)/*輸出成績低于平均值的學(xué)生記錄*/printf("%s%4.1f\n",h[i].num,h[i].s);printf("\n");}標(biāo)準(zhǔn)答案:doublefun(STREC*a,STREC*b,int*n){inti,j=0;doubleav=0.0;for(i=0;i<N;i++)av=av+a[i].s;av=av/N;/*求平均值*/for(i=0;i<N,i++)if(a[i].s<av)b[j++]=a[i];/*將低于平均值的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/*n=j;/*指針傳回低于平均值的學(xué)生人數(shù)*/returnav;/*返回平均值*/}知識點(diǎn)解析:本題使用循環(huán)語句和條件判斷語句來實(shí)現(xiàn)程序操作,第1個(gè)循環(huán)語句的作用是求出總分,然后求出平均分av。第2個(gè)循環(huán)的作用是將分?jǐn)?shù)低于平均分的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中。4、學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已放入主函數(shù)中的結(jié)構(gòu)體數(shù)組S中。請編寫函數(shù)fun,其功能是:把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。例如,輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60一69的學(xué)生數(shù)據(jù)輸出,包含60分和69分的學(xué)生數(shù)據(jù)。主函數(shù)中把60放在low中,把69放在heigh中。注意:部分源程序給出如下。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth){}voidmain(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72),{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n,low,heigh,t;printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,&heigh);if(heigh<low){t=heigh;heigh=1ow;low=t;}n=fun(s,h,low,heigh);printf("Thestudent’sdatabetween%d一一%d:\n",low,heigh);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);printf("\n");}標(biāo)準(zhǔn)答案:intfun(STREC*a,STREC*b,intl,inth){inti,j=0;for(i=0;i<N;i++)if(a[i].s>=1&&a[i].s<=h)/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/b[j++]=a[i];returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/}知識點(diǎn)解析:本題考查:結(jié)構(gòu)體數(shù)組操作;循環(huán)判斷結(jié)構(gòu)。本題使用循環(huán)判斷結(jié)構(gòu)實(shí)現(xiàn)程序操作,循環(huán)語句用于遍歷結(jié)構(gòu)體數(shù)組,條件語句用于判斷當(dāng)前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)體數(shù)組b中。5、編寫函數(shù)fun,它的功能是計(jì)算下列級數(shù)和,和值由函數(shù)值返回。例如,當(dāng)n=10,x=0.3時(shí),函數(shù)值為1.349859。注意:部分源程序在文件PROG1.C文件中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。1#include<stdio.h>2#include<math.h>3doublefun(doublex,intn)4{5}6main()7{voidNONO();8printf(’’%f\n’’,fun(0.3,10));9NONO();10}11voidNONO()12{/(本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/13FILE*fp,*wf;14inti,n;15doubles,x;16fp=fopen(’’in.dat’’,’’r’’);17wf=fopen(’’out.dat’’,’’w’’);18for(i=0;i<10;i++){19fscanf(fp,’’%1f,%d’’,&x,&n),20s=fun(x,n);21fprintf(wf,’’%f\n’’,s);22}23fclose(fp);24fclose(wf);}標(biāo)準(zhǔn)答案:1doubles=1.0,y=x;2inti;3longk=1;4for(i=1;i<=n;i++){5k=k*i;6s+=y/k;7y*=x;8}9returns;知識點(diǎn)解析:該程序功能是計(jì)算并輸出多項(xiàng)式值。根據(jù)題干中給出的數(shù)列,首先推出每_項(xiàng)的表達(dá)式,然后再對多項(xiàng)式進(jìn)行累加求和。(1)根據(jù)題干中給出的數(shù)列,推出每一項(xiàng)分子是在前一項(xiàng)的基礎(chǔ)上乘以x,分母是每一項(xiàng)的階乘,它可以在前一項(xiàng)的基礎(chǔ)上乘以當(dāng)前項(xiàng)的項(xiàng)數(shù),即第n項(xiàng)是n。(2)在循環(huán)中求得每一項(xiàng),然后對其進(jìn)行累加求和。國家二級C語言機(jī)試(程序設(shè)計(jì)題)模擬試卷第3套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請編一個(gè)函數(shù)floatfun(doubleh),該函數(shù)的功能是:使變量h中的值保留兩位小數(shù),并對第三位進(jìn)行四舍五人(規(guī)定h中的值為正數(shù))。例如,若h值為1234.567,則函數(shù)返回1234.570000;若h值為1234.564,則函數(shù)返回1234.560000。注意:部分源程序在文件PROG1.C中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>floatfun(floath){}voidmain(){FILE*wf;floata;system("CLS");printf("Entera:");scanf("%f",&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf("Theresult:%f\n",fun(a));/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%f",fun(8.32533));fclose(wf);/*********found*********/}標(biāo)準(zhǔn)答案:floatfun(floath){inttmp=(int)(h*1000+5)/10;/*單精度數(shù)h乘以1000后再加5,相當(dāng)于對h中的第三位小數(shù)進(jìn)行四舍五入,除以10后將其賦給一個(gè)長整型數(shù)時(shí)就把第三位小數(shù)后的數(shù)全部截去*/return(float)gmp/100.0;/*除以100,保留2位小數(shù)*/}知識點(diǎn)解析:注意:本題要求對h的值真正進(jìn)行四舍五入運(yùn)算,而不是為了輸出,即不能用prinff("%7.2f",h)來直接得到結(jié)果。四舍五人算法:如果要求精確到小數(shù)點(diǎn)后面的第n位,則需要對第n+1位進(jìn)行運(yùn)算。方法是將該小數(shù)乘以10的n+1次方后加5,然后除以10并強(qiáng)制轉(zhuǎn)換變量類型為整型,再將該數(shù)除以10的n次方,同時(shí)強(qiáng)制轉(zhuǎn)換類型為浮點(diǎn)型。代碼實(shí)現(xiàn)如下:intt;/*定義整型變量t*/t=(int)(h*10n+1+5)/10;/*對h進(jìn)行操作,得到值浮點(diǎn)型,t取值時(shí)取整數(shù)部分。10n+1為要擴(kuò)大的倍數(shù)*/h=(noat)t/10n;/*將t縮小10n倍,并轉(zhuǎn)換成浮點(diǎn)型*/2、請編寫函數(shù)fun,該函數(shù)的功能是:判斷字符串是否為回文,若是,則函數(shù)返回1,主函數(shù)中輸出"YES",否則返回0,主函數(shù)中輸出"NO"?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(char,*str){}main(){chars[N];FTLE*out;char*test[]={"1234321","123421","123321","abcdCBA"},inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/******************/out=fopen("out.dat","w"),for(i=0;i<4;i++)if(fun(test[i]))fprintf(out,"YES\n");elsefprintf(out,"NO\n");fclose(out);/******************/}標(biāo)準(zhǔn)答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*將指針p置位到字符串末尾,并統(tǒng)計(jì)字符數(shù)*/{n++;p++;}for(i=0;i<n/2;i++)/*循環(huán)比較字符*/if(str[i==str[n-1-1]);/*相同,什么都不作*/else/*不同,直接跳出循環(huán)*/{fg=0;break;}returnfg;}知識點(diǎn)解析:判斷回文就是將第一個(gè)字符與最后一個(gè)字符比較,第二個(gè)字符與倒數(shù)第二個(gè)字符進(jìn)行比較,依此類推,直到中間的字符,如果比較的結(jié)果都相同,那么這個(gè)字符串就是回文,否則不是。程序中循環(huán)語句用來遍歷字符串,條件語句用來判斷當(dāng)前字符與對應(yīng)位置的字符是否相同。3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請編寫函數(shù)fun,函數(shù)的功能是查找x在s所指數(shù)組中下標(biāo)的位置,并作為函數(shù)值返回,若x不存在,則返回﹣1。注意:部分源程序在文件PROG1.C文件中,請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<stdlib.h>#defineN15voidNONO();intfun(int*s,intx){}main(){inta[N]={29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a數(shù)組中的數(shù)據(jù):\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");printf("給x輸入待查找的數(shù):");scanf("%d",&x);index=fun(a,x);printf("index=%d\n",index);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,j,a[10],x,index;fp=fopen("in.dat","r");wf=fopen("out.clat","w");for(i=0;i<10;i++){for(j=0;j<10;j++){fscanf(fp,"%d",&a[j]);}fscanf(fp,"%d",&x);index=fun(a,x);fprintf(wf,"%d\n",index);}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:intfun(int*s,intx){inti;for(i=0;i<N;i++)if(x==s[i])returni;return﹣1;}知識點(diǎn)解析:要找出數(shù)組中指定數(shù)據(jù)的下標(biāo),首先定義變量i用于存放數(shù)組下標(biāo),然后使用循環(huán)語句對數(shù)組進(jìn)行遍歷,依次取出一個(gè)數(shù)組元素與指定的數(shù)進(jìn)行比較,若相等,則返回該元素的下標(biāo),否則繼續(xù)判斷下一個(gè)元素,直到數(shù)組結(jié)束。若數(shù)組結(jié)束時(shí)仍沒有找到與指定數(shù)相等的元素,則返回﹣1。4、規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和尾部的*號外,將串中其他的*號全部刪除。形參h已指向字符串中第—個(gè)字母,形參P指向字符串中最后一個(gè)字母。在編寫函數(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的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>#include<string.h>voidfun(char*a,char*h,char*p){}main(){chars[81],*t,*f;printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t一一;while(*t==’*’)t一一;while(*f==’*’)f++;fun(s,f,t);printf("Thestringafterdeleted:\n");puts(s);}標(biāo)準(zhǔn)答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*將前導(dǎo)*號保存到a中*/while(q<h){a[i]=*q;q++;i++;}/*繼續(xù)遍歷數(shù)組*/while(q<p){if(*q!=’*’){/*如果不是*保存到a中*/a[i]=*q;i++;}q++;}/*將末尾*號保存到a中*/while(*q){}}知識點(diǎn)解析:本題的重點(diǎn)是要選擇好判斷條件,首先是需要判斷前導(dǎo)*號的結(jié)束,然后判斷是否指向最后一個(gè)字母,最后補(bǔ)充尾部*號,只要思路對了即可正確解答。5、請編寫一個(gè)函數(shù)fun,它的功能是:求出1到m之間(含m)能被7或11整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個(gè)數(shù)。例如,若傳送給m的值為50,則程序輸出:711142122283335424449注意:部分源程序存在文件PROG1.C中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#defineM100v02dfun(intm,int*a,int*n){}main(){intaa[M],n,k;voidNONO();fun(50,aa,&n);for(k=0;k標(biāo)準(zhǔn)答案:inti,j=0;*n=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0){a[j]=i;j++,}*n=j;知識點(diǎn)解析:該題是求某范圍內(nèi)能被7或11整除的數(shù)。該程序的解題思路可以分解為以下幾步:判斷是否被7整除→判斷或者是否被11整除→按要求返回計(jì)算結(jié)果。國家二級C語言機(jī)試(程序設(shè)計(jì)題)模擬試卷第4套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,編寫函數(shù)fun,其功能是:將s所指字符串中除了下標(biāo)為奇數(shù)同時(shí)ASCII碼值也為奇數(shù)的字符之外,其余的所有字符全部刪除,串中剩余字符所形成的一個(gè)新串放在t所指的數(shù)組中。例如,若s所指字符串的內(nèi)容為“ABCDEFG12345”,其中字符A的ASCII碼值為奇數(shù),但所在元素的下標(biāo)為偶數(shù),因此需要?jiǎng)h除;而字符1的ASCII碼值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。注意:部分源程序給出如下。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];printf("\nPleaseenterstrings:");Scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}標(biāo)準(zhǔn)答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i<n;i++)if((i%2)&&(s[i]%2)){t[j++]=s[i];/*將下標(biāo)為奇數(shù)同時(shí)ASCII碼值為奇數(shù)的字符放入數(shù)組t中*/t[j]=’\0’;/*最后加上結(jié)束標(biāo)識符*/}知識點(diǎn)解析:本題要求除了下標(biāo)為奇數(shù)同時(shí)ASCII碼值也為奇數(shù)的字符,其余的所有字符都刪除,即要留下下標(biāo)為奇數(shù)同時(shí)ASCII碼值也為奇數(shù)的字符。所以if的條件語句應(yīng)為:if(i%2!=0&&s[i]%2!=0)。2、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和尾部的*號外,將串中其他的水號全部刪除。形參h已指向字符串中第一個(gè)字母,形參p指向字符串中最后一個(gè)字母。在編寫函數(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的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>#include<string.h>voidfun(cha*a,char*h,char*p){}main(){chars[81],*t,*f;printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t﹣﹣;while(*t==’*’)t﹣﹣;while(*f==’*’)f++;fun(s,f,t),printf("Thestringafterdeleted:\n");puts(s);}標(biāo)準(zhǔn)答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*將前導(dǎo)水號保存到a中*/while(q<h){a[i]=*q;q++;i++;}/*繼續(xù)遍歷數(shù)組*/while(q<p){if(*q!=’*’){/*如果不是*保存到a中*/a[i]=*q;i++;}q++;}/*將末尾*號保存到a中*/while(*q){a[i]=*q;i++;q++;}a[i]=’\0’;}知識點(diǎn)解析:本題的重點(diǎn)是要選擇好判斷條件,首先是需要判斷前導(dǎo)*號的結(jié)束,然后判斷是否指向最后一個(gè)字母,最后補(bǔ)充尾部*號,只要思路對了即可正確解答。3、編寫函數(shù)fun,其功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并成一個(gè)整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的個(gè)位和百位上,b數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的千位和十位上。例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=1524。注意:部分源程序給出如下。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");fun(a,b,&c);printf("Theresultis:%ld\n",c);}標(biāo)準(zhǔn)答案:voidfun(inta,intb,lang*c){/*b%10獲取b的個(gè)位,a/10獲取a的十位,a%10獲取a的個(gè)位,b/10獲取b的十位*/*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛州師范高等??茖W(xué)?!墩撐囊?guī)范教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 《急診科護(hù)理查房》課件
- 三年級數(shù)學(xué)上冊六平移旋轉(zhuǎn)和軸對稱平移和旋轉(zhuǎn)說課稿蘇教版
- 2021一建考試《建筑工程實(shí)務(wù)》題庫試卷考點(diǎn)題庫及參考答案解析四
- 《論壇推廣》課件
- 小學(xué)生生物安全課件下載
- 一元一次討論移項(xiàng)-課件
- 火災(zāi)現(xiàn)場安全課件
- 《激光在眼科的運(yùn)用》課件
- 小學(xué)生武警教育課件
- 機(jī)械結(jié)構(gòu)工程師年終總結(jié)
- 成都大學(xué)《Python數(shù)據(jù)分析》2023-2024學(xué)年期末試卷
- 基礎(chǔ)、主體、裝飾裝修階段檢驗(yàn)、驗(yàn)收計(jì)劃表-
- 2024年醫(yī)院消毒隔離制度范文(六篇)
- 2024年國家開放大學(xué)(電大)-行政管理(本科)考試近5年真題集錦(頻考類試題)帶答案
- 朗讀藝術(shù)入門學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 可愛的企鵝(教案)-2024-2025學(xué)年一年級上冊數(shù)學(xué)北師大版
- 2024年國家公務(wù)員考試公共法律知識考試題庫及答案(共530題)
- 2024年秋一年級上冊4日月山川 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 人教版英語2024年初中中考考綱單詞表(整合版)
- 護(hù)士先進(jìn)個(gè)人事跡材料(12篇)
評論
0/150
提交評論