//程序填空题:在此程序中,通过定义学生结构体变量,存储了学生的学号,姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun()函数的功能是重写形参filename所指文件中最后一个学生的数据,即用新的覆盖旧的,其他的不变。
//重难点:结构体数据的定义。对文件的读写操作。双层for循环输出结构体的数据。
1 #include <stdio.h> 2 #define N 5 3 typedef struct student { 4 long sno; 5 char name[10]; 6 float score[3]; 7 } STU; 8 void fun(char *filename, STU n) 9 { FILE *fp; 10 /**********found**********/ 11 fp = fopen(filename, "rb+");//打开文件,这里填首地址,不加*号 12 /**********found**********/ 13 fseek(fp, -(long)sizeof(STU), SEEK_END);//重定位流上的文件指针,第一参数类型为:FILE *stream,把指针指向最后一个数据。 14 /**********found**********/ 15 fwrite(&n, sizeof(STU), 1, fp); 16 fclose(fp); 17 } 18 void main() 19 { STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, 20 {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, 21 {10005,"ZhangSan", 95, 80, 88}}; 22 STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; 23 int i,j; FILE *fp; 24 fp = fopen("student.dat", "wb"); 25 fwrite(t, sizeof(STU), N, fp); 26 fclose(fp); 27 fp = fopen("student.dat", "rb"); 28 fread(ss, sizeof(STU), N, fp); 29 fclose(fp); 30 printf(" The original data : "); 31 for (j=0; j<N; j++)//for双层循环进行结构体数据的遍历输出。 32 { printf(" No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); 33 for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); 34 printf(" "); 35 } 36 fun("student.dat", n); 37 printf(" The data after modifing : "); 38 fp = fopen("student.dat", "rb"); 39 fread(ss, sizeof(STU), N, fp); 40 fclose(fp); 41 for (j=0; j<N; j++) 42 { printf(" No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); 43 for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); 44 printf(" "); 45 } 46 }
//程序修改题:在此程序中,函数Creatlink的功能是:创建带头节点的单向链表,使它能得出正确结果。
//重难点:结构体类型链表的定义。链表数据的赋值,malloc()函数内存申请。处理前进行表头的备份。
1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct aa 4 { int data; 5 struct aa *next; 6 } NODE; 7 NODE *Creatlink(int n, int m) 8 { NODE *h=NULL, *p, *s; 9 int i; 10 /**********found***********/ 11 p=(NODE *)malloc(sizeof(NODE));//变量p指向刚分配的结构节点指针,(NODE *)表示类型,就好比(int),这里进行内存申请 12 h=p;//使用临时变量h保存p指针的初始位置。 13 p->next=NULL; 14 for(i=1; i<=n; i++) 15 { s=(NODE *)malloc(sizeof(NODE));//定义一个s进行数据的复制 16 s->data=rand()%m; s->next=p->next; 17 p->next=s; p=p->next; 18 } 19 /**********found***********/ 20 return h; 21 } 22 void outlink(NODE *h) 23 { NODE *p; 24 p=h->next;//从新定义个指针指向h,进行数据的输出 25 printf(" THE LIST : HEAD "); 26 while(p) 27 { printf("->%d ",p->data); 28 p=p->next; 29 } 30 printf(" "); 31 } 32 void main() 33 { NODE *head;//定义结构体类型链表指针 34 head=Creatlink(8,22);//函数返回链表表头 35 outlink(head); 36 }
//程序设计题:在此程序中,编写fun()函数,它的功能是:统计一行字符串中单词的个数,作为函数的返回值。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开头没有空格。
//重难点:思路为遍历整个字符串,然后遇见空格,就进行它的前一个字符的判断,如果不为空格就代表一个单词。
1 #include<string.h> 2 #include<stdio.h> 3 #define N 80 4 int fun(char *s) 5 { 6 int i=1;//默认输入的单词最后不是以空格结尾,所以加1。 7 char a; 8 for (*s;*s!='