head=Creatlink(8.22). outlink(head). 解愿思路: 第一处:指向刚分配的结构指针,所以应政为:pNODE*)malloc(sizeof(NODE) 第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用 P,是因为p的位置己经发生了变化,所以应政为返回。 丰率率家率中率家幸家神车家中家率车非率车家神率中率率率车串幸率家中中单车家中车率中水家率华率水家率非中 请编写函数fu,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规 定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数m?i和其它函数中的任何内容,仅在函数n的花括号中填入你编写的若千语句, 给定源程序: #include<stdio.h> #define N80 int fun(chars) main() char line[N]int num printf"Enter astring):gets(line). nunm=fin(line大 rinf"The number of word) NONOO. 解题思路: 本愿是统计字符串中的单词数。 1.利用wh循环语句和指针变量,当字符为空格时,则单词数k加1。 2.循环结束返回k. 参考答案: int fun(chars) intk=1: while(*s) if(*s ==)kt+; -11
- 11 - head=Creatlink(8,22); outlink(head); } 解题思路: 第一处: 指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE)); 第二处: 在动态分配内存的下一行语句是,使用临时结构指针变量 h 保存 p 指针的初始位置,最后返回不能使用 p,是因为 p 的位置已经发生了变化,所以应改为返回 h。 *************************************************** 请编写函数 fun, 函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入, 规 定所有单词由小写字母组成,单词之间由若干个空格隔开, 一行的开始没有空格。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <string.h> #define N 80 int fun( char *s) { } main() { char line[N]; int num=0; printf("Enter a string :\n"); gets(line); num=fun( line ); printf("The number of word is : %d\n\n",num); NONO(); } 解题思路: 本题是统计字符串中的单词数。 1. 利用 while 循环语句和指针变量,当字符为空格时,则单词数 k 加 1。 2. 循环结束返回 k。 参考答案: int fun( char *s) { int k = 1 ; while(*s) { if(*s == ' ') k++ ;
S++ retumk; ※※※※※※※※※※※※※※※※※※※※※※※※※ 第04套 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到 文件中,函数fun的功能是从形参ilename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进 制方式把排序后的学生数据输出到kame所指的文件中,覆原来的文件内容。 请在程序的下划线处填入正确的内容并把下划线刷除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中。 不得增行或删行,也不得更改程序的结构: 给定源程序: <stdio.h #define N5 typedef struct student long sno; char namel101 float score STU; void fun(charfilename FILE*fp.inti.j STU sIN]t 作found fp=fopen(filename,1). fread(s,sizeof(STU).N.fp). felose(fp). for (i=0:isN-1:i++) fow(=ir1上:jKN:it+) found if (sfilsno 2 slil.sno) {t=s可s可=sjls=} fp=fopen(filename,"wb"); 作车事本市车本来车中found华来华年车本市春4中 _3_(s.sizeof(STU).N.fp)./ 二进制输出 2
- 12 - s++ ; } return k ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 04 套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。所有学生数据均以二进制方式输出到 文件中。函数 fun 的功能是从形参 filename 所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进 制方式把排序后的学生数据输出到 filename 所指的文件中,覆盖原来的文件内容。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename) { FILE *fp; int i, j; STU s[N], t; /**********found**********/ fp = fopen(filename, _1_); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) /**********found**********/ if (s[i].sno _2_ s[j].sno) { t = s[i]; s[i] = s[j]; s[j] = t; } fp = fopen(filename, "wb"); /**********found**********/ _3_(s, sizeof(STU), N, fp); /* 二进制输出 */ fclose(fp); }
main( {STUNH{{10005,"ZhangSan",95,80,88,{10003,LiS,85.70,78 {10002,CaoKai,75,60,88.{1004,"FangFang,90,82,87, {10001,"MaChao',91,92,77},sN int i,i:FILE *fp: fp=fopen("studentda""wb" fwrite(t.sizeof(STU).5,fp). fclose(fp). for(=0.j<N.j++) (printf"nNo:Name:Scores"), for (i++)printf".f"score) printf"方 fun("student dat"): printf"The data after sorting) fp=fopen("studentdat" fread(ss.sizeofSTU).5.fp). for (i=0:i<N:i++) printf"\nNo:%ld Name:%-8s Scores:",ss[jl.sno,ss[il.name). print"n"). 解恩思路: 本题是考察把结构中的数据写入文件。 第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应 填:"b。 第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:> 第三处:把已排序的结构数据,重新写入文作,所以应填:wc 卡非率家率中非家水率神中非中非中非非中中率中率华来非率车华率水家中中中车率中车率卡水率率华率电中车家车 给定程序MODII.C中函数fn的功能是:在字符串的最前瑞加入n个号,形成新串,并且覆盖原串, 注意:字符申的长度最长允许为79。 请改正函数fu中指定部位的错误。使它能得出正确的结果。 注意:不要改动mmn函数,不得增行或删行,也不得更改程序的结构, -13
- 13 - main() { STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78}, {10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}, {10001,"MaChao", 91, 92, 77}}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf("\n\nThe original data :\n\n"); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno, t[j].name); for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]); printf("\n"); } fun("student.dat"); printf("\n\nThe data after sorting :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } } 解题思路: 本题是考察把结构中的数据写入文件。 第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应 填:"rb"。 第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:>。 第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 在字符串的最前端加入 n 个*号, 形成新串, 并且覆盖原串。 注意: 字符串的长度最长允许为 79。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序: #include <stdio.h> void fun(char) char a8].*p. int i: s-p: for(i=0;i<n;+ali 60 (ali="p it+: 作华华车中4华*found*单4*车车 while('p++) strepy(s.a). main( (int n char s8] printf"nThe string%sn"s): printf"nEnter n(number of):")scanf(d) fu(s.n). printf"nThe string after insert:%s). 解题思路 第一处:指针p应指向s,所以应改为:p=s. 第二处:死循环,当d0whie循环执行一次,临时变量p应该指向字符中的下一位置,所以应改为:whip+ 车中水率中事华水华神车非事水中车车中卓率中华中水家率中串中家家中车中水家中车中中率率非串率水家率华 请编写函数f,函数的功能是:统计各年龄段的人数,N个年检通过调用随机函数获得,并放在主函数的g©数组 中:要求函数把0至9岁年龄段的人数放在d0中,把10至19岁年龄段的人数放在d1中,把20至29岁年龄段 的人数放在d2中,其余依此类推,把100岁(含100)以上年龄的人数都放在d10中.结果在主函数中输出. 注意:部分源程序在文件PROG1.C中。 请勿改动主函数mai和其它函数中的任何内容,仅在函数fn的花括号中填入你编写的若干语句. 给定源程序:
- 14 - 给定源程序: #include <stdio.h> #include <string.h> void fun ( char s[], int n ) { char a[80] , *p; int i; /**********found***********/ s=p; for(i=0; i<n; i++) a[i]='*'; do { a[i]=*p; i++; } /**********found***********/ while(*p++) a[i]=0; strcpy(s,a); } main() { int n; char s[80]; printf("\nEnter a string : "); gets(s); printf("\nThe string \"%s\"\n",s); printf("\nEnter n ( number of * ) : "); scanf("%d",&n); fun(s,n); printf("\nThe string after insert : \"%s\" \n" ,s); } 解题思路: 第一处: 指针 p 应指向 s,所以应改为:p=s;。 第二处: 死循环,当 do while 循环执行一次,临时变量 p 应该指向字符串的下一位置,所以应改为:while(*p++);。 *************************************************** 请编写函数 fun,函数的功能是:统计各年龄段的人数。N 个年龄通过调用随机函数获得,并放在主函数的 age 数组 中;要求函数把 0 至 9 岁年龄段的人数放在 d[0] 中,把 10 至 19 岁年龄段的人数放在 d[1]中,把 20 至 29 岁年龄段 的人数放在 d[2]中, 其余依此类推, 把 100 岁 (含 100)以上年龄的人数都放在 d[10]中。结果在主函数中输出。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序:
include<stdio.h> #define N 50 define M1 void fun(int "a int *b) double md() {static29,c=217.m=1024,-0, m,retum((double)r/m) main {int age[N].i,d[M]; for(i=0:i<N:i++)agelil=(int)(115*rndO) printf"The original data) for(i=0:i<N:++)printf(1)%-7%4dV"%4d".age[iJ); printf"n) fun(age.d). for(=0k10,i4+)print%4d-9%4d:%4dn'",i*10,i*10+9,d. NONO(d). 解愿思路: 本题是统计各年龄段的人数。 1.初始化各年龄段人数为0 2.使用f循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则存入d10中(大于110 岁的人)。 参考答案: void fun(int*aint◆b)】 inti.j: for(i=0:i<M:i++)b]=0; for(i=0;i<N:i++){ j=0110: ifj>10)b[M-I]++;else b++; -15
- 15 - #include <stdio.h> #define N 50 #define M 11 void fun( int *a, int *b) { } double rnd() { static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return((double)r/m); } main() { int age[N], i, d[M]; for(i=0; i<N;i++)age[i]=(int)(115*rnd()); printf("The original data :\n"); for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]); printf("\n\n"); fun( age, d); for(i=0;i<10;i++)printf("%4d-%4d : %4d\n",i*10,i*10+9,d[i]); printf(" Over 100 : %4d\n",d[10]); NONO(d); } 解题思路: 本题是统计各年龄段的人数。 1. 初始化各年龄段人数为 0。 2. 使用 for 循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于 10,则存入 d[10]中(大于 110 岁的人)。 参考答案: void fun( int *a, int *b) { int i, j ; for(i = 0 ; i < M ; i++) b[i] = 0 ; for(i = 0 ; i < N ; i++) { j = a[i] / 10 ; if(j > 10) b[M - 1]++ ; else b[j]++ ; } }