




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
導(dǎo)讀:在程序填空題中,已經(jīng)給出了程序得主干,讀者首先要理解程序得思路,再選擇正確得內(nèi)容填入空白處,使程序完成既定得功能。這類習(xí)題得設(shè)計(jì)就就是要引導(dǎo)讀者逐步掌握編程得方法。本節(jié)習(xí)題得難度適中,可能有些典型得程序在課堂上已經(jīng)有所接觸,讀者一定要獨(dú)立完成它,這樣就可以逐步提高自己得編程能力、在程序設(shè)計(jì)語言學(xué)習(xí)得中期,讀者對(duì)程序設(shè)計(jì)已經(jīng)有了初步得了解,而自己編寫程序又不知從何處入手,此時(shí)解答此類題目可以避免盲目性,從而提高學(xué)習(xí)得效率?!?、1】下面程序得功能就是不用第三個(gè)變量,實(shí)現(xiàn)兩個(gè)數(shù)得對(duì)調(diào)操作。
#include<stdio.h〉?main()?{inta,b;
scanf("%d%d",&a,&b);
printf(”a=%d,b=%d\n",a,b);?a=①;?b=②;?a=③;
printf(”a=%d,b=%d\n",a,b);?}【3。2】下面程序得功能就是根據(jù)近似公式:π2/6≈1/12+1/22+1/32+……+1/n2,求π值。?#include〈math、h>
doublepi(longn)?{doubles=0、0;?longi;
for(i=1;i〈=n;i++)
s=s+①;
return(②);?}?【3、3】下面得程序得功能就是求一維數(shù)組中得最小元素。?findmin(int*s,intt,int*k)?{intp;
for(p=0,*k=p;p<t;p++)
if(s[p]<s[*k])
①;
}
main()
{inta[10],i,*k=&i;?for(i=0;i〈10;i++)?scanf("%d",&a[i]);?findmin(a,10,k);
printf("%d,%d\n”,*k,a[*k]);
}?【3、4】下面程序得功能就是計(jì)算1-3+5-7+……-99+101得值。
main()
{inti,t=1,s=0;
for(i=1;i〈=101;i+=2)
{①;?s=s+t;?②;?}?printf(”%d\n”,s);?}?【3、5】有以下程序段:?s=1。0;?for(k=1;k〈=n;k++)?s=s+1、0/(k*(k+1));?printf("%f\n",s);?填空完成下述程序,使之與上述程序得功能完全相同。
s=0、0;?①;
k=0;?do
{s=s+d;?②;?d=1。0/(k*(k+1));
}while(③);?printf("%f\n”,s);
【3。6】下面程序得功能就是從鍵盤上輸入若干學(xué)生得學(xué)習(xí)成績,統(tǒng)計(jì)并輸出最高成績與最低成績,當(dāng)輸入為負(fù)數(shù)時(shí)結(jié)束輸入、
main()?{float(yī)x,amax,amin;
scanf(”%f”,&x);?amax=x;?amin=x;
while(①)
{if(x>amax)amax=x;
if(②)amin=x;
scanf("%f",&x);?}
printf("\namax=%f\namin=%f\n",amax,amin);?}?【3、7】下面程序得功能就是將形參x得值轉(zhuǎn)換為二進(jìn)制數(shù),所得得二進(jìn)制數(shù)放在一個(gè)一維數(shù)組中返回,二進(jìn)制數(shù)得最低位放在下標(biāo)為0得元素中。?fun(intx,intb[])
{intk=0,r;
do?{r=x%①;?b[k++]=r;
x/=②;
}while(x);?}
【3。8】下面程序得功能就是輸出1到100之間每位數(shù)得乘積大于每位數(shù)得與得數(shù)、例如數(shù)字26,數(shù)位上數(shù)字得乘積12大于數(shù)字之與8。?main()
{intn,k=1,s=0,m;
for(n=1;n〈=100;n++)?{k=1;?s=0;?①;
while(②)?{k*=m%10;
s+=m%10;?③;?}?if(k>s)
printf("%d”,n);
}?}
【3。9】下面程序得功能就是統(tǒng)計(jì)用0至9之間得不同得數(shù)字組成得三位數(shù)得個(gè)數(shù)。?main()
{inti,j,k,count=0;?for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(①)continue;?elsefor(k=0;k<=9;k++)?if(②)count++;
printf("%d”,count);?}
【3。10】下面程序得功能就是輸出100以內(nèi)得個(gè)位數(shù)為6、且能被3整除得所有數(shù)。?main()?{inti,j;
for(i=0;①;i++)?{j=i*10+6;
if(②)countinue;
printf("%d",j);
}
}?【3。11】下面程序得功能就是用輾轉(zhuǎn)相除法求兩個(gè)正整數(shù)m與n得最大公約數(shù)。?hcf(intm,intn)
{intr;?if(m<n)?{r=m;?①;?n=r;?}
r=m%n;
while(②)
{m=n;
n=r;
r=m%n;?}
③;?}?【3.12】下面程序得功能就是使用冒泡法對(duì)輸入得10個(gè)浮點(diǎn)數(shù)從小到大進(jìn)行排序。排好序得10個(gè)數(shù)分兩行輸出。程序如下:?#include〈stdio。h>?main()?{①;?inti,j;
printf("Input10numbersplease\n");
for(i=0;②;i++)?scanf(”%f",&a[i]);?printf(”\n");?for(i=2;③;i++)
for(j=0;④;j++)
if(⑤)?{x=a[j];
⑥;
a[j+1]=x;
}
printf("Thesorted10numbers;\n");?for(i=0;⑦;i++)?{if(⑧)
printf("\n”);?printf(”%f\t”,a[i]);?}
printf(”\n”);?}?【3.13】下面程序得功能就是讀入20個(gè)整數(shù),統(tǒng)計(jì)非負(fù)數(shù)個(gè)數(shù),并計(jì)算非負(fù)數(shù)之與。
#include"stdio、h"
main()?{inti,a[20],s,count;?s=count=0;
for(i=0;i〈20;i++)?scanf(”%d",①);?for(i=0;i<20;i++)?{if(a[i]〈0)?②;?s+=a[i];?count++;?}
printf(”s=%d\tcount=%d\n”,s,count);?}?【3、14】下面程序得功能就是刪除字符串s中得空格。?#include〈stdio、h>?main()?{char*s="Beijingligongdaxue”;
inti,j;
for(i=j=0;s[i]!='\0';i++)
if(s[i]!='’)①;
else②;
s[j]=’\0';?printf("%s",s);
}?【3。15】下面程序得功能就是將字符串s中所有得字符'c'刪除。請(qǐng)選擇填空。
#include〈stdio。h>?main()?{chars[80];?inti,j;
gets(s);
for(i=j=0;s[i]?。?\0’;i++)
if(s[i]!=’c')①;?s[j]='\0’;?puts(s);
}【3、16】下面程序得功能就是輸出兩個(gè)字符串中對(duì)應(yīng)相等得字符。請(qǐng)選擇填空。
#include<stdio。h〉?charx[]=”programming";?chary[]="Fortran”;?main()
{inti=0;
while(x[i]!='\0’&&y[i]!='\0')?if(x[i]==y[i])?printf(”%c”,①);?else
i++;?}?【3。17】下面程序得功能就是將字符串s中得每個(gè)字符按升序得規(guī)則插到數(shù)組a中,字符串a(chǎn)已排好序。?#include<string。h>
main()
{chara[20]="cehiknqtw”;?chars[]="fbla";?inti,k,j;?for(k=0;s[k]!='\0’;k++)?{j=0;
while(s[k]〉=a[j]&&a[j]!='\0')
j++;
for(①)?②;?a[j]=s[k];
}?puts(a);?}?【3、18】下面程序得功能就是對(duì)鍵盤輸入得兩個(gè)字符串進(jìn)行比較,然后輸出兩個(gè)字符串中第一個(gè)不相同字符得ASCII碼之差。例如:輸入得兩個(gè)字符串分別為”abcdefg"與"abceef",則輸出為-1。
#include<stdio、h>
main()
{charstr1[100],str2[100],c;
inti,s;?printf(”Enterstring1:");gets(str1);?printf("Enterstring2:”);gets(str2);?i=0;?while((str1[i]==str2[i]&&str1[i]!=①))?i++;?s=②;?printf("%d\n”,s);
}?【3.19】下面得函數(shù)expand在將字符串s復(fù)制到字符串t時(shí),將其中得換行符與制表符轉(zhuǎn)換為可見得轉(zhuǎn)義字符表示,即用’\n'表示換行符,用’\t'表示制表符。?expand(chars[],chart[])
{inti,j;
for(i=j=0;s[i]!='\0';i++)?switch(s[i])?{case'\n':t[①]=②;?t[j++]='n’;
break;?case'\t’:t[③]=④;
t[j++]='t’;?break;
default:t[⑤]=s[i];?break;
}?t[j]=⑥;
}?【3、20】下面得函數(shù)index(chars[],chart[])檢查字符串s中就是否包含字符串t,若包含,則返回t在s中得開始位置(下標(biāo)值),否則送回-1、?index(chars[],chart[])
{inti,j,k;
for(i=0;s[i]!=’\0';i++)
{for(j=i,k=0;①&&s[j]==t[k];j++,k++);?if(②)?return(i);
}?return(-1);
}?n
【3.21】下面程序得功能就是計(jì)算S=k!、?k=0
longfun(intn)?{inti;?longs;
for(i=1;i①;i++)
s*=i;
return(②);
}?main()
{intk,n;
longs;?scanf("%d”,&n);
s=③;
for(k=0;k<=n;k++)?s+=④;?printf(”%ld\n",s);?}
【3。22】下面程序得功能就是顯示具有n個(gè)元素得數(shù)組s中得最大元素。?#defineN20
main()
{inti,a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("%d\n",①);?}
fmax(ints[],intn)
{intk,p;
for(p=0,k=p;p<n;p++)?if(s[p]>s[k])②;
return(k);?}?【3。23】下面程序得功能就是由鍵盤輸入n,求滿足下述條件得x、y:
nx與ny得末3位數(shù)字相同,且x≠y,x、y、n均為自然數(shù),并使x+y為最小、?#include<stdio、h〉
pow3(intn,intx)
{inti,last;
for(last=1,i=1;i<=x;i++)?last=①;?return(last);?}?main()?{intx,n,min,flag=1;?scanf("%d",&n);?for(min=2;flag;min++)
for(x=1;x<min&&flag;x++)?if(②&&pow3(n,x)==pow3(n,min-x))
{printf(”x=%d,y=%d\n",x,min-x);
③;
}
}
【3、24】下面得程序就是用遞歸算法求a得平方根。求平方根得迭代公式如下:
#include<math。h〉?doublemysqrt(doublea,doublex0)
{doublex1,y;?x1=①;
if(fabs(x1-x0)>0。00001)?y=mysqrt(②);
elsey=x1;
return(y);?}
main()?{doublex;
printf("Enterx:”);?scanf(”%lf”,&x);
printf(”Thesqrtof%lf=%lf\n",x,mysqrt(x,1。0));?}
【3、25】以下程序就是計(jì)算學(xué)生得年齡。已知第一位最小得學(xué)生年齡為10歲,其余學(xué)生得年齡一個(gè)比一個(gè)大2歲,求第5個(gè)學(xué)生得年齡。
#include<stdio.h〉?age(intn)
{intc;?if(n==1)c=10;
elsec=①;
return(c);
}
main()?{intn=5;?printf(”age:%d\n",②);
}
【3。26】下面得函數(shù)sum(intn)完成計(jì)算1~n得累加與。?sum(intn)
{if(n〈=0)?printf(”dataerror\n");
if(n==1)①;
else②;
}
【3、27】下面得函數(shù)就是一個(gè)求階乘得遞歸調(diào)用函數(shù)。
facto(intn)?{if(n==1)①;
elsereturn(②);?}?【3。28】組合問題,由組合得基本性質(zhì)可知:
(1)C(m,n)=C(n—m,n)?(2)C(m,n+1)=C(m,n)+C(m—1,n)
公式(2)就是一個(gè)遞歸公式,一直到滿足C(1,n)=n為止。當(dāng)n<2*m時(shí),可先用公式(1)進(jìn)行簡化,填寫程序中得空白,使程序可以正確運(yùn)行。?#include"stdio.h"
main()
{intm,n;
printf("Inputm,n=”);
scanf("%d%d",&m,&n);
printf(”Thecombinationnumbeersis%d\n”,combin(m,n));
}
combin(intm,intn)?{intcom;?if(n<2*m)m=n—m;?if(m==0)com=1;
elseif(m==1)①;?else②;
return(com);?}?【3.29】下列函數(shù)就是求一個(gè)字符串str得長度。?intstrlen(char*str)?{if(①)return(0);
elsereturn(②);?}
【3.30】用遞歸實(shí)現(xiàn)將輸入小于32768得整數(shù)按逆序輸出。如輸入12345,則輸出54321。?#include”stdio。h"
main()?{intn;?printf(”Inputn:");
scanf(”%d”,①);
r(n);
printf("\n");
}?r(intm)
{printf(”%d”,②);?m=③;
if(④)
⑤;?}【3、31】輸入n值,輸出高度為n得等邊三角形、例如當(dāng)n=4時(shí)得圖形如下:?*
***
*****
*******?#include<stdio.h>?voidprt(charc,intn)?{if(n>0)?{printf("%c”,c);
①;?}?}?main()
{inti,n;
scanf("%d”,&n);?for(i=1;i〈=n;i++)?{②;
③;?printf("\n”);
}?}
【3。32】下面得函數(shù)實(shí)現(xiàn)N層嵌套平方根得計(jì)算、?doubley(doublex,intn)?{if(n==0)?return(0);?elsereturn(sqrt(x+(①)));
}
【3、33】函數(shù)revstr(s)將字符串s置逆,如輸入得實(shí)參s為字符串”abcde",則返回時(shí)s為字符串”edcba”。遞歸程序如下:?revstr(char*s)
{char*p=s,c;?while(*p)p++;
①;
if(s<p)?{c=*s;
*s=*p;?②;
revstr(s+1);
③;
}?}
如下就是由非遞歸實(shí)現(xiàn)得revstr(s)函數(shù):
revstr(s)?char*s;?{char*p=s,c;
while(*p)p++;?④;?while(s〈p)
{c=*s;
⑤=*p;
*p——=c;?}
}
【3、34】下面函數(shù)用遞歸調(diào)用得方法,將str中存放得長度為n得字符串反轉(zhuǎn)過來,例如原來就是"ABCDE",反序?yàn)椤保臘CBA"。?voidinvent(char*str,intn)?{chart;?t=*str;*str=*(str+n-1);*(str+n—1)=t;if(n〉2)invent(①,n-2);
else②;?}
【3、35】從鍵盤上輸入10個(gè)整數(shù),程序按降序完成從大到小得排序。
#include<stdio。h>?intarray[10];?sort(int*p,int*q)
{int*max,*s;
if(①)?return;
max=p;for(s=p+1;s〈=q;s++)?if(*s>*max)?②;swap(③);
sort(④);}
swap(int*x,int*y){inttemp;?temp=*x;
*x=*y;
*y=temp;
}?main()
{inti;printf("Enterdata:\n");for(i=0;i〈10;i++)?scanf("%d",&array[i]);sort(⑤);
printf("Output:");
for(i=0;i<10;i++)?printf("%d",array[i]);
}?【3.36】下面函數(shù)得功能就是將一個(gè)整數(shù)存放到一個(gè)數(shù)組中。存放時(shí)按逆序存放。例如:483存放成"384"。?#include〈stdio。h〉?voidconvert(char*a,intn)?{inti;?if((i=n/10)!=0)
convert(①,i);?*a=②;
}?charstr[10]="";
main()?{intnumber;?scanf("%d",&number);
convert(str,number);
puts(str);
}?【3、37】下面程序得功能就是實(shí)現(xiàn)數(shù)組元素中值得逆轉(zhuǎn)、
#include<string、h〉?main()
{inti,n=10,a[10]={1,2,3,4,5,6,7,8,9,10};
invert(a,n-1);?for(i=0;i<10;i++)?printf("%4d",a[i]);
printf("\n");?}
invert(int*s,intnum)?{int*t,k;?t=s+num;
while(①)
{k=*s;?*s=*t;?*t=k;
②;?③;?}?}
【3、38】下面程序通過指向整型得指針將數(shù)組a[3][4]得內(nèi)容按3行×4列得格式輸出,請(qǐng)給printf()填入適當(dāng)?shù)脜?shù),使之通過指針p將數(shù)組元素按要求輸出。?#include〈stdio。h〉
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a;?main()
{inti,j;
for(i=0;i〈3;i++)?{for(j=0;j<4;j++)
printf("%4d",①);
}?}?【3、39】下面程序得功能就是:從鍵盤上輸入一行字符,存入一個(gè)字符數(shù)組中,然后輸出該字符串。?#include<stdio、h>
main()?{charstr[81],*sptr;
inti;?for(i=0;i<80;i++)
{str[i]=getchar();
if(str[i]=='\n’)break;?}?str[i]=①;
sptr=str;?while(*sptr)?putchar(*sptr②);
}?【3、40】下面函數(shù)得功能就是將字符變量得值插入已經(jīng)按ASCII碼值從小到大排好序得字符串中。
voidfun(char*w,charx,int*n)
{inti,p=0;
while(x〉w[p])①;
for(i=*n;i〉=p;i--)②;
w[p]=x;?++*n;?}?【3、41】下面程序得功能就是從鍵盤上輸入兩個(gè)字符串,對(duì)兩個(gè)字符串分別排序;然后將它們合并,合并后得字符串按ASCII碼值從小到大排序,并刪去相同得字符。
#include<stdio、h>?strmerge(a,b,c)/*將已排好序得字符串a(chǎn)、b合并到c*/?char*a,*b,*c;?{chart,*w;
w=c;
while(*a!=’\0'①*b!='\0')?{t=②?*a++:*b<*a?*b++:(③);/*將*a、*b得小者存入t*/?if(*w④’\0’)*w=t;?elseif(t⑤*w)*++w=t;/*將與*w不相同得t存入w*/?}?while(*a!=’\0’)/*以下將a或b中剩下得字符存入w*/
if(*a?。剑獁)*++w=*a++;
elsea++;?while(*b!='\0’)
if(*b!=*w)*++w=*b++;
elseb++;
*++w=⑥;?}
strsort(char*s)/*將字符串s中得字符排序*/?{inti,j,n;?chart,*w;
⑦;?for(n=0;*w!='\0’;⑧)?w++;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)?if(s[i]>s[j])?{⑨}?}
main()
{chars1[100],s2[100],s3[200];
printf("\nPleaseInputFirstString:");?scanf("%s",s1);?printf(”\nPleaseInputSecondString:");
scanf("%s",s2);
strsort(s1);?strsort(s2);
⑩='\0’;?strmerge(s1,s2,s3);
printf("\nResult:%s",s3);
}
【3。42】已知某數(shù)列前兩項(xiàng)為2與3,其后繼項(xiàng)根據(jù)前面最后兩項(xiàng)得乘積,按下列規(guī)則生成:?①若乘積為一位數(shù),則該乘積即為數(shù)列得后繼項(xiàng);
②若乘積為二位數(shù),則該乘積得十位上得數(shù)字與個(gè)位上得數(shù)字依次作為數(shù)列得兩個(gè)后繼項(xiàng)。
下面得程序輸出該數(shù)列得前N項(xiàng)及它們得與,其中,函數(shù)sum(n,pa)返回?cái)?shù)列得前N項(xiàng)與,并將生成得前N項(xiàng)存入首指針為pa得數(shù)組中,程序中規(guī)定輸入得N值必須大于2,且不超過給定得常數(shù)值MAXNUM。
例如:若輸入N得值為10,則程序輸出如下內(nèi)容:?sum(10)=44?2361886424?#include"stdio。h"?#defineMAXNUM100?intsum(n,pa)
intn,*pa;?{intcount,total,temp;?*pa=2;?①=3;
total=5;
count=2;
while(count++〈n)?{temp=*(pa-1)**pa;
if(temp<10)?{total+=temp;?*(++pa)=temp;?}
else
{②=temp/10;?total+=*pa;?if(count<n)
{count++;pa++;
③=temp%10;?total+=*pa;
}
}
}
④;?}?main()
{intn,*p,*q,num[MAXNUM];?do?{printf("InputN=?(2<N<%d):",MAXNUM+1);
scanf(”%d”,&n);?}while(⑤);
printf("\nsum(%d)=%d\n”,n,sum(n,num));
for(p=num,q=⑥;p<q;p++)
printf("%4d”,*p);?printf("\n”);
}?【3。43】下面程序得功能就是輸入學(xué)生得姓名與成績,然后輸出、
#include<stdio。h>
structstuinf?{charname[20];/*學(xué)生姓名*/?intscore;/*學(xué)生成績*/
}stu,*p;?main()?{p=&stu;
printf(”Entername:");
gets(①);
printf("Enterscore:");?scanf(”%d”,②);?printf("Output:%s,%d\n”,③,④);?}
【3、44】下面程序得功能就是按學(xué)生得姓名查詢其成績排名與平均成績。查詢時(shí)可連續(xù)進(jìn)行,直到輸入0時(shí)才結(jié)束。?#include<stdio。h>
#include<string。h>?#defineNUM4?structstudent?{intrank;
char*name;?float(yī)score;?};
①stu[]={3,"liming",89、3,
4,"zhanghua",78.2,
1,”anli",95。1,
2,”wangqi",90、6?};?main()?{charstr[10];?inti;
do?{printf("Enteraname");?scanf("%s",str);
for(i=0;i<NUM;i++)?if(②)
{printf("Name:%8s\n”,stu[i]、name);?printf("Rank:%3d\n”,stu[i].rank);?printf("Average:%5.1f\n”,stu[i]。score);?③;?}
if(i〉=NUM)printf(”Notfound\n”);
}while(strcmp(str,”0")!=0);
}【3、45】下面程序得功能就是從終端上輸入5個(gè)人得年齡、性別與姓名,然后輸出。?#include"stdio、h”
structman?{charname[20];
unsignedage;?charsex[7];?};
main()
{structmanperson[5];
data_in(person,5);?data_out(person,5);
}
data_in(structman*p,intn)
{structman*q=①;
for(;p〈q;p++)?{printf("age:sex:name”);?scanf("%u%s",&p-〉age,p-〉sex);
②;?}?}
data_out(structman*p,intn)?{structman*q=__③__;
for(;p〈q;p++)
printf("%s;%u;%s\n",p->name,p—〉age,p->sex);?}【3、46】輸入N個(gè)整數(shù),儲(chǔ)存輸入得數(shù)及對(duì)應(yīng)得序號(hào),并將輸入得數(shù)按從小到大得順序進(jìn)行排列、要求:當(dāng)兩個(gè)整數(shù)相等時(shí),整數(shù)得排列順序由輸入得先后次序決定。例如:輸入得第3個(gè)整數(shù)為5,第7個(gè)整數(shù)也為5,則將先輸入得整數(shù)5排在后輸入得整數(shù)5得前面、程序如下:
#include"stdio.h"
#defineN10
struct
{intno;
intnum;
}array[N];
main()?{inti,j,num;
for(i=0;i〈N;i++)
{printf("enterNo、%d:",i);
scanf("%d",&num);?for(①;j〉=0&&array[j]、num②num;③)
array[j+1]=array[j];
array[④]。num=num;?array[⑤]、no=i;
}?for(i=0;i〈N;i++)
printf("%d=%d,%d\n",i,array[i]。num,array[i]。no);?}【3。47】以下程序得功能就是:讀入一行字符(如:a、。。、y、z),按輸入時(shí)得逆序建立一個(gè)鏈接式得結(jié)點(diǎn)序列,即先輸入得位于鏈表尾(如下圖),然后再按輸入得相反順序輸出,并釋放全部結(jié)點(diǎn)。#include〈stdio、h〉
main()
{structnode?{charinfo;
structnode*link;
}*top,*p;
charc;
top=NULL;?while((c=getchar())①)?{p=(structnode*)malloc(sizeof(structnode));
p->info=c;?p—>link=top;?top=p;
}?while(top)
{②;
top=top-〉link;?putchar(p—>info);?free(p);
}?}【3.48】下面函數(shù)將指針p2所指向得線性鏈表,串接到p1所指向得鏈表得末端。假定p1所指向得鏈表非空。?#defineNULL0?structlink?{floata;?structlink*next;
};?concatenate(p1,p2)?structlist*p1,*p2;?{if(p1—〉next==NULL)?p1->next=p2;?else
concatenate(①,p2);?}【3、49】下面程序得功能就是從鍵盤輸入一個(gè)字符串,然后反序輸出輸入得字符串。?#include〈stdio、h>?structnode?{chardata;
structnode*link;
}*head;?main()
{charch;
structnode*p;
head=NULL;
while((ch=getchar())!=’\n')?{p=(structnode*)malloc(sizeof(structnode));
p-〉data=ch;?p—>link=①;
head=②;
}?③;?while(p!=NULL)
{printf(”%c",p-〉data);?p=p—〉link;?}?}【3.50】下面程序得功能就是從鍵盤上順序輸入整數(shù),直到輸入得整數(shù)小于0時(shí)才停止輸入。然后反序輸出這些整數(shù)。
#include<stdio。h〉
structdata
{intx;?structdata*link;
}*p;?input()?{intnum;
structdata*q;
printf(”Enterdata:");
scanf("%d",&num);
if(num<0)?①;?q=②;
q-〉x=num;?q->link=p;?p=q;?③;?}
main()?{printf("Enterdatauntildat(yī)a<0:\n”);?p=NULL;
input();?printf(”O(jiān)utput:");?while(④)?{printf(”%d\n",p—>x);
⑤;?}?}【3、51】下面函數(shù)得功能就是創(chuàng)建一個(gè)帶有頭結(jié)點(diǎn)得鏈表,將頭結(jié)點(diǎn)返回給主調(diào)函數(shù)、鏈表用于儲(chǔ)存學(xué)生得學(xué)號(hào)與成績、新產(chǎn)生得結(jié)點(diǎn)總就是位于鏈表得尾部。
structstudent?{longnum;?intscore;
structstudent*next;
};
structstudent*creat()?{structstudent*head=NULL,*tail;?longnum;inta;?tail=①malloc(LEN);?do?{scanf("%ld,%d",&num,&a);?if(num!=0)?{if(head==NULL)head=tail;?else②;?tail—〉num=num;tail—>score=a;
tail->next=(structstudent*)malloc(LEN);
}?elsetail->next=NULL;?}while(num!=0);
return(③);
}【3。52】下面create函數(shù)得功能就是建立一個(gè)帶頭結(jié)點(diǎn)得單向鏈表,新產(chǎn)生得結(jié)點(diǎn)總就是插入在鏈表得末尾、單向鏈表得頭指針作為函數(shù)值返回、?#include<stdio。h〉
#defineLENsizeof(structstudent)
structstudent?{longnum;
intscore;?structstudent*next;
};
structstudent*creat()?{structstudent*head=NULL,*tail;
longnum;?inta;?tail=(①)malloc(LEN);?do
{scanf(”%ld,%d”,&num,&a);?if(num!=0)?{if(head==NULL)head=tail;
elsetail=tail-〉next;
tail-〉num=num;?tail->score=a;?tail-〉next=(②)malloc(LEN);
}?elsetail-〉next=NULL;
}while(num!=0);
③;?}【3.53】下面程序得功能就是統(tǒng)計(jì)文件中得字符得個(gè)數(shù)。?#include<stdio、h〉?main()
{longnum=0;
①*fp;
if((fp=fopen("fname。dat","r”))==NULL)?{printf(”Can'topenthefile!");?exit(0);
}?while(②)?{fgetc(fp);?num++;
}
printf("num=%d\n",num);?fclose(fp);
}【3.54】下面程序得功能就是把從鍵盤輸入得文件(用作為文件結(jié)束標(biāo)志)復(fù)制到一個(gè)名為second、txt得新文件中。?#include<stdio。h>?FILE*fp;?main()?{charch;?if((fp=fopen(①))==NULL)
exit(0);?while((ch=getchar())!='')?fputc(ch,fp);
②;
}【3。55】下面程序得功能就是將磁盤上得一個(gè)文件復(fù)制到另一個(gè)文件中,兩個(gè)文件名在命令行中給出(假定給定得文件名無誤)。?#include<stdio。h〉
main(intargc,char*argv[])
{,*f2;?if(argc〈①)
{printf("Themandlineerror!");
exit(0);?}
f1=fopen(argv[1],"r");
f2=fopen(arhv[2],"w");
while(②)?fputs(fgetc(f1),③);
④;?⑤;
}【3.56】下面程序得功能就是根據(jù)命令行參數(shù)分別實(shí)現(xiàn)一個(gè)正整數(shù)得累加或階乘。例如:如果可執(zhí)行文件得文件名就是sm,則執(zhí)行該程序時(shí)輸入:”sm+10",可以實(shí)現(xiàn)10得累加;輸入:”sm-10",可以實(shí)現(xiàn)求10得階乘。
#include〈stdio。h〉?#include<stdlib、h>
main(intargc,char*argv[])
{intn;?voidsum(),mult();?void(*funcp)();?n=atoi(argv[2]);
if(argc!=3||n〈=0)?dispform();?switch(①)
{case'+':funcp=sum;
break;
case’-’:funcp=mult;?break;?default:dispform();?}?②;
}
voidsum(intm)
{inti,s=0;?for(i=1;i〈m;i++)
③;
printf("sum=%d\n",s);
}?voidmult(intm)?{longinti,s=1;
for(i=1;i<=m;i++)?s*=i;
printf("mult=%ld\n";s);
}?dispform()
{printf(”usage:smn(+/!)(n>0)\n”);?exit(0);
}【3.57】下面程序得功能就是鍵盤上輸入一個(gè)字符串,把該字符串中得小寫字母轉(zhuǎn)換為大寫字母,輸出到文件test、txt中,然后從該文件讀出字符串并顯示出來。
#include<stdio、h〉
main()?{charstr[100];?inti=0;?FILE*fp;?if((fp=fopen(”test。txt",①))==NULL)?{printf("Can'topenthefile、\n”);
exit(0);?}
printf(”Inputastring:\n”);?gets(str);?while(str[i])
{if(str[i]>='a'&&str[i]<='z’)
str[i]=②;?fputc(str[i],fp);
i++;?}
fclose(fp);?fp=fopen("test.txt”,③);
fgets(str,strlen(str)+1,fp);?printf("%s\n",str);
fclose(fp);
}【3、58】下面程序得功能就是將從終端上讀入得10個(gè)整數(shù)以二進(jìn)制方式寫入名為"bi、dat”得新文件中。
#include<stdio、h>
FILE*fp;
main()?{inti,j;
if((fp=fopen(①,"wb"))==NULL)?exit(0);?for(i=0;i<10;i++)?{scanf("%d”,&j);
fwrite(②,sizeof(int),1,③);?}
fclose(fp);
}【3、59】以字符流形式讀入一個(gè)文件,從文件中檢索出六種C語言得關(guān)鍵字,并統(tǒng)計(jì)、輸出每種關(guān)鍵字在文件中出現(xiàn)得次數(shù)。本程序中規(guī)定:單詞就是一個(gè)以空格或'\t'、'\n’結(jié)束得字符串。?#include<stdio.h〉
#include<string、h〉?FILE*cp;
charfname[20],buf[100];?intnum;?structkey
{charword[10];
intcount;
}keyword[]={"if”,0,"char”,0,”int",0,
”else”,0,”while",0,"return",0};
char*getword(FILE*fp)
{inti=0;?charc;?while((c=getc(fp))?。紼OF&&(c==''||c==’\t'||c==’\n'));?if(c==EOF)return(NULL);
elsebuf[i++]=c;?while((c=①&&c!=''&&c!=’\t'&&c!=’\n')?buf[i++]=c;
buf[i]='\0';
return(buf);?}?lookup(char*p)
{inti;
char*q,*s;
for(i=0;i<num;i++)?{q=②;
s=p;?while(*s&&(*s==*q))
{③?}?if(④)?{keyword[i]、count++;?break;?}
}
return;?}
main()?{inti;
char*word;?printf("Input:”);
scanf(”%s",fname);?if((cp=fopen(fname,"r"))==NULL)?{printf("error:%s\n”,fname);?exit(0);?}
num=sizeof(keyword)/sizeof(structkey);?while(⑤)?lookup(word);?fclose(cp);?for(i=0;i<num;i++)
printf("keyword:%-20scount=%d\n",keyword[i]、word,keyword[i]、count);
}
【3.60】下面程序得功能就是從鍵盤接受姓名(例如:輸入”ZHANGSAN"),在文件"try。dat"中查找,若文件中已經(jīng)存入了剛輸入得姓名,則顯示提示信息;若文件中沒有剛輸入得姓名,則將該姓名存入文件、要求:⑴若磁盤文件"try、dat”,已存在,則要保留文件中原來得信息;若文件”try。dat"不存在,則在磁盤上建立一個(gè)新文件;⑵當(dāng)輸入得姓名為空時(shí)(長度為0),結(jié)束程序。
#include<stdio、h>
main()
{FILE*fp;?intflag;?charname[30],data[30];?if((fp=fopen("try、dat",①))==NULL)
{printf("Open\n");
exit(0);
}
do
{printf("Entername:”);?gets(name);?if(strlen(name)==0)?break;?strcat(name,"\n");?②;
flag=1;
while(flag&&(fgets(data,30,fp)③))
if(strcmp(data,name)==0)
④;
if(flag)
fputs(name,fp);?else?printf(”\tDat(yī)aentererror!\n");?}while(⑤);?fclose(fp);?}參考答案【3。1】答案:①a+b②a-b③a-b?【3。2】答案:①1、0/(float(yī))(i*i)②sqrt(6*s)?【3.3】答案:①*k=p?【3.4】答案:①t=t*i②t=t>0?-1:1?【3.5】答案:①d=1②k++③k<=n?【3、6】答案:①x>=0②x<amin
【3。7】答案:①2②2
【3、8】答案:①m=n②m>0③m=m/10?【3、9】答案:①i==j②k?。絠&&k!=j(luò)?【3。10】答案:①i〈=9②j%3!=0?【3.11】答案:①m=n②r!=0③return(n)
【3.12】答案:①floata[10],x②i<=9③i〈=8④j<=9-i?⑤a[j]>a[j+1]⑥a[j]=a[j+1]⑦i〈=9⑧i%5==0
【3、13】答案:①&a[i]②continue?注釋:①就是基本概念,使用scanf函數(shù)輸入數(shù)組元素得值。當(dāng)輸入得元素值小于0時(shí),應(yīng)當(dāng)跳過后面得語句,取下一個(gè)數(shù),所以②要填入continue。?【3。14】答案:①s[j++]=s[i]②s[j]=s[i]?【3、15】答案:①s[j++]=s[i]
【3、16】答案:①x[i++]
【3。17】答案:①i=strlen(a);i〉=j;i-—②a[i+1]=a[i]?【3。18】答案:①’\0’②str1[i]—str2[i]
【3.19】答案:①j++②'\\’③j++④'\\'⑤j++⑥'\0'
【3.20】答案:①t[k]!='\0’②t[k]=='\0’【3、21】答案:①<=n②s③0④fun(k)
【3.22】答案:①a[fmax(a,N)]②k=p
【3、23】答案:①last*n%1000②x!=min-x③flag=0
【3、24】答案:①(x0+a/x0)/2②a,x1
注釋:根據(jù)迭代公式,①處應(yīng)當(dāng)就是計(jì)算迭代值x1=(x0+a/x0)/2、按照求平方根得要求,當(dāng)?shù)镁炔荒軡M足"(fabs(x1—x0)〉0、00001)"時(shí),則要繼續(xù)迭代,因此②處應(yīng)當(dāng)填寫"a,x1"。程序中調(diào)用了求絕對(duì)值得庫函數(shù)fabs()。
【3.25】答案:①2+age(n—1)②age(5)?注釋:由于程序就是遞歸算法,因此首先要建立問題得遞歸數(shù)學(xué)模型。根據(jù)原題得描述可以寫出如下遞歸公式:?age(n)=10(n=1)?age(n)=2+age(n-1)(n〉1)
對(duì)照程序與遞歸公式可以瞧出:n得含義就是第n位學(xué)生。很顯然,要求第5位學(xué)生得年齡,②處應(yīng)當(dāng)就是調(diào)用函數(shù)age,實(shí)參得值應(yīng)當(dāng)就是5、在①處應(yīng)該就是函數(shù)得遞歸調(diào)用,根據(jù)遞歸公式,應(yīng)當(dāng)填寫:2+age(n-1)。
【3.26】答案:①return(1)②return(sum(n-1)+n)
注釋:按照常規(guī)得編程方法,此問題可采用一個(gè)循環(huán)語句實(shí)現(xiàn)、閱讀程序,沒有發(fā)現(xiàn)循環(huán)語句,這時(shí),應(yīng)當(dāng)認(rèn)為原來得編程者使用得就是非常規(guī)得算法、對(duì)于這樣常規(guī)算法需要用循環(huán)實(shí)現(xiàn)而沒有使用循環(huán)得程序,就可以肯定地認(rèn)為,一定就是使用了遞歸算法。?將問題"求1~n得累加與"得公式寫成遞歸定義,可以就是如下形式;
sum(n)=1當(dāng)n=1時(shí)?sum(n)=sun(n—1)+n當(dāng)n>1時(shí)
根據(jù)此遞歸定義,可以很容易完成程序、?【3、27】答案:①return(1)②n*facto(n—1)?注釋:我們熟悉得求n!得算法一般就是采用循環(huán)語句實(shí)現(xiàn),但在此程序中根本沒有循環(huán)語句。這時(shí)我們應(yīng)該想到:就是采用遞歸算法實(shí)現(xiàn)得、首先寫出求n!得遞歸公式;
n!=1當(dāng)n=1時(shí)?n!=n*(n—1)當(dāng)n>1時(shí)?根據(jù)此遞歸定義,可以很容易完成程序。
【3、28】答案:①com=n②com=bin(n-1,m—1)+combin(n—1,m)
注釋:題目得說明中已經(jīng)給出組合問題得遞歸定義,不需要讀者自己尋找遞歸表達(dá)式。程序中得語句”if(n<2*m)m=n-m;"完成了題目中敘述得"用公式(1)進(jìn)行簡化”得工作。
【3、29】答案:①*str==’\0’②1+strlen(str+1)
注釋:求串長算法得關(guān)鍵就是確定串結(jié)束標(biāo)記’\0'得位置。根據(jù)求串長得方法,可以得到如下遞歸算法:指針str指向字符串得首字符
如果當(dāng)前字符(*str)==串結(jié)束標(biāo)記'\0’?則串長=0
否則串長=1+除第一個(gè)字符之外得剩余字符串得串長
因此,在①得位置上應(yīng)當(dāng)填寫”*str=='\0'”,以判斷當(dāng)前字符(*str)就是否就是串結(jié)束標(biāo)記'\0’。在②得位置應(yīng)當(dāng)就是根據(jù)上面得遞歸算法進(jìn)行遞歸調(diào)用,因此應(yīng)當(dāng)填寫"1+strlen(str+1)"、
【3。30】答案:①&n②m%10③m/10④m>0⑤r(m)
【3。31】答案:①prt(c,n—1)②prt('',n-i)③prt('*',i)
注釋:函數(shù)prt得功能就是輸出n個(gè)字符c、?【3。32】答案:①y(x,n-1)?注釋:這顯然就是一個(gè)遞歸問題,首先要對(duì)原來得數(shù)學(xué)函數(shù)定義形式進(jìn)行變形,推導(dǎo)出原來函數(shù)得等價(jià)遞歸定義、可以推導(dǎo)出原來函數(shù)得遞歸定義如下、?y(x,n)=x當(dāng)n=0時(shí)
y(x,n)=sqrt(x+y(x,n-1))當(dāng)n>0時(shí)
【3.33】答案:①p—-②*p=’\0’③*p=c④p—-⑤*s++
注釋:在遞歸算法中,指針s指向字符串首部要反向得字符,即要將指針s所指向得字符與指針p所指向得字符串尾得字符('\0')進(jìn)行交換,在交換過程中,將尚沒有交換得字符串得中間部分作為一個(gè)整體,進(jìn)行遞歸處理。程序中首先執(zhí)行”c=*s”,將首字符存入臨時(shí)變量;然后執(zhí)行”*s=*p”,將尾字符存入串首;執(zhí)行"revstr(s+1)”就是遞歸處理串得中間部分,這時(shí),在②處應(yīng)當(dāng)填入"*p=’\0'”,即存入串結(jié)束標(biāo)記。這就是這一程序中得關(guān)鍵所在。在③處要完成將存在臨時(shí)變量c中得字符存入串尾得工作,應(yīng)當(dāng)填寫"*p=c"。?【3。34】答案:①str+1②return①改為n-2
【3。35】答案:①p>=q②max=s③p,max
④p+1,q⑤&array[0],&array[9]?注釋:本程序中得排序部分采用得就是遞歸算法、函數(shù)sort得兩個(gè)形參得含義就是:對(duì)指針p與指針q之間得數(shù)據(jù)進(jìn)行排序、由語句"for(s=p+1;s〈=q;s++)”中指針p與指針q之間得關(guān)系可以得出:指針p不應(yīng)在指針q之后,因此①處應(yīng)填"p>=q”、⑤處應(yīng)填"&array[0],&array[9]”。
由于變量max就是指向當(dāng)前最大值得指針,則當(dāng)找到新得最大值時(shí),max中保存得應(yīng)該就是新得最大值得指針,因此②處應(yīng)填”max=s”。
當(dāng)調(diào)用函數(shù)swap交換兩個(gè)變量值得時(shí)候,要求實(shí)參就是變量得地址,因此,③處應(yīng)填”p,max”將最大值存入指針p所指得單元。
由于問題得要求就是”從大到小”排序,通過執(zhí)行一次函數(shù)sort使最大值已經(jīng)放到了指針p所指得單元中,因此,下一遍排序得時(shí)候,只要對(duì)指針p之后得元素進(jìn)行即可,所以④處應(yīng)填"p+1,q”。
【3.36】答案:①a+1②n%10+'0'
【3.37】答案:①s<t②s++③t—-?【3。38】答案;①*(p+4*i+j)?注釋:p就是一個(gè)一級(jí)指針,賦值后保存二維數(shù)組a得首地址,做加法運(yùn)算加1時(shí),實(shí)際地址增加一個(gè)它所指向得數(shù)據(jù)類型得長度。在C語言中,多維數(shù)組在計(jì)算機(jī)中就是按行存儲(chǔ)得,所以在本題中要通過指針訪問二維數(shù)組中得數(shù)據(jù),必須將二維下標(biāo)轉(zhuǎn)換為一維下標(biāo)、
【3.39】答案:①'\0’或0②++?注釋:在C語言中,進(jìn)行字符串處理時(shí),必須注意串結(jié)束標(biāo)記’\0',它就是在進(jìn)行串處理時(shí)得最基本得要求,所以①中要填入'\0'、為了使用putchar輸出一個(gè)字符串,則必須有改變指針得運(yùn)算,這里只能使用++運(yùn)算、
【3。40】答案:①p++②w[i+1]=w[i]【3.41】答案:①&&②*a〈*b③*a++,*b++④==
⑤!=⑥’\0'⑦w=s⑧n++
⑨t(yī)=s[i];s[i]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級(jí)數(shù)學(xué)北師大版上冊(cè) 第十單元《總復(fù)習(xí)》教學(xué)設(shè)計(jì) 教案
- 2025年度五金建材電商運(yùn)營與推廣合作協(xié)議
- 2025年人美容院與美容護(hù)膚學(xué)校實(shí)習(xí)合作合同
- 2025年中冷器項(xiàng)目可行性研究報(bào)告
- 寵物店裝修保修協(xié)議樣本
- 2025年度股權(quán)退出與創(chuàng)業(yè)投資風(fēng)險(xiǎn)控制合作協(xié)議
- 2025年度培訓(xùn)機(jī)構(gòu)與學(xué)校教育資源共享與市場拓展合作協(xié)議
- 2025年度公司員工技術(shù)合作開發(fā)合伙協(xié)議
- 買房合同買房合同范本
- 2025年度健康養(yǎng)生館特許經(jīng)營授權(quán)合同
- 勞務(wù)投標(biāo)書技術(shù)標(biāo)
- 尿碘檢測臨床意義
- 2022年山東司法警官職業(yè)學(xué)院單招語文試題及答案解析
- 2023版北京協(xié)和醫(yī)院重癥醫(yī)學(xué)科診療常規(guī)
- 鋼網(wǎng)驗(yàn)收?qǐng)?bào)告
- 防水補(bǔ)漏工程合同(合同版本)
- 鐵路局中間站管理手冊(cè)
- 監(jiān)理日志表(標(biāo)準(zhǔn)模版)
- H3C-CAS虛擬化平臺(tái)詳細(xì)介紹
- 小學(xué)生韻母in、ing常見漢字與區(qū)分練習(xí)
- 藥房品種類別及數(shù)量清單
評(píng)論
0/150
提交評(píng)論