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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國家二級(C語言)機試模擬試卷29(共9套)(共27題)國家二級(C語言)機試模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數fun的功能是:計算直到。若x=2.5,函數值為:1.917915。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的RLANKI.C中。不得增行或刪行,也不得更改程序的結構!#include#includedoublefun(doublex){doublef,t;intn;f=1.0+x;/***************found***************/t=【1】;n=1;do{n++;/***************found***************/t*=(一1.0)*x/【2】;f+=t;}/***************found***************/while(【3】>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf("\nTheresultis:\n");printf("x=%-12.6fy=%-12.6f\n",x,y);}標準答案:(1)x(2)n(3)fabs(t)知識點解析:第一空:“f=1.0+x;"f的初始化為級數的前兩項之和,dowhile循環(huán)從第三項x2/2開始計算,第一空處是給t賦初值,t表示級數項,“n++;t*=(-1.0)*x/【2】;"即第一次進入do循環(huán)之后n的值為2,故t的初值應該為x,第一空處應為“x"。第二空:由審題分析可知,后一項乘以(-1)*x除以n,故第二空處應為“n"。第三空:循環(huán)的終止條件是(xn/n!)的絕對值小于le-6,即只要(xn/n!)大于等于le-6,do循環(huán)就執(zhí)行,故第三處應為“l(fā)abs(t)",fabs函數的功能是求絕對值。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數fun的功能是:在p所指字符串中找出ASCⅡ碼值最大的字符,將其放在第一個位置上;并將該字符前的原字符向后順序移動。例如,調用fun函數之前給字符串輸入:ABCDeFGH,調用后字符串中的內容為:eABCDFGH。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。#includevoidfun(char*p){charmax,*q;inti=0;max=p[i];while(p[i]!=0){if(maxp){*q=*(q-1);q--;}p[0]=max;}main(){charstr[80];printf("Enterastring:");gets(str);printf("\nTheoriginalstring:");puts(str);fun(str);printf("\nThestringaftermoving:");puts(str);printf("\n\n");}標準答案:q=p+I;while(q>p)知識點解析:(1)在C語言中語句以分號“;”結束,在第一個標識下語句“q=p+i”沒有用分號結尾,應改為“q=p+I;”。(2)根據題意第二標識下是利用循環(huán)來將移走的字符前的原字符向后順序移動,第二標識下“wihle(q>p)”wihle不是C語言關鍵字,應改成“while(q>p)”,利用while循環(huán)來實現字符移動。三、程序設計題(本題共1題,每題1.0分,共1分。)3、假定輸人的字符串中只包含字母和*號。請編寫函數proc(),它的功能是:除了尾部的*號之外,將字符串中其他*號全部刪除。形參p已指向字符串中最后一個字母。在編寫函數時,不得使用C語言的字符串函數。例如,若字符串中的內容為****a*bc*def*g****,刪除后,字符串中的內容應當是abcdefg****。注意:部分源程序給出如下。請勿改動main()函數和其他函數中的任何內容,僅在函數proc()的花括號中填入所編寫的若干語句。試題程序:#include#includevoidproc(char*str,char*p){}voidmain(){charstr[81],*t;printf(”Enterastring:\n”);gets(str);t:==str0while(*t)t++;t--;//指針t指向字符串尾部while(*t一=’*’)t--;//指針t指向最后一個字母proc(str,t);printf(”Thestringafterdeleted:\n”);puts(str);}標準答案:voidproc(char*str,char*p){char*t=str;for(;t<=p;t++)if(*t!=’*’)//把前面不是*號的字符放到a數組,通過t的移動來實現*(str++)=*t;for(;*t!=’\0’;t++)*(str++)=*t;//把尾部的*號接到其后面,當*t為’\0’,時結束*str=’\0’;//題目要求a數組中存放字符,因此用’\0’作為結束標志知識點解析:題目中要求除了尾部的*號之外,將字符串中其他*號全部刪除。首先將所有不是*的字符放在字符串str中,然后將尾部的*接在字符的后面,最后為字符串str加上結束符。國家二級(C語言)機試模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充main函數,該函數的功能是:打印屆1~1000中滿足:個位數字的立方等于其本身所有數。本題的結果為;164125216729注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數main的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>main(){inti,g;clrscr();for(i=1;i<1000;i++){g=【】;if(【】)printf("%4d",i);}}標準答案:i%10g*g*g==i知識點解析:第一空:將一個整數對10求余,就得到這個數的個位數字,并存于變量g中。第二空:如果個位數字的立方等于這個數本身,則將這個數輸出。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數fun()的功能是:首先把b所指字符串中的字符按逆序存放,然后將a所指字符串中的字符和b所指字符串中的字符,按排列的順序交叉合并到c所指數組中,過長的剩余字符接在c所指數組的尾部。例如,當a所指字符串中的內容為abcdefg,b所指字符串中的內容為1234時,c所指數組中的內容應該為a4b3c2dlefg;而當a所指字符串中的內容為1234,b所指字符串中的內容為abcdefg時,c所指數組中的內容應改為1g2f3e4dcba。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。試題程序#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*a,char*b,char*c){inti,j;charch;i=0;j=strlen(b)-1;/*************found**************/while(i>j}{ch=bill;b[i]=b[j];b[j]=ch;i++;j--;}while(*a||*b){if(*a){*c=*a;c++;a++;}if(*b){*c=*b;c++;b++;}}/*************found**************/*c=0;}main(){chars1[100],s2[100],t[200];clrscr();printf("\nEnters1string:");scanf("%s",s1);printf("\nEnters2string:");scanf("%s",s2);fun(s1,s2,t);printf("\nTheresultis:%s\n",t);}標準答案:(1)錯誤:while(i>j)正確:while(i<j)(2)錯誤:*c=0;正確:*c=’\0’知識點解析:這是一個字符串處理的較為混合的程序,將字符串倒序存放的方法一般是以字符串中央為中心,將兩邊對稱位置的字符互相交換??衫醚h(huán)語句實現,但必須要注意兩邊對稱位置元素的下標。該題是用指針配合循環(huán)的嵌套實現解題目的。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫函數fun(),該函數的功能是:實現B=A+A’,即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main()函數中輸出。例如,輸入下面矩陣:123456789其轉置矩陣為:147258369則程序輸出:261061014101418注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#include<conio,h>voidfun(inta[3][3],intb[3][3]){}main(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];inti,j;clrscr();fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",t[i][j]);printf("\n");}}標準答案:voidfun(inta[3][3],intb[3][3]){inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉置,存放在矩陣b中*/}知識點解析:在《線性代數》里面有矩陣轉置的概念,行列數相等的二維數組的轉置就是行列互換。即轉置后的第i行第j列正好對應原矩陣的第j行第i列。若要將矩陣a轉置后還存入a中可用程序:inti,j,t;for(i=0;i<N;i++)for(j=i;j<N;j++){t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}注意第2個循環(huán)的初值。若要將矩陣a轉置后存入c中:inti,j;for(i=0;i<N;i++)for(j=0;j<N;j++)c[i][j]=a[j][i];注意數組c和a的下標。國家二級(C語言)機試模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數fun的功能是:把形參s所指字符串中下標為奇數的字符右移到下一個奇數位置,最右邊被移出字符串的字符繞回放到第一個奇數位置,下標為偶數的字符不動(注:字符串的長度大于等于2)。例如,形參s所指的字符串為:abcdefgh,執(zhí)行結果為:ahcbedgf。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#includevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=’\0’;i++)n++;/**********found**********/if(n%2==0)k=n-【1】;elsek=n-2;/**********found**********/c=【2】;for(i=k-2;i>=1;i=i-2)s[i+2]=s[i];/**********found**********/s[1]=【3】;}main(){chars[80]="abcdefgh";printf("\nTheoriginalstringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}標準答案:1s[k]c知識點解析:第一空:“for(i=0;s[i]!=’\0’;i++)n++;”n記錄了數組s的長度,“if(n%2==0)”如果長度n是偶數,那么最右邊被移出的字符的下標是在n-1,如果n是奇數,那么最右邊被移出的字符的下標是n-2,因此第一空處應為“1”。第二空:題目要求最右邊被移出字符串的字符繞回放到第一個奇數位置,因此最右邊被移出的字符是s[k],在s[k]被替換之前必須先把s[k]保存在其他變量中,故第二空處應為“s[k]”,將s[k]保存在c中。第三空:此處是把最右邊被移出字符串的字符繞回放到第一個奇數位置,最右邊被移出字符保存在c,第一奇數位置是s[1],故第三處應為“c”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODII.C中函數fun的功能是:逐個比較P、q所指兩個字符串對應位置中的字符,把ASCII值大或相等的字符依次存放到c所指數組中,形成一個新的字符串。例如,若主函數中a字符串為:aBCDeFgH,主函數中b字符串為:ABcd,則c中的字符串應為:aBcdeFgH。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。#include#includevoidfun(char*p,char*q,char*c){/************found************/intk=1;/************found************/while(*p||*q){if(*p<*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++}}main(){chara[10]="ABCDeFgH",b[10]="ABcd",c[80]={’\0’};fun(a,b,c);printf("Thestringa:");puts(a);printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}標準答案:intk=0;aBCDeFgH知識點解析:(1)第一個標識下面的“intk=1;”在題目中要求將字符放在數組c,如果數組中有n個元素,應該從c[0]到c[n-1]。所以,應將k的初始化定義改為從0開始,即“intk=0;”。(2)第二個標識下面的判斷條件,是根據題目要求逐個比較兩個數組對應字符的ASCII值的大小,所以判斷條件應該是直到兩個字符數組所有元素比較完畢,而不是數組對應元素不相等。其中,該題主要考查變量的初始化,邏輯關系。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫函數fun,函數的功能是:將M行N列的二維數組中的字符數據,按列的順序依次放到一個字符串中。例如,二維數組中的數據為:則字符串中的內容應是:WsHWSHwSH。注意:部分源程序在文件PROGl.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#include#defineM3#defineN4voidfun(chars[][N],char*b){inti,j,n=0;for(i=0;i標準答案:{for(j=0;j知識點解析:(1)利用兩重循環(huán),依次取矩陣中的元素。(2)其中注意指針數組與數組指針的區(qū)別,其中數組指針b,它指向包含4個元素的一維數組。(3)最后,在一維數組字符處理完畢后,一定要使其尾元素賦值為串結束符’\0’。國家二級(C語言)機試模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、人員的記錄由編號和出生年、月、日組成,N名人員的數據已在主函數中存入結構體數組std中。函數fun的功能是:找出指定出生年份的人員,將其數據放在形參k所指的數組中,由主函數輸出,同時由函數值返回滿足指定條件的人數。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#include#defineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i標準答案:std[i].yearstd[i]n知識點解析:第一空:比較結構體的出生年份是否等于year,std是結構體指針,指向結構體數組的首地址,因此訪問一個結構體的year成員是std[i].year,因此第一空處應為“if(std[i].year==year)”。第二空:這里是將找到的數據放在形參k所指的數組中,k是指針變量,k指向結構體數組的首地址,std[i]是結構體的地址,因此等號左邊也應該是地址,故第二空處應為“k[n++]=std[i];”。第三空:fun函數的返回值是滿足指定條件的人數n,故第三空處是“return(n);”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數fun的功能是:求出數組中最大數和次最大數,并把最大數和a[0]中的數對調、次最大數和a[1]中的數對調。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!#include#defineN20intfun(int*a,intn){inti,m,t,k;for(i=0;i<2;i++){/**********found**********/m=0;for(k=i+1;ka[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;for(i=0;i標準答案:m=i;if(a[k]>a[m])m=k;知識點解析:(1)第二個標識符下for循環(huán)逐個對m個數據進行選擇判斷,原題中“m=0;”語句將m值設置為0,在循環(huán)中m值始終是0,不會改變,根據“for(i=0;i<2;i++)”語句中的循環(huán)條件,“m=0;”改為“m=i;”。(2)如果“if(a[k]>a[m])”,a[k]比a[m]大,m記錄下下標值k,內層循環(huán)結束的時候a[m]值就是本次循環(huán)找到的最大值(如果m=0,a[m]是數組中的最大值;如果m=1,a[m]數組中的次最大值),即m記錄最大值的下標值,因此第二標識下應該是“if(a[k]>a[m])m=k;”。三、程序設計題(本題共1題,每題1.0分,共1分。)3、假定輸入的字符串中只包含字母和*號。請編寫函數fun,它的功能是:除了尾部的*號之外,將字符串中其他*號全部刪除。形參p已指向字符串中最后的一個字母。在編寫函數時,不得使用C語言提供的字符串函數。例如,字符串中的內容為:****A*BC*DEF*G*******,刪除后,字符串中的內容應當是:ABCDEFG*******。注意:部分源程序在文件PROGI.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#includevoidfun(char*a,char*p){}main(){chars[81],*t;voidNONO();printf("Enterastring:\n");gets(s);t=s;while(*t)t++;t--;while(*t==’*’)t--;fun(s,t);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。*/FILE*in,*out;inti;chars[81],*t;in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);t=s;while(*t)t++;t--;while(*t==’*’)t--;fun(s,t);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}標準答案:{char*q=a;intj=0;while(*q&&q知識點解析:(1)首先,主函數中使指針移到字符串的最后一個字符,對字符串由串尾開始進行操作。(2)然后,指針由尾開始向頭移動,查找第一個非“*”號字符,指針t指向后一個非“*”,即從最后一個非“*”,字符開始的字符都不需要刪除,將前面的其它“*”號全部刪除后,將尾部的“*”字符往前移動即可。(3)確定了字符數組的最后一個字符非“*”后,調用fun函數,在fun函數中,將原串中由起始位置的字符開始到最后一個非“*”逐個查詢該字符是否是“*”字符,如果是則刪除,并將后面的字符往前移動;然后將t之后的字符移動到前面,最后在字符串的后面添加“’\0’”即可。國家二級(C語言)機試模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數fun的功能是:在帶有頭結點的單向鏈表中,查找數據域中值為ch的結點。找到后通過函數值返回該結點在鏈表中所處的順序號;若不存在值為ch的結點,函數返回0值。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行。也不得更改程序的結構!#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);voidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;/**********found**********/while(p!=【1】){n++;/**********found**********/if(p->data==ch)return【2】;elsep=p->next;}return0;}main(){SLIST*head;intk;charch;chara[N]={’m’,’p’,’g’,’a’,’w’,’x’,’r’,’d’};head=creatlist(a);outlist(head);printf("Enteraletter:");scanf("%c",&ch);/**********found**********/k=fun(【3】);if(k==0)printf("\nNotfound!\n");elseprintf("Thesequencenumberis:%d\n",k);}SLIST*creatlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%c",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}標準答案:0nhead,ch知識點解析:第一空:這里是補充循環(huán)結束條件,鏈表是單向有限的,最后一個結點的指針域指向NULL,因此可以用這個來作為循環(huán)結束條件,在p指向的結點的指針域不是NULL時表明還有下一個結點,因此第一空處應該是“while(p!=NULL)”。第二空:在循環(huán)當中n用來記錄順序號,如果“if(p->data==ch)”成立,則已經找到數據域中值為ch的結點,返回順序號,即“returnn;”。第三空:fun函數的調用形式是:fun(SLIST*h,charch),第一個參數是頭結點地址,第二個參數是需要尋找的ch值,因此第三空處應該是“k=fun(head,ch);”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數fun的功能是:判斷ch中的字符是否與str所指串中的某個字符相同;若相同,什么也不做,若不同,則將其插在串的最后。請改正程序中的錯誤,使它能進行正確的操作。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!#include#include/**********found*********voidfun(char*str,charch)*/voidfun(charstr,charch){while(*str&&*str!=ch)str++;/**********found*********if(*str!=ch)*/while(*str!=ch){str[0]=ch;/**********found*********str[1]=’\0’;*/str[1]=’0’;}main(){chars[81],c;printf("\nPleaseenterastring:\n");gets(s);printf("\nPleaseenterthecharactertosearch:");c=getchar();fun(s,c);printf("\nTheresultis%s\n",s);}標準答案:voidfun(char*str,charch)if(*str!=ch)str[1]=’\0’;知識點解析:(1)第一個標識下,“voidfun(charstr,charch)”根據主函數中的fun函數的調用“fun(s,c)”,知道s為數組名,傳的應該是數組地址,所以應改為“voidfun(char*str,charch)”。(2)while循環(huán)中對ch與str進行匹配檢查,第二個標識下,是當不同時執(zhí)行連接操作,那么判斷*str與ch是否不同的表達式應該是“if(*str!=ch)”。(3)第三個標識下,連接后的新串要添加結尾符,所以正確的表達是將“str[1]=’0’;”改為“str[1]=’\0’;”。三、程序設計題(本題共1題,每題1.0分,共1分。)3、編寫函數fun,它的功能是:求Fiboncci數列中大于t的最小的一個數,結果由函數返回。其中Fibonacci數列F(n)的定義為:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2)例如:當t=1000時,函數值為:1597。注意:部分源程序在文件PROGl.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#include#includeintfun(intt){}main()/*主函數*/{intn;voidNONO();n=1000;printf("n=%d,f=%d\n",n,fun(n));NONO();}voidNONO(){/*本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。*/FILE*fp,*wf;inti,n,s;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%d\n",s);}fclose(fp);fclose(wf);}標準答案:{intf0=0,f1=1,f;do{f=f0+f1;f0=f1;f1=f;}while(f知識點解析:(1)在循環(huán)中求得數列,并對數列的值進行判斷,看是否符合題干要求。(2)如果求得的數列值不滿足題干要求,將當前值賦值給前一項,將前一項賦給前一項的前一項,繼續(xù)求下一項的數列值,直到滿足條件。國家二級(C語言)機試模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充函數fun(),該函數的功能是:計算下面公式的值(k<50):例如:當k=5時,s=338.215158。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數函數fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include<conio.h>#include<stdio.h>doublefun(intn){doubles=【】;doublef=0.0;doublep=0.0;inti=0;intk;for(k=1;【】;k++){f=2*k-1;p=2*k+l;for(i=1;i<2*k+l;i++)f*=2*k-1;for(i=1;i<2*k-1;i++)p*=2*k+1;【】;}returns;}main(){intk=0;doubles;clrscr();printf("\nPleaseinputk(k<50):");scanf("%d",&k);s=fun(k);printf("\nS=%lf",s);}標準答案:1k<=ns*=f/p知識點解析:第一空:變量s存放最后的計算結果,由公式可知,計算結果為多個數的乘積,所以s應該初始化為1。第二空:for循環(huán)的次數為n,由公式可知,k的取值應該從1到n。第三空:for循環(huán)求出的f為(2k-1)2k+l,for循環(huán)求出的p為(2k+1)2k-1,由公式可知,每—項即為f/p,所以此處應填s*=f/p。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數fun()的功能是:利用插入排序法對字符串中的字符按從大到小的順序進行排序。插入法的基本方法是:先對字符串中的頭兩個元素進行排序,然后把第3個字符插入到前兩個字符中,插入后前3個字符依然有序;再把第4個字符插入到前3個字符中,待排序的字符串已在主函數中賦予。請改正程序中的錯誤,使它能得到正確結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。試題程序:#include<string.h>#include<stdio.h>#defineN80voidinsert(char*aa){inti,j,n;charch;n=strlen(aa);for(i=1;i<n;i++){ch=aa[i];j=i-1;/*************found*************/while((j>=0)||(ch>aa[j])){aa[j+1]=aa[j];j--;}/*************found*************/aa[j]=ch;}}main(){chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";inti;printf("Theoriginalstring:%S\n",a);insert(a);printf("Thestringaftersorting:%S\n\n",a);}標準答案:(1)錯誤:while((j>=0)||(ch>aa[j]))正確:while((j>=0)&&(ch>aa[j]))(2)錯誤:aa[j]=ch;正確:aa[j+1]=ch;知識點解析:錯誤1:此處的兩個條件要同時滿足,是“與”的關系,而不是“或”的關系。錯誤2:對長度為n的數組元素進行排列,可先對數組的前m-1項進行排序,之后再對前m項進行排序,如此循環(huán)直到數組全部元素完成排序。對前m項的子數列進行排序的方法是,將該子數列的末尾元素與前m-1項的元素相比較,由于前m-1項已經完成排序,可以找到某一位置,使得將該末尾元素插入該位置之后,前m項仍然保持降序。這樣循環(huán)后,就可以得到全部元素的排序。掌握了這個方法,這行的錯誤就很容易找出來了。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫函數fun(),它的功能是計算:s=(1-In(1)-In(2)-In(3)-…-1n(m))2s作為函數值返回。在C語言中可調用log(n)函數求In(n)。log函數的引用說明是doublelog(doublex)。例如,若m的值為15,則fun()函數值為723.570801。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<math.h>doublefun(intm){}main(){clrscr();printf("%f\n",fun(15));}標準答案:doublefun(intm){inti;doubles=1.0;for(i=1;i<=m;i++)s=s-log(i);/*計算s=l-In(1)-In(2)-In(3)-…-In(m)*/return(s*s);/*對s求平方并返回*/}知識點解析:首先,題目要求計算1依次減去1到M的對數,可用從1到M的循環(huán),每次循環(huán)都減一個數的對數。該題需要注意,log()函數的形式參數應浩如煙海double型變量,用于循環(huán)的基數變量為整數,需要進行強制轉換。最后在返回的時求平方。國家二級(C語言)機試模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充函數fun(),該函數的功能是判斷一個數是否為素數。該數是素數時,函數返回字符串:yes!,否則函數返回字符串:no!,并在主函數中輸出。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include"conio.h"#include"stdio.h"【】{inti,m;m=1;for(i=【】;i<n;i++)if(【】){m=0;break;}if(m==1&&n>1)return("yes!");elsereturn("no!");}main(){intk=0;clrscr();printf("Input:");scanf("%d",&k);printf("%s\n",fun(k));}標準答案:char*fun(intn)2n%i==0或!(n%i)知識點解析:第一空:根據main()中調用的函數fun(k),可知函數fun的形參為int型變量,函數的返回值為字符型指針。第二空:判斷一個數是否為素數時,也就是判斷這個數是否有除了1和其自身之外的因子,所以for循環(huán)的變量從2開始,直到這個數的前一個數。第三空:如果一個數能被除了1和其自身之外的數整除,即余數為0,則這個數不是素數。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定的程序中,函數fun()的功能是;將s所指字符串中出現的n所指字符串全部替換成t2所指字符串,所形成的新的字符串放在w所指的數組中。在此處,要求t1和t2所指字符串的長度相同。例如:當s所指字符串中所指的內容為abcdabfab,t1所指字符串中的內容為ab,t2所指字符串中的內容為99時,結果在w所指的數組中的內容應為99cd99f99。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>/*************found**************/intfun(char*s,char*t1,char*t2,char*w){inti;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;/*************found**************/while(*r){*a=*r;a++;r++}w+=strlen(t2);}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];clrscr();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(t2)\n");}標準答案:(1)錯誤:intfun(char*s,char*t1,char*t2,char*w)正確:voidfun(char*s,char*t1,char*t2,char*w)(2)錯誤:while(r)正確:while(*r)(3)錯誤:r++正確:r++;知識點解析:在intfun(char*s,char*t1,char*t2,char*w)中,用int型定義指針數組。ANSI標準要求動態(tài)分配系統(tǒng)返回void指針。void指針具有一般性,它們可以指向任何類型的數據。但目前絕大多數C編譯所提供的這類函數都返回char指針。無論以上兩種情況的哪一種,都需要強制類型轉換的方法把char指針轉換成所需的類型。該程序段應該是voidfun(char*s,char*t1,char*t2,char*w),另外,while(r)和r++都是簡單的邏輯和語法錯誤,只要加強了C語言的基礎,這樣的錯誤明顯是“送分”的。三、程序設計題(本題共1題,每題1.0分,共1分。)3、下列程序定義了N×N的二維數組,并在主函數中自動賦值;請編寫函數fun(inta[][N]),該函數的功能是:使數組左下半三角元素中的值全部置成0。例如a數組中的值為a=197238456則返回主程序后a數組中的值應為097008000注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineN5intfun(inta[][N]){}main(){inta[N][N],i,j;clrscr();printf("*****Thearray*****\n");for(i=0;i<N;i++)/*產生—個隨機的5*5矩陣*/{for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}fun(a);printf("THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j));printf("\n");}}標準答案:intfun(inta[][N]){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)a[i][j]=0;/*將數組左下半三角元素中的值全部置成0*/}知識點解析:本題旨在考查控制數組中左下半三角元素的算法,也就是兩個千篇一律的循環(huán)語句,希望學習者能夠掌握消化。國家二級(C語言)機試模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數fun的功能是:把形參a所指數組中的最大值放在a[0]中,接著求出a所指數組中的最小值放在a[1]中;再把a所指數組元素中的次大值放在a[2]中,把a數組元素中的次小值放在a[3]中:其余以此類推。例如:若a所指數組中的數據最初排列為:1、4、2、3、9、6、5、8、7,則按規(guī)則移動后,數據排列為:9、1、8、2、7、3、6、4、5。形參n中存放a所指數組中數據的個數。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#include#defineN9/*******************found*******************/voidfun(int【1】,intn){inti,j,max,min,px,pn,t;/*******************found*******************/for(i=0;ia[j]){min=a[j];pn=j;}}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;}if(pn!=i+1){t=a[i+1];a[i+1]=min;a[pn]=t;}}}main()(intb[N]={1,4,2,3,9,6,5,8,7},i;printf(”\nTheoriginaldata:\n”);for(i=0;i標準答案:*a2i+1知識點解析:第一空:主函數內fun函數的調用“fun(b,N);”,其中b為整型數組名,故fun函數的第一參數為整型指針,又根據“max=a[j]”可知第一個參數名為a,故第一空處為“*a”。第二空:根據題意a所指數組中的最大值放在a[0]中,接著求出a所指數組中的最小值放在a[1]中;再把a所指數組元素中的次大值放在a[2]中,把a數組元素中的次小值放在a[3]中,升序排序和降序排序的下標變化是每次在前一次的基礎上+2,即a[0]、a[2]、a[4]…降序排序,a[1]、a[3]、a[5]…升序排序,故第二空應為“2”。第三空:選擇排序法中的升序排序,首先從數組中挑選一個最小的元素,把它和第一元素交換,接著從剩下的n-1個元素中再挑出一個最小的元素,把它和第二個元素交換,不斷重復以上過程,直到比較完最后兩個元素。故內層循環(huán)變量j應該從i+1開始,因此第三空處應為“i+1”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數fun的功能是:用下面的公式求π的近似值,直到最后一項的絕對值小于指定的數(參數num)為止:π/4=1-1/3+1/5-1/7^例如,程序運行后,輸入0.0001,則程序輸出3.1414。請改正程序中的錯誤,使它能輸出正確的結果。注意:不要改動smain函數,不得增行或刪行,也不得更改程序的結構!#include#includefloatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/*********found*********/while(t>=num){pi=pi+t;n=n+2:s=-s;/********found***********/t=s%n;}pi=pi*4;returnpi;}main(){floatn1,n2;printf("Enterafloatnumber:");Scanf("%f",&n1);n2=fun(n1);printf("%6.4f\n",n2);}標準答案:(1)while(fabs(t)>=num)(2)t=s/n;知識點解析:(1)題干中要求進行循環(huán)的條件是絕對值小于某范圍,可以調用C語言提供的取絕對值函數fabs對t取絕對值。所以將“while(t>=num)"改為“while(fabs(t)>=num)"。(2)表達式s%n中,n是浮點型,而%運算符只能用于整數運算,且要進行的是除法運算而不是求余運算。所以,第二個標識下“t=s%n;"應該改為“t=s/n;"。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫程序fun,函數的功能是:實現B=A+A’,即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main函數中輸出。例如,輸入下面的矩陣:其轉置矩陣為:程序輸出:注意:部分源程序在文件PROGl.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#includevoidfun(inta[3][3],intb[3][3]){}main()/*主程序*/{inta[3][3]=({1,2,3},{4,5,6},{7,8,9}},t[3][3];inti,j;voidNONO();fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",t[i][j]);printf("\n");}NONO();}voidNONO(){/*本函數用于打開文件,輸入測試數據,調用fun函數,輸出數據,關閉文件。*/inti,j,k,a[3][3],t[3][3];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(k=0;k<5;k++){for(i=0;i<3;i++)fscanf(rf,"%cl%d%d",&a[i][0],&a[i][1],&a[i][2]);fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(wf,"%7d",t[i][j]);fprintf(wf,"\n");}}fclose(rf);fclose(wf);}標準答案:intc[3][3];inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++){c[i][j]=a[j][i];//矩陣的轉置b[i][j]=a[i][j]+c[i][j];}知識點解析:(1)首先,將a所指數組元素中的值進行轉置并放到c所指數組中。(2)矩陣相加是指把兩個矩陣中下標相同的元素的值一一對應相加。國家二級(C語言)機試模擬試卷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論