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

知ing

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

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

Pluto. 上傳

查看本書

第38套:?

函數fun的功能是:把形參a所指數組中的奇數按原順序依次存放到a[0]、a[1]、a[2]、……中,把偶數從數組中刪除,奇數個數通過函數值返回。例如:若a所指數組中的數據最初排列為:91、4、2、3、6、5、8、7,刪除偶數后a?所指數組中的數據為:9、1、3、57,返回值為5。?

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

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

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

給定源程序:?

#include?<stdio.h>?

#define?N?9?

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

{?int?i,j;?

j?=?0;?

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

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

if?(a[i]%2==___1___)?

{?

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

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

}?

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

return?___3___;?

}?

main()?

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

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

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

printf("\n");?

n?=?fun(b,?N);?

printf("\nThe?number?of?odd?:?%d?\n",?n);?

printf("\nThe?odd?number?:\n");?

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

printf("\n");?

}?

解題思路:?

第一處:判斷a[i]是否是奇數,若是,則仍保留在原數組中a[j],所以應填:1。?

第二處:數組a中的元素位置由j來控制,每增加一個元素,則j1,所以應填:j++。?

第三處:返回刪除偶數后a所指數組中數據的元素j,所以應填:j。?

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

給定程序MODI1.C中函數fun的功能是:求出兩個非零正整數的最大公約數,并作為函數值返回。?例如,若給num1num2分別輸入4921,則輸出的最大公約數為7;若給num1num2分別輸入2781,則輸出的最大公約數為27。?

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

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

給定源程序:?

#include?<stdio.h>?

int?fun(int?a,int?b)?

{?int?r,t;?

if(a<b)?{?

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

t=a;?b=a;?a=t;?

}?

r=a%b;?

while(r!=0)?

{?a=b;?b=r;?r=a%b;?}?

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

return(a);?

}?

main()?

{?int?num1,?num2,a;?

printf("Input?num1?num2:?");?scanf("%d%d",&num1,&num2);?

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

a=fun(num1,num2);?

printf("The?maximun?common?divisor?is?%d\n\n",a);?

}?

解題思路:?

第一處交換值的次序有問題,所以應改為t=a;a=b;b=t;?

第二處:返回值錯誤,應改為:return(b);。?

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

假定輸入的字符串中只包含字母和*號。請編寫函數fun,它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言提供的字符串函數。?

例如,字符串中的內容為:****A*BC*DEF*G*******,刪除后,字符串中的內容應當是:ABCDEFG。?

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

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

給定源程序:?

#include?<stdio.h>?

void?fun(?char?*a?)?

{?

}?

main()?

{?char?s[81];?

printf("Enter?a?string:\n");gets(s);?

fun(?s?);?

printf("The?string?after?deleted:\n");puts(s);?

NONO();?

}?

解題思路:?

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

1.?利用循環(huán)掃描字符串中所有的字符是否是'*',如果不是'*',則把這些字符存放字符串a首地址開始的位置上。?

2.?最后給字符串a加上結束符。?

參考答案:?

void?fun(?char?*a?)?

{?

int?j?=0?;?

char?*p=a;?

while(*p)?{?

if(*p?!=?'*')?a[j++]=*p?;?

p++?;?

}?

a[j]=0;?

}?

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




第39套:?

給定程序中,函數fun的功能是:在形參ss所指字符串數組中,刪除所有串長超過k的字符串,函數返回所剩字符串的個數。ss所指字符串數組中共有N個字符串,且串長小于M。?

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

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

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

給定源程序:?

#include?<stdio.h>?

#include?<string.h>?

#define?N?5?

#define?M?10?

int?fun(char?(*ss)[M],?int?k)?

{?int?i,j=0,len;?

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

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

{?len=strlen(ss[i]);?

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

if(len<=?__2__)?

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

strcpy(ss[j++],__3__);?

}?

return?j;?

}?

main()?

{?char?x[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};?

int?i,f;?

printf("\nThe?original?string\n\n");?

for(i=0;i<N;i++)puts(x[i]);?printf("\n");?

f=fun(x,7);?

printf("The?string?witch?length?is?less?than?or?equal?to?7?:\n");?

for(i=0;?i<f;?i++)?puts(x[i]);printf("\n");?

}?

解題思路:?

本題是根據給定的字符串數組中刪除串長大于某個值的字符串。?

第一處:利用for循環(huán),從幾個字符串中進行查找,程序中已經給定了N個字符串,所以應填:N。?

第二處:串長由形參k來傳遞,所以應填:k。?

第三處:如果字符串ss[i]的串長小于k,則該字符串仍存在原字符串數組中,位置由變量j?來控制,所以應填:ss[i]。?

?

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

給定程序MODI1.C中函數fun的功能是:逐個比較pq所指兩個字符串對應位置中的字符,把ASCII值大或相等的字符依次存放到c所指數組中,形成一個新的字符串。?

例如,若主函數中a字符串為:aBCDeFgH,?

主函數中b字符串為:ABcd,?

c中的字符串應為:aBcdeFgH。?

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

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

給定源程序:?

#include?<stdio.h>?

#include?<string.h>?

void?fun(char?*p?,char?*q,?char?*c)?

{?

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

int?k?=?1;?

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

while(?*p?!=?*q?)?

{?if(?*p<*q?)?c[k]=*q;?

else?c[k]=*p;?

if(*p)?p++;?

if(*q)?q++;?

k++;?

}?

}?

main()?

{?char?a[10]="aBCDeFgH",?b[10]="ABcd",?c[80]={'\0'};?

fun(a,b,c);?

printf("The?string?a:?");?puts(a);?

printf("The?string?b:?");?puts(b);?

printf("The?result?:?");?puts(c);?

}?

解題思路:?

第一處:?存放字符串初始位置也是從0開始存放的,由于k是控制c字符串的位置值,所以k應為0。?

第二處:?判斷兩個字符串中是否有字符串結束符產生,所以應改為:while(?*p?||?*q?),而不是兩字符串中對應位置的值不相等。?

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

假定輸入的字符串中只包含字母和*號。請編寫函數fun,它的功能是:除了字符串前導的*號之外,將串中其它*號全部刪除。在編寫函數時,不得使用C語言提供的字符串函數。函數fun中給出的語句僅供參考。?

例如,字符串中的內容為:****A*BC*DEF*G*******,刪除后,?字符串中的內容應當是:****ABCDEFG。?

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

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

給定源程序:?

#include?<stdio.h>?

void?fun(?char?*a?)?

{?

/*?以下代碼僅供參考?*/?

int?i=0,k;?

while(a[i]=='*')?i++;?

k=i+1;?

while(a[i]!='\0')?/*?以下程序段實現非*字符前移?*/?

{?

}?

a[i+1]='\0';?

}?

main()?

{?char?s[81];?

printf("Enter?a?string:\n");gets(s);?

fun(?s?);?

printf("The?string?after?deleted:\n");puts(s);?

NONO();?

}?

解題思路:?

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

1.?使用while循環(huán)語句求出字符串前導*號的個數。?

2.?使用while循環(huán)語句判斷a[i]是否是字符串結束符標志,如果不是字符串結束標志,則再判斷是否是字符*號,如果不是*號,則把a[i]字符存入a[k]中,如果是*號則跳過該*號,直至字符串結束為止。?

參考答案:?

void?fun(?char?*a?)?

{?

/*?以下代碼僅供參考?*/?

int?i=0,k;?

while(a[i]=='*')?i++;?

k=i;?

?

while(a[i]!='\0')?/*?以下程序段實現非*字符前移?*/?

{?

if(a[i]?!=?'*')?a[k++]=a[i];?

i++;?

}?

a[k]='\0';?

}?

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



40套:?

給定程序中已建立一個帶有頭結點的單向鏈表,鏈表中的各結點按結點數據域中的數據遞增有序鏈接。函數fun的功能是:把形參x的值放入一個新結點并插入到鏈表中,插入后各結點數據域的值仍保持遞增有序。?

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

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

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

給定源程序:?

#include?<stdio.h>?

#include?<stdlib.h>?

#define?N?8?

typedef?struct?list?

{?int?data;?

struct?list?*next;?

}?SLIST;?

void?fun(?SLIST?*h,?int?x)?

{?SLIST?*p,?*q,?*s;?

?

s=(SLIST?*)malloc(sizeof(SLIST));?

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

s->data=___1___;?

q=h;?

p=h->next;?

while(p!=NULL?&&?x>p->data)?{?

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

q=___2___;?

p=p->next;?

}?

s->next=p;?

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

q->next=___3___;?

}?

SLIST?*creatlist(int?*a)?

{?SLIST?*h,*p,*q;?int?i;?

h=p=(SLIST?*)malloc(sizeof(SLIST));?

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

{?q=(SLIST?*)malloc(sizeof(SLIST));?

q->data=a[i];?p->next=q;?p=q;?

}?

p->next=0;?

return?h;?

}?

void?outlist(SLIST?*h)?

{?SLIST?*p;?

p=h->next;?

if?(p==NULL)?printf("\nThe?list?is?NULL!\n");?

else?

{?printf("\nHead");?

do?{?printf("->%d",p->data);?p=p->next;?}?while(p!=NULL);?

printf("->End\n");?

}?

}?

main()?

{?SLIST?*head;?int?x;?

int?a[N]={11,12,15,18,19,22,25,29};?

head=creatlist(a);?

printf("\nThe?list?before?inserting:\n");?outlist(head);?

printf("\nEnter?a?number?:?");?scanf("%d",&x);?

fun(head,x);?

printf("\nThe?list?after?inserting:\n");?outlist(head);?

}?

解題思路:?

本題是要求在一個有序的鏈表中插入一個數,插入后各結點仍然是有序的。程序中共有三處要填上適當的內容,使程序能運行出正確的結果。?

第一處:在函數fun的開始處,已經對結構指針s分配了內存,其中data是一個整型變量,實際要求填入一個整型數據。根據本題要求在一個鏈表插入一個整型數,該數已通過函數的形參x傳入,因此應填x。?

第二處:使用一個while循環(huán)找出要插入一個數的位置,在循環(huán)體中q實際上保留當前鏈表p?位置的臨時變量,如果x>p->data時,那么再移動鏈表指針到下一個結果,再進行判斷是否符合條件,如果仍大于,則仍q保留鏈表p的位置。因此,此處應填p。?

第三處:當找到結點位置后,就要插入這個數,完成插入過程。由于函數體中分配了結構指針s,snext指針已經指向了p,所以,當前位置qnext指針就應該指向指針s完成鏈表的鏈接。因此,此處應填s。?

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

給定程序MODI1.C中函數fun的功能是:計算正整數num的各位上的數字之積。?

例如,若輸入:252,則輸出應該是:20。若輸入:202,則輸出應該是:0。?

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

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

給定源程序:?

#include?<stdio.h>?

long?fun?(long?num)?

{?

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

long?k;?

do?

{?k*=num%10?;?

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

num\=10?;?

}?while(num)?;?

return?(k)?;?

}?

main(?)?

{?long?n?;?

printf("\Please?enter?a?number:")?;?scanf("%ld",&n)?;?

printf("\n%ld\n",fun(n))?;?

}?

解題思路:?

第一處:由于在k定義時沒有賦初值,所以k是一個隨機數,根據試題要求,k應賦值為1。?

第二處:整除的符號是/。?

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

請編寫一個函數fun,它的功能是:計算n門課程的平均分,計算結果作為函數值返回。?

例如:若有5門課程的成績是:90.5,?72,?80,?61.5,?55?

則函數的值為:71.80。?

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

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

給定源程序:?

#include?<stdio.h>?

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

{?

}?

?

main()?

{?float?score[30]={90.5,?72,?80,?61.5,?55},?aver;?

aver?=?fun(?score,?5?);?

printf(?"\nAverage?score?is:?%5.2f\n",?aver);?

NONO?(?);?

}?

解題思路:?

本題是使用循環(huán)來計算平均值且結果由函數值返回。?

參考答案:?

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

{?

int?i;?

float?ave=0.0;?

for(i=0;?i<n;?i++)?ave=ave+a[i]?;?

ave=ave/n;?

return?ave;?

}?

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




查看更多