C語言程序填空題_第1頁
C語言程序填空題_第2頁
C語言程序填空題_第3頁
C語言程序填空題_第4頁
C語言程序填空題_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

導(dǎo)讀:在程序填空題中,已經(jīng)給出了程序的主干,讀者首先要理解程序的思路,再選擇正確的內(nèi)容填入空白處,使程序完成既定的功能。這類習(xí)題的設(shè)計就是要引導(dǎo)讀者逐步掌握編程的方法。本節(jié)習(xí)題的難度適中,可能有些典型的程序在課堂上已經(jīng)有所接觸,讀者一定要獨立完成它,這樣就可以逐步提高自己的編程能力。在程序設(shè)計語言學(xué)習(xí)的中期,讀者對程序設(shè)計已經(jīng)有了初步的了解,而自己編寫程序又不知從何處入手,此時解答此類題目可以避免盲目性,從而提高學(xué)習(xí)的效率。[3o1]下面程序的功能是不用第三個變量,實現(xiàn)兩個數(shù)的對調(diào)操作.#include<stdio.h>main(){inta,b;scanf(w%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);a=①;b=②;a=③;printf("a=%d,b=%d\n”,a,b);}[3o2]下面程序的功能是根據(jù)近似公式:兀2/6弋1/12+1/22+1/32+……+l/n2,求71值。#include<mathoh>doublepi(longn){doubles=0o0;longi;for(i=l;i<=n;i++)s=s+①;return(②);}的程序的功能是求一維數(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]);}程序的功能是計算1-3+5-7+……-99+101的值.main(){inti,t=l,s=0;for(i=l;i<=101;i+=2)(①;s=s+t;②;}printf("%d\n",s);}[3o5]有以下程序段:s=lo0;for(k=l;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);程序的功能是從鍵盤上輸入若干學(xué)生的學(xué)習(xí)成績,統(tǒng)計并輸出最高成績和最低成績,當輸入為負數(shù)時結(jié)束輸入。main(){floatx,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);}程序的功能是將形參x的值轉(zhuǎn)換為二進制數(shù),所得的二進制數(shù)放在一個一維數(shù)組中返回,二進制數(shù)的最低位放在下標為。的元素中.fun(intx,intb[]){intk=0,r;do{r=x%①;b[k++]=r;x/=②;}while(x);}[3o8]下面程序的功能是輸出1到1。。之間每位數(shù)的乘積大于每位數(shù)的和的數(shù)。例如數(shù)字26,數(shù)位上數(shù)字的乘積12大于數(shù)字之和8.main(){intn,k=l,s=0,m;for(n=l;n<=100;n++){k=l;s=0;①;while(②){k*=m%10;s+=m%10;③;}if(k>s)printf("%d”,n);[3.9]下面程序的功能是統(tǒng)計用。至9之間的不同的數(shù)字組成的三位數(shù)的個數(shù)。main(){inti,j,k,count=0;for(i=l;i<=9;i++)for(j=0;j<=9;j++)if(①)continue;elsefor(k=0;k<=9;k++)if(②)count++;printf("%d”,count);)[3o10]下面程序的功能是輸出10。以內(nèi)的個位數(shù)為6、且能被3整除的所有數(shù)。main(){inti,j;for(i=0;①;i++){j=i*10+6;if(②)countinue;printf("%d”,j);})[3.11]下面程序的功能是用輾轉(zhuǎn)相除法求兩個正整數(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;}③;)[3o12]下面程序的功能是使用冒泡法對輸入的1。個浮點數(shù)從小到大進行排序。排好序的1。個數(shù)分兩行輸出。程序如下:#include<stdio.h>main(){①;intij;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+l]=x;)printff'Thesorted10numbers;\n");for(i=0;⑦;i++){if(⑧)printf("\n");printf(w%f\t",a[i]);}printf("\n");)程序的功能是讀入2。個整數(shù),統(tǒng)計非負數(shù)個數(shù),并計算非負數(shù)之和。#include"stdiooh”main(){inti,a[20],s,count;s=count=0;for(i=0;i<20;i++)scanf(w%d",①);for(i=0;i<20;i++){if(a[i]<0)②;s+=a[i];count++;printf("s=%d\tcount=%d\n",s,count);程序的功能是刪除字符串s中的空格。#include<stdio.h>main(){char*s="Beijingligongdaxuew;intij;for(i=j=O;s[i]!='\0';i++)if(s[i]!=,')①;else②;s[j]='\01;printf(,>%s",s);}程序的功能是將字符串s中所有的字符'c,刪除。請選擇填空.#include<stdio.h>main(){chars[80];intij;gets(s);for(i=j=0;s[i]!='\0';i++)if(s[i]!='c,)①;s[j]='\01;puts(s);)[3o16]下面程序的功能是輸出兩個字符串中對應(yīng)相等的字符。請選擇填空.#include<stdio.h>charx[]="programming";chary[]=^^Fortranw;main(){inti=0;while(x[i]!='\0'&&y[i]!='\0')if(x[i]==y[i])printf("%c",①);elsei++;【3.17]下面程序的功能是將字符串s中的每個字符按升序的規(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=o;while(s[k]>=a[j]&&a[j]!="\0,)j++;for(①)②;a[j]=s[k];)puts(a);)程序的功能是對鍵盤輸入的兩個字符串進行比較,然后輸出兩個字符串中第一個不相同字符的ASCII碼之差。例如:輸入的兩個字符串分別為“abcdefg”和"abceef",則輸出為-1。#include<stdio.h>main(){charstrl[100],str2[100],c;inti,s;printf("Enterstring1:");gets(strl);printf(>,Enterstring2:");gets(str2);i=0;while((strl[i]==str2[i]&&strl[i]!=①))i++;s=②;printf("%d\n",s);)的函數(shù)expand在將字符串s復(fù)制到字符串t時,將其中的換行符和制表符轉(zhuǎn)換為可見的轉(zhuǎn)義字符表示,即用'\n'表示換行符,用''t'表示制表符。expand(chars口,chart。){intij;for(i=j=O;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]=⑥;}的函數(shù)index(chars[],chart口)檢查字符串s中是否包含字符串t,若包含,則返回t在s中的開始位置(下標值),否則送回-1。index(chars[],chart[]){intij,k;for(i=0;s[i]!='\0';i++){for(j=i,k=O;①&&s[j]==t[k];j++,k++);if(②)return(i);}return(-1);}n[3o21]下面程序的功能是計算5=團。k=0longfun(intn){inti;longs;for(i=1;i①;i++)s*=i;return(②);}main(){intk,n;longs;scanf(w%d",&n);s=③;for(k=0;k<=n;k++)s+=④;printf("%ld\n",s);}[3o22]下面程序的功能是顯示具有n個元素的數(shù)組s中的最大元素。#defineN20main(){inti,a[N];for(i=0;i<N;i++)scanf("%d”,&a[i]);printf(,>%d\n",①);}fmax(ints[],mtn){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ù)字相同,且xWy,x、y、n均為自然數(shù),并使x+y為最小。#include<stdio.h>pow3(intn,intx){inti,last;for(last=l,i=l;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);③;)}[3o24]下面的程序是用遞歸算法求a的平方根.求平方根的迭代公式如下:#include<math.h>doublemysqrt(doublea,doublexO){doublexl,y;xl=①;if(fabs(xl—x0)>0.00001)y=mysqrt(②);elsey=xl;return(y);)main(){doublex;printf(>,Enterx:");scanf(w%lf",&x);printf("Thesqrtof%lf=%lf\n”,x,mysqrt(x,lo0));[3.25]以下程序是計算學(xué)生的年齡。已知第一位最小的學(xué)生年齡為1。歲,其余學(xué)生的年齡一個比一個大2歲,求第5個學(xué)生的年齡.#include<stdiooh>age(intn){intc;if(n==l)c=10;elsec=①;return(c);)main(){intn=5;printf(wage:%d\n”,②);[3o26]下面的函數(shù)sum(intn)完成計算1?n的累加和。sum(intn){if(n<=0)printf("dataerror\n");if(n==l)①;else②;}[3o27]下面的函數(shù)是一個求階乘的遞歸調(diào)用函數(shù)。facto(intn){if(n==1)①;elsereturn(②);}[3o28]組合問題,由組合的基本性質(zhì)可知:C(m,n)=C(n—m,n)C(m,n+1)=C(m,n)+C(m-l,n)公式⑵是一個遞歸公式,一直到滿足C(l,n)=n為止。當n<2*m時,可先用公式(1)進行簡化,填寫程序中的空白,使程序可以正確運行.#include^^stdio.h"main(){intm,n;printf("Inputm,n=^^);scanf("%d%d",&m,&n);printff'Thecombinationnumbeersis%d\n”,combin(m,n));)combin(intm,intn){intcom;if(n〈2*m)m=n-m;if(m==0)com=l;elseif(m==l)①;else②;return(com);}[3.29]下列函數(shù)是求一個字符串str的長度。intstrlen(cha^*str(?)return(0);elseret@rr)(;}[3o30]用遞歸實現(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(?)⑤;)[3o31]輸入n值,輸出高度為n的等邊三角形。例如當n=4時的圖形如下:****************#include<stdiooh>voidprt(charc,intn){if(n>0){printf("%c",c);①;))main(){inti,n;scanf("%d",&n);for(i=l;i<=n;i++){②;[3o32]下面的函數(shù)實現(xiàn)N層嵌套平方根的計算。doubley(doublex,intn){if(n==0)return(0);elsereturn(sqrt(x+(①)));)[3.33]函數(shù)revstr(s)將字符串s置逆,如輸入的實參s為字符串"abcde”,則返回時s為字符串"edcba”。遞歸程序如下:revstr(char*s){char*p=s,c;while(*p)p++;①;if(s<p){c=*s;*s=*p;②;revstr(s+l);③;))如下是由非遞歸實現(xiàn)的revstr(s)函數(shù):revstr(s)char*s;{char*p=s,c;while(*p)p++;④;while(s<p){c=*s;⑤=*p;*p—=c;[3o34]下面函數(shù)用遞歸調(diào)用的方法,將str中存放的長度為n的字符串反轉(zhuǎn)過來,例如原來是“ABCDE",反序為"EDCBA”.voidinvent(char*str,intn){chart;t=*str;*str=*(str+n—1); *(str+n-1)=t;if(n>2)invent(①,n-2);else②;}[3o35]從鍵盤上輸入1。個整數(shù),程序按降序完成從大到小的排序.#include<stdiooh>intarray[10];sort(int*p,int*q){int*max,*s;if(①)return;max=p;for(s=p+l;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]);}[3o36]下面函數(shù)的功能是將一個整數(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(w%d”,&number);convert(str,number);puts(str);}[3.37]下面程序的功能是實現(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;②;③;[3o38]下面程序通過指向整型的指針將數(shù)組a[3][4]的內(nèi)容按3行義4列的格式輸出,請給printf()填入適當?shù)膮?shù),使之通過指針p將數(shù)組元素按要求輸出。#include<stdiooh>inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a;main(){intij;for(i=0;i<3;i++){for(j=0;j<4;j++)printfC%4d",①);)}程序的功能是:從鍵盤上輸入一行字符,存入一個字符數(shù)組中,然后輸出該字符串。#include<stdiooh>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;)[3o41]下面程序的功能是從鍵盤上輸入兩個字符串,對兩個字符串分別排序;然后將它們合并,合并后的字符串按Ascn碼值從小到大排序,并刪去相同的字符.#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④'\CT)*w=t;elseif(t⑤*w)*++w=t;/*將與*w不相同的t存入w*/)while(*a!='\0")/*以下將a或b中剩下的字符存入w*/if(*a!=*w)*++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-l;i++)for(j=i+l;j<n;j++)if(s[i]>s[j]){⑨})main(){charsl[100],s2[100],s3[200];printf("\nPleaseInputFirstString;scanf(w%s",si);printf("\nPleaseInputSecondString:");scanf("%s”,s2);strsort(si);strsort(s2);⑩='\。';strmerge(si,s2,s3);printf(>,\nResult:%s>,,s3);[3o42]已知某數(shù)列前兩項為2和3,其后繼項根據(jù)前面最后兩項的乘積,按下列規(guī)則生成:①若乘積為一位數(shù),則該乘積即為數(shù)列的后繼項;②若乘積為二位數(shù),則該乘積的十位上的數(shù)字和個位上的數(shù)字依次作為數(shù)列的兩個后繼項.下面的程序輸出該數(shù)列的前N項及它們的和,其中,函數(shù)sum(n,pa)返回數(shù)列的前N項和,并將生成的前N項存入首指針為pa的數(shù)組中,程序中規(guī)定輸入的N值必須大于2,且不超過給定的常數(shù)值MAXNUM.例如:若輸入N的值為10,則程序輸出如下內(nèi)容:sum(10)=442361886424includenstdio.h"defineMAXNUM100intsum(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{printff'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++)printfC%4d",*p);printf("\n");}[3.43]下面程序的功能是輸入學(xué)生的姓名和成績,然后輸出.#include<stdiooh>structstuinf{charname[20];/*學(xué)生姓名*/intscore;/*學(xué)生成績*/}stu,*p;main(){p=&stu;printf("Entername:");gets(①);printf(>,Enterscore:");scanf ②);printf("Output:%s,%d\n”,③,④);)[3o44]下面程序的功能是按學(xué)生的姓名查詢其成績排名和平均成績。查詢時可連續(xù)進行,直到輸入。時才結(jié)束.#include<stdio.h>#include<stringoh>#defineNUM4structstudent{intrank;char*name;floatscore;①stu[]={3,"liming^^,89.3,,”zhatighua",78。2,l,"<ariU",95,"wangqi”,90。6);()main{charstr[10];;intido{printf("Enteraname");sc仇r或;fd?:(SBBM;i++)(②)if:%8s\n",stu[i].name);printf("^8ri^n”,stu[i].rank);(笛為i枝age:%5olf\n>>,stu[i].score);③;}if( Notfound\n,>);}while(strcmp(str,w0”)!=0);}程序的功能是從終端上輸入5個人的年齡、性別和姓名,然后輸出。#include”stdiooh"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);}N個整數(shù),儲存輸入的數(shù)及對應(yīng)的序號,并將輸入的數(shù)按從小到大的順序進行排列。要求:當兩個整數(shù)相等時,整數(shù)的排列順序由輸入的先后次序決定。例如:輸入的第3個整數(shù)為5,第7個整數(shù)也為5,則將先輸入的整數(shù)5排在后輸入的整數(shù)5的前面。程序如下:#include"stdiooh”defineN10struct{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);}[3o47]以下程序的功能是:讀入一行字符(如:a、。..y、z),按輸入時的逆序建立一個鏈接式的結(jié)點序列,即先輸入的位于鏈表尾(如下圖),然后再按輸入的相反順序輸出,并釋放全部結(jié)點。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所指向的線性鏈表,串接到pl所指向的鏈表的末端.假定pl所指向的鏈表非空.defineNULL0structlink{floata;structlink*next;concatenate(pl,p2)structlist*pl,*p2;{if(pl->next==NULL)pl—>next=p2;elseconcatenate(①,p2);[3o49]下面程序的功能是從鍵盤輸入一個字符串,然后反序輸出輸入的字符串。#include<stdiooh>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;[3o50]下面程序的功能是從鍵盤上順序輸入整數(shù),直到輸入的整數(shù)小于。時才停止輸入.然后反序輸出這些整數(shù)。#include<stdiooh>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("Enterdatauntildata〈O:\ri");p=NULL;input();printf("Output:”);while(④){printf("%d\n^^,p->x);⑤;[3o51]下面函數(shù)的功能是創(chuàng)建一個帶有頭結(jié)點的鏈表,將頭結(jié)點返回給主調(diào)函數(shù)。鏈表用于儲存學(xué)生的學(xué)號和成績。新產(chǎn)生的結(jié)點總是位于鏈表的尾部。structstudent{longnum;intscore;structstudent*next;structstudent*creat(){structstudent*head=NULL,*tail;longnum;inta;tail=①malloc(LEN);do{scanf(w%Id,%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(③);}create函數(shù)的功能是建立一個帶頭結(jié)點的單向鏈表,新產(chǎn)生的結(jié)點總是插入在鏈表的末尾.單向鏈表的頭指針作為函數(shù)值返回.include<stdiooh>defineLENsizeof(structstudent)structstudent{longnum;intscore;structstudent*next;);structstudent*creat(){structstudent*head=NULL,*tail;longnum;inta;tail=(①)malloc(LEN);do{scanf(w%Id,%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!=O);③;)程序的功能是統(tǒng)計文件中的字符的個數(shù)。#include<stdio.h>main(){longnum=O;①*fp;if((fp=fopen("fname.dat“,“r"))==NULL){printf("Can,topenthefile!");exit(O);}while(②){fgetc(fp);num++;)printf("num=%d\n",num);fclose(fp);)[3o54]下面程序的功能是把從鍵盤輸入的文件(用@作為文件結(jié)束標志)復(fù)制到一個名為second.txt的新文件中。#include<stdiooh>FILE*fp;main(){charch;if((fp=fopen(①))==NULL)exit(O);while((ch=getchar())!='@')fputc(ch,fp);[3o55]下面程序的功能是將磁盤上的一個文件復(fù)制到另一個文件中,兩個文件名在命令行中給出(假定給定的文件名無誤)。#include<stdiooh>main(intargc,char*argv[]){FILE&fl,*f2;if(argc<①){printf(>,Thecommandlineerror!”);exit(0);)fl=fopen(argv[l],"r");f2=fopen(arhv[2],"w");while(②)fputs(fgetc(fl),③);④;⑤;}[3o56]下面程序的功能是根據(jù)命令行參數(shù)分別實現(xiàn)一個正整數(shù)的累加或階乘。例如:如果可執(zhí)行文件的文件名是sm,則執(zhí)行該程序時輸入:”sm+10",可以實現(xiàn)1。的累加;輸入:"sm-10",可以實現(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(①){casefuncp=sum;break;case'-,:funcp=mult;break;default:dispform();)②;}voidsum(intm){inti,s=O;for(i=l;i<m;i++)③;printf("sum=%d\n",s);}voidmult(intm){longinti,s=l;for(i=1;i<=m;i++)s*=i;printf("mult=%ld\n";s);}dispform(){printf(wusage:smn(+/!)(n>0)\n");exit(0);)程序的功能是鍵盤上輸入一個字符串,把該字符串中的小寫字母轉(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(O);}printff'Inputastring:\nw);gets(str);while(str[i]){if(str[i]>="a"&&str[i]<='z')str[i]=②;fputc(str[i],fp);i++;}fclose(fp);fp=fopen(^^testotxt”,③);fgets(str,strlen(str)+l,fp);printf("%s\n^^,str);fclose(fp);}程序的功能是將從終端上讀入的1。個整數(shù)以二進制方式寫入名為“bi。dat”的新文件中。#include<stdiooh>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);)[3o59]以字符流形式讀入一個文件,從文件中檢索出六種C語言的關(guān)鍵字,并統(tǒng)計、輸出每種關(guān)鍵字在文件中出現(xiàn)的次數(shù).本程序中規(guī)定:單詞是一個以空格或'\t'、'\n,結(jié)束的字符串。#include<stdio.h>#include<stringoh>FILE*cp;charfname[20],buf[100];intnum;structkey{charword[10];intcount;}keyword[]={"if”,0,“char”,0,nint",0,"else",0,"while^^,0,"returnw,0};char*getword(FILE*fp){inti=0;charc;while((c=getc(fp))!=EOF&&(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;printff'Inputfilename:");scanf("%s",fname);if((cp=fopen(fname,"r"))==NULL){printf("Fileopenerror:%s\n",fname);exit(O);)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]ocount);[3o60]下面程序的功能是從鍵盤接受姓名(例如:輸入"ZHANGSAN”),在文件"try。dat”中查找,若文件中已經(jīng)存入了剛輸入的姓名,則顯示提示信息;若文件中沒有剛輸入的姓名,則將該姓名存入文件。要求:⑴若磁盤文件”try.dat",已存在,則要保留文件中原來的信息;若文件”try.dat”不存在,則在磁盤上建立一個新文件;⑵當輸入的姓名為空時(長度為。),結(jié)束程序。#include<stdio.h>main(){FILE*fp;intflag;charname[30],data[30];if((fp=fopen("tryodat”, ①))==NULL){printf("Openfileerror\n");exit(0);}do{printf("Entername:");gets(name);if(strlen(name)==0)break;strcat(name,"\n");②;flag=l;while(flag&&(fgets(data,30,fp)③))if(strcmp(data,name)==0)④;if(flag)fputs(name,fp);elseprintf(,>\tDataentererror!\n");}while(⑤);fclose(fp);}參考答案:①a+b②a-b③a-b[3o2]答案:①1o0/(float)(i*i)②sqrt(6*s):①*k=p:①t=t*i②t=t>O?-l:1:①d=l②k++③k<=n[3o6]答案:①x〉=0②x<amin[3o7]答案:①2②2[3o8]答案:①m=n②m〉0③m=m/10:①i==j②k!=i&&k!=j[3o10]答案:①i<=9②j%3!=。:①m=n②r!=0③return(n):①floatx②i〈=9③i〈=8④j<=9—i⑤a[j]>a[j+1]⑥a[j]=a[j+l]⑦i<=9⑧i%5==0[3o13]答案:①&a[i]②continue注釋:①是基本概念,使用scanf函數(shù)輸入數(shù)組元素的值.當輸入的元素值小于。時,應(yīng)當跳過后面的語句,取下一個數(shù),所以②要填入continue.[3o14]答案:①s[j++]=s[i]②s[j]=s[i][3o15]答案:①s[j++]=s[i][3o16]答案:①x[i++]:①i=strlen(a);i>=j;i—②a[i+1]=a[i]:①'\0,②strl[i]—str2[i][3o19]答案:①j++②'\\'③j++④'\V⑤j++⑥'\。':①t[k]!=>\0,②t[k]=="\0,:①〈=n②s③。④fun(k):①a[fmax(a,N)]②k=p:①last*n%1000②x!=min—x③flag=O:①(xO+a/x。)/2②a,xl注釋:根據(jù)迭代公式,①處應(yīng)當是計算迭代值xl=(xO+a/xO)/2。按照求平方根的要求,當?shù)木炔荒軡M足"(fabs(xl—xO)>Oo00001)”時,則要繼續(xù)迭代,因此②處應(yīng)當填寫“a,xl"。程序中調(diào)用了求絕對值的庫函數(shù)fabs()o:①2+age(n-l)②age(5)注釋:由于程序是遞歸算法,因此首先要建立問題的遞歸數(shù)學(xué)模型。根據(jù)原題的描述可以寫出如下遞歸公式:age(n)=10(n=l)age(n)=2+age(n-l)(n>l)對照程序和遞歸公式可以看出:n的含義是第n位學(xué)生。很顯然,要求第5位學(xué)生的年齡,②處應(yīng)當是調(diào)用函數(shù)age,實參的值應(yīng)當是5。在①處應(yīng)該是函數(shù)的遞歸調(diào)用,根據(jù)遞歸公式,應(yīng)當填寫:2+age(n—l)o:①return(1)②return(sum(n-l)+n)注釋:按照常規(guī)的編程方法,此問題可采用一個循環(huán)語句實現(xiàn)。閱讀程序,沒有發(fā)現(xiàn)循環(huán)語句,這時,應(yīng)當認為原來的編程者使用的是非常規(guī)的算法。對于這樣常規(guī)算法需要用循環(huán)實現(xiàn)而沒有使用循環(huán)的程序,就可以肯定地認為,一定是使用了遞歸算法。將問題”求1?n的累力口和”的公式寫成遞歸定義,可以是如下形式;sum(n)=1當n=l時sum(n)=sun(n—l)+n當n>l時根據(jù)此遞歸定義,可以很容易完成程序.:①return(l)②n*facto(n-1)注釋:我們熟悉的求n!的算法一般是采用循環(huán)語句實現(xiàn),但在此程序中根本沒有循環(huán)語句。這時我們應(yīng)該想到:是采用遞歸算法實現(xiàn)的。首先寫出求n!的遞歸公式;n!=l當n=l時n!=n*(n-1)當n〉1時根據(jù)此遞歸定義,可以很容易完成程序。[3o28]答案:①com=n②com=combin(n-l,m-l)+combin(n—1,m)注釋:題目的說明中已經(jīng)給出組合問題的遞歸定義,不需要讀者自己尋找遞歸表達式.程序中的語句"if(n<2*m)m=n-m;”完成了題目中敘述的”用公式(1)進行簡化,的工作。:①*str=='\0"②1+strlen(str+1)注釋:求串長算法的關(guān)鍵是確定串結(jié)束標記'\。’的位置。根據(jù)求串長的方法,可以得到如下遞歸算法:指針str指向字符串的首字符如果當前字符(*str)==串結(jié)束標記\0'則串長=。否則串長=1+除第一個字符之外的剩余字符串的串長因此,在①的位置上應(yīng)當填寫“*str=='\0'",以判斷當前字符(*str)是否是串結(jié)束標記'\。'。在②的位置應(yīng)當是根據(jù)上面的遞歸算法進行遞歸調(diào)用,因此應(yīng)當填寫”1+strlen(str+1)”。[3o30]答案:①&n②m%10③m/10④m>0⑤r(m)[3o31]答案:①prt(c,n-1)②prt('',n—i)③prt('*',i)注釋:函數(shù)prt的功能是輸出n個字符Co[3o32]答案:①y(x,n—1)注釋:這顯然是一個遞歸問題,首先要對原來的數(shù)學(xué)函數(shù)定義形式進行變形,推導(dǎo)出原來函數(shù)的等價遞歸定義??梢酝茖?dǎo)出原來函數(shù)的遞歸定義如下。y(x,n)=x當n=0時y(x,n)=sqrt(x+y(x,n—1))當n〉0時[3o33]答案:①p-②*p='(X③*p=c④p—⑤*s++注釋:在遞歸算法中,指針s指向字符串首部要反向的字符,即要將指針s所指向的字符與指針P所指向的字符串尾的字符('\。')進行交換,在交換過程中,將尚沒有交換的字符串的中間部分作為一個整體,進行遞歸處理。程序中首先執(zhí)行“c=*s",將首字符存入臨時變量;然后執(zhí)行"*s=*p",將尾字符存入串首;執(zhí)行"revstr(s+1)"是遞歸處理串的中間部分,這時,在②處應(yīng)當填入”*P='\。'",即存入串結(jié)束標記。這是這一程序中的關(guān)鍵所在。在③處要完成將存在臨時變量c中的字符存入串尾的工作,應(yīng)當填寫"*p=c”。[3.34]答案:①str+1②return①改為n-2[3o35]答案:①p>=q②max=s③p,max④p+1,q⑤&array[0],&array[9]注釋:本程序中的排序部分采用的是遞歸算法.函數(shù)sort的兩個形參的含義是:對指針P和指針q之間的數(shù)據(jù)進行排序。由語句吁or(s=p+l;s<=q;s++)”中指針p和指針q之間的關(guān)系可以得出:指針P不應(yīng)在指針q之后,因此①處應(yīng)填"P>=q"、⑤處應(yīng)填"&array[0],&array[9]w.由于變量max是指向當前最大值的指針,則當找到新的最大值時,max中保存的應(yīng)該是新的最大值的指針,因此②處應(yīng)填"max=s"o當調(diào)用函數(shù)swap交換兩個變量值的時候,要求實參是變量的地址,因此,③處應(yīng)填"p,max”將最大值存入指針p所指的單元。由于問題的要求是“從大到小”排序,通過執(zhí)行一次函數(shù)sort使最大值已經(jīng)放到了指針P所指的單元中,因此,下一遍排序的時候,只要對指針P之后的元素進行即可,所以④處應(yīng)填"p+l,q”。[3o36]答案:①a+1②n%10+'0'[3.37]答案:①s〈t②s++③t——[3o38]答案;①*(p+4*i+j)注釋:P是一個一級指針,賦值后保存二維數(shù)組a的首地址,做加法運算加1時,實際地址增加一個它所指向的數(shù)據(jù)類型的長度。在C語言中,多維數(shù)組在計算機中是按行存儲的,所以在本題中要通過指針訪問二維數(shù)組中的數(shù)據(jù),必須將二維下標轉(zhuǎn)換為一維下標.[3o39]答案:①'\0'或。②++注釋:在C語言中,進行字符串處理時,必須注意串結(jié)束標記''0’,它是在進行串處理時的最基本的要求,所以①中要填入'\。'。為了使用putchar輸出一個字符串,則必須有改變指針的運算,這里只能使用++運算.[3o40]答案:①p++②w[i+1]=w[i][3.41]答案:①&&②*a<*b③*a++,*b++④==⑤!=⑥'\。'⑦w=s⑧n++⑨t(yī)=s[i];s[i]=s[j];s[j]=t;⑩s3[0][3o42]答案:①*++pa②*++pa③*pa④return(total)⑤n<=2||n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論