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

知ing

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

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

Pluto. 上傳

查看本書

第26套:?

給定程序中已建立一個帶有頭結(jié)點(diǎn)的單向鏈表,鏈表中的各結(jié)點(diǎn)按數(shù)據(jù)域遞增有序鏈接。函數(shù)fun的功能是:刪除鏈表中數(shù)據(jù)域值相同的結(jié)點(diǎn),使之只保留一個。?

請?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)?

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

p=h->next;?

if?(p!=NULL)?

{?q=p->next;?

while(q!=NULL)?

{?if?(p->data==q->data)?

{?p->next=q->next;?

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

free(___1___);?

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

q=p->___2___;?

}?

else?

{?p=q;?

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

q=q->___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?a[N]={1,2,2,3,4,4,4,5};?

head=creatlist(a);?

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

fun(head);?

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

}?

解題思路:?

本題是考察考生對鏈表的操作,主要是解決刪除鏈表中數(shù)據(jù)域值相同的結(jié)點(diǎn)。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容,使程序能運(yùn)行出正確的結(jié)果。?

函數(shù)fun中使用兩個臨時(shí)結(jié)構(gòu)指針變量pq對鏈表進(jìn)行操作。首先p指向鏈表開始的next指針,q指向pnext指針,再利用while循環(huán)語句來判斷指針q是否NULL,如果q指針是指向NULL,那么函數(shù)結(jié)束返回。如果不是NULL,那么就要判斷pqdata值是否相同,如果值相同,則要刪除該結(jié)點(diǎn),然后繼續(xù)判斷下一結(jié)點(diǎn)值是相同,如果還相同,那么繼續(xù)刪除結(jié)點(diǎn),直至不相同為止。如果兩個結(jié)點(diǎn)的值不相同,那么p就指向qq指向qnext指針再繼續(xù)操作上述過程。?

刪除結(jié)點(diǎn)的方法是:先將pnext指針指向qnext指針,再釋放q指針指向的內(nèi)存,最后把q指針再指向pnext指針就可以刪除一個鏈表中的結(jié)點(diǎn)了。?

第一處:釋放q指針?biāo)傅膬?nèi)存空間,應(yīng)填q。?

第二處:q指針指向pnext指針,重新完成鏈接,應(yīng)填next。?

第三處:兩個結(jié)點(diǎn)的值不相同,那么q就指向qnext指針,應(yīng)填next。?

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

給定程序MODI1.C中函數(shù)fun的功能是:用選擇法對數(shù)組中的n個元素按從小到大的順序進(jìn)行排序。?

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

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

給定源程序:?

#include?<stdio.h>?

#define?N?20?

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

{?int?i,?j,?t,?p;?

for?(j?=?0?;j?<?n-1?;j++)?{?

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

?

p?=?j?

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

if(a[i]?<?a[p])?

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

p?=?j;?

t?=?a[p]?;?a[p]?=?a[j]?;?a[j]?=?t;?

}?

}?

main()?

{?

int?a[N]={9,6,8,3,-1},i,?m?=?5;?

printf("排序前的數(shù)據(jù):")?;?

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

fun(a,m);?

printf("排序后的數(shù)據(jù):")?;?

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

}?

解題思路:?

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

第二處:保存最小值的位置,所以應(yīng)改為:p?=?i;。?

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

請編寫一個函數(shù)fun,它的功能是:求出1m之間(m)能被711整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個數(shù)。例如,若傳送給m的值為50,則程序輸出:?

7?11?14?21?22?28?33?35?42?44?49?

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

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

給定源程序:?

#include?<stdio.h>?

#define?M?100?

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

{?

}?

main(?)?

{?int?aa[M],?n,?k;?

fun?(?50,?aa,?&n?);?

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

if((k+1)%20==0)?printf("\n");?

else?printf(?"%4d",?aa[k]?);?

printf("\n")?;?

NONO(?);?

}?

解題思路:?

本題是考察考生對某個數(shù)能被其他的數(shù)整除方式,并把符合條件的數(shù)存放在數(shù)組a中。?

我們給出的程序是使用for循環(huán)語句以及取模的方式來解決這個問題的。?

參考答案:?

#include?<stdio.h>?

#define?M?100?

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

{?

int?i?;?

*n=0?;?

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

if((i?%?7?==?0)?||?(i?%?11?==?0))?a[(*n)++]=i?;?

}?

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



27套:?

給定程序中,函數(shù)fun的功能是:計(jì)算下式前n項(xiàng)的和作為函數(shù)值返回。?

例如,當(dāng)形參n的值為10時(shí),函數(shù)返回:9.612558。?

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

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

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

給定源程序:?

#include?<stdio.h>?

double?fun(int?n)?

{?int?i;?double?s,?t;?

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

s=__1__;?

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

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

{?t=2.0*i;?

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

s=s+(2.0*i-1)*(2.0*i+1)/__3__;?

}?

return?s;?

}?

main()?

{?int?n=-1;?

while(n<0)?

{?printf("Please?input(n>0):?");?scanf("%d",&n);?}?

printf("\nThe?result?is:?%f\n",fun(n));?

}?

解題思路:?

第一處:根據(jù)公式可知,累加和變量s,應(yīng)置0。?

第二處:for循環(huán)的終止值應(yīng)為形參n。?

第三處:根據(jù)公式以及函數(shù)體中t變量內(nèi)容,所以應(yīng)填:t*t。?

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

給定程序MODI1.C中函數(shù)?fun?的功能是:統(tǒng)計(jì)substr所指子字符串在str所指字符串中出現(xiàn)的次數(shù)。?

例如,若字符串為aaas?lkaaas,子字符串為as,則應(yīng)輸出2。?

請改正程序中的錯誤,使它能計(jì)算出正確的結(jié)果。?

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

給定源程序:?

#include?<stdio.h>?

?

fun?(char?*str,char?*substr)?

{?int?i,j,k,num=0;?

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

for(i?=?0,?str[i],?i++)?

for(j=i,k=0;substr[k]==str[j];k++,j++)?

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

If(substr[k+1]=='\0')?

{?num++;?

break;?

}?

return?num;?

}?

main()?

{?

char?str[80],substr[80];?

printf("Input?a?string:")?;?

gets(str);?

printf("Input?a?substring:")?;?

gets(substr);?

printf("%d\n",fun(str,substr));?

}?

解題思路:?

第一處:循環(huán)for語句中應(yīng)有分號。?

第二處:if錯寫成If。?

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

請編寫一個函數(shù)fun,它的功能是:根據(jù)以下公式求π的值(要求滿足精度0.0005,?即某項(xiàng)小于0.0005時(shí)停止迭代):?

π?1?1×2?1×2×3?1×2×3×4?1×2×…×n?

─?=?1++─—+────+──────+……+────────?

2?3?3×5?3×5×7?3×5×7×9?3×5×…×(2n+1)?

程序運(yùn)行后,如果輸入精度0.0005,則程序輸出為3.14…。?

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

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

給定源程序:?

#include?<stdio.h>?

#include?<math.h>?

double?fun?(?double?eps)?

{?

}?

main(?)?

{?double?x;?

printf("Input?eps:")?;?

scanf("%lf",&x);?printf("\neps?=?%lf,?PI=%lf\n",?x,?fun(x));?

NONO();?

}?

解題思路:?

本題是根據(jù)公式進(jìn)行計(jì)算。?

參考答案:?

double?fun?(?double?eps)?

{?

double?s=1,t=1./3;?

int?n=1;?

while(t>=eps){?s+=t;?n++;?t=t*n/(2.0*n+1);?}?

return?(s*2.0);?

}?

main(?)?

{?double?x;?

printf("Input?eps:")?;?

scanf("%lf",&x);?printf("\neps?=?%lf,?PI=%lf\n",?x,?fun(x));?

NONO();?

}?

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




28套:?

?

給定程序中,函數(shù)fun的功能是:統(tǒng)計(jì)形參s所指字符串中數(shù)字字符出現(xiàn)的次數(shù),并存放在形參t所指的變量中,最后在主函數(shù)中輸出。例如,形參s所指的字符串為:abcdef35adgh3kjsdf7。輸出結(jié)果為:4。?

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

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

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

給定源程序:?

#include?<stdio.h>?

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

{?int?i,?n;?

n=0;?

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

for(i=0;?___1___?!=NULL;?i++)?

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

if(s[i]>='0'&&s[i]<=?___2___?)?n++;?

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

___3___?;?

}?

main()?

{?char?s[80]="abcdef35adgh3kjsdf7";?

int?t;?

printf("\nThe?original?string?is?:?%s\n",s);?

fun(s,&t);?

printf("\nThe?result?is?:?%d\n",t);?

}?

解題思路:?

第一處:在for循環(huán)中終止值要判斷字符串是否結(jié)束符,所以應(yīng)填:s[i]。?

第二處:判斷是否是數(shù)字,所以應(yīng)填:'9'。?

第三處:字符串中數(shù)字字符出現(xiàn)的次數(shù)n,并存放在形參t所指的變量中,所以應(yīng)填:*t=n。?

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

給定程序MODI1.C中函數(shù)fun的功能是:通過某種方式實(shí)現(xiàn)兩個變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如變量a?中的值原為8,b中的值原為3,?程序運(yùn)行后?a?中的值為?3,b中的值為8。?

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

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

給定源程序:?

#include?<stdio.h>?

int?fun(int?*x,int?y)?

{?

int?t?;?

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

t?=?x?;?x?=?y?;?

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

return(y)?;?

}?

main()?

?

{?

int?a?=?3,?b?=?8?;?

printf("%d?%d\n",?a,?b)?;?

b?=?fun(&a,?b)?;?

printf("%d?%d\n",?a,?b)?;?

}?

解題思路:?

第一處:由于x是整型指針變量,所以地址不能賦值給整型變量,因此必須取x地址上的值,所以應(yīng)改為t=*x;*x=y;。?

第二處:已交換后的值存放在t中,所以返回值應(yīng)為return(t);。?

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

請編寫函數(shù)fun,它的功能是:?求出?1?到?1000?之間能被?7?11整除、但不能同時(shí)被?7?和?11?整除的所有整數(shù)并將它們放在a所指的數(shù)組中,通過?n?返回這些數(shù)的個數(shù)。?

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

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

給定源程序:?

#include?<stdio.h>?

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

{?

}?

main(?)?

{?int?aa[1000],?n,?k?;?

fun?(?aa,?&n?)?;?

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

if((k?+?1)?%?10?==?0)?printf("\n")?;?

else?printf("%5d",?aa[k])?;?

NONO(?);?

}?

解題思路:?

本題是利用for循環(huán)語句以及取模%運(yùn)算來得出符合條件的整數(shù)并存入a所指的數(shù)組。?

參考答案:?

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

{?

?

int?i?;?

*n?=?0?;?

for(i?=?7?;?i?<?1000?;?i++)?

if(((i?%?7)?==?0?||?(i?%?11)?==?0)?&&?(i?%?77)?!=?0)?a[(*n)++]?=?i?;?

}?

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



第29套:?

程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是對形參b所指結(jié)構(gòu)體變量中的數(shù)據(jù)進(jìn)行修改,最后在主函數(shù)中輸出修改后的數(shù)據(jù)。?

例如:?b所指變量t中的學(xué)號、姓名、和三門課的成績依次是:?10002、"ZhangQi"、93、85、87,修改后輸出t中的數(shù)據(jù)應(yīng)為:10004、"?LiJie?"93、8587。?

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

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

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

給定源程序:?

#include?<stdio.h>?

#include?<string.h>?

struct?student?{?

long?sno;?

char?name[10];?

float?score[3];?

};?

void?fun(?struct?student?*b)?

{?int?i;?

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

?

b__1__?=?10004;?

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

strcpy(b__2__,?"LiJie");?

}?

main()?

{?struct?student?t={10002,"ZhangQi",?93,?85,?87};?

int?i;?

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

printf("\nNo:?%ld?Name:?%s\nScores:?",t.sno,?t.name);?

for?(i=0;?i<3;?i++)?printf("%6.2f?",?t.score[i]);?

printf("\n");?

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

fun(__3__);?

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

printf("\nNo:?%ld?Name:?%s\nScores:?",t.sno,?t.name);?

for?(i=0;?i<3;?i++)?printf("%6.2f?",?t.score[i]);?

printf("\n");?

}?

解題思路:?

本題是對結(jié)構(gòu)體變量中的值進(jìn)行修改并通過函數(shù)中的參數(shù)進(jìn)行返回。?

第一處:對學(xué)號進(jìn)行更改,所以應(yīng)填:->no。?

第二處:對姓名進(jìn)行更改,所以應(yīng)填:->name。?

第三處:對函數(shù)的調(diào)用,所以應(yīng)填:&t。?

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

給定程序MODI1.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a的平方根。求平方根的迭代公式如下:?

1?a?

x1?=?─?(?x0?+?─?)?

2?x0?

例如,a2時(shí),平方根值為:1.414214。?

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

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

給定源程序:?

#include?<stdio.h>?

#include?<math.h>?

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

double?fun(double?a,?dounle?x0)?

{?double?x1,?y;?

x1=(x0+?a/x0)/2.0;?

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

if(?fabs(x1-xo)>0.00001?)?

\TAB?y=fun(a,x1);?

else?y=x1;?

return?y;?

}?

main(?)?

{?double?x;?

?

printf("Enter?x:?");?scanf("%lf",&x);?

printf("The?square?root?of?%lf?is?%lf\n",x,fun(x,1.0));?

}?

解題思路:?

第一處:?第二個變量定義的保留字double寫錯。?

第二處:?變量x0錯寫成xo了。?

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

學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s,?請編寫函數(shù)fun,它的功能是:把高于等于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。?

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

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

給定源程序:?

#include?<stdio.h>?

#define?N?12?

typedef?struct?

{?char?num[10];?

double?s;?

}?STREC;?

double?fun(?STREC?*a,?STREC?*b,?int?*n?)?

{?

}?

main()?

{?STREC?s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},?

\TAB?\TAB?{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},?

\TAB?\TAB?{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};?

STREC?h[N],?t;FILE?*out?;?

int?i,j,n;?double?ave;?

ave=fun(?s,h,&n?);?

printf("The?%d?student?data?which?is?higher?than?%7.3f:\n",n,ave);?

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

printf("%s?%4.1f\n",h[i].num,h[i].s);?

printf("\n");?

out?=?fopen("c:\\test\\out.dat","w")?;?

fprintf(out,?"%d\n%7.3f\n",?n,?ave);?

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

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

if(h[i].s<h[j].s)?{t=h[i]?;h[i]=h[j];?h[j]=t;}?

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

fprintf(out,"%4.1f\n",h[i].s);?

fclose(out);?

}?

解題思路:?

本題是計(jì)算平均分并把高于平均分的記錄存入結(jié)構(gòu)體數(shù)組中,最后平均分t通過函數(shù)值返回,人數(shù)n和符合條件的記錄b由形參傳回。?

1.?利用for循環(huán)計(jì)算平均分t

?

2.?利用for循環(huán)把高于平均分的學(xué)生記錄存入b中,人數(shù)*n1。?

參考答案:?

double?fun(?STREC?*a,?STREC?*b,?int?*n?)?

{?

double?t=0?;?

int?i?;?

*n?=?0?;?

for(i?=?0?;?i?<?N?;?i++)?t?=?t?+?a[i].s?;?

t?=?t?/?N?;?

for(i?=?0?;?i?<?N?;?i++)?if(a[i].s?>?t)?b[(*n)++]?=?a[i]?;?

return?t?;?

}?

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


查看更多