C語言程序的設(shè)計填空題和答案復(fù)習(xí)用_第1頁
C語言程序的設(shè)計填空題和答案復(fù)習(xí)用_第2頁
C語言程序的設(shè)計填空題和答案復(fù)習(xí)用_第3頁
C語言程序的設(shè)計填空題和答案復(fù)習(xí)用_第4頁
C語言程序的設(shè)計填空題和答案復(fù)習(xí)用_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

10/10導(dǎo)讀:在程序填空題中,已經(jīng)給出了程序的主干,讀者首先要理解程序的思路,再選擇正確的內(nèi)容填入空白處,使程序完成既定的功能。這類習(xí)題的設(shè)計就是要引導(dǎo)讀者逐步掌握編程的方法。本節(jié)習(xí)題的難度適中,可能有些典型的程序在課堂上已經(jīng)有所接觸,讀者一定要獨立完成它,這樣就可以逐步提高自己的編程能力。在程序設(shè)計語言學(xué)習(xí)的中期,讀者對程序設(shè)計已經(jīng)有了初步的了解,而自己編寫程序又不知從何處入手,此時解答此類題目可以避免盲目性,從而提高學(xué)習(xí)的效率。[3.1]下面程序的功能是不用第三個變量,實現(xiàn)兩個數(shù)的對調(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]下面程序的功能是計算1-3+5-7+……-99+101的值。main<>{inti,t=1,s=0;for<i=1;i<=101;i+=2>{①t=t*i;s=s+t;②;t>0?t=-1:1;}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)計并輸出最高成績和最低成績,當(dāng)輸入為負(fù)數(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>;}[3.7]下面程序的功能是將形參x的值轉(zhuǎn)換為二進(jìn)制數(shù),所得的二進(jìn)制數(shù)放在一個一維數(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)計用0至9之間的不同的數(shù)字組成的三位數(shù)的個數(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)的個位數(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;}③;}[3.12]下面程序的功能是使用冒泡法對輸入的10個浮點數(shù)從小到大進(jìn)行排序。排好序的10個數(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個整數(shù),統(tǒng)計非負(fù)數(shù)個數(shù),并計算非負(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'刪除。請選擇填空。#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]下面程序的功能是輸出兩個字符串中對應(yī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中的每個字符按升序的規(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]下面程序的功能是對鍵盤輸入的兩個字符串進(jìn)行比較,然后輸出兩個字符串中第一個不相同字符的ASCII碼之差。例如:輸入的兩個字符串分別為"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時,將其中的換行符和制表符轉(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]下面程序的功能是計算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個元素的數(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]以下程序是計算學(xué)生的年齡。已知第一位最小的學(xué)生年齡為10歲,其余學(xué)生的年齡一個比一個大2歲,求第5個學(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>完成計算1~n的累加和。

sum<intn>

{if<n<=0>

printf<"dataerror\n">;

if<n==1>①;

else②;

}

[3.27]下面的函數(shù)是一個求階乘的遞歸調(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>是一個遞歸公式,一直到滿足C<1,n>=n為止。當(dāng)n<2*m時,可先用公式<1>進(jì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ù)是求一個字符串str的長度。

intstrlen<char*str>

{if<①>return<0>;

elsereturn<②>;

}

[3.30]用遞歸實現(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時的圖形如下:

*

***

*****

*******

#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ù)實現(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+1>;

③;

}

}

如下是由非遞歸實現(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",反序為"EDCBA"。

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個整數(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ù)的功能是將一個整數(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]下面程序的功能是實現(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列的格式輸出,請給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]下面程序的功能是:從鍵盤上輸入一行字符,存入一個字符數(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]下面程序的功能是從鍵盤上輸入兩個字符串,對兩個字符串分別排序;然后將它們合并,合并后的字符串按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>*++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ù)列前兩項為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>=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é)生的姓名查詢其成績排名和平均成績。查詢時可連續(xù)進(jìn)行,直到輸入0時才結(jié)束。

#include<stdio.h>

#include<string.h>

#defineNUM4

structstudent

{intrank;

char*name;

floatscore;

};

①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個人的年齡、性別和姓名,然后輸出。

#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個整數(shù),儲存輸入的數(shù)及對應(yīng)的序號,并將輸入的數(shù)按從小到大的順序進(jìn)行排列。要求:當(dāng)兩個整數(shù)相等時,整數(shù)的排列順序由輸入的先后次序決定。例如:輸入的第3個整數(shù)為5,第7個整數(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>,按輸入時的逆序建立一個鏈接式的結(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所指向的線性鏈表,串接到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]下面程序的功能是從鍵盤輸入一個字符串,然后反序輸出輸入的字符串。

#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ù)。

#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<"Enterdatauntildata<0:\n">;

p=NULL;

input<>;

printf<"Output:">;

while<④>

{printf<"%d\n",p->x>;

⑤;

}

}[3.51]下面函數(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<"%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ù)的功能是建立一個帶頭結(jié)點的單向鏈表,新產(chǎn)生的結(jié)點總是插入在鏈表的末尾。單向鏈表的頭指針作為函數(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)計文件中的字符的個數(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ù)制到一個名為second.txt的新文件中。

#include<stdio.h>

FILE*fp;

main<>

{charch;

if<<fp=fopen<①>>==NULL>

exit<0>;

while<<ch=getchar<>>!='@'>

fputc<ch,fp>;

②;

}[3.55]下面程序的功能是將磁盤上的一個文件復(fù)制到另一個文件中,兩個文件名在命令行中給出〔假定給定的文件名無誤。

#include<stdio.h>

main<intargc,char*argv[]>

{FILE&f1,*f2;

if<argc<①>

{printf<"Thecommandlineerror!">;

exit<0>;

}

f1=fopen<argv[1],"r">;

f2=fopen<arhv[2],"w">;

while<②>

fputs<fgetc<f1>,③>;

④;

⑤;

}[3.56]下面程序的功能是根據(jù)命令行參數(shù)分別實現(xiàn)一個正整數(shù)的累加或階乘。例如:如果可執(zhí)行文件的文件名是sm,則執(zhí)行該程序時輸入:"sm+10",可以實現(xiàn)10的累加;輸入:"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<①>

{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]下面程序的功能是鍵盤上輸入一個字符串,把該字符串中的小寫字母轉(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個整數(shù)以二進(jìn)制方式寫入名為"bi.dat"的新文件中。

#include<stdio.h>

FILE*fp;

main<>

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論