精品午夜福利中文字av_国产成人综合网_av毛片免费观看网站_欧美影视国产综合_野花香视频中文免费观看_亚洲无码要在线视频_又粗又大又用力大交换好大好爽小静_欧美贵妇v办公室高跟鞋_亚洲国产高清a∨网站_免费中文少妇亚洲

知ing

二級C語言程序設計試題50套

NCRE研究組 編 / 高等教育出版社

Pluto. 上傳

查看本書

05套:?

給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoiatof將字符串轉(zhuǎn)換成相應的整數(shù)、浮點數(shù),然后將其顯示在屏幕上。?

請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結果。?

注意:源程序存放在考生文件夾下的BLANK1.C中。?

不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

#include?<stdlib.h>?

void?fun(char?*s,?int?a,?double?f)?

{?

/**********found**********/?

__1__?fp;?

char?str[100],?str1[100],?str2[100];?

int?a1;?double?f1;?

fp?=?fopen("file1.txt",?"w");?

?

fprintf(fp,?"%s?%d?%f\n",?s,?a,?f);?

/**********found**********/?

__2__?;?

fp?=?fopen("file1.txt",?"r");?

/**********found**********/?

fscanf(__3__,"%s%s%s",?str,?str1,?str2);?

fclose(fp);?

a1?=?atoi(str1);?

f1?=?atof(str2);?

printf("\nThe?result?:\n\n%s?%d?%f\n",?str,?a1,?f1);?

}?

main()?

{?char?a[10]="Hello!";?int?b=12345;?

double?c=?98.76;?

fun(a,b,c);?

}?

解題思路:?

本題是考察先把給定的數(shù)據(jù)寫入到文本文件中,再從該文件讀出并轉(zhuǎn)換成相應的整數(shù)、浮點數(shù)顯示在屏幕上。?

第一處:定義文本文件類型變量,所以應填:FILE?*。?

第二處:關閉剛寫入的文件,所以應填:fclose(fp)。?

第三處:從文件中讀出數(shù)據(jù),所以應填:fp。?

***************************************************?

給定程序MODI1.C中函數(shù)fun的功能是:?N名學生的學習成績,按從高到低的順序找出前m(m10)名學生來,?并將這些學生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,?此存儲區(qū)的首地址作為函數(shù)值返回。?

請改正函數(shù)fun中指定部位的錯誤,?使它能得出正確的結果。?

注意:?不要改動main函數(shù),?不得增行或刪行,?也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

#include?<alloc.h>?

#include?<string.h>?

#define?N?10?

typedef?struct?ss?

{?char?num[10];?

int?s;?

}?STU;?

STU?*fun(STU?a[],?int?m)?

{?STU?b[N],?*t;?

int?i,j,k;?

/**********found**********/?

t=(STU?*)calloc(sizeof(STU),m)?

for(i=0;?i<N;?i++)?b[i]=a[i];?

for(k=0;?k<m;?k++)?

{?for(i=j=0;?i<N;?i++)?

if(b[i].s?>?b[j].s)?j=i;?

/**********found**********/?

?

t(k)=b(j);?

b[j].s=0;?

}?

return?t;?

}?

outresult(STU?a[],?FILE?*pf)?

{?int?i;?

for(i=0;?i<N;?i++)?

fprintf(pf,"No?=?%s?Mark?=?%d\n",?a[i].num,a[i].s);?

fprintf(pf,"\n\n");?

}?

main()?

{?STU?a[N]={?{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},?

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}?};?

STU?*pOrder;?

int?i,?m;?

printf("*****?The?Original?data?*****\n");?

outresult(a,?stdout);?

printf("\nGive?the?number?of?the?students?who?have?better?score:?");?

scanf("%d",&m);?

while(?m>10?)?

{?printf("\nGive?the?number?of?the?students?who?have?better?score:?");?

scanf("%d",&m);?

}?

pOrder=fun(a,m);?

printf("*****?THE?RESULT?*****\n");?

printf("The?top?:\n");?

for(i=0;?i<m;?i++)?

printf("?%s?%d\n",pOrder[i].num?,?pOrder[i].s);?

free(pOrder);?

}?

解題思路:?

第一處:?語句最后缺少分號。?

第二處:?應該使用方括號,而不是圓括號。?

像此類,使用編譯,即可發(fā)現(xiàn)。?

***************************************************?

請編寫函數(shù)fun,?函數(shù)的功能是:?刪去一維數(shù)組中所有相同的數(shù),?使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。?

例如,?一維數(shù)組中的數(shù)據(jù)是:?2?2?2?3?4?4?5?6?6?6?6?7?7?8?9?9?10?10?10。?

刪除后,數(shù)組中的內(nèi)容應該是:?2?3?4?5?6?7?8?9?10。?

注意:部分源程序在文件PROG1.C中。?

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,?僅在函數(shù)fun的花括號中填入你編寫的若干語句。?

給定源程序:?

#include?<stdio.h>?

#define?N?80?

int?fun(int?a[],?int?n)?

?

{?

}?

main()?

{?int?a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;?

printf("The?original?data?:\n");?

for(i=0;?i<n;?i++)printf("%3d",a[i]);?

n=fun(a,n);?

printf("\n\nThe?data?after?deleted?:\n");?

for(i=0;i<n;i++)printf("%3d",a[i]);?printf("\n\n");?

NONO();?

}?

解題思路:?

本題是刪除已排序過數(shù)組中的相同數(shù)。?

1.?取出數(shù)組中的第1個數(shù)存放在臨時變量k中,再利用for循環(huán)來依次判斷所有的數(shù)。?

2.?如果取出的數(shù)和k相比,如果不相同,則仍存放在原數(shù)組中,其中存放的位置由j來控制,接著把這個數(shù)重新存入k。如果相同,則取下一數(shù)。?

參考答案:?

int?fun(int?a[],?int?n)?

{?

int?i,?j?=?1,?k?=?a[0]?;?

for(i?=?1?;?i?<?n?;?i++)?

if(k?!=?a[i])?{?

a[j++]=a[i]?;?

k?=?a[i]?;?

}?

a[j]?=?0?;?

return?j?;?

}?

※※※※※※※※※※※※※※※※※※※※※※※※※?



06套:?

給定程序中,函數(shù)fun的功能是根據(jù)形參i的值返回某個函數(shù)的值。當調(diào)用正確時,?程序輸出:?

x1=5.000000,?x2=3.000000,?x1*x1+x1*x2=40.000000?

請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結果。?

注意:源程序存放在考生文件夾下的BLANK1.C中。?

不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

double?f1(double?x)?

{?return?x*x;?}?

double?f2(double?x,?double?y)?

{?return?x*y;?}?

/**********found**********/?

__1__?fun(int?i,?double?x,?double?y)?

{?if?(i==1)?

/**********found**********/?

return?__2__(x);?

else?

/**********found**********/?

return?__3__(x,?y);?

}?

main()?

{?double?x1=5,?x2=3,?r;?

r?=?fun(1,?x1,?x2);?

?

r?+=?fun(2,?x1,?x2);?

printf("\nx1=%f,?x2=%f,?x1*x1+x1*x2=%f\n\n",x1,?x2,?r);?

}?

解題思路:?

本題是根據(jù)給定的公式來計算函數(shù)的值。?

第一處:程序中使用雙精度double類型進行計算,所以函數(shù)的返回值類型也為double,所以應填:double。?

第二處:當i等于1時,則返回f1函數(shù)的值,所以應填:f1。?

第三處:如果i不等于1,則返回f2函數(shù)的值,所以應填:f2。?

***************************************************?

給定程序MODI1.C中函數(shù)fun的功能是:?比較兩個字符串,將長的那個字符串的首地址作為函數(shù)值返回。?

請改正函數(shù)fun中指定部位的錯誤,?使它能得出正確的結果。?

注意:?不要改動main函數(shù),?不得增行或刪行,?也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

/**********found**********/?

char?fun(char?*s,?char?*t)?

{?int?sl=0,tl=0;?char?*ss,?*tt;?

ss=s;?tt=t;?

while(*ss)?

{?sl++;?

/**********found**********/?

(*ss)++;?

}?

while(*tt)?

{?tl++;?

/**********found**********/?

(*tt)++;?

}?

if(tl>sl)?return?t;?

else?return?s;?

}?

main()?

{?char?a[80],b[80],*p,*q;?int?i;?

printf("\nEnter?a?string?:?");?gets(a);?

printf("\nEnter?a?string?again?:?");?gets(b);?

printf("\nThe?longer?is?:\n\n\"%s\"\n",fun(a,b));?

}?

解題思路:?

第一處:?試題要求返回字符串的首地址,所以應改為:char?*fun(char?*s,char?*t)?

第二處:?取字符串指針ss的下一個位置,所以應改為:ss++;。?

第三處:取字符串指針tt的下一個位置,所以應改為:tt++;。?

***************************************************?

請編寫函數(shù)fun,函數(shù)的功能是:?移動字符串中的內(nèi)容,移動的規(guī)則如下:?把第1到第m個字符,?平移到字符串的最后,?把第m+1到最后的字符移到字符串的前部。?

例如,?字符串中原有的內(nèi)容為:?ABCDEFGHIJK,?m的值為3,?則移動后,?字符串中的內(nèi)容應該是:?DEFGHIJKABC。?

注意:部分源程序在文件PROG1.C中。?

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,?僅在函數(shù)fun的花括號中填入你編寫的若干語句。?

給定源程序:?

#include?<stdio.h>?

#include?<string.h>?

#define?N?80?

void?fun1(char?*w)?/*?本函數(shù)的功能是將字符串中字符循環(huán)左移一個位置?*/?

{?

int?i;?char?t;?

t=w[0];?

for(i=0;i<strlen(w)-1;i++)?

w[i]=w[i+1];?

w[strlen(w)-1]=t;?

}?

void?fun(char?*w,?int?m)?/*?可調(diào)用fun1函數(shù)左移字符?*/?

{?

}?

main()?

{?char?a[N]=?"ABCDEFGHIJK";?

int?m;?

printf("The?original?string:\n");puts(a);?

printf("\n\nEnter?m:?");scanf("%d",&m);?

fun(a,m);?

printf("\nThe?string?after?moving:\n");puts(a);?

printf("\n\n");?

NONO();?

}?

解題思路:?

本題是考察字符串的操作。?

1.?由于函數(shù)fun1是將字符串中字符循環(huán)左移一個位置,并通過實參w返回循環(huán)左移一個位置的字符串。?

2.?利用循環(huán)for語句來操作多少個字符(m)需要循環(huán)左移。?

參考答案:?

void?fun1(char?*w)?/*?本函數(shù)的功能是將字符串中字符循環(huán)左移一個位置?*/?

{?

int?i;?char?t;?

t=w[0];?

for(i=0;i<strlen(w)-1;i++)?

w[i]=w[i+1];?

w[strlen(w)-1]=t;?

}?

void?fun(char?*w,?int?m)?/*?可調(diào)用fun1函數(shù)左移字符?*/?

{?

int?i;?

for(i?=?0?;?i?<?m?;?i++)?fun1(w);?

}?

※※※※※※※※※※※※※※※※※※※※※※※※※?



07套:?

程序通過定義并賦初值的方式,利用結構體變量存儲了一名學生的信息。函數(shù)fun的功能是輸出這位學生的信息。?

請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。?

注意:源程序存放在考生文件夾下的BLANK1.C中。?

不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

typedef?struct?

{?int?num;?

char?name[9];?

char?sex;?

struct?{?int?year,month,day?;}?birthday;?

float?score[3];?

}STU;?

/**********found**********/?

void?show(STU?___1___)?

{?int?i;?

printf("\n%d?%s?%c?%d-%d-%d",?tt.num,?tt.name,?tt.sex,?

tt.birthday.year,?tt.birthday.month,?tt.birthday.day);?

for(i=0;?i<3;?i++)?

/**********found**********/?

printf("%5.1f",?___2___);?

printf("\n");?

}?

main(?)?

{?STU?std={?1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0?};?

printf("\nA?student?data:\n");?

/**********found**********/?

show(___3___);?

}?

解題思路:?

本題是利用結構體變量存儲了一名學生的信息。?

第一處:tt變量在函數(shù)體fun已經(jīng)使用,所以應填:tt。?

第二處:利用循環(huán)分別輸出學生的成績數(shù)據(jù),所以應填:tt.score[i]。?

第三處:函數(shù)的調(diào)用,所以應填:std。?

***************************************************?

給定程序MODI1.C中函數(shù)?fun?的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對調(diào)、次最大數(shù)和a[1]中的數(shù)對調(diào)。?

請改正程序中的錯誤,使它能得出正確的結果。?

注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

#define?N?20?

int?fun?(?int?*?a,?int?n?)?

{?int?i,?m,?t,?k?;?

for(i=0;i<2;i++)?{?

/**********found**********/?

m=0;?

for(k=i+1;k<n;k++)?

/**********found**********/?

if(a[k]>a[m])?k=m;?

t=a[i];a[i]=a[m];a[m]=t;?

}?

?

}?

main(?)?

{?int?x,?b[N]={11,5,12,0,3,6,9,7,10,8},?n=10,?i;?

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");?

}?

解題思路:?

第一處:外循環(huán)每循環(huán)一次,把當前位置i賦值給m,所以應改為:m=i;。?

第二處:通過內(nèi)循環(huán)來找出最大的一個數(shù)的位置k,所以應改為:if(a[k]>a[m])?m=k;。?

***************************************************?

請編寫一個函數(shù)?unsigned?fun?(?unsigned?w?),w?是一個大于10的無符號整數(shù),若?w?是?n?(n?≥?2)位的整數(shù),函數(shù)求出w的低?n-1位的數(shù)作為函數(shù)值返回。?

例如:w?值為?5923,則函數(shù)返回?923;?w?值為?923?則函數(shù)返回?23。?

注意:?部分源程序存在文件PROG1.C中。?

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?

給定源程序:?

#include?<stdio.h>?

unsigned?fun?(?unsigned?w?)?

{?

}?

main(?)?

{?unsigned?x;?

printf?(?"Enter?a?unsigned?integer?number?:?"?);?scanf?(?"%u",?&x?);?

printf?(?"The?original?data?is?:?%u\n",?x?);?

if?(?x?<?10?)?printf?("Data?error?!");?

else?printf?(?"The?result?:?%u\n",?fun?(?x?)?);?

NONO(?);?

}?

解題思路:?

本題是考察考生怎樣獲取一個符合要求的無符號整數(shù)。本題是應用if條件語句首先判斷給出的數(shù)是幾位數(shù),再模相應的值,最后得出的余數(shù)就是結果。?

參考答案:?

unsigned?fun?(?unsigned?w?)?

{?

if(w>10000)?w?%=?10000?;?

else?if(w>1000)?w?%=?1000?;?

else?if(w>100)?w?%=?100?;?

else?if(w>10)?w?%=10?;?

return?w?;?

}?

※※※※※※※※※※※※※※※※※※※※※※※※※?



08套:?

給定程序通過定義并賦初值的方式,利用結構體變量存儲了一名學生的學號、姓名和3門課的成績。函數(shù)fun的功能是將該學生的各科成績都乘以一個系數(shù)a。

請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。

注意:源程序存放在考生文件夾下的BLANK1.C中。?

不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

?

typedef?struct?

{?int?num;?

char?name[9];?

float?score[3];?

}STU;?

void?show(STU?tt)?

{?int?i;?

printf("%d?%s?:?",tt.num,tt.name);?

for(i=0;?i<3;?i++)?

printf("%5.1f",tt.score[i]);?

printf("\n");?

}?

/**********found**********/?

void?modify(___1___?*ss,float?a)?

{?int?i;?

for(i=0;?i<3;?i++)?

/**********found**********/?

ss->___2___?*=a;?

}?

main(?)?

{?STU?std={?1,"Zhanghua",76.5,78.0,82.0?};?

float?a;?

printf("\nThe?original?number?and?name?and?scores?:\n");?

show(std);?

printf("\nInput?a?number?:?");?scanf("%f",&a);?

/**********found**********/?

modify(___3___,a);?

printf("\nA?result?of?modifying?:\n");?

show(std);?

}?

解題思路:?

本題是利用結構體存儲學生記錄并由實參ss返回。?

第一處:實參ss是一個結構型指針變量,所以應填:STU。?

第二處:該學生的各科成績都乘以一個系數(shù)a,所以應填:score[i]。?

第三處:函數(shù)的調(diào)用,由于函數(shù)定義時使用的指針結構型變量,所以應填:&std。?

***************************************************?

給定程序MODI1.C中函數(shù)fun的功能是:求k!k<13),所求階乘的值作為函數(shù)值返回。例如:若k?=?10,則應輸出:3628800。?

請改正程序中的錯誤,使它能得出正確的結果。?

注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?

給定源程序:?

#include?<stdio.h>?

long?fun?(?int?k)?

{?

/************found************/?

if?k?>?0?

return?(k*fun(k-1));?

?

/************found************/?

else?if?(?k=0?)?

return?1L;?

}?

main()?

{?int?k?=?10?;?

printf("%d!=%ld\n",?k,?fun?(?k?))?;?

}?

解題思路:?

第一處:條件判斷缺少圓括號。?

第二處:判斷相等的符號是==。?

***************************************************?

程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int?a[][N],?int?n),函數(shù)的功能是:使數(shù)組左下三角元素中的值乘以n?。?

例如:若n的值為3,a?數(shù)組中的值為

|?1?9?7?|?|?3?9?7?|?|?2?3?8?|則返回主程序后a數(shù)組中的值應為?|?6?9?8?|??|?4?5?6?|??|?12?15?18|?

注意:?部分源程序存在文件PROG1.C中。?

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?

給定源程序:?

#include?<stdio.h>?

#include?<stdlib.h>?

#define?N?5?

int?fun?(?int?a[][N],?int?n?)?

{?

}?

main?(?)?

{?int?a[N][N],?n,?i,?j;?

printf("*****?The?array?*****\n");?

for?(?i?=0;?i<N;?i++?)?

{?for?(?j?=0;?j<N;?j++?)?

{?a[i][j]?=?rand()%10;?printf(?"%4d",?a[i][j]?);?}?

printf("\n");?

}?

do?n?=?rand()%10?;?while?(?n?>=3?);?

printf("n?=?%4d\n",n);?

fun?(?a,?n?);?

printf?("*****?THE?RESULT?*****\n");?

for?(?i?=0;?i<N;?i++?)?

{?for?(?j?=0;?j<N;?j++?)?printf(?"%4d",?a[i][j]?);?

printf("\n");?

}?

NONO(?);?

}?

解題思路:?

本題是利用兩重循環(huán)給二維數(shù)組左下三角元素中的值乘以n。?

參考答案:?

int?fun?(?int?a[][N],?int?n?)?

{?

int?i,?j;?

for(i?=?0?;?i?<?N?;?i++)?

for(j?=?0?;?j?<=?i;?j++)?

a[i][j]?*=?n?;?

}?

※※※※※※※※※※※※※※※※※※※※※※※※※?



查看更多