




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家計算二級考試C語言上機練習題集參考答案1.1本題考查的是鏈表。在函數(shù)fun中,首先將指針p指向鏈表的頭結點,如果該結點不空,則對記數(shù)器n進行自加,并比較當前結點的data值是否為ch,如果是,則直接返回,否則繼續(xù)比較p的后續(xù)結點,直到p==NULL結束,故第一空應填NULL,第二空應填;第三空處的語句是調用funfun函數(shù)的第一個參數(shù)為一個指向SLIST的指針,第二個形參為待搜索字符,而head是整個鏈表的頭指針,故第三處應填head,ch。1.2本題著重考察考生對C語言基本語法以及比較運算符的掌握情況。本題中的第一個錯誤:在C語言中,應成對出現(xiàn),所以程序中的語句"intj,c=0;float應改為"{intj,c=0;float或相同作用的語句;本題中的第二個錯誤:在C語言中,判斷大于或等于的運算符應為,所以程序中的語句"if(x[j]=>xa)"應改為"if(x[j]>=xa)"或相同作用的語句。本評析僅作參考。1.3本題的考核點是刪除字符串中字符的算法。解題思路:先將原串中從首字符開始的連續(xù)放到一字符串數(shù)組中,再將從第一個非*字符開始到串尾連續(xù)之前的非字符追加其后,接著將串尾的連續(xù)新串中的字符放到原串中覆蓋原串。本評析僅供參考。voidfun(char*a,char*h,char*p){charb[81],*x;inti=0,j=0;x=a;while(x<h){b[j]=*x;x++;j++;}while(h<=p)if(*h!='*'){b[j]=*h;j++;h++;}elseh++;p++;while(*p){b[j]=*p;j++;p++;}b[j]='\0';j=0;while(b[j]){a[i]=b[j];i++;j++;}a[i]='\0';}2.1本題考查的是鏈表。要統(tǒng)計以指針h開始的鏈表中結點的個數(shù),只要從頭依次遍歷各個結點,并累加次數(shù),直到所遍歷結點為NULL。由于在初始情況下結點的個數(shù)應為0,故第一空應填*n;在whilep是否為NULL,如果是,則結束循環(huán),否測*n1p指向其后續(xù)結點,故第二空應填next;第三空是一個調用fun函數(shù)的語句,由的定義可知,該函數(shù)的第一個參數(shù)為一個指向SLIST的指針,而head是整個鏈表的頭指針,故第三空應填head。2.2本題著重考察考生對C語言中一些簡單算法的掌握情況。所以應將程序中的語句"for(i=j+1;i<n-1;i++)""for(i=j+1;i<n;i++)"或相同作用的語句。是作為中間變量交換數(shù)據(jù)用的,變量p是用來記錄較小值的,所以應將程序中的語句"t=i;"改為。本評析僅作參考。2.3本題的考核點是求π的值的算法,循環(huán)語句的使用。解題思路:通過循環(huán)語句判斷公式中某項是否在精度范圍之內,以控制迭代。本評析僅供參考。doublefun(doubleeps){intn=0;doubledown=1,up=1;doubleone,pi=0;one=(double)up/(double)down;while(one>=eps){通過循環(huán)語句判斷公式中某項是否在精度范圍之內*/pi+=one;n++;up=up*n;down=down*(2*n+1);one=(double)up/(double)down;}returnpi*2;}3.1本題考查的是鏈表。在函數(shù)fun中,通過指針p遍歷鏈表的各個結點,直到其為NULL,如果其不為NULL,則將其data域的值累加到s上去,并將指向其后續(xù)結點,故第一空應為data,第二空為next;第三空的目的是調用函數(shù),由于函數(shù)的形參為指向SLIST類型的指針,而head又是整個鏈表的頭指針,故第三空應填head。3.2本題著重考察考生對C語言中一些簡單算法的掌握情況。本題中的第一個錯誤:在函數(shù)中,未對變量進行定義,由程序可知,函數(shù)通過變量sumsum賦初值0"sun=0.0;""sum=0.0;"或相同作用的語句。本題中的第二個錯誤:要注意算術運算符的優(yōu)先級:*/→%+-,由題意可知,條件語句是用來判斷元素的個數(shù)是不是5的倍數(shù),所以程序中語句"if(i+1%5==0)"應改為"if((i+1)%5==0)"或相同作用的語句。本評析僅作參考。3.3本題的考核點是指針、循環(huán)語句和條件語句的使用。確定返回值。本評析僅供參考。char*fun(char*s,char*t){intfirst=0,second=0;char*p,*q;p=s;q=t;while(*p++!='\0')first++;判斷是否到了字符串s的結尾*/while(*q++!='\0')second++;判斷是否到了字符串t的結尾*/if(first==second)returns;判斷兩個字符串的長度是否相等*/若上述條件成立,則返回第一個字符串*/elseif(first>second)返回較長的字符串*/returns;elsereturnt;}4.1本題考查的是結構體。由于函數(shù)返回的是一個型的變量,故第一空應填STU或其等效形式;在本題中是通過strcmp函數(shù)來比較兩個字符串是否相等的,要比較數(shù)組中第個元素的num值是否與指定的相等,可以用strcmp(std[i].num,num)來完成,故第二空應填std[i].num;最后,如果比較結果相等,則直接返回std[i],故第三空應填std[i]或其等效形式。4.2本題著重考察語言指針的用法及語法。C語言中,分號是語句的組成部分,各語句間以分號作為分隔。源程序"if(*r==*p){r++;p++應改為"if(*r==*p){r++;p++;}"或相同作用的語句。在源程序中,r為指向指針的指針變量,它存放的是指針變量的地址,題意中要求對這個地址所指向的內容進行判斷,所以須在地址前加上*,源程序"if(r=='\0')"應改為"if(*r=='\0')"或相同作用的語句。本評析僅作參考。4.3本題的考核點是刪除字符串中字符的算法。解題思路:先統(tǒng)計串前連續(xù)的號個數(shù),與指定的個數(shù)進行判斷,若小于等于指定的數(shù),什么也不做,若大于指定的數(shù),則刪除多余的*,刪除的方法是:用一個循環(huán)先生成指定個數(shù)個放入到一字符串中,再將從原串中非*字符開始至串尾的字符追加其后,最后用新串覆蓋原串。本評析僅供參考。voidfun(char*a,intn){charb[81];inti=0,j=0,s=0,k;while(a[i]=='*'){s++;i++;}if(s>n){for(k=0;k<n;k++){b[j]='*';j++;}while(a[i]){b[j]=a[i];j++;i++;}b[j]='\0';i=0;j=0;while(b[j]){a[i]=b[j];i++;j++;}a[i]='\0';}}5.1本題考查的是結構體。在函數(shù)中,要比較人員記錄的出生年份是否為指定年份,只要比較STU變量中year字段是否等于形參中提供的year循環(huán)中是對STU型數(shù)組中各個變量進行比較的,故第一空應填std[i].year;如果兩者相等,則將其存入到STU型數(shù)組k中,故第二空應填std[i]或其等效形式;最后,整數(shù)n就是能夠查到的記錄的條數(shù),故第三空應填n。5.2本題的考核點是數(shù)制的轉換。k進制數(shù)有以下特點:1.有到k-1共k個數(shù)碼。2.逢進1,借1當。k進制數(shù)某一位上的數(shù)碼實際上代表該數(shù)碼乘上該位上的權,如十進制數(shù)12實際代表1*10fun函數(shù)中,第一個循環(huán)用來將十進制的整型數(shù)據(jù)m轉換為k進制數(shù)據(jù),并將結果按從低位到高位的順序保存在數(shù)組aa中。在for循環(huán)之后,即為轉換成的k進制數(shù)的位數(shù),所以根據(jù)題義要求,第一處應改為"aa[i]=m%k;"或相同作用的語句。第二個錯誤處為:從后往前打印存有個數(shù)的數(shù)組中的值,其下標應該為[i-1]到[0]。所以"for(;i;i--)"應當改為"for(i=i-1;i>=0;i--)"。本評析僅作參考。5.3本題的考核點是數(shù)組和循環(huán)語句的使用。解題思路:先使用循環(huán)語句對數(shù)組中的各個元素求和,然后用此和除以數(shù)組的元素總個數(shù)即得平均值。然后使用return語句將此平均值作為函數(shù)的返回值返回。本評析僅供參考。floatfun(float*a,intn){inti;floataverage;doublesum=0;for(i=0;i<n;i++)sum+=a[i];對數(shù)組中的各個元素求和*/計算平均值*/returnaverage;返回平均值*/average=(float)sum/n;}6.1本題考查的是結構體。本題中,show函數(shù)是用來顯示的學號、姓名及三門課程的成績,modify是用來對STU類型的指針,故第一空應填STU或*ss的各科成績,即score數(shù)組中各個元素的值,故第二空應填score[i]函數(shù),由于該函數(shù)的第一個參數(shù)為一個指向類型的指針,故第三空應填&std。6.2給定程序modi.c中,函數(shù)fun的功能是:讀入一個字符串(長度),將該字符串中的所有字符按碼升序排序后輸出。例如:若輸入:,則應輸出:abcde。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動函數(shù),不得增行或刪行,也不得更改程序的結構!6.3本題的考核點是計算平均分算法。解題思路:先統(tǒng)計門課程的總分數(shù),然后再除8,求學生的平均分。本評析僅供參考。voidfun(STREC*p){inti;doubleaver=0;將平均分賦初值0*/for(i=0;i<N;i++){aver=aver+(*p).s[i];}求和*/(*p).ave=aver/N;計算平均值*/}7.1本題考查的是結構體數(shù)組。fun函數(shù)的功能是實現(xiàn)形參指針所指結構體數(shù)組中的三個元素按成員進行PERSON未定義的變量std,故第一空應填std[]或其等效形式;由于在函數(shù)中存在語句temp=std[0];可知temp為一個PERSON型的變量,故第二空應填PERSON或其等效形式,并且分析程序不難得知,該變量作為交換時的中間變量;第三空的目的是調用函數(shù)fun,由于其參數(shù)為一型的數(shù)組變量,故正確的調用方式應為fun(std);,故第三空應填std或其等效形式。7.2首先,我們必須先讀懂題中程序的大致意思,這是發(fā)現(xiàn)并改正程序中錯誤的重要前提。程序中的重要思想如下:1、本題的主要目的是交換兩個變量的值,在這樣的任務中,合理的利用中間變量是個清晰明了的好方法;2、觀察題目,可以發(fā)現(xiàn)函數(shù)fun()的函數(shù)聲明中有不少玄虛,第一個形參是一個地址,第二個形參是一個整型變量。本題中的第一個錯誤發(fā)生在函數(shù)fun()中的賦值語句中:"t=x;x=y;",通過前面的分析,我們可以知道,在此變量x代表的是一個地址,所以以上兩條賦值語句運算符兩端不匹配,應當更正為"t=*x;*x=y;",這樣才可以進行正常的賦值工作;本題中的第二個錯誤發(fā)生在函數(shù)fun()的返回值產生時:"return(y);",結合程序上下文,可以知道,該函數(shù)的返回值實際上是為了將原來的a值賦給bfun()(即原來的b值)始終未動,而原來的值現(xiàn)在已經存放到了中間變量中,所以,這時我們返回的應當是t的值,故更改為"return(t);"。本評析僅作參考。7.3本題的考核點是統(tǒng)計高于等于平均分的學生數(shù)據(jù)和人數(shù)的算法。解題思路:先求出平均分,然后再將學生成績與平均分作比較,將高于等于平均分的學生數(shù)據(jù)放在另一數(shù)組中,并統(tǒng)計人數(shù)的個數(shù)。本評析僅供參考。doublefun(STREC*a,STREC*b,int*n){inti,j;doubleaver=0;*n=0;for(i=0;i<N;i++)aver=aver+a[i].s;aver=aver/N;*/計算平均分*/for(i=0;i<N;i++)if(a[i].s>=aver){b[*n].s=a[i].s;將高于等于平均分的學生數(shù)據(jù)放在另一數(shù)組b中*/for(j=0;j<10;j++)b[*n].num[j]=a[i].num[j];*n=*n+1;統(tǒng)計高于等于平均分的學生人數(shù)*/返回平均分*/}return(aver);}8.1本題考查的是結構體。在fun函數(shù)中,首先將age字段最大的STD變量記為std[0],然后通過循環(huán)語句逐個比較std[i].age與max.agemax=std[i]std[0],第二空應填std[i].age。在主函數(shù)中要輸出中的name字段與age字段,故第三空應為。8.2本題的主要考核點是變量的賦值與初始化。解題思路:使用循環(huán)語句依次將正整數(shù)各位的數(shù)值取出并累積起來。本題中用到了中間變量作為累積變量,此變量必須要初始化或賦以初始值,此外賦值運算符中不存在"\="符號,應將其改為"/="運算符或其他賦值方式。本評析只作參考。8.3本題的考核點是按分數(shù)的高低排列學生記錄的算法。解題思路:通過選擇法或其它的方法對學生記錄按分數(shù)從高到低進行排序。本評析僅供參考。voidfun(STRECa[]){inti,j,p,t,k;charh;for(i=0;i<N;i++){p=i;for(j=i+1;j<N;j++)if(a[p].s<a[j].s)p=j;if(p!=i)按分數(shù)從高到低進行排序*/{t=a[p].s;a[p].s=a[i].s;a[i].s=t;for(k=0;k<10;k++){h=a[p].num[k];a[p].num[k]=a[i].num[k];a[i].num[k]=h;}}}}9.1本題考查的是字符串長度的比較。由題面可知,本題采用了選擇排序的排序算法,根據(jù)該排序算法的思想可知,第一空應填i+1記錄下字符串長度最短的元素的下標,如果jss[k]jk=j;k!=j,則交換兩個字符串,本題中是利用一個臨時字符數(shù)組與函數(shù)實現(xiàn)交換的,首先將ss[i]中的內容復制到臨時數(shù)組中,然后將ss[k]ss[i]中,最后再將t中的內容復制到ss[k]中,故第三空應填。9.2本題著重考察考生對C語言中函數(shù)的調用、定義和輸出語句的掌握情況。fun函數(shù),函數(shù)定義中應定"fun(chara)"應改為"fun(char*a)"本題中的第二個錯誤:printf語句的格式控制與輸出項之間應以分號分隔,所以程序中語句"printf("%c"應改為"printf("%c",*a);"本評析僅作參考。9.3本題的考核點是求取整數(shù)相應位上的數(shù)值的算法。位權值,再對其求余,余數(shù)即為相應位上的數(shù)值。本評析僅供參考。voidfun(inta,intb,long*c){inta_up,a_low,b_up,b_low;a_up=a/10;a_low=a%10;求正整數(shù)a的個位數(shù)*/b_up=b/10;求正整數(shù)b的十位數(shù)*/求正整數(shù)a的十位數(shù)*/b_low=b%10;求正整數(shù)b的個位數(shù)*/*c=b_low*1000+a_up*100+b_up*10+a_low;/*將a數(shù)的十位和個位數(shù)依次放在c數(shù)的百位和個位上,b數(shù)的十位和個位數(shù)依次放在數(shù)的十位和千位上*/}10.1本題考查的是字符串中字符的插入。在fun函數(shù)中,第一個for循環(huán)的作用是求出所有字符串中,長度最長的字符串的長度n,并記下此字符串在數(shù)組中的下標,故第一空應填。在第二個for循環(huán)中,如果當len0len的字符向右移動n-len位,故第二空為len;最后,再通過一個for循環(huán)語句在當前字符串前面補充個,故第三空應為ss[i][j]或其等效形式。10.2本題著重考察考生對C語言中自定義語句以及基本語法的掌握情況。本題中的第一個錯誤:如果按照原程序中的語句調用自定義語句,那么value=a+b/a-b+c+b/c-b/運算高于運算,很顯然不符合題意,應作為一個整體傳遞給m,需為其加括號,所以程序中語句"value=FU(a+b,a-b)+FU(c+b,c-b);"應改為"value=FU((a+b),(a-b))+FU((c+b),(c-b));"或相同作用的語句。本題中的第二個錯誤:C語言中,命令單詞應為小寫,所以程序中語句"Return(Value);""return(value);"或相同作用的語句。本評析僅作參考。10.3本題的考核點是查找指定學生數(shù)據(jù)的算法。同,則返回指定的學生數(shù)據(jù);若沒有一個相同的,則給學號置空串,成績置-1并返回。本評析僅供參考。STRECfun(STREC*a,char*b){inti,f=0;STRECp;定義結構體變量*/p=a[0];for(i=0;i<N;i++)if(strcmp(a[i].num,b)==0){p=a[i];f=1;}通過字符串比較函數(shù)將指定的學號與每一個學生的學號進行比較,若相同,則返回指定的學生數(shù)據(jù)*/if(f==0){p.num[0]='\0';p.s=-1;判斷是否找到指定學號*/若沒找到指定學號,在結構體變量中給學號置空串*/若沒找到指定學號,在結構體變量中給成績置-1*/}returnp;返回學號和成績*/}.1本題的考核點是鏈表中的插入操作。對鏈表的插入是指將一個結點插入到一個已有的鏈表中。為了能做到正確插入,必須解決兩個問題:1、怎樣找到插入的位置;2、怎樣實現(xiàn)插入。題中第一個空填:將要插入的數(shù)據(jù)放到一個臨時開辟的存儲單元中。題中第二個空填:此語句將q指針指向比要插入的數(shù)據(jù)小的數(shù)據(jù)的結點。題中第三個空填:此語句將q指針指向其下一個結點。本評析僅供參考。.2本題著重考察考生對語言中一些簡單算法的掌握情況。本題中的第一個錯誤:由題意可知,fun函數(shù)是有返回值的,所以不能用void來定義函數(shù),應將程序中的語句"voidfun(inta[],int改為"fun(inta[],int或相同作用的語句。本題中的第二個錯誤:由題意可知,當m大于中間值時,下一次的查找范圍放在中間之后的元素中;當m小于中間值時,下一次的查找范圍放在中間之前的元素中;當m等于中間值時,則返回值,所以程序中語句"elseif(m>=a[mid])"應改為"elseif(m>a[mid])"或相同作用的語句。本評析僅作參考。.3本題的考核點是查找指定范圍內的學生數(shù)據(jù)的算法。解題思路:將所有學生的分數(shù)與指定范圍內的分數(shù)進行比較,若滿足條件就將其放在另一數(shù)組中,并返回該范圍內的學生人數(shù)。本評析僅供參考。intfun(STREC*a,STREC*b,intl,inth){inti,j=0,k,f=0;for(i=0;i<N;i++)if((a[i].s>=l)&&(a[i].s<=h)){for(k=0;k<10;k++)/*判斷該學生的分數(shù)是否在范圍之內*//*滿足條件的學生的分數(shù)放在另一數(shù)組bb[j].num[k]=a[i].num[k];b[j].s=a[i].s;中*/j++;f++;計算滿足條件的學生人數(shù)*/返回學生人數(shù)*/}return(f);}12.1本題的考核點是文件的讀寫函數(shù)等。題中第一個空填"r"題中第二個空填:此語句是設置循環(huán)退出條件,即判斷是否到文件末尾。題中第三個空填:fputc函數(shù)功能是把一個字符寫到磁盤文件上去。其一般調用形式為:fputc(ch,fp);其中是要輸出的字符,它可以是一個字符常量,也可以是一個字符變量。是文件指針變量。在本題中根據(jù)定義語句"FILE可知,ft是文件指針變量。本評析僅作參考。12.2本題著重考察考生對語言中基本語法的掌握情況。本題中的第一個錯誤:switch表達式)后不應有分號,所以程序中語句"switch(g);"應改為"switch(g)"本題中的第二個錯誤:由switch的語句格式可知,case與case之間應以冒號分隔,所以程序中語句"case1;case2:return1;"應改為"case1:case2:return1;"本評析僅作參考。12.3本題的考核點是求平均值算法。解題思路:從鏈表首結點開始,累計成績之和,再除以學生人數(shù),得出平均值并返回。doublefun(STREC*h){STREC*p;doubleaver=0;p=h->next;while(p!=0){aver=aver+p->s;從鏈表首結點開始,累計成績之和*/p=p->next;后移一個結點*/}aver=aver/N;求成績的平均值aver*/returnaver;返回結果*/}13.1本題考核點為:文件的打開,關閉和讀寫操作。題中第一個空填:是向文件指針所指向的文件中寫數(shù)據(jù)。題中第二個空填"fclose(fp);":此語句是文件的關閉操作。題中第三個空填"fname":fopen函數(shù)用于文件的打開操作,其調用形式一般為:fopen(文件名,使用文件方式)。"fname"為所要打開的文件名。本評析僅作參考。13.2本題的主要考核點是:語言的語法。解題思路:使用循環(huán)語句的嵌套來統(tǒng)計子字符串在字符串中出現(xiàn)的次數(shù)。C語言中for的語法結構是for(;;),中間以";"號作間隔,在C語言中是區(qū)分大小寫的。本評析只作參考。13.3本題的考核點是c語言中的循環(huán)語句的使用和數(shù)組操作。解題思路:先把w由無符號的整型數(shù)轉換為字符串,然后再把的后位轉換為無符號的整型數(shù),并將結果返回。在給出的參考函數(shù)中,第一個for循環(huán)將整型數(shù)轉換為字符串,并把整型數(shù)的每一位按照從低位到高位的順序分別存放在字符串中;第二個for循環(huán)將字符串中的每一位取出,從低位到高位(去除最高位)分別與該位的權相乘并加到變量result中,最后將result返回。解法一:unsignedfun(unsignedw){inti,j,sqr=1;unsignedresult;char*str,ch[5];str=ch;/*符串str*/for(i=1;(i<6)&&(w>=1);i++){str[i-1]='0'+w%10;w/=10;}str[i-1]=0;result=str[0]-'0';/*將字符串中的每一位取出,從低位到高位(去除最高位)分別與該位的權相乘并加到變量result中*/for(j=1;j<i-2;j++){sqr*=10;result+=(str[j]-'0')*sqr;}returnresult;返回結果*/}解法二:/*unsigned型整數(shù)在0-6553510000求余即得出后面4位,否則如果大于1000則對1000求余得出后位數(shù),這樣一層一層往小的判斷。由于return用if()語句*/unsignedfun(unsignedw){if(w>=10000)returnw%10000;if(w>=1000)returnw%1000;if(w>=100)returnw%100;returnw%10;}14.1本題考核點為結構體和文件的操作等。題中第一空填"STYPE"typedef可以用來聲明新的類型名來代替已有的類型名,此題用"STYPE"來代替未命名的結構體。題中第二空填:"FILE"關鍵字用于聲明文件指針。題中第三空填"fp"fwrite函數(shù)的一般調用形式為:fwrite(buffer,size,count,fp);其中buffer:是一個指針,是要輸出數(shù)據(jù)的地址;size:是要寫的字節(jié)數(shù);count:要進行讀寫多少個size字節(jié)的數(shù)據(jù)項;fp:文件型指針。本評析僅作參考。14.2本題著重考察考生對語言中一些簡單算法的掌握情況。本題中的第一個錯誤:由程序可知,變量應為一個簡單變量,它是用來交換兩個數(shù)的值,所以程序中語句"float*k;"應改為"floatk;"本題中的第二個錯誤:程序中應使得*p中的數(shù)最大,中的數(shù)最小,當*s中的數(shù)大于*p的值時,應交換二者的值,所以程序中語句"if(*s<*p)"應改為"if(*s>*p)"或相同作用的語句。本評析僅作參考。14.3本題的考核點是指針、ASCII碼、循環(huán)語句及條件語句的使用。解題思路:通過循環(huán)語句移動指針,取出指針所在位置上的字符,先判斷其為正負號還是為數(shù)字字符,如果為數(shù)字字符則將其轉化為相應的數(shù)值,否則作正負標記。longfun(char*p){longn=0;intflag=0;/*通過循環(huán)語句移動指針,取出指針所在位置上的字符*/while(*p!='\0'){if(*p=='-')判斷其是否為負號*/flag=1;elseif(*p=='+')判斷其是否為正號*/flag=0;else判斷其是否為數(shù)字字符*/n=n*10+(*p-'0');將數(shù)字字符轉化為相應的數(shù)值*/p++;}if(flag==1)n=-n;returnn;}15.1本題考核點為結構體和文件的操作等。題中第一空填"STYPE"typedef可以用來聲明新的類型名來代替已有的類型名,此題用"STYPE"來代替未命名的結構體。題中第二空填:"FILE"關鍵字用于聲明文件指針。題中第三空填"fp"fwrite函數(shù)的一般調用形式為:fwrite(buffer,size,count,fp);其中buffer:是一個指針,是要輸出數(shù)據(jù)的地址;size:是要寫的字節(jié)數(shù);count:要進行讀寫多少個size字節(jié)的數(shù)據(jù)項;fp:文件型指針。本評析僅作參考。15.2本題著重考察考生對語言中一些簡單算法的掌握情況。本題中的第一個錯誤:由程序可知,變量應為一個簡單變量,它是用來交換兩個數(shù)的值,所以程序中語句"float*k;"應改為"floatk;"本題中的第二個錯誤:程序中應使得*p中的數(shù)最大,中的數(shù)最小,當*s中的數(shù)大于*p的值時,應交換二者的值,所以程序中語句"if(*s<*p)"應改為"if(*s>*p)"或相同作用的語句。本評析僅作參考。15.3本題的考核點是指針、ASCII碼、循環(huán)語句及條件語句的使用。解題思路:通過循環(huán)語句移動指針,取出指針所在位置上的字符,先判斷其為正負號還是為數(shù)字字符,如果為數(shù)字字符則將其轉化為相應的數(shù)值,否則作正負標記。longfun(char*p){longn=0;intflag=0;/*通過循環(huán)語句移動指針,取出指針所在位置上的字符*/while(*p!='\0'){if(*p=='-')判斷其是否為負號*/flag=1;elseif(*p=='+')判斷其是否為正號*/flag=0;else判斷其是否為數(shù)字字符*/n=n*10+(*p-'0');將數(shù)字字符轉化為相應的數(shù)值*/p++;}if(flag==1)n=-n;returnn;}16.1本題的考核點是鏈表中的基本操作。解題思路:1、結點分量的訪問利用結點變量的名字*p訪問結點分量方法一:(*p).data和(*p).next方法二:﹥datap-﹥next2、指針變量p和結點變量*p的關系指針變量p--結點地址結點變量的值結點內容(*p).data指針所指結點的data域的值(*p).next--*p后繼結點的地址*((*p).next)--*p后繼結點3、當內存不再使用時,應使用free()函數(shù)將內存塊釋放。本評析僅供參考。16.2本題考查的是大小寫字母轉換方法。程序通過fun函數(shù)的循環(huán)逐個判斷數(shù)組中的字符是否為小寫,即判斷它是否既大于字符"a"且小于字符"z"。由于"||"表示或的關系,而"&&"表示與的關系,所以"if(('a'<=tt[i])||(tt[i]<='z'))"應改為"if(('a'<=tt[i])&&(tt[i]<='z'))"或改為與其相同作用的語句。當比較的字符為小寫,則應使得它的ASCII32得到其大寫母,因為小字母的ASCII碼比其對應的大寫母的ASCII碼剛好大32"tt[i]+=32;""tt[i]-=32;"或改為與其相同作用的語句。本評析僅供參考。16.3本題的考核點是循環(huán)語句和整除算法。解題思路:使用循環(huán)語句使循環(huán)變量依次從遞增到m,并將每個值與和11進行取余比較,將符合條件的值存放入數(shù)組中,統(tǒng)計符合條件的值的個數(shù)并返回。#include<conio.h>#include<stdio.h>#defineM100voidfun(intm,int*a,int*n){inti,count=0;用于計數(shù)*/for(i=1;i<=m;i++){使用循環(huán)語句使循環(huán)變量依次從遞增到m*/if(i%7==0||i%11==0){判斷變量i是否能被7或者11*/a[count++]=i;將符合條件的值存放入數(shù)組a*/}}*n=count;返回能被7或者整除的數(shù)的個數(shù)*/}17.1本題的考核點是鏈表中的基本操作。解題思路:1、結點分量的訪問利用結點變量的名字*p訪問結點分量方法一:(*p).data和(*p).next方法二:﹥datap-﹥next2、指針變量p和結點變量*p的關系指針變量p--結點地址結點變量的值結點內容(*p).data指針所指結點的data域的值(*p).next--*p后繼結點的地址*((*p).next)--*p后繼結點3、當內存不再使用時,應使用free()函數(shù)將內存塊釋放。本評析僅供參考。17.2本題的考核點是C語言中函數(shù)的入口參數(shù)及指針的使用。從主函數(shù)中的"fun(s,&upper,語句可以看出,函數(shù)的后兩個參數(shù)均為整型指針。因此,應該把原程序中的"voidfun(char*s,inta,intb)"語句改為"voidfun(char*s,int*a,int*b)"或相同作用的語句。程序中,a是一個整型指針,因此只是地址遞增,要使a指向的數(shù)據(jù)實現(xiàn)遞增,則要把指針改為實際數(shù)據(jù),即把原程序中的"a++語句改為"(*a)++或相同作用的語句;同樣道理,"b++語句也應改為"(*b)++或相同作用的語句。本評析僅作參考。17.3本題的考核點是數(shù)組、循環(huán)語句和比較算法。素與其作比較,如果大于第一個元素則交換兩者的值,并記錄此數(shù)組元素的下標,直到數(shù)組中的元素都比較完為止。voidfun(inta[],intn,int*max,int*d){inti,base,subscript;base=a[0];假定第一個元素的值最大*/subscript=0;用于存放數(shù)組下標*/for(i=1;i<n;i++){if(a[i]>base){將數(shù)組中的其他元素與變量base作比較,如果大于它則交換兩者的值*/subscript=i;base=a[i];}}*max=base;將最大值元素的值賦給*max*/*d=subscript;將最大值元素的下標賦給*d*/}18.1本題著重考察考生對C語言中一些簡單算法的掌握情況。解題思路:語言中,大寫字母的ASCII碼值比相應的小寫字母的碼值小。先判斷輸入的字母是否是大寫字母,若是大寫字母,將其轉化為相應的小寫字母,方法是該大寫字母對應的碼值加上32就是其小寫字母的ASCII碼值;若是小寫字母,將其轉化為相應的大寫字母,方法是該小寫字母對應的ASCII碼值減去32就是其大寫字母的ASCII碼值。本評析僅作參考。18.2本題的考核點是C語言中的函數(shù)的入口參數(shù)和類型轉換。C語言規(guī)定,凡不加類型說明的函數(shù),一律自動按整型處理。如果函數(shù)有返回值,函數(shù)返回值為實型,所以第一處錯誤"fun(int應改為"floatfun(int或具有相同作用的句子。函數(shù)的返回值是通過函數(shù)中的語句獲得的。return語句后面的括弧可以不要,但分號不能少,必須加分號。所以,第二處錯誤應改為"return或相同作用的句子。如果函數(shù)值的類型和return語句中表達式的值不一致,則以函數(shù)類型為準。對數(shù)值型數(shù)據(jù),可以自動進行類型轉換。即函數(shù)類型決定返回值的類型。本評析僅作參考。18.3本題的考核點是c語言中的基本算法和循環(huán)語句的使用。解題思路:本題要求計算并輸出給定數(shù)組中每相鄰兩個元素之平均值的平方根之和,并作為函數(shù)值返回。在給出的參考程序中,由于函數(shù)要求的返回值為雙精度型,所以先將變量avg定義為雙精度型,初值為,然后通過循環(huán)分別求出相鄰兩個元素的平均值放入變量中,再使用求平方根函數(shù)sqrt()對各平均值開方求和,最終結果輸出到變量中并返回。doublefun(doublex[9]){inti;doubleavg=0.0,sum=0.0;將變量avgsum定義為雙精度型,并給其賦初值為0.0*/for(i=0;i<8;i++){avg=(x[i]+x[i+1])/2;/*通過循環(huán)分別求出相鄰兩個元素的平均值放入變量avg中*/sum+=sqrt(avg);/*使用求平方根函數(shù)sqrt()對各平均值開方求和,最終結果輸出到變量sum*/}returnsum;返回計算結果*/}19.1本題著重考察考生對C語言中一些簡單算法的掌握情況。解題思路:語言中,大寫字母的ASCII碼值比相應的小寫字母的碼值小。先判斷輸入的字母是否是大寫字母,若是大寫字母,將其轉化為相應的小寫字母,方法是該大寫字母對應的碼值加上32就是其小寫字母的ASCII碼值;若是小寫字母,將其轉化為相應的大寫字母,方法是該小寫字母對應的ASCII碼值減去32就是其大寫字母的ASCII碼值。本評析僅作參考。19.2本題的考核點是C語言中的函數(shù)的入口參數(shù)和類型轉換。C語言規(guī)定,凡不加類型說明的函數(shù),一律自動按整型處理。如果函數(shù)有返回值,函數(shù)返回值為實型,所以第一處錯誤"fun(int應改為"floatfun(int或具有相同作用的句子。函數(shù)的返回值是通過函數(shù)中的語句獲得的。return語句后面的括弧可以不要,但分號不能少,必須加分號。所以,第二處錯誤應改為"return或相同作用的句子。如果函數(shù)值的類型和return語句中表達式的值不一致,則以函數(shù)類型為準。對數(shù)值型數(shù)據(jù),可以自動進行類型轉換。即函數(shù)類型決定返回值的類型。本評析僅作參考。19.3本題的考核點是c語言中的基本算法和循環(huán)語句的使用。解題思路:本題要求計算并輸出給定數(shù)組中每相鄰兩個元素之平均值的平方根之和,并作為函數(shù)值返回。在給出的參考程序中,由于函數(shù)要求的返回值為雙精度型,所以先將變量avg定義為雙精度型,初值為,然后通過循環(huán)分別求出相鄰兩個元素的平均值放入變量中,再使用求平方根函數(shù)sqrt()對各平均值開方求和,最終結果輸出到變量中并返回。doublefun(doublex[9]){inti;doubleavg=0.0,sum=0.0;將變量avgsum定義為雙精度型,并給其賦初值為0.0*/for(i=0;i<8;i++){avg=(x[i]+x[i+1])/2;/*通過循環(huán)分別求出相鄰兩個元素的平均值放入變量avg中*/sum+=sqrt(avg);/*使用求平方根函數(shù)sqrt()對各平均值開方求和,最終結果輸出到變量sum*/}returnsum;返回計算結果*/}20.1本題的考核點是C語言中的循環(huán)嵌套語句的使用。解題思路:使用嵌套循環(huán),外循環(huán)是行循環(huán),內循環(huán)是列循環(huán),這樣可以對整個數(shù)組中的元素進行符合條件的運算。題目要求將每行元素中的值均右移m個位置,左邊置為0,所以首先要使用語句將每行元素中的值均右移m個位置,再將左邊置為0。本評析僅供參考。20.2本題的考核點是C語言中不同數(shù)據(jù)類型的使用以及運算符的使用。觀察題目可知,sum=0.0floatsum=0.0;或doublesum=0.0;"\"不是一個運算符,除法運算符的正確表示應該是,所以,求平均值的寫法應為:sum=sum/c;或sum/=c;本評析僅作參考。20.3本題的考核點是求模運算和基本c語句的使用。解題思路:該題考查的是數(shù)學上的一個數(shù)列,其通式為:1/(2*n-1)-1/(2*n)。在給出的參考程序中,由于函數(shù)要求的返回值為雙精度型,所以將定義為雙精度型,其初值為,再判斷輸入的n是否符合條件,如果條件為真,則執(zhí)行循環(huán),分別計算出1.0/(2*i-1)-1.0/(2*i)中,并將該結果返回。doublefun(intn){inti;doublesum=0.0;sum為雙精度型變量,并給其賦初值為0.0*/if(n>1&&n<=100){for(i=1;i<=n;i++)sum+=1.0/(2*i-1)-1.0/(2*i);計算出1.0/(2*i-1)-1.0/(2*i)相應的每一個多項式的值,同時累加到變量中*/}returnsum;返回計算結果*/}21.1本題考查的是字符串中字符的插入。在fun函數(shù)中,第一個for循環(huán)的作用是求出所有字符串中,長度最長的字符串的長度len。然后循環(huán)遍歷各個字符串,并求出當前字符串的長度n,故第一空應填ss[i];接著利用for語句,對每個字符串從下標為n的字符到下標為len-1的len-n個元素填,由于循環(huán)變量j0n+j號NULL,該字符在字符串中的下標應為n+j+1,故第三空應填1。21.2本題的考核點是C語言的一些基本用法和數(shù)組的使用。C語言是區(qū)分大小寫的,所以,"Intk,q,i;應改為"intk,q,i;。數(shù)組名[常量表達式][常量表達式]例如charstr[k][i]定義strk行i列的字符數(shù)組。所以,"pt[i]=str[k,i];"應改為"pt[i]=str[k][i];"。本評析僅作參考。21.3本題的考核點是求模運算和基本c語句的使用。解題思路:在給出的參考程序中,由于函數(shù)的返回值為雙精度型,所以將sum定義為雙精度型變量,初值為0.0,再求出符合條件的中能被59整除的自然數(shù),同時累加自然數(shù)的倒數(shù)之和,放入變量sum中并返回。#include<stdio.h>doublefun(intn){inti;doublesum=0.0;將定義為雙精度型變量,并給其賦初值為0.0*/if(n>0&&n<=100){for(i=1;i<=n;i++)if(i%5==0||i%9==0)判斷i是否能被或者*/sum+=1.0/i;累加自然數(shù)的倒數(shù)之和,放入變量sum*/}returnsum;*/}22.1本題考查的是字符串長度的比較。由于在fun函數(shù)中要對字符串數(shù)組中各個字符串的長度進行比較,其參數(shù)應該是一個指向字符數(shù)組的指針,根據(jù)題面可知,該指針指向的數(shù)組的長度為,故第一空應填[N]或其等效形式;在外層循環(huán)內進行比較時,先使長度的初始值為第一個字符串的長度,故第二空應填;然后逐個比較其它字符串的長度len,如果當前字符串長度len大于*n,則將len賦值給,故第三空應填*n=len;并記錄下此時字符串在字符串數(shù)組中的下標i。222首先,我們必須先讀懂題中程序的大致意思,這是發(fā)現(xiàn)并改正程序中錯誤的重要前提。程序中的重要思想如下:1、要注意存放學生分數(shù)的數(shù)組是一個float型的數(shù)組,故總分和平均分都應當是float型的;2、函數(shù)fun()中的第三個形參是一個指針,這表示在未來賦值時的方法是特殊的。本題的第一個錯誤:在函數(shù)fun()第一個循環(huán)體中,語句"t=s[k]只是將t的值不斷用不同學生的分數(shù)替代,這與計算總分的初衷相逆,這條語句應當書寫為"t=t+s[k];",實現(xiàn)學生分數(shù)的不斷累加;本題的第二個錯誤:語句"*aver=&ave;"是不正確的,*aver代表的是一個float型的變量,而&aver則是函數(shù)中存放平均數(shù)的那個變量的內存地址,兩者不匹配,應當改為"*aver=,這樣才可以實現(xiàn)通過aver返回平均分的目的。本評析僅作參考。22.3本題的考核點是c語言中多項式的運算。解題思路:本題是求多項式的和,解此類題的關鍵是找出其中的規(guī)律,觀察表達式可得出x(n)=x(n-1)*x*(0.5-n+1)/n。#include<stdio.h>#include<math.h>可以通過while循環(huán)求出各項表達式的值,然后進行累加。doublefun(doublex){intn=1;/*循環(huán)計數(shù)*//*累計數(shù)*/doublesn=1;doublexn=1,xn1=0;/*x的n值以及的n-1;*/while(fabs(xn-xn1)>=0.000001)/*絕對值是否合格*/{xn=xn*x*(0.5-n+1)/n;表達式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/n+=1;sn+=xn;}/*sn累加上xn*/return(sn);}23.1本題考查的是字符串長度的比較。由于在fun外層循環(huán)中,其循環(huán)條件應為i<M,故第一空應填M;在比較時,先使長度的初始值*n為第一個字符串的長度,然后逐個比較其它字符串的長度len,如果長度小于*n,則將len賦值給*n,并記錄下此時字符串在字符串數(shù)組中的下標i。故第二空應為<或;最后要返回數(shù)組的下標,即代碼中的,故第三空應為。23.2本題著重考察考生對C語言中函數(shù)入口參數(shù)的用法以及一些簡單算法的掌握情況。從主函數(shù)中可以看出,t是一個字串,因此在函數(shù)的參數(shù)表中應將改為字符指"voidfun(longs,longt)"語句改為"voidfun(longs,long*t)"或相同作用的語句。根據(jù)題面要求從低位開始取出長整型變量s*t=s%10取出長整型變量中的第一個奇數(shù)位上的數(shù)字,并放在新串中。然后利用while循環(huán)體依次取出長整型變量ssl=sl*100sl=sl*10或等效語句,否則在原長整型變量取出的奇數(shù)位將在新的數(shù)字串中隔0排列!本評析僅作參考。23.3本題的考核點是c語言中for循環(huán)語句的使用。均數(shù)離差的平方之和,除以單位數(shù)后的平方根。根據(jù)所給公式,第一個公式中用到的值,所以先運算出X'X'是一個求和運算,可通過一個循環(huán)累加實現(xiàn),求s值也是一個累加的過程,然后對此和開根,開根運算可通過函數(shù)sqrt()實現(xiàn)。#include<stdio.h>#include<math.h>doublefun(doublex[10]){inti;定義變量*/doubleavg=0.0;doublesum=0.0;doubleabs=0.0;doublefc;for(i=0;i<10;i++)循環(huán)開始*/sum+=x[i];計算已結定的10個數(shù)之和,并將其值賦給變量sum*/avg=sum/10;計算已結定的個數(shù)的平均值,并將其值賦給變量avg*/for(i=0;i<10;i++)循環(huán)開始*/abs+=(x[i]-avg)*(x[i]-avg);計算(Xk-X')的平方和,并將其值賦給變量abc*/fc=sqrt(abs/10);函數(shù)是計算abs/10的平方根*/returnfc;*/}24.1本題考查的是字符數(shù)據(jù)的移動。在本題中,建立了兩個臨時數(shù)組t1,分別用來順序存放數(shù)字字符與非數(shù)字字符,在第一個for到之間,則將其寫入到臨時數(shù)組中,并且對t2的下標執(zhí)行加操作,故第一空為j++或其等效形式,如果不在這之間,則寫入到臨時數(shù)組中,并對下標加。當對所有字符比較結束后,在這兩個臨時數(shù)組的末尾均添加了字符串結束字符NULL,第二條for語句是將數(shù)組t1中的字符寫回到字符串中,故第二空應填s[i]=t1[i]或其等效形式;第三條for語句的目的是將t2數(shù)組中的字符逐個寫回到中,其要寫入的字符數(shù)目應為數(shù)組t2中NULL字符以前的字符的個數(shù)(即jj,同時考慮到t2[j]=NULL,故第三空也可填j+1。24.2本題著重考察考生對C語言中函數(shù)入口參數(shù)的用法以及一些簡單算法的掌握情況。從主函數(shù)中可以看出,t是一個字符串,因此在fun函數(shù)的參數(shù)表中應將t改為字符指針或字符數(shù)組,即把"voidfun(longs,longt)"語句改為"voidfun(longs,long*t)"或相同作用的語句。根據(jù)題面要求,從低位開始取出長整型變量中偶數(shù)位上的數(shù)來設計功能函數(shù),用*t=s%取出長整型變量s中的第一個偶數(shù)位上的數(shù)字,并放在新串中,然后利用while循環(huán)體依次取出長整型變量中的其它偶數(shù)位!在這里while(s<應改為while(s>或其等效語句!本評析僅作參考。本題的考核點是查找素數(shù)的算法以及開根函數(shù)的應用。24.3解題思路:從3到指定數(shù)n,找出所有的素數(shù),素數(shù)的判斷方法是:只能被1和其自身整除,而不能被其它任何數(shù)整除的數(shù);sqrt(x)函數(shù)是計算x的平方根。#include<math.h>#include<stdio.h>doublefun(intn){inti,j=0;定義兩個整型變量*/doubles=0;定義變量s為雙精度型*/for(i=3;i<=n;i++){for(j=2;j<i;j++)if(i%j==0)break;如果ij整除就說明i不是素數(shù),繼而退出循環(huán)體*/if(j==i)s=s+sqrt(i);函數(shù)是計算i的平方根*/}returns;返回結果*/}25.1本題考查的是字符串中字符的插入算法。fun通過for循環(huán)對字符串中各個字符進行比較,如果當前字符介于到間(即并且s[i]<='9'字符,否則繼續(xù)比較下一字符,直到字符串結束,故第一空應填;在插入字符時,首先計算出當前字符后面還有多while循環(huán)來比較當前遍歷字符是否為NULL實現(xiàn)的,故第二空應填NULLn初始化為0for循環(huán)語句將當前字符后面的所有字符都向后移動一位,故第三空應填s[j]或其等效形式,最后在當前字符后插入待插入字符,最后不要忘了要對i進行一次自加,否則會限入死循環(huán)。25.2本題著重考察考生對C語言中基本語法的掌握情況。首先,根據(jù)語言中的語法規(guī)定,在定義數(shù)組變量時,用變量或不定量說明數(shù)組的大小是不對的;其次,語句printf("%4f",xx[i][j]錯誤,因為根據(jù)題意方陣中的數(shù)為整型,所以,這里的語句應為printf("%4d",xx[i][j]);。本評析僅作參考。25.3本題的考核點是c語言中的基本算法和sqrt()函數(shù)的使用。1+2^0.5+3^0.5+……+n^0.5,在給出的參考程序中,由于函數(shù)的返回值為雙精度型,所以定義變量為雙精度型,再使用sqrt()函數(shù)求出每一個多項式的值,最后通過sum+=fac;計算出所有多項式之和,最終返回。#include<math.h>#include<stdio.h>doublefun(intn){inti;定義一個整形變量*/doublefac=1.0;定義變量、sum為雙精度型*/doublesum=1.0;if(n>1&&n<=100)for(i=2;i<=n;i++){fac+=sqrt(i);sqrt()函數(shù)求出每一個多項式的值*/sum+=fac;通過sum+=fac;計算出所有多項式之和*/}returnsum;*/}26.1本題考查的是字符數(shù)據(jù)的統(tǒng)計。要統(tǒng)計字符串s中數(shù)字字符出現(xiàn)的次數(shù),只要遍歷字符串中的各個字符,比較它們是否在到1NULLs[i]或其等效形式;最后,要通過一個int型指針變量t來返回統(tǒng)計的結果,故第三空應為*t=n,注意,不能填t=&n,原因在于語言采用單向值傳遞的方式。26.2本題著重考察考生對C語言中基本語法及一些簡單算法的掌握情況。首先,這里的t是指針,這里的語句錯誤,應該為*t=0,其次,if(d%2==0)語句應改為if(d%2==1)或其等效語句。本評析僅作參考。26.3本題的考核點是C語言中的循環(huán)語句的使用。解題思路:對于本題,我們給出的參考函數(shù)采取的算法是:將第一個元素與最后一個元素互換,第二個元素與倒數(shù)第二個互換…的方式進行倒排序。因為我們一次互換兩個元素,所以for循環(huán)語句執(zhí)行l(wèi)ength/2次(是字符串的長度)就可以把全部元素互換一遍。本評析僅供參考。voidfun(char*s){inti,length;chartmp;length=strlen(s);統(tǒng)計字符串s中字符的個數(shù)*/for(i=0;i<length/2;i++){/*以下三行即將si個字符與第length-i個字符進行交互*/tmp=s[i];s[i]=s[length-i-1];s[length-i-1]=tmp;}}27.1本題考查的是字符數(shù)據(jù)的移動算法。在fun函數(shù)中,第一個for語句用來計算字符串的長度,下面的一個條件語句,其目的是求得最后一個下標為奇數(shù)的字符所對應的下標,當字符串長度為偶數(shù)時,其值為,為奇數(shù)時,其值為,故第一空為1。然后用臨時變量c記錄下最后一個元素(下標為奇數(shù))的值s[k],并通過一個循環(huán)語句,將下標為奇數(shù)的元素均向后移動兩位,最后將s[1]改成的值,故第二空為s[k],第三空為。27.2本題著重考察C語言中的指針及一維數(shù)組的用法與基本概念。C語言中,指針變量的定義:voidfun(char*s,char,一維數(shù)組的定義:fun(chars[],chart[])。源程序中的"voidfun(chars,chart)"是定義的簡單變量st"voidfun(char*s,char或"fun(chars[],char或相同作用的語句。按照題意的要求,字符串的結束符'\0'2倍字符串長度的位置上,所以源程序"t[2*d-1]=應改為"t[2*d]=或相同作用的語句。本評析僅作參考。27.3本題的考核點是3行3列矩陣轉置算法。i行j列上的數(shù)賦值給中間數(shù)組的ji列,最后再將中間數(shù)組的值賦給原數(shù)組,形成轉置后的矩陣。本評析僅供參考。voidfun(intarray[3][3]){inti,j;intb[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)b[j][i]=array[i][j];/*將矩陣行列互換*/for(i=0;i<3;i++)for(j=0;j<3;j++)array[i][j]=b[i][j];/*將數(shù)組中的數(shù)據(jù)原封不動的保存在array數(shù)組中*/}28.1本題考查的是排序算法。在fun函數(shù)中,第一個for語句用來計算字符串的長度,下面兩個嵌套的for循環(huán)語句是用來對下標為奇數(shù)的字符進行排序,其排序算法是選擇排序,思想是:在第i輪比較中,先假設最大元素的下標t為首元素的下標i,然后將最大元素逐個與其后面的各個元素(下標為奇數(shù)的)比較,如果它大于s[t],則將改為當前元素的下標,直到與其后面的所有元素比較結束,如果發(fā)現(xiàn)最大元素與首元素不同(即t!=i顯然,每比較一輪都能得到一個最大元素,故第一空應填n=i,第二空應填;最后,通過一個for最后要組成一個字符串,故在字符數(shù)組的結束要加上字符\0',而由循環(huán)語句不難知此j的值就是要插入字符\的元素的數(shù)組下標,故第三空應填NULL或其等效形式。28.2本題著重考察C語言指針的用法及常用算法。在源程序中,r為指向指針的指針變量,它存放的是指針變量的地址,題意中要求對這個地址所指向的內容進行判斷,所以須在地址前加上*,源程序"while(r)"應改為"while(*r)"或相同作用的語句。C語言中,分號是語句的組成部分,各語句間以分號作為分隔。源程序"while(*r){*a=*r;a++;r++應改為"while(*r){*a=*r;a++;r++;}"或相同作用的語句。本評析僅作參考。28.3本題的考核點是找出小于或等于指定數(shù)的所有素數(shù)的算法。解題思路:從2到指定數(shù)lim,找出所有的素數(shù),素數(shù)的判斷方法是:只能被1和其自身整除,而不能被其它任何數(shù)整除的數(shù)。本評析僅供參考。intfun(intlim,intaa[MAX]){inti,j=0,k=0;for(i=2;i<=lim;i++)i是否小于或等于lim,如果i小于等于執(zhí)行循環(huán)*/{for(j=2;j<i;j++)i是否能被比它小的整數(shù)整除*/if(i%j==0)break;i能被整除,則退出該層循環(huán)*/if(j==i)aa[k++]=i;/*i不能被比它小的整數(shù)整除,則將iaa數(shù)組中*/}returnk;}29.1本題考查的是數(shù)組插入算法。在fun函數(shù)中,通過循環(huán),逐個比較字符串中當前字符是否與形參中的字符c相等,如果不相等,則直接比較下一個字符,否則插入一個與該字符相同的字符,直到字符串結束,故第一空應為或其等效形式;在插入字符時,首先計算出當前字符后面還while循環(huán)來實現(xiàn)的,顯然,開始時應把初始化為0第二空應填0;然后利用for循環(huán)語句將當前字符后面的所有字符都向后移動一位,最后在當前字符后插入待插入字符,故第三空應填,最后不要忘了要對i進行一次自加,否則會限入死循環(huán)。29.2本題著重考察C語言指針的用法及常用算法。在源程序中,w為指向指針的指針變量,它存放的是指針變量的地址,題意中要求對這個地址所指向的內容進行判斷,所以須在地址前加上*,源程序"while(w)"應改為"while(*w)"或相同作用的語句。C語言中,大小寫的字母含意不同。源程序中"IF(*r==*p是錯誤的,"IF"應為小寫,程序應改為"if(*r==*p)"或相同作用的語句。本評析僅作參考。29.3本題的考核點是c語言中嵌套循環(huán)語句和條件判斷語句的使用。解題思路:二維數(shù)組的周邊元素的特點是:它有一個下標為0或為數(shù)組上界。所以我們只需判斷數(shù)組的下標是否為0或數(shù)組上界即可。按行、列進行循環(huán)可以保證符合條件的元素只被運算一次。本評析僅供參考。intfun(inta[M][N]){inti,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)if((i==0)||(i==M-1)||(j==0)||(j==N-1))/*a[i][j]是否為數(shù)組中的第一行或最后一行或第一列或最后一列*/sum+=對數(shù)組的周邊元素求和*/returnsum;}30.1本題考查的是二維數(shù)組的用法。在函數(shù)中,外層循環(huán)是按行循環(huán),由于共有Ni>=N,即第一空應填N;對于第j列的元素,其移動后應位于j+1列,如果j+1=N則將其移至0列。在本題中,首先將i行列的元素存放到臨時變量x中,然后通過循環(huán)語句將i行j-1列的元素移到i行j列,然后將臨時變量x中的值賦值給t[i][0]。故第二空應填N-1或其等效形式;第三空應填0。30.2本題的考核點是C語言中一些基本語句的用法和for循環(huán)的使用。解題思路:設三個變量:b,分別用于存放個位、十位和百位上的數(shù)字,k是一個中間變量,隨for語句中循環(huán)變量i的變化而變化,當判斷出個位上的數(shù)字a和十位上的數(shù)字相等且和百位上的數(shù)字也相等時,將此數(shù)存放到數(shù)組s中。本題還需要注意的是除法運算與模運算:為除法運算符,兩個整數(shù)相除結果為整數(shù);為模運算符,或稱求余運算符,要求兩側均為整型數(shù)據(jù)。本題中的第一個錯誤:未搞清楚哪個是循環(huán)變量,導致每次執(zhí)行循環(huán)時k的值始終為n,所以應該將程序中的語句"k=n;"。本題中的第二個錯誤:程序中判斷百位上的數(shù)字跟個位數(shù)字是否相同出錯,所以應該將程序中的語句"c=k/10;"改為"c=k;"或相同功能的語句。本評析僅作參考。30.3本題的考核點是對除首、尾字符外的其它字符按降序排列的算法。解題思路:只對除首、尾字符外的字符排序,排序可用多種方法來實現(xiàn),本題用的是選擇法,通過一變量來記錄大數(shù)的下標,再與前面的數(shù)交換,從而實現(xiàn)降序排序。本評析僅供參考。intfun(char*s,intnum){inti,j,h,t;for(i=1;i<num-1;i++){h=i;for(j=i;j<num-1;j++)if(s[h]<s[j])從字符串的第個字符到num-1個字符中找出最大的字符,并將其數(shù)組下標賦值給h*/if(h!=i)/*判斷找到的最大字符的下標是否為第i個字符*/{t=s[h];s[h]=s[i];s[i]=t;}/*s[h]s[i]中的字符進行交換*/}}31.1本題的考核點是文件函數(shù)的應用。在函數(shù)中,首先定義文件型指針變量,所以第一個空填:FILE*fun函數(shù)中先是以創(chuàng)建方式打開文本文件,再將格式化數(shù)據(jù)寫入流式文件中,然后再以只讀方式打開文本文件,文件中的字符輸出到屏幕,關閉文件,所以第二處填:fclose(fp);通過fscanf函數(shù)輸入數(shù)據(jù)格式為fscanf(文件指針,格式控制字符串,輸入項表)填:fp。本評析僅供參考。31.2本題的考核點是C語言中for循環(huán)的使用。for循環(huán)的作用是計算n的5中,第二個循環(huán)語句實現(xiàn)了計算變量d中個位、十位、百位上數(shù)字之和,結果存放于變量s中,并返回s。本題中的第一個錯誤:程序中和s初始化錯誤,導致ds的值為0,所以應該將程序中的語句"d=0;改為"d=1;s=0;"或相同作用的語句。本題中的第二個錯誤:程序要實現(xiàn)的是計算變量d個位、十位和百位上的數(shù)值,所以應該將程序中的語句"改為"d=d/10;"或相同作用的語句。本評析僅作參考。31.3inti,j,min;for(i=0;i<4;i++){min=tt[0][i];/*將每列的第一個數(shù)賦值給min*/for(j=0;j<3;將min與該列中的每個數(shù)進行比較,并把最大的那個數(shù)賦值給min*/if(min>tt[j][i])min=tt[j][i];pp[i]=min;}本題的考核點是C語言中循環(huán)嵌套語句的使用。因為題目要求出每列中的最小元素,所以列循環(huán)應放在外面,行循環(huán)放在里面。我們給出的參考函數(shù)中,定義了一個變量min來保存最小元素,在行循環(huán)中比較出最小元素,并在行循環(huán)結束時賦給數(shù)組pp的相應元素。本評析僅供參考。32.1本題的考核點是文件函數(shù)的應用。在filenamefseek()fpsizeof()作用是計算字節(jié)長度,fwrite()函數(shù)是將一項長度為一定字節(jié)數(shù)據(jù)復制到指針指向的文件中,所以第三處填:fp。本評析僅供參考。32.2本題的考核點是C語言中關系運算符和循環(huán)的使用。解題思路:先對變量sum和j初始化為,然后累加數(shù)列每一項的值,同時判斷該值被4除后是否余,若條件為真,則該值放到數(shù)組中并返回。本題中的第一個錯誤:程序中變量j未初始化,所以應該在程序中的語句"sum=0;"前面或后面添加語句或相同作用的語句。本題中的第二個錯誤:關系表達式使用錯誤,在c語言中,"="表示賦值運算符,關系表達式"=="的值是一個邏輯值,即"真或"假,所以應該將程序中的語句"if(sum%4=2)""if(sum%4==2)"或相同作用的語句。本評析僅作參考。32.3本題的考核點是從一組字符串中找出最長串的算法。指針變量。本評析僅供參考。fun(char(*a)[81],intnum,char**max){inti;*max=a[0];/*將第一個字符串賦值給指針*/for(i=1;i<=num;i++)if(strlen(a[i])>strlen(*max))*max=a[i];/*假如字符串a[i]的長度比指針max中的字符串的長度長,則將a[i]字符串賦值給指針*/}33.1本程序用來計算表達式各項之和,由于除第一項外的其它各項的值都可以拆分成前一項的值乘以"-x/i",所以程序中用t來記錄各項的值,又因為除第一項外其它才能達到此效果;由于題面公式的第一項為1,所以用于記錄各項和的變量f應初始化為1,即第一空填空;程序中的第三空填"t",用于對各項值進行累加。對于程序各語句的具體分析如下:函數(shù)fun(doublex,intn表示要計算多少項的項數(shù)。f=1;表示第一項的值。t=-1;用來控制第二項的符號,并為控制其他項符號作鋪墊,以使其他項符號達到正負交替的目的。for(i=1;i<n;i++)i從1開始,小于15,計算除第1項外的其他14項的值,同時將各項值(包括第一項的值)進行累加。t*=-1*x/i;t存儲的是上一項的值,-1用來控制正負符號。表示在上一項的基礎上再乘以x/i。當時,因為t=-1,所以t*=-1*x/i;即t=t*-1*x/i;等于-1*-1*x/1得到結果。當時,因為,所以t*=-1*x/i;即t=t*-1*x/i;等于(-1*-1*x/1)*(-1*x/2),結果t=-x*x/2。依次類推得出以下項的值。f+=t;把每一項得到的值累加起來,得到全部項的和。本評析僅作參考。332本題的考核點是C語言中指針變量作為函數(shù)參數(shù)和do...while循環(huán)語句的使用。解題思路:先對變量count和初始化為0,再通過語句判斷各位數(shù)上的數(shù)字值是否是0,若是,則自加1,然后將各位數(shù)上的值分別與統(tǒng)計的最大值進行比較,即找出該整數(shù)中最大的數(shù)字值放到變量中并返回。其中,zero形參指針變量,傳回主函數(shù)的是地址。本題中的第一個錯誤:關系表達式使用錯誤,在c語言中,"="表示賦值運算符,關系表達式"=="的值是一個邏輯值,即"真或"假,所以應該將程序中的語句"if(t=0)"改為"if(t==0)"或相同作用的語句。本題中的第二個錯誤:變量引用錯誤,zero為指針變量,count為整型變量,應該將程序中的語句"zero=count;""*zero=count;"或相同作用的語句。本評析僅作參考。33.3本題的考核點是統(tǒng)計子串在主串中出現(xiàn)次數(shù)的算法。解題思路:將主串中的字符從第一個位置開始逐個與子串中的字符作比較,若子串出現(xiàn)在主串中,次數(shù)加,主串中的指針移動到下一個位置繼續(xù)與子串比較,反之,主串中的指針也同樣移動到下個位置,直至主串中的字符全部比較結束。本評析僅供參考。intfun(char*str,char*substr){unsignedinti=0;intj,k=0,add;while(i<strlen(str)){j=0;add=i;while((str[add]==substr[j])&&(substr[j]!='\0')){add++;j++;}if(substr[j]=='\0')k++;i++;}returnk;}34.1本程序用來計算表達式各項之和,由于除第一項外的其它各項的值都可以拆分成前一項的值乘以"x/i",所以第三空填;程序中用t來記錄計算后的各項的值,由于首次計算的的值要為x,所以t必須初始化為1,故第一空填;程序通過for循環(huán)來實現(xiàn)各項的累加,并通過變量i控制累加次數(shù),由于n=12時,需要執(zhí)行累加的次數(shù)為11,所以的值必須初始化為1,故第二空填。對于程序各語句的具體分析如下:函數(shù)fun(doublex,intn表示要計算多少項的項數(shù)。f=1.0;表示第一項的值。t=1;中的t用來存儲各項的項值,此處是對進行初始化。for(i=1;i<n;i++)i從1開始,小于,計算除第1項外的其他11項的值,同時將各項值(包括第一項的值)進行累加。t*=x/i;t存儲的是上一項的值,x/i表示在上一項的基礎上再乘以x/i。當時,因為,所以t*=x/i;即等于1*x/1得到結果。當時,因為,所以t*=x/i;即t=t*x/i;等于x*x/2,結果t=x*x/2。依次類推得出以下項的值。f+=t;把每一項得到的值累加起來,得到全部項的和。本評析僅作參考。34.2本題的考核點是用數(shù)組名作函數(shù)參數(shù)。解題思路:本題通過雙重循環(huán)逐行輸出數(shù)組中的值。程序中的第一個錯誤:本題考的是用數(shù)組名作函數(shù)參數(shù),此時實參與形參都應用數(shù)組名(或用數(shù)組指針),所以此處應當改為fun(intfun(int等;程序中的第二個錯誤:a[j]=a[j+1]是將數(shù)組中下標為的下一個值賦給a[j],而根據(jù)本題題意,是將前一個值賦給a[j],所以應當改為a[j]=a[j-1];。本評析僅供參考。34.3本題的考核點是求2到之間的非素數(shù)算法。解題思路:非素數(shù)的判斷方法與素數(shù)的判斷方法正好相反,它除了能被1和自身整除外,還可被其它的數(shù)整除。用求余的方法來判斷整除。本評析僅供參考。voidfun(intm,int*k,intxx[]){inti,j;*k=0;for(i=2;i<m;i++){for(j=2;j<i;j++)/*判斷i是否能被比它小的整數(shù)整除*/if(i%j==0)break;if(j<i){xx[*k]=i;i能被整除即為非素數(shù),則將存入xx數(shù)組中,計數(shù)變量k1*/}}351本程序的功能是計算各項表達式之和,直到最后一項的絕對值小于10的次方為止。程序中用while循環(huán)用來判斷最后一項的絕對值是否大于或等于10的-6次方,如果大于等于,則繼續(xù)求下一項的值,并進行累加,如果小
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲消防衛(wèi)生管理制度
- 車輛管理制度培訓要點
- 銷售團隊全案管理制度
- 食品批發(fā)倉庫管理制度
- 飼料加工設備管理制度
- 餐廳采購門店管理制度
- 車輛監(jiān)控人員管理制度
- 食品公司倉儲管理制度
- 進口食品銷售管理制度
- 食堂賬目收支管理制度
- 2025年天津市南開區(qū)中考一模語文試題(含答案)
- 2025年安徽省銅陵市樅陽縣浮山中學高三下學期3月適應性考試歷史試題含解析
- 每日2小時綜合體育實施方案
- 勞動合同法員工培訓課件
- 2024年鹽源縣縣屬國有企業(yè)招聘工作人員考試真題
- 2025年北京市順義區(qū)高三一模生物試卷(含答案)
- 2025年上海市房屋租賃合同模板(標準版)
- 智慧城市中的公民參與-全面剖析
- 四川省南充市2025屆高三下學期高考適應性考試化學試題(二診)(原卷版+解析版)
- 某建筑勞務分包有限公司項目管理手冊
- 2025年上半年全國總工會部分所屬事業(yè)單位公開招聘重點基礎提升(共500題)附帶答案詳解
評論
0/150
提交評論