荷甲直播免费观看直播在线_丰满的继牳3中文字幕系列免费_久久婷婷激情精品综合_有码 无码 中文字幕 丝袜_国内外成人激情视频_亚洲乱码中文字幕234_韩国理论福利片午夜_亚洲一区二区三区高清精油按摩_日本韩国欧美三级在线_在线Ⅴ片免费观看视频

知ing

二級(jí)C語(yǔ)言程序設(shè)計(jì)試題50套

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

Pluto. 上傳

查看本書

第38套:?

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

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?

給定源程序:?

#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]是否是奇數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:1。?

第二處:數(shù)組a中的元素位置由j來(lái)控制,每增加一個(gè)元素,則j1,所以應(yīng)填:j++。?

第三處:返回刪除偶數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。?

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

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

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。?

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?

給定源程序:?

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

}?

解題思路:?

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

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

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

假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:刪除字符串中所有的*號(hào)。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。?

例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG。?

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

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

給定源程序:?

#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加上結(jié)束符。?

參考答案:?

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

{?

int?j?=0?;?

char?*p=a;?

while(*p)?{?

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

p++?;?

}?

a[j]=0;?

}?

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




第39套:?

給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,刪除所有串長(zhǎng)超過k的字符串,函數(shù)返回所剩字符串的個(gè)數(shù)。ss所指字符串?dāng)?shù)組中共有N個(gè)字符串,且串長(zhǎng)小于M。?

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?

給定源程序:?

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

}?

解題思路:?

本題是根據(jù)給定的字符串?dāng)?shù)組中刪除串長(zhǎng)大于某個(gè)值的字符串。?

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

第二處:串長(zhǎng)由形參k來(lái)傳遞,所以應(yīng)填:k。?

第三處:如果字符串ss[i]的串長(zhǎng)小于k,則該字符串仍存在原字符串?dāng)?shù)組中,位置由變量j?來(lái)控制,所以應(yīng)填:ss[i]。?

?

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

給定程序MODI1.C中函數(shù)fun的功能是:逐個(gè)比較p、q所指兩個(gè)字符串對(duì)應(yīng)位置中的字符,把ASCII值大或相等的字符依次存放到c所指數(shù)組中,形成一個(gè)新的字符串。?

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

主函數(shù)中b字符串為:ABcd,?

c中的字符串應(yīng)為:aBcdeFgH。?

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。?

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?

給定源程序:?

#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應(yīng)為0。?

第二處:?判斷兩個(gè)字符串中是否有字符串結(jié)束符產(chǎn)生,所以應(yīng)改為:while(?*p?||?*q?),而不是兩字符串中對(duì)應(yīng)位置的值不相等。?

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

假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:除了字符串前導(dǎo)的*號(hào)之外,將串中其它*號(hào)全部刪除。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。函數(shù)fun中給出的語(yǔ)句僅供參考。?

例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,?字符串中的內(nèi)容應(yīng)當(dāng)是:****ABCDEFG。?

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

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

給定源程序:?

#include?<stdio.h>?

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

{?

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

int?i=0,k;?

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

k=i+1;?

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

{?

}?

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)語(yǔ)句求出字符串前導(dǎo)*號(hào)的個(gè)數(shù)。?

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

參考答案:?

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

{?

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

int?i=0,k;?

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

k=i;?

?

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

{?

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

i++;?

}?

a[k]='\0';?

}?

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



40套:?

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

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?

給定源程序:?

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

}?

解題思路:?

本題是要求在一個(gè)有序的鏈表中插入一個(gè)數(shù),插入后各結(jié)點(diǎn)仍然是有序的。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容,使程序能運(yùn)行出正確的結(jié)果。?

第一處:在函數(shù)fun的開始處,已經(jīng)對(duì)結(jié)構(gòu)指針s分配了內(nèi)存,其中data是一個(gè)整型變量,實(shí)際要求填入一個(gè)整型數(shù)據(jù)。根據(jù)本題要求在一個(gè)鏈表插入一個(gè)整型數(shù),該數(shù)已通過函數(shù)的形參x傳入,因此應(yīng)填x。?

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

第三處:當(dāng)找到結(jié)點(diǎn)位置后,就要插入這個(gè)數(shù),完成插入過程。由于函數(shù)體中分配了結(jié)構(gòu)指針s,snext指針已經(jīng)指向了p,所以,當(dāng)前位置qnext指針就應(yīng)該指向指針s完成鏈表的鏈接。因此,此處應(yīng)填s。?

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

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

例如,若輸入:252,則輸出應(yīng)該是:20。若輸入:202,則輸出應(yīng)該是:0。?

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。?

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

給定源程序:?

#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定義時(shí)沒有賦初值,所以k是一個(gè)隨機(jī)數(shù),根據(jù)試題要求,k應(yīng)賦值為1。?

第二處:整除的符號(hào)是/。?

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

請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:計(jì)算n門課程的平均分,計(jì)算結(jié)果作為函數(shù)值返回。?

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

則函數(shù)的值為:71.80。?

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

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

給定源程序:?

#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)來(lái)計(jì)算平均值且結(jié)果由函數(shù)值返回。?

參考答案:?

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

}?

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




查看更多