形考任务一 一、选择题 1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( )。 【答案】main 2.C语言源程序文件的缺省扩展名为( )。 【答案】c 3.由C语言目标文件连接而成的可执行文件的缺省扩展名为( )。 【答案】exe 4.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为( )。 【答案】空格或回车 5.每个C语言程序文件的编译错误被分为( )。 【答案】2类 6.不符合C语言规定的复合语句是( )。 【答案】{y=10} 7.C语言程序中的基本功能模块为( )。 【答案】函数 8.在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和( )。 【答案】参数表 9.在一个程序文件中,若要使用#include命令包含一个用户定义的头文件,则此头文件所使用的起止定界符为一对( )。 【答案】双引号 10.在C语言程序中,多行注释语句使用的开始标记符为( )。 【答案】/* 11.在printf()函数调用的格式字符串中,若使用格式符为“%c”,则对应输出的数据类型为( )。 【答案】char 12.在printf()函数调用的格式字符串中,若使用格式符为“%5d”,则规定对应输出的数据占用的字符位置个数为( )。 【答案】5 13.转义字符’\\’表示的字符是( )。 【答案】反斜线 14.枚举类型中的每个枚举常量的值都是一个( )。 【答案】整数 15. 运算符优先级最高的是( )。 【答案】!= 16.设x和y均为逻辑值,则x && y为真的条件是( )。 【答案】 它们均为真 17.设有语句“int a=12; a+=a*a;”,则执行结束后,a的值为( )。 【答案】156 18.x>0 && x<=10的相反表达式为( )。 【答案】x<=0 || x>10 19.字符串“a+b=12\n”的长度为( )。 【答案】7 20.在下列的符号常量定义中,错误的定义语句格式为( )。 【答案】const int M3 10; 二、判断题 21.C语言中的每条简单语句以分号作为结束符。 【答案】 对 22.C语言中的每条复合语句以花括号作为结束符。 【答案】 错 23.在C语言程序中,在行尾使用注释的开始标记符为一对单斜线字符。 【答案】 对 24.注释内容的开始所使用的标记符为/*,则注释内容的结束所使用的标记符为*/。 【答案】 对 25.在一个C语言程序文件中,若要包含一个头文件,则使用以百分号开始的预处理命令。 【答案】 错 26.用于输出表达式值的标准输出函数是printf()。 【答案】 对 27.当不需要函数返回任何值时,则需要使用保留字void作为函数的返回值类型。 【答案】 对 28.每个C程序文件在编译时可能出现有警告性错误,其对应的标识符为error。 【答案】 错 29.十进制数25表示成符合C语言规则的八进制数为31。 【答案】 错 30.十进制数25表示成符合C语言规则的十六进制数为0x19。 【答案】 对 31.在C语言中,转义字符’\n’表示一个换行符。 【答案】 对 32.执行“printf(“%c”,’F’-2);”语句后得到的输出结果为H。 【答案】 错 33.已知字符’C’的ASCII码为67,当执行“int x=’C’+5;”语句后x的值为72。 【答案】 对 34.假定一个枚举类型的定义为“enum RB{ab,ac=3,ad,ae}x=ad;”,则x的值为2。 【答案】 错 35.float的类型长度为8。 【答案】 错 36.在C语言中,常数28和3.26具有相同的数据类型。 【答案】 错 37.若需要定义一个符号常量,并且使C语言能够进行类型检查,则应在定义语句的开始使用保留字const。 【答案】 对 38.使用const语句定义一个符号常量时,不必对它进行初始化。 【答案】 错 39.表达式45%13的值为3。 【答案】 错 40.假定x=5,则表达式2*x++的值为12。 【答案】 错 41.表达式(float)25/4的值为6。 【答案】 错 42.表达式x=x+1表示成增量表达式为++x。 【答案】 对 43.关系表达式(x!=0)的等价表达式为(x)。 【答案】 对 44.关系表达式x+y>5的相反表达式为x+y<=5。 【答案】 对 45.逻辑表达式(a>b || b==5)的相反表达式为(a>b && b==5)。 【答案】 错 46.若x=5,y=10,则x>y逻辑值为真。 【答案】 错 47.假定x=5,则执行“a=(x?10:20);”语句后a的值为10。 【答案】 对 48.带有随机函数的表达式rand()%20的值所在的区间范围是0~19。 【答案】 对 49.假定x=5,则执行“y=x++;”语句后,x的值为5。 【答案】 错 50.假定x=5,则执行“y=++x;”语句后,y的值为6。 【答案】 对 形考任务二 一、选择题 1.当处理特定问题时的循环次数已知时,通常采用的语句是( )。 【答案】for 2.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写成的语句是( )。 【答案】if 3.for语句能够被改写成的语句是( )。 【答案】while 4.下面循环语句执行结束后输出的i值为( )。 for(int i=0; i<n; i++) if(i>n/2) {cout<<i<<endl; break;} 【答案】n/2+1 5.在下面循环语句中,内层循环体S语句的执行总次数为( )。 for(int i=0; i<n; i++) for(int j=i; j<n; j++) S; 【答案】n(n+1)/2 6.在下面的do循环语句中,其循环体被执行的次数为( )。 int i=0; do i++; while(i*i<10); 【答案】4 7.在下面的一维数组定义中,有语法错误的选项是( )。 【答案】int a[]; 8.在下面的二维数组定义中,语法正确的选项是( )。 【答案】int a[][3]={{1,3,5},{2}}; 9.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][1]的值为( )。 【答案】8 10.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为( )。 【答案】0 二、判断题 11.在执行“typedef int DataType;”语句后,标识符DataType与保留字int具有完全相同的含义和作用。 【答案】 对 12.在switch语句中,每个case和冒号之间的表达式只能是常量。 【答案】 对 13.为了结束本层循环类语句或switch语句的执行过程,在语句体中需要使用break语句。 【答案】 对 14.在程序中执行到break语句时,将结束所在函数的执行过程,返回到调用该函数的位置。 【答案】 错 15.在程序执行完成任一个函数调用后,将结束整个程序的执行过程,返回到操作系统或C语言集成开发环境界面窗口。 【答案】 错 16.假定一维数组的定义为“char* a[8];”,则该数组所含元素的个数大于8。 【答案】 错 17.假定二维数组的定义为“int a[3][5];”,则该数组所占存储空间的字节数为60。 【答案】 对 18.假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为M+N。 【答案】 错 19.假定二维数组的定义为“double a[M][N];”,则每个数组元素的行下标取值范围在0~M-1之间。 【答案】 对 20.假定二维数组的定义为“double a[M][N];”,则每个数组元素的列下标取值范围在0~N之间。 【答案】 错 21.存储一个空字符串需要占用0个字节的存储空间。 【答案】 错 22.使用“typedef char BB[10][50];”语句定义标识符BB为含有10行50列的二维字符数组类型。 【答案】 对 23.存储字符’a’需要占用1个字节的存储空间。 【答案】 对 24.空字符串的长度为1。 【答案】 错 25.字符串”a:\\xxk\\数据”的长度为13。 【答案】 错 26.为了存储一个长度为n的字符串,所使用的字符数组的长度至少为n+1。 【答案】 对 27.strcmp函数用于进行两个字符串之间的比较。 【答案】 对 28.strcpy函数用于把一个字符串拷贝到另一个字符数组空间中。 【答案】 对 29.一个二维字符数组a[10][20]能够最多存储9个字符串。 【答案】 错 30.一个二维字符数组a[10][20]能够存储的每个字符串的长度不超过20。 【答案】 错 三、填空题:写出下列每个程序运行后的输出结果 31. #include<stdio.h> void main() { int x=5; switch(2*x-3) { case 4: printf(“%d “,x); case 7: printf(“%d “,2*x+1); case 10: printf(“%d “,3*x-1); break; default: printf(“%s”,”default\n”); } } 【答案】11 14 32.#include<stdio.h> ______ void main() { ______ ______int i,s=0; ______ ______for(i=1;i<=5;i++) s+=i*i; ______ ______printf(“s=%d\n”,s); ______ } 【答案】s=55 33.#include<stdio.h> ______ void main() { ______ int i, s1=0, s2=0; ______ for(i=0;i<10;i++) ______ if(i%2) s1+=i; else s2+=i; ______ printf(“%d %d\n”,s1,s2); ______ } 【答案】25 20 34.#include<stdio.h> ______ void main() { ______ ______int n=6,y=1; ______ while(n) y*=n–; ______ printf(“y=%d\n”,y); ______ } 【答案】y=720 35.#include<stdio.h> ______ const int M=20; ______ void main() ______ { ______ int i,c2,c3,c5; ______ c2=c3=c5=0; ______ for(i=1; i<=M; i++) { ______ ______if(i%2==0) c2++; ______ if(i%3==0) c3++; ______ if(i%5==0) c5++; ______ } ______ printf(“%d %d %d\n”,c2,c3,c5); ______ } 【答案】10 6 4 36.#include<stdio.h> ______ void main() ______ { ______ int i,s; ______ for(i=1,s=0;i<10;i++) { ______ if(i%3==0) continue; ______ s+=i; ______ } ______ printf(“%d\n”,s); ______ } 【答案】27 37. #include<stdio.h> ______ void main() { ______ int a[8]={12,39,26,41,55,63,72,40}; ______ int i, i1=0, i2=0; ______ for(i=0;i<8;i++) ______ if(a[i]%2==1) i1++; else i2++; ______ printf(“%d %d\n”,i1,i2); ______ } 【答案】4 4 38.#include<stdio.h> ______ int a[10]={4,5,6,15,20,13,12,7,8,9}; ______ void main() ______ { ______ int i,s[4]=0; ______ for(i=0; i<10; i++) { ______ switch(a[i]%4) { ______ case 0: s[0]+=a[i];break; ______ case 1: s[1]+=a[i];break; ______ case 2: s[2]+=a[i];break; ______ default: s[3]+=a[i];break; ______ } ______ } ______ for(i=0; i<4; i++) printf(“%d “,s[i]); ______ } 【答案】44 27 6 22 39.#include<stdio.h> ______ void main() { ______ char a[]=”abcdbfbgacd”; ______ int i1=0, i2=0, i=0; ______ while(a[i]) { ______ if(a[i]==’a’) i1++; ______ if(a[i]==’b’) i2++; ______ ______i++; ______ } ______ printf(“%d %d %d\n”,i1,i2,i); ______ } 【答案】2 3 11 40.#include<stdio.h> ______ void main() { ______ int a[3][4]={{1,2,7,8},{5,6,10,6},{9,12,3,4}}; ______ int m=a[0][0]; ______ int i,j; ______ for(i=0; i<3; i++) ______ for(j=0; j<4; j++) ______ if(a[i][j]>m) m=a[i][j]; ______ printf(“%d\n”,m); ______ } 【答案】12 四、简答题:根据下列每个题目要求编写程序 41.编写一个函数,函数头格式为“double Mean(double a[M][N],int m,int n)”,要求返回二维数组a[m][n]中所有元素的平均值,假定在计算过程中采用变量v存放平均值。 【答案】 double Mean(double a[M][N],intm,int n) { inti,j; double v=0.0; for(i=0;i<m;i++) for(j=0;j<n;j++)v+=a[i]]; v/=m*n; return v; } 42.编写一个递归函数“int FF(int a[], int n)”,求出数组a中所有n个元素之积并返回。 【答案】 #include<stdio.h> int FF(int a[],int n){ int mul=1; if(n==1) mul *= a[0]; else mul = a[n-1]*FF(a,n-1); return mul; } 43.编写一个主函数,利用while循环,求出并显示满足1+1/2+1/3+…+1/n>=5不等式的最小n值。 【答案】 #include<stdio.h> void main() inti=0;double s=0; while(s<5)s+=(double)1/++i; printf(“n=%d\n”,i); } 44.编写一个主函数,求出满足不等式22+42+…+n2<1000的最大n值,假定分别用i和s作为取偶数值和累加值的变量,并限定使用do循环编程。 【答案】 #include<stdio.h> void main() { int i=0; //用ⅰ作为依次取值偶数的变量 int s=0;//用s作为累加变量 do i+=2; s+=i*i; while(s<1000); printf(“n=%d\n”,i-2); } 45.编写一个主函数,计算并输出12+22+…+n2值,其中n值由键盘输入。 【答案】 #include<stdio.h> void main() { int i; //用ⅰ作为计数(循环)变量 int s=0; //用s作为累加变量 int n; printf(“输入一个自然数:”); scanf(“%d”,&n); for(i=1;i<=n;i++)s+=i*i; printf(“s=%d\n”,s); } 形考任务三 一、选择题 1.在下面的函数声明语句中,存在着语法错误的是( )。 【答案】AA(int a; int b) 2.在下面的保留字中,不能作为函数的返回值类型的是( )。 【答案】enum 3.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址增加的字节数为( )。 【答案】4 4.假定a为一个数组名,在下面的表达式中,存在语法错误的是( )。 【答案】*a++ 5.用calloc函数创建具有10个整型元素的一维数组的正确语句是( )。 【答案】int *p=calloc(10,4); 6.假定变量m定义为“int m=7;”,则下面正确的语句为( )。 【答案】int *p=&m; 7.假定k是一个double类型的变量,则定义变量p的正确语句为( )。 【答案】char *p=”Thank you!”; 8.若有语句为“int a[10], x, *pa=a;”,要把数组a中下标为3的元素值赋给x,则不正确的语句为( )。 【答案】x=*pa+3; 9.假定有语句为“int b[10]; int *pb;”,则下面不正确的赋值语句为( )。 【答案】pb=b[5]; 10.已知“int *p=malloc(100);”,要释放p所指向的动态内存,正确的语句为( )。 【答案】free(p); 11.在程序的一个文件中定义的函数,若要在另一个文件中调用,则必须在这另一个文件中给出该函数的( )。 【答案】原型语句 12.假定一个函数定义为“static int f1(int x,int y){return x+y;}”,该函数名称为( )。 【答案】f1 13.假定一个函数的原型语句为“int ff(int* x);”,一个整型数组为a[10],则下面函数调用表达式不正确的是( )。 【答案】ff(a[0]) 14.假定一个函数的数组参数说明为char a[],与之等价的指针参数说明为( )。1B 【答案】char* a 15.假定一个函数的二维数组参数说明为char w[][N],与之等价的指针参数说明为( )。 【答案】char (*w)[N] 二、判断题 16.在C语言中,一个函数由函数头和函数体组成。 【答案】 对 17.在函数模块之外定义的变量称为全局变量,若没有被初始化则系统隐含对它赋初值0。 【答案】 对 18.如果一个函数只允许同一程序文件中的函数调用,则不应在该函数定义的开始前加上保留字static。 【答案】 错 19.如果在一个函数体中又出现对自身函数的调用,此种函数调用被称为递归调用。 【答案】 对 20.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的系统头文件。 【答案】 对 21.函数形参变量不属于局部变量。 【答案】 错 22.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为46。 【答案】 错 23.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为25。 【答案】 错 24.假定p所指对象的值为25,p+1所指对象的值为46,则执行*(p++)运算后,p所指对象的值为46。 【答案】 对 25.假定a是一个指针数组,则a+i所指对象的地址比a地址大4*i字节。 【答案】 对 26.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为(char*)p。 【答案】 对 27.假定一个数据对象为int*类型,则指向该对象的指针类型仍为int*类型。 【答案】 错 28.假定x为一个简单变量,则&x表示x的地址。 【答案】 对 29.若p指向x,则*p与x的值不同。 【答案】 错 30.NULL是一个符号常量,通常作为空指针值,它代表的值为0。 【答案】 对 三、写出下列每个程序运行后的输出结果 31.#include<stdio.h> int WF(int x, int y) { x=x+y; y=x+y; return x+y; } void main() { int x=5, y=7; int z=WF(x,y); printf(“z=%d\n”,z); } 【答案】z=31 32. #include<stdio.h> #include<string.h> void fun(char ss[]); void main( ) { char s[15]=”0123456789″; fun(s); printf(“%s\n”,s); } void fun(char ss[]) { int i, n=strlen(ss) ; for(i=0; i<n/2; i++) { char c=ss[i]; ss[i]=ss[n-1-i]; ss[n-1-i]=c; } } 【答案】987543210 33. #include<stdio.h> int Count(int a[], int n, int x) { int i,c=0; for(i=0;i<n;i++) if(a[i]>x) c++; return c; } void main() { int a[8]={20,15,32,47,24,36,28,70}; int b=Count(a,8,30); printf(“b=%d\n”,b); } 【答案】b=4 34.#include<stdio.h> void main() { int a[8]={3,5,7,9,2,3,4,8}; int s=0,*p; for(p=a;p<a+8;) s+=*p++; printf(“s=%d\n”,s); } 【答案】s=41 35.#include<stdio.h> int LA(int *a, int n, int x) { int i,s=0; for(i=0;i<n;i++) if(a[i]<x) s+=a[i]; return s; } void main() { int a[8]={5,10,15,8,12,3,9,20}; int b=LA(a,5,10); int c=LA(a+2,6,10); printf(“%d %d\n”,b,c); } 【答案】13 20 四、写出下列每个函数的功能 36.double SF(double x, int n) { //n为正整数 double p=1,s=1; int i; for(i=1;i<=n;i++) { p*=x; s+=p; } return s; } 【答案】计算出1+x+x2+..+xn的值并返回。 37.int SG(int x) { //x为大于等于2的整数 int i=2; while(i*i<=x) { if(x%i==0) break; i++; } if(i*i<=x) return 0; else return 1; } 【答案】判断x是否为一个质数(素数),若是则返回1,否则返回0。 38.int WB(int a[], int n, int x) { for(int i=0;i<n;i++) if(a[i]==x) return 1; return 0; } 【答案】从数组a[n]中顺序查找值为x的元素,若查找成功则返回1,否则返回0. 39.int fun(int m, int n) { int c=0; static int b=2; if(m<b || n<b) return m*n; else if(m%b==0 && n%b==0) {c=b; return c*fun(m/b,n/b);} else {b++; return fun(m,n);} } 【答案】一个递归函数过程,求出两个自然数m和n的最小公倍数。 40.int LK(double a[], int n) { double s=0; int i,m=0; for(i=0;i<n;i++) s+=a[i]; s/=n; for(i=0;i<n;i++) if(a[i]>=s) m++; return m; } 【答案】求出并返回数组a的n个元素中大于等于平均值的元素个数。 形考任务四 一、选择题 1.假定有“struct BOOK{char title[40]; float price;}; struct BOOK book;”,则不正确的语句为( )。 【答案】struct BOOK *x=malloc(book); 2.假定有“struct BOOK{char title[40]; float price;} book;”,则正确的语句为( )。 【答案】struct BOOK *x=&book; 3.在结构类型的定义中,不同数据成员的定义项之间采用的分隔符是( )。 【答案】分号 4.假定一个结构类型的定义为 “struct A{int a,b; double c;};”,则该类型的长度为( )。 【答案】16 5.假定一个结构类型的定义为 “struct D{int a; D* next;};”,则该类型的长度为( )。 【答案】8 6.假定要访问一个结构指针变量x中的数据成员a,则表示方法为( )。 【答案】x->a 7.与结构成员访问表达式x.name等价的表达式为( )。 【答案】(&x)->name 8.假定一个链表中结点的结构类型为“struct AA{int data, struct AA *next;};”,则next数据成员的类型为( )。 【答案】struct AA* 9.假定一个链表的表头指针为f,结点中包含有data和next域,则向该链表的表头插入一个地址为p的结点时,应执行的操作为( )。 【答案】p->next=f和f=p 10.标准输入设备键盘的文件流标识符是( )。 【答案】stdin 11.表示文件结束符的符号常量为( )。 【答案】EOF 12.C语言中打开一个数据文件的系统函数为( )。 【答案】fopen() 37人 94.9% 13.从一个数据文件中读入以换行符结束的一行字符串的系统函数为( )。 【答案】fgets() 14.向一个二进制文件中写入信息的函数fwrite()带有的参数个数为( )。 【答案】4 15.在C语言中,为只写操作打开一个文本文件的方式为( )。 【答案】”w” 二、判断题 16.在结构类型的定义中,其中的数据成员可以是本身类型的直接对象。 【答案】 错 17.在结构类型的定义中,允许出现结构类型不完整的超前定义。 【答案】 对 18.定义结构类型的变量时,不能够同时进行初始化。 【答案】 错 19.使用一个结构类型时,必须一起使用关键字struct和类型标识符。 【答案】 对 20.假定一个结构类型的定义为 “struct A{int a,b; A* c;};”,则该类型的长度为12。 【答案】 对 21.假定一个结构类型的定义为 “struct B{int a[5]; char* b;};”,则该类型的长度为20。 【答案】 错 22.执行calloc(n,8)函数调用时,将动态分配得到8*n个字节的存储空间。 【答案】 对 23.执行malloc(sizeof(struct BB))函数调用时,得到的动态存储空间能够保存具有struct BB结构类型的一个对象。 【答案】 对 24.假定要访问一个结构对象x中的由a指针成员所指向的对象,则表示方法为x.a。 【答案】 错 25.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为p->b。 【答案】 错 26.与结构成员访问表达式(*fp).score等价的表达式是fp->score。 【答案】 对 27.在C语言中,对二进制文件的所有不同打开方式共有6种。 【答案】 对 28.C语言中的标准输入和输出设备文件都属于字符文件。 【答案】 对 29.在一个磁盘数据文件的文件名中,文件主名和扩展名都是必须的,不可省略。 【答案】 错 30.在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。 【答案】 对 31.一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。 【答案】 对 32.C语言系统中提供一个用来描述文件属性的类型标识符为FILE。 【答案】 对 33.每次只能向文本文件中写入一个字符,不能一次写入一个字符串。 【答案】 错 34.对二进制文件进行读和写操作将使用相同的系统函数。 【答案】 错 35.在C语言中,系统函数fseek()用来移动数据文件中的文件位置指针。 【答案】 对 三、写出下列每个程序运行后的输出结果 36.#include<stdio.h> struct Worker { char name[15]; //姓名 int age; //年龄 float pay; //工资 }; void main() { struct Worker x={“wanghua”,52,4300}; struct Worker y, *p; y=x; p=&x; printf(“%s %d %6.2f\n”,x.name,y.age,p->pay); } 【答案】wanghua 52 4300 37.#include<stdio.h> #include<string.h> struct Worker { char name[15]; //姓名 int age; //年龄 float pay; //工资 }; void main() { struct Worker x; char *t=”liouting”; int d=38; float f=3493; strcpy(x.name,t); x.age=d; x.pay=f; printf(“%s %d %6.0f\n”,x.name,x.age,x.pay); } 【答案】liouting 39 3493 38.#include<stdio.h> struct Worker {char name[15]; int age; float pay;}; int Less(struct Worker r1, struct Worker r2) { if(r1.age<r2.age) return 1; else return 0; } void main() { struct Worker a[4]={{“abc”,25,2420},{“def”,58,4638}, {“ghi”,49,4260},{“jkl”,36,3750}}; struct Worker x=a[0]; int i; for(i=1; i<4; i++) if(Less(x,a[i])) x=a[i]; printf(“%s %d %6.0f\n”,x.name,x.age,x.pay); } 【答案】def 58 4638 四、写出下列每个函数的功能 39.void QA(struct Worker a[], int n) { int i; for(i=1; i<n; i++) scanf(“%s %d %f”,&a[i].name,&a[i].age,&a[i].pay); } 假定结构类型struct Worker 的定义如下: struct Worker { char name[15]; int age; float pay;}; 【答案】从键盘输入n个Worker类型的记录到一维数组a中。 40.int Count(struct IntNode *f) { //f为指向一个单链表的表头指针 int c=0; while(f) { c++; f=f->next; } return c; } 假定struct IntNode的类型定义为: struct IntNode {int data; IntNode* next;}; 【答案】统计出以表头指针为f的链表中结点的个数。 41.void xw1(char* fname) { FILE* fout=fopen(fname,”w”); char a[20]; printf(“每个字符串长度小于20,字符串end作为结束标志\n”); while(1) { scanf(“%s”,a); if(strcmp(a,”end”)==0) break; fputs(a,fout); fputc(‘\n’,fout); } fclose(fout); } 【答案】把从键盘上输入的若干个字符串保存到由fname参数所指定的文本文件中。