标签: ,

第4次形成性考核 (结构体、文件与综合应用)

  • 主题: 结构体的定义与使用、结构体数组、文件基本操作(打开、关闭、读、写)、动态内存分配初步(malloc, free)、综合应用。
  • 题量: 7题
题目:
  1. (选择题 – 3)

下面关于C语言结构体的描述,哪个是错误的? ( D  )

  1. 结构体是一种构造数据类型。
  2. 结构体可以包含不同类型的成员。
  3. 结构体变量在定义后,其成员可以直接通过运算符访问。
  4. 结构体变量之间不能直接赋值。

 

  1. (填空题 – 4)

定义一个名为 Student 的结构体,包含 id (整型) 和 name (字符数组,长度为20) 两个成员的语句是:

struct Student {

____int___ id;

_char___ name[20];

};

若有结构体变量 struct Student s1;,给其 id 成员赋值为101的语句是:s1.____ = 101;

若要以文本只读方式打开文件 “data.txt”,fopen 函数的第二个参数应为 ____。

 

  1. (简答题 – 5)

简述C语言中 malloc() 和 free() 函数的作用以及为什么它们通常需要配对使用。

malloc() 用于动态分配内存空间,返回指向该空间的指针;free() 用于释放动态分配的内存,避免内存泄漏。
配对使用原因:动态分配的内存若不释放,会导致内存资源浪费(内存泄漏),程序长期运行可能耗尽内存。因此,malloc 分配的内存必须用 free 释放,确保资源有效管理。

  1. (编程题 – 10)

定义一个 Point 结构体,包含两个 double 类型的成员 x 和 y,表示平面上的一个点。编写一个函数 double distance(struct Point p1, struct Point p2),计算并返回两个点 p1 和 p2 之间的距离。 距离公式:sqrt((x2-x1)^2 + (y2-y1)^2) (可以使用 math.h 中的 sqrt() 和 pow())。 在 main 函数中创建两个 Point 结构体变量,赋初值,调用 distance 函数并输出结果。

“`c #include #include

struct Point {
double x, y;
};

 

double distance(struct Point p1, struct Point p2) {
double dx = p2.x – p1.x;
double dy = p2.y – p1.y;
return sqrt(pow(dx, 2) + pow(dy, 2));
}

 

int main () {
struct Point p1 = {1.0, 2.0}, p2 = {4.0, 6.0};
double dist = distance (p1, p2);
printf (“Distance: %.2f\n”, dist); //
输出应为 5.00
return 0;
}

 

  1. (编程题 – 10)

编写一个C程序,要求用户输入5个学生的姓名(不超过19个字符)和成绩(整数)。将这些信息存入一个结构体数组中。然后,找出并输出成绩最高的学生的姓名和成绩。

结构体定义建议:

struct Student {

    char name[20];

    int score;

};

<doubaocanvas identifier=”c-highest-score-student” type=”general_code” title=”查找成绩最高的学生”>

<doubaocanvas-part language=”c” path=”highest_score.c” description=”查找成绩最高的学生”>

“`c

#include <stdio.h>

#include <string.h>

 

struct Student {

char name[20];

int score;

};

 

int main() {

struct Student students[5], max_student;

int i;

 

// 输入5名学生信息

for (i = 0; i < 5; i++) {

scanf(“%s %d”, students[i].name, &students[i].score);

}

 

// 初始化最大值

max_student = students[0];

for (i = 1; i < 5; i++) {

if (students[i].score > max_student.score) {

max_student = students[i];

}

}

 

printf(“Highest score student: %s, %d\n”, max_student.name, max_student.score);

return 0;

}

 

  1. (编程题 – 12)

编写一个C程序,实现以下功能:

  • 向文件 txt 中写入10行文本,每行内容为 “Line number: X”,其中 X 是行号(从1到10)。
  • 关闭文件。
  • 重新打开 txt 文件进行读取。
  • 逐行读取文件内容,并在每行内容前加上 “Read from file: ” 后输出到屏幕。
  • 关闭文件。 (注意错误处理,如文件打开失败等。)
  • “`c #include #include
  • int main() {
    FILE *fp;
    char line[50];
  • // 写入文件
    fp = fopen (“output.txt”, “w”);
    if (fp == NULL) {
    perror (“Error opening file for writing”);
    return 1;
    }
  • for (int i = 1; i <= 10; i++) {
    fprintf(fp, “Line number: %d\n”, i);
    }
    fclose(fp);
  • // 读取文件
    fp = fopen (“output.txt”, “r”);
    if (fp == NULL) {
    perror (“Error opening file for reading”);
    return 1;
    }
  • while (fgets(line, sizeof(line), fp)) {
    printf(“Read from file: %s”, line);
    }
    fclose(fp);
  • return 0;
    }