用c语言写一个二维数组学生成绩表

时间: 2023-03-13 17:00:49 浏览: 108
我可以为你提供一个示例代码:#include <stdio.h> int main() { int marks[2][2] = { {85, 86}, {62, 90} }; // 输出每个学生的成绩 for (int i = 0; i < 2; ++i) { for (int j = 0; j < 2; ++j) { printf("Marks[%d][%d] = %d\n", i, j, marks[i][j]); } } return 0; }
相关问题

用C语言写一个小游戏,运用链表,指针,结构体,二维数组,文件等知识

好的,我可以给你提供一个小游戏的框架,你可以在此基础上实现链表、指针、结构体、二维数组和文件操作。这个游戏是猜数字游戏,玩家需要在规定次数内猜出系统随机生成的数字。以下是代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 定义链表结构体 typedef struct node { int score; struct node *next; } Node; // 初始化链表 Node *init_list() { Node *head = (Node*)malloc(sizeof(Node)); head->score = 0; head->next = NULL; return head; } // 插入链表 void insert_list(Node *head, int score) { Node *p = head; while (p->next != NULL) { p = p->next; } Node *new_node = (Node*)malloc(sizeof(Node)); new_node->score = score; new_node->next = NULL; p->next = new_node; } // 输出链表 void print_list(Node *head) { Node *p = head->next; while (p != NULL) { printf("%d ", p->score); p = p->next; } printf("\n"); } int main() { srand(time(NULL)); // 用时间做种子,使得每次生成的随机数不同 int answer = rand() % 100; // 产生 0-99 的随机数 int guess, count = 0, max_count = 10; // 最多猜 10 次 Node *score_list = init_list(); // 初始化链表 printf("猜数字游戏开始!\n"); while (count < max_count) { printf("请输入一个 0-99 的整数:"); scanf("%d", &guess); count++; if (guess == answer) { printf("恭喜你猜对了!你一共猜了 %d 次。\n", count); insert_list(score_list, count); // 插入链表 break; } else if (guess < answer) { printf("猜小了!\n"); } else { printf("猜大了!\n"); } } if (count == max_count) { printf("很遗憾你没有在规定次数内猜出正确答案,答案是:%d\n", answer); } printf("历史最佳成绩:"); print_list(score_list); // 输出链表 // 将链表保存到文件中 FILE *fp = fopen("score.txt", "w"); Node *p = score_list->next; while (p != NULL) { fprintf(fp, "%d ", p->score); p = p->next; } fclose(fp); return 0; } ``` 这个代码中用到了链表、指针、结构体、二维数组和文件操作的知识点。你可以自行实现这些功能,加强自己的编程能力。

用C语言写一个代码大于300行的数据库管理系统的程序,涉及知识点二维数组、字符串、链表、文件等

好的,这是一个比较大的项目,代码量会比较多,我会尽可能详细地讲解实现过程,希望能帮到你。 首先,我们需要定义数据库管理系统的数据结构。我们可以使用结构体来表示一个学生的信息,包括学号、姓名、性别、年龄、成绩等信息。然后,我们可以使用链表来存储所有学生的信息。 ```c // 学生信息结构体 typedef struct _student_info { char id[10]; // 学号 char name[20]; // 姓名 char gender[5]; // 性别 int age; // 年龄 float score; // 成绩 } student_info; // 学生信息链表结构体 typedef struct _student_list_node { student_info info; // 学生信息 struct _student_list_node *next; // 指向下一个节点的指针 } student_list_node; ``` 接下来,我们需要实现数据库管理系统的功能。我们需要提供以下几个功能: 1. 添加学生信息 2. 删除学生信息 3. 修改学生信息 4. 查询学生信息 5. 显示所有学生信息 6. 保存学生信息到文件中 7. 从文件中读取学生信息 下面,我们将逐个实现这些功能。 1. 添加学生信息 我们可以使用scanf函数来读取用户输入的学生信息,然后创建一个新的节点,并将学生信息插入到链表中。 ```c void add_student_info(student_list_node **list) { student_list_node *new_node = (student_list_node *)malloc(sizeof(student_list_node)); printf("请输入学生信息:\n"); printf("学号:"); scanf("%s", new_node->info.id); printf("姓名:"); scanf("%s", new_node->info.name); printf("性别:"); scanf("%s", new_node->info.gender); printf("年龄:"); scanf("%d", &(new_node->info.age)); printf("成绩:"); scanf("%f", &(new_node->info.score)); new_node->next = *list; *list = new_node; printf("添加成功!\n"); } ``` 2. 删除学生信息 我们可以先查询指定学号的学生信息是否存在,如果存在,则删除该学生信息所在的节点。 ```c void delete_student_info(student_list_node **list) { char id[10]; printf("请输入要删除的学生学号:"); scanf("%s", id); student_list_node *p, *prev; for (p = *list, prev = NULL; p != NULL; prev = p, p = p->next) { if (strcmp(p->info.id, id) == 0) { if (prev == NULL) { *list = p->next; } else { prev->next = p->next; } free(p); printf("删除成功!\n"); return; } } printf("未找到该学生信息!\n"); } ``` 3. 修改学生信息 我们可以先查询指定学号的学生信息是否存在,如果存在,则读取用户输入的新学生信息,并更新该学生信息所在的节点。 ```c void modify_student_info(student_list_node **list) { char id[10]; printf("请输入要修改的学生学号:"); scanf("%s", id); student_list_node *p; for (p = *list; p != NULL; p = p->next) { if (strcmp(p->info.id, id) == 0) { printf("请输入学生信息:\n"); printf("学号:"); scanf("%s", p->info.id); printf("姓名:"); scanf("%s", p->info.name); printf("性别:"); scanf("%s", p->info.gender); printf("年龄:"); scanf("%d", &(p->info.age)); printf("成绩:"); scanf("%f", &(p->info.score)); printf("修改成功!\n"); return; } } printf("未找到该学生信息!\n"); } ``` 4. 查询学生信息 我们可以先查询指定学号的学生信息是否存在,如果存在,则输出该学生信息。 ```c void query_student_info(student_list_node *list) { char id[10]; printf("请输入要查询的学生学号:"); scanf("%s", id); student_list_node *p; for (p = list; p != NULL; p = p->next) { if (strcmp(p->info.id, id) == 0) { printf("学号:%s\n", p->info.id); printf("姓名:%s\n", p->info.name); printf("性别:%s\n", p->info.gender); printf("年龄:%d\n", p->info.age); printf("成绩:%f\n", p->info.score); return; } } printf("未找到该学生信息!\n"); } ``` 5. 显示所有学生信息 我们可以遍历整个链表,输出每个学生的信息。 ```c void show_all_student_info(student_list_node *list) { printf("学号\t姓名\t性别\t年龄\t成绩\n"); student_list_node *p; for (p = list; p != NULL; p = p->next) { printf("%s\t%s\t%s\t%d\t%f\n", p->info.id, p->info.name, p->info.gender, p->info.age, p->info.score); } } ``` 6. 保存学生信息到文件中 我们可以使用文件操作函数,将链表中的学生信息保存到文件中。 ```c void save_student_info_to_file(student_list_node *list, const char *filename) { FILE *fp = fopen(filename, "w"); if (fp == NULL) { printf("无法打开文件 %s!\n", filename); return; } student_list_node *p; for (p = list; p != NULL; p = p->next) { fprintf(fp, "%s\t%s\t%s\t%d\t%f\n", p->info.id, p->info.name, p->info.gender, p->info.age, p->info.score); } fclose(fp); printf("保存成功!\n"); } ``` 7. 从文件中读取学生信息 我们可以使用文件操作函数,从文件中读取学生信息,并创建节点,将学生信息插入到链表中。 ```c void load_student_info_from_file(student_list_node **list, const char *filename) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("无法打开文件 %s!\n", filename); return; } char line[1024]; while (fgets(line, sizeof(line), fp) != NULL) { student_list_node *new_node = (student_list_node *)malloc(sizeof(student_list_node)); sscanf(line, "%s\t%s\t%s\t%d\t%f", new_node->info.id, new_node->info.name, new_node->info.gender, &(new_node->info.age), &(new_node->info.score)); new_node->next = *list; *list = new_node; } fclose(fp); printf("读取成功!\n"); } ``` 最后,我们需要提供一个主函数,用于测试我们实现的功能。 ```c int main() { student_list_node *list = NULL; int choice; do { printf("1. 添加学生信息\n"); printf("2. 删除学生信息\n"); printf("3. 修改学生信息\n"); printf("4. 查询学生信息\n"); printf("5. 显示所有学生信息\n"); printf("6. 保存学生信息到文件中\n"); printf("7. 从文件中读取学生信息\n"); printf("0. 退出\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: // 添加学生信息 add_student_info(&list); break; case 2: // 删除学生信息 delete_student_info(&list); break; case 3: // 修改学生信息 modify_student_info(&list); break; case 4: // 查询学生信息 query_student_info(list); break; case 5: // 显示所有学生信息 show_all_student_info(list); break; case 6: // 保存学生信息到文件中 save_student_info_to_file(list, "student.txt"); break; case 7: // 从文件中读取学生信息 load_student_info_from_file(&list, "student.txt"); break; case 0: // 退出 break; default: printf("无效操作!\n"); break; } } while (choice != 0); return 0; } ``` 这个程序比较长,代码量超过了300行,但是实现起来并不难。在实际开发中,我们可以将代码分成多个文件,便于维护和管理。 希望这个示例程序能够帮到你!

相关推荐

最新推荐

recommend-type

06_QLibrary.zip

06_QLibrary.zip
recommend-type

毕业设计: 基于Densenet + CTC技术的文字检测识别的技术研究

本毕设课题是属于计算机视觉下的目标检测与识别,对象为自然场景下的各种文本信息,通俗的说就是检测识别图片中的文本信息。由于文本的特殊性,本毕设将整个提取信息的过程可以分为检测、识别两个部分。 论文对用到的相关技术概念有一定的介绍分析,如机器学习,深度学习,以及各种的网络模型及其工作原理过程。 检测部分采用水平检测文本线方式进行文本检测,主要参考了乔宇老师团队的 CTPN 方法,并在正文部分从模型的制作到神经网络的设计实现对系统进行了较为详细的分析介绍。 识别部分则采用的是 Densenet + CTC,对于印刷体的文字有较好的识别。
recommend-type

毕业设计 基于javaweb的在线答题平台

毕业设计 基于javaweb的在线答题平台
recommend-type

numpy安装 python get-pip.py

numpy安装 numpy安装 python get-pip.py
recommend-type

基于用户、物品的协同过滤算法.zip

协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。