OJ刷题之旅
2026/8/6 17:39:29 网站建设 项目流程

题目描述

依次给你n个学生的姓名、学号,然后Q次询问,对于每一次询问你会得到一个学号,请你输出该学号对应的姓名。

输入

第一行输入一个整数n(1<=n<=100),然后n行,每行输入一个长度不超过15的字符串s,表示姓名和一个10位整数,表示学号。(学号保证没有前导零且每个学号都不相同) 再输入一个整数Q(0<=Q<=10),紧接着Q次询问,每次询问输入一个10位整数,表示询问的学号。(保证询问的学号存在)

输出

对于每一次询问输出与学号对应的姓名。

样例

输入 Copy 5 Anoyer 1000000000 LZH 1314521520 ZZ 9876543210 zhangfei 1234567890 ayi 5432198760 2 1314521520 1000000000

输出 Copy LZH Anoyer

来源/分类

结构体


题解

以下是一个基本的 C 语言程序,用于实现所描述的功能:

#include <stdio.h> #include <string.h>

#define MAX_N 100
#define ID_LENGTH 11

/* 定义学生结构体 */
struct student {
char name[16];
char id[ID_LENGTH];
};

int main() {
int n, q, i, j;
struct student students[MAX_N];

/* 读入学生信息 */ scanf("%d", &amp;n); for (i = 0; i &lt; n; i++) { scanf("%s %s", students[i].name, students[i].id); } /* 处理查询请求 */ scanf("%d", &amp;q); for (i = 0; i &lt; q; i++) { char query[ID_LENGTH]; scanf("%s", query); /* 在学生列表中查找该学号对应的姓名 */ for (j = 0; j &lt; n; j++) { if (strcmp(students[j].id, query) == 0) { printf("%s\n", students[j].name); break; } } } return 0;

}

程序首先定义了一个结构体student,表示一个学生的信息。该结构体包含两个成员变量:name表示学生姓名,类型为字符数组,长度为 16;id表示学生学号,类型为字符数组,长度为 11。

然后程序读入了一个整数n,表示学生数量。接下来的n行每行输入一个字符串s,即学生姓名和学号,其中姓名和学号用一个空格分隔。程序将读入的学生信息存储在一个长度为n的结构体数组students中。

接着程序读入一个整数q,表示查询请求的数量。程序使用一个循环处理每个查询请求:首先读入一个字符串query,表示要查询的学号;然后在学生列表中查找该学号对应的姓名,并输出结果。如果在列表中没有找到对应的学号,则程序不会输出任何内容。

注意,在本程序中,我们使用了 C 语言标准库中的strcmp函数来比较两个字符串是否相等。该函数返回值为 0 表示两个字符串相等。

问题描述

本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n,代表链表的长度 接下来n个数ai,代表每个节点的内容

n与ai范围[1,100]
输出
一行和

样例

样例输入 Copy 3 1 2 3 样例输出 Copy 6


下面是一个实现题目要求的 C 语言函数sum的代码:

int sum(Lis head) { int sum = 0; Lis curr = head->next; while (curr != NULL) { sum += curr->v; curr = curr->next; } return sum; }

该函数计算以参数head所指向的链表头结点为头节点的链表中各个结点值的和,并将结果作为返回值返回。其中,参数head是一个指向链表头节点的指针,链表的每个节点由结构体lis表示,其中v成员变量存储该节点的值,next成员变量存储指向下一个节点的指针。

在代码中,我们首先将变量sum初始化为 0,然后从链表的第二个节点开始遍历整个链表。遍历过程中,对于每个节点,我们将其值加到sum中,然后继续遍历下一个节点。当遍历到链表尾部时,我们退出循环并返回sum

需要注意的是,在链表中,头结点本身不存储任何实际数据,仅用于标记链表的起始位置。因此,我们在遍历链表时应从头结点的next指针所指向的节点开始遍历。

问题描述

本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n,代表链表的长度 接下来n个数ai,代表每个节点的内容

n与ai范围[1,100]
输出
一行和

样例

样例输入 Copy 3 1 2 3 样例输出 Copy 6


下面是一个实现题目要求的 C 语言函数sum的代码:

int sum(Lis head) { int sum = 0; Lis curr = head->next; while (curr != NULL) { sum += curr->v; curr = curr->next; } return sum; }

该函数计算以参数head所指向的链表头结点为头节点的链表中各个结点值的和,并将结果作为返回值返回。其中,参数head是一个指向链表头节点的指针,链表的每个节点由结构体lis表示,其中v成员变量存储该节点的值,next成员变量存储指向下一个节点的指针。

在代码中,我们首先将变量sum初始化为 0,然后从链表的第二个节点开始遍历整个链表。遍历过程中,对于每个节点,我们将其值加到sum中,然后继续遍历下一个节点。当遍历到链表尾部时,我们退出循环并返回sum

需要注意的是,在链表中,头结点本身不存储任何实际数据,仅用于标记链表的起始位置。因此,我们在遍历链表时应从头结点的next指针所指向的节点开始遍历。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询