版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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í)的效率?!?.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)
{①;
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)計并輸出最高成績和最低成績,當(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)行簡化,填寫程序中的空白,使程序可以正確運(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ù)是求一個字符串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[])
{,*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)制方式寫入名為"
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)保險代理與服務(wù)合同
- 2025年度高端制造裝備研發(fā)股權(quán)投資及市場拓展合同
- 二零二五年度南昌商品房買賣合同2025版標(biāo)準(zhǔn)文本
- 2025年度個人門面出租合同附贈增值服務(wù)范本3篇
- 2025年度鋼材運(yùn)輸服務(wù)合同模板
- 二零二五年度跨境電商進(jìn)口生鮮食品采購合同范本4篇
- 華為認(rèn)證智能協(xié)作中級 HCIP-Collaboration H11-861考試題庫及答案
- 2025年度汽車租賃車輛租賃價格調(diào)整合同6篇
- 2025年度模具行業(yè)學(xué)徒培養(yǎng)用工合同示范4篇
- 2025年度南匯工商行政管理志編纂服務(wù)合同4篇
- 農(nóng)村自建房安全合同協(xié)議書
- 《教科版》二年級科學(xué)下冊全冊課件(完整版)
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語言溝通發(fā)展量表(長表)-詞匯及手勢(8-16月齡)
- 高速公路相關(guān)知識講座
- 兒科關(guān)于抗生素使用的PDCA
- 小學(xué)生必備古詩
- 手術(shù)室護(hù)理實踐指南2023年
評論
0/150
提交評論