上机全真考题第一套

 

一、程序填空

1.题目描述

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖学生原来的数据,其他学生的数据不变。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:部分源程序在文件Blank1.c中。 不得增行或删行,也不得更改程序的结构!

2.blank1.c内容

 

3.frop

(1)本空fopen是对文本文件的打开。fopen中第一个参数一般是文件的名称,第二个参数是打开方式。文件名称一般是字符串(或者字符指针),fun函数中所涉及的变量,只有filename是字符指针类型。filename所指的文件就是要进行重写数据的文件,因此本空填写filename

(2)fseek函数的功能是重定位流上的文件指针。用法:int fseek(FILE *stream, long offset, int fromwhere),函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。根据fseek函数的用法,第一个参数应该是文件指针,所以只能填写fp

(3)fwrite函数是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。用法:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);返回值:返回实际写入的数据块数目。其中参数buffer:是一个指针,对fwrite来说,是要获取数据的地址;size:要写入内容的单字节数;count:要进行写入size字节的数据项的个数;stream:目标文件指针;根据fwrite函数的用法,最后一个参数为目标文件指针,所以只能填写fp

 

二、程序修改

1.题目描述

下列给定程序中函数Creatlink的功能是:创建带头结点的单向链表,并为各节点数据域赋0到m-1的值。 请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。 注意:部分源程序在文件modi1.c中,不要改动main函数,不得增行或删行,也不得更改程序的结构。

2.modi1.c的内容

 

3.frop

(1)由遍历定义可知p为指向节点的指针变量(NODE *)类型,而malloc分配返回的类型为void类型,所以要进行强制类型转换,赋值符号(=)左右两边变量类型应该一致,所以此处应该修改为:p=(NODE *)malloc(sizeof(NODE));

(2)return后面的类型要和函数Creatlink返回值类型(NODE *)一致。函数Creatlink中是NODE *类型的只有h,p和s。本处需要修改错误,很显然p是不正确的,就只有h和s可以了。根据for循环中s是每次临时申请一块空间,最后s指向的就是最后一次申请的空间的地址,也不符合题意。h为指向链表的首地址,所以此处应该修改为:return h;

三、程序设计

1.题目描述

请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。字符串在主函数中输入,规定所有单词由小写字母组成,单词间由若干个空格隔开,一行的开始没有空格。 注意:部分源程序在文件prog1.c中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

2.prog1.的内容

 

3.frop

要判断单词的个数,首先要知道如何分离出一个单词。如果一个字母的下一个字符为空格或者字符串结束标记,则表示一个单词结束。因此可以对整行字符串进行遍历,使用if来判断当前字符是否表示一个单词的结束。如果当前字符表示一个单词结束,则存放单词数量的计数器cnt就加1,直到字符串结束('\0')。因为函数fun的返回值在主程序中赋给num(表示单词的个数),所以fun函数最后记得要返回单词的个数。

参考代码如下:

 

如有问题,可以QQ群531578731进行咨询。