"该资源包含了2012年9月计算机二级C语言上机题库的完整内容,主要涉及C语言编程以及文件操作。题目要求考生完善一个建立班级通讯录的程序,该程序能从键盘读取学生信息,并将信息存储到二进制文件myfile5.dat中。另外还包含了一个字符串处理函数的修改题目,目标是实现字符串的正序与逆序合并。"
在给定的程序中,我们需要填写正确的内容来完成功能。首先,对于`fun`函数的定义,其参数应为`STYPE *std`,表示指向结构体数组的指针。接着,我们需要创建一个指向二进制文件的文件指针`FILE *fp`。最后,在`fwrite`函数中,第三个参数应为`fp`,表示我们要将数据写入到`fp`所指向的文件中。
修正后的代码如下:
```c
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct
{
int num;
char name[10];
char tel[10];
} STYPE;
void check(); // 此函数的实现未给出,可能是用于检查文件内容的正确性
// 完善后的fun函数
int fun(STYPE *std)
{
FILE *fp;
int i;
if ((fp = fopen("myfile5.dat", "wb")) == NULL)
return (0);
printf("\nOutput data to file!\n");
for (i = 0; i < N; i++)
fwrite(&std[i], sizeof(STYPE), 1, fp); // 写入文件
fclose(fp);
return (1);
}
main()
{
STYPE s[10] = {
{1, "aaaaa", "111111"},
{1, "bbbbb", "222222"},
{1, "ccccc", "333333"},
{1, "ddddd", "444444"},
{1, "eeeee", "555555"}
};
int k;
k = fun(s);
if (k == 1)
{
printf("Succeed!");
check();
}
else
printf("Fail!");
}
// 另一个字符串处理函数的修改题目
#include<stdio.h>
#include<string.h>
void fun(char *s, char *t)
{
int i, sl;
sl = strlen(s);
char temp[sl + 1]; // 创建一个临时数组用于存放正序字符串
// 先将s中的字符按正序存放到temp中
for (i = 0; i < sl; i++)
temp[i] = s[i];
temp[sl] = '\0'; // 添加字符串结束符
// 然后把s中的字符按逆序连接到t的后面
strcpy(t, temp);
for (i = sl - 1; i >= 0; i--)
t[strlen(t) + 1] = s[i];
t[strlen(t) + 1] = '\0'; // 添加字符串结束符
}
```
在这个题目中,主要考察了C语言的基本语法,包括结构体、文件操作(fopen、fwrite、fclose)以及字符串处理(strlen、strcpy)。此外,还涉及到了指针的使用和数组的操作。在实际的等级考试中,这样的题目旨在测试考生对C语言基础知识的掌握程度以及解决实际问题的能力。