
作业社区
探索学习新天地,共享知识资源!
浪潮君 的学生作业:
#include #include // 定义一个结构体类型 s_t,表示学生信息 typedef struct { char name[20]; // 学生姓名 int id; // 学号 int score; // 成绩 } s_t; // 分配动态内存空间,返回指向结构体的指针 s_t *get_memory_addr() { s_t *ptr = (s_t *) malloc(sizeof(s_t)); // 为一个 s_t 类型变量分配内存 if (ptr == NULL) { // 检查内存是否分配成功 printf("malloc failed\n"); exit(1); // 分配失败则退出程序 } return ptr; // 返回分配好的内存地址 } // 输入学生信息,参数是指向结构体的指针 void input_student(s_t *s) { printf("请输入学生姓名、学号、成绩:"); // 使用 -> 操作符访问结构体成员 // s 是一个指向结构体 s_t 的指针 // s->name 等价于 (*s).name scanf("%s %d %d", s->name, &s->id, &s->score); } // 输出学生信息 void output_student(s_t *s) { printf("学生信息如下:\n"); // 使用 -> 操作符访问并打印结构体成员 printf("姓名:%s\n", s->name); printf("学号:%d\n", s->id); printf("成绩:%d\n", s->score); } int main(int argc, char *argv[]) { // 获取一个指向结构体的动态内存地址 s_t *student = get_memory_addr(); // 输入学生信息 input_student(student); // 输出学生信息 output_student(student); // 释放动态分配的内存 free(student); return 0; }





浪潮君 的学生作业:
#include // 匿名结构体,结构体类型没有名字 // s 是结构体变量,属于全局变量,分配在【数据段(BSS区)】 struct { unsigned int is_online : 1; // 位域,占1位,属于全局变量 s → 【数据段】 unsigned int has_error : 1; // 位域,占1位,属于全局变量 s → 【数据段】 unsigned int mode : 2; // 位域,占2位,属于全局变量 s → 【数据段】 }s; int main(int argc, char* argv[]) { // main 函数内没有新定义的变量,这里对全局变量 s 的成员赋值 → 【数据段】 s.is_online = 1; // 设置在线状态,占位于 s 中的某1位 → 【数据段】 s.has_error = 0; // 设置错误状态 → 【数据段】 s.mode = 3; // 设置模式为3 → 【数据段】 // printf 本身在代码区,格式化时使用的临时变量/栈帧数据位于【栈区】 printf("在线状态:%u\n", s.is_online); printf("错误状态:%u\n", s.has_error); printf("模式:%u\n", s.mode); return 0; // argc 和 argv 为 main 的参数 → 【栈区】 }





浪潮君 的学生作业:
#include // 定义颜色枚举类型 enum COLOR { red = 1, // 红色编号为 1 green = 2, // 绿色为 2 yellow, // 自动为 3 blue, // 自动为 4 black // 自动为 5 }; int main() { int col; // 提示用户输入颜色编号 printf("请输入颜色编号 (1-red, 2-green, 3-yellow, 4-blue, 5-black): "); scanf("%d", &col); // 从键盘读取整数 // 根据用户输入的值输出对应的颜色 switch (col) { case red: printf("你选择的颜色是:红色\n"); break; case green: printf("你选择的颜色是:绿色\n"); break; case yellow: printf("你选择的颜色是:黄色\n"); break; case blue: printf("你选择的颜色是:蓝色\n"); break; case black: printf("你选择的颜色是:黑色\n"); break; default: printf("无效的颜色编号!\n"); break; } return 0; }





浪潮君 的学生作业:
#include // 定义一个结构体 RGB_t,用于表示颜色的 RGB 分量(每个分量占1字节) typedef struct { unsigned char Red; // 红色通道 unsigned char Green; // 绿色通道 unsigned char Blue; // 蓝色通道 } RGB_t; // 定义一个联合体 PIX_t,允许以两种方式访问颜色:RGB 分量 或 整体值 typedef union { RGB_t rgb; // 分通道访问 unsigned int value; // 打包后的整型值(4字节) } PIX_t; int main() { // 定义并初始化联合体变量 pixel,全部置0,避免未定义的高位数据 PIX_t pixel = {0}; // 设置颜色的三个通道值(小端机器内存顺序将是:Blue, Green, Red, [未用字节]) pixel.rgb.Red = 0x11; pixel.rgb.Green = 0x22; pixel.rgb.Blue = 0x33; // 打印结构体成员值 printf("Red = 0x%02X\n", pixel.rgb.Red); printf("Green = 0x%02X\n", pixel.rgb.Green); printf("Blue = 0x%02X\n", pixel.rgb.Blue); // 由于联合体共用内存,现在可以直接用 value 查看 RGB 被打包成的整数值 printf("打包后的 pixel.value = 0x%08X\n", pixel.value); return 0; }





浪潮君 的学生作业:
#include // 引入标准输入输出头文件 // 定义一个结构体类型 student,并初始化一个变量 st1 struct student { char name[20]; // 学生姓名 int id; // 学生ID int score; // 学生成绩 } st1 = {“jack”, 1, 100}; // 初始化结构体变量 st1 int main() { // 定义并初始化结构体数组 st,包含 3 个学生信息 struct student st[3] = { {“Rose”, 2, 70}, {“Mike”, 3, 60}, {“Hamilton”, 4, 50} }; // 输出结构体变量 st1 的成员 printf("Name: %s\n", st1.name); printf("Id: %d\n", st1.id); printf("Score: %d\n", st1.score); // 遍历并输出结构体数组 st 中所有学生的信息 for (int i = 0; i < 3; i++) { printf("\nList to Student %d\n", i + 1); printf(" Name: %s\n", st[i].name); printf(" Id: %d\n", st[i].id); printf(" Score: %d\n", st[i].score); } // 让用户输入一个 ID,用于查找学生信息 int input_id; printf("\nEnter an ID to search: "); scanf("%d", &input_id); // 从键盘读取用户输入的 ID int found = 0; // 标志变量,表示是否找到对应 ID // 遍历结构体数组,查找是否存在输入的 ID for (int i = 0; i < 3; i++) { if (st[i].id == input_id) { // 如果找到匹配的 ID printf("ID found! Name: %s\n", st[i].name); // 输出对应的姓名 found = 1; // 设置 found 为 1,表示找到了 break; // 结束查找 } } // 如果没有找到 ID,提示 "No Exist!" if (found != 1) printf("No Exist!\n"); return 0; // 程序正常结束 }




