} }
【3.50】下面程序的功能是从键盘上顺序输入整数,直到输入的整数小于0时才停止输入。然后反序输出这些整数。
#include
struct data *link; }*p; input() { int num; struct data *q; printf(\; scanf(\; if( num<0 ) ① ; q = ② ; q->x = num; q->link = p; p=q; ③ ; } main()
{ printf(\; p=NULL; input();
printf(\; while( ④ )
{ printf(\; ⑤ ; } }
【3.51】下面函数的功能是创建一个带有头结点的链表,将头结点返回给主调函数。链表用于储存学生的学号和成绩。新产生的结点总是位于链表的尾部。 struct student { long num; int score;
struct student *next; };
struct student *creat()
{ struct student *head=NULL,*tail; long num; int a; tail= ① malloc(LEN); do
{ scanf(\; if(num!=0)
{ if(head==NULL) head=tail; else ② ;
tail->num=num; tail->score=a; tail->next=(struct student *)malloc(LEN); }
else tail->next=NULL;
}while(num!=0); return( ③ ); }
【3.52】下面create函数的功能是建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回。 #include
#define LEN sizeof(struct student) struct student { long num; int score;
struct student *next; };
struct student *creat()
{ struct student *head=NULL,*tail; long num; int a;
tail=( ① )malloc(LEN); do
{ scanf(\; if(num!=0)
{ if(head==NULL) head=tail; else tail=tail->next; tail->num=num; tail->score=a;
tail->next=( ② )malloc(LEN); }
else tail->next=NULL; }while(num!=0); ③ ; }
【3.53】下面程序的功能是统计文件中的字符的个数。 #include
{ long num=0; ① *fp;
if((fp=fopen(\{ printf(\; exit(0); }
while( ② ) { fgetc(fp); num++; }
printf(\; fclose(fp); }
【3.54】下面程序的功能是把从键盘输入的文件(用 @ 作为文件结束标志)复制到一个名为second.txt的新文件中。
#include
if((fp=fopen( ① ))==NULL) exit(0);
while((ch=getchar())!='@') fputc(ch,fp); ② ; }
【3.55】下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出(假定给定的文件名无误)。 #include
{ printf(\; exit(0); }
f1=fopen(argv[1], \; f2=fopen(arhv[2], \; while( ② )
fputs(fgetc(f1), ③ ); ④ ; ⑤ ; }
【3.56】下面程序的功能是根据命令行参数分别实现一个正整数的累加或阶乘。例如:如果可执行文件的文件名是sm,则执行该程序时输入:\,可以实现10的累加;输入:\,可以实现求10的阶乘。
#include
void sum(),mult(); void (*funcp)(); n=atoi(argv[2]); if(argc!=3 || n<=0) dispform( ); switch ( ① )
{ case '+': funcp=sum; break;
case '-': funcp=mult; break;
default: dispform( ); } ② ; }
void sum(int m) { int i,s=0; for(i=1;i printf(\; } void mult(int m) { long int i, s=1; for(i=1;i<=m;i++ ) s *= i; printf(\;s); } dispform( ) { printf (\; exit (0); } 【3.57】下面程序的功能是键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。 #include main() { char str[100]; int i=0; FILE *fp; if((fp=fopen(\① ))==NULL) { printf(\; exit(0); } printf(\; gets(str); while(str[i]) { if(str[i]>= 'a'&&str[i]<= 'z') str[i]= ② ; fputc(str[i],fp); i++; } fclose(fp); fp=fopen(\③ ); fgets(str,strlen(str)+1,fp); printf(\; fclose(fp); } 【3.58】下面程序的功能是将从终端上读入的10个整数以二进制方式写入名为\的新文件中。 #include { int i, j; if(( fp=fopen( ① , \ exit (0); for( i=0;i<10;i++ ) { scanf(\; fwrite( ② , sizeof(int), 1, ③ ); } fclose( fp); } 【3.59】以字符流形式读入一个文件,从文件中检索出六种C语言的关键字,并统计、 输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或'\\t'、 '\\n'结束的字符串。 #include