用c语言写出关键字查询学号,姓名,电话,基本信息的代码
时间: 2023-03-24 17:01:49 浏览: 131
很抱歉,我的回答只能用中文或英文进行,以下是用中文回答的:
如果您想用C语言编写一个关键字查找程序,可以使用以下代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char keyword[20];
printf("请输入要查找的关键字:");
scanf("%s", keyword);
if (strcmp(keyword, "学号") == 0) {
printf("您要查找的是学号。\n");
} else if (strcmp(keyword, "姓名") == 0) {
printf("您要查找的是姓名。\n");
} else if (strcmp(keyword, "电话") == 0) {
printf("您要查找的是电话。\n");
} else if (strcmp(keyword, "基本信息") == 0) {
printf("您要查找的是基本信息。\n");
} else {
printf("对不起,未找到您要查找的关键字。\n");
}
return 0;
}
```
这是一个简单的程序,它可以让用户输入关键字,然后查找关键字是否在程序中预先定义的关键字列表中出现。如果找到了关键字,则输出对应的信息,如果没有找到,则输出未找到的提示信息。您可以根据需要修改关键字列表和输出信息。
相关问题
设计一个算法并用c语言写出一个为宿舍管理人员的一个宿舍管理查询软件, 要求: A.采用交互工作方式 B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) ,查询菜单: (用二分查找实现以下操作) A.按姓名查询 B.按学号查询 C.按房号查询 ,打印任一查询结果(可以连续操作)
好的,这个题目比较综合,我们可以分步实现。首先需要设计数据结构,然后实现排序算法,最后实现查询功能。
数据结构设计:
我们可以设计一个结构体来存储每一个宿舍的信息,包括姓名、学号、房号等。然后我们再用一个数组来存储所有宿舍的信息。
```c
#define MAX_LENGTH 100
struct dormitory {
char name[MAX_LENGTH];
char id[MAX_LENGTH];
char room_number[MAX_LENGTH];
};
struct dormitory all_dormitories[MAX_LENGTH];
```
排序算法实现:
这里我们选择冒泡排序算法,按照宿舍的姓名、学号、房号进行排序。
```c
void bubble_sort(struct dormitory arr[], int n, int sort_by) {
int i, j;
struct dormitory temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (sort_by == 1) {
if (strcmp(arr[j].name, arr[j+1].name) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
} else if (sort_by == 2) {
if (strcmp(arr[j].id, arr[j+1].id) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
} else if (sort_by == 3) {
if (strcmp(arr[j].room_number, arr[j+1].room_number) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
```
查询功能实现:
这里我们选择二分查找算法,按照姓名、学号、房号进行查询。
```c
int binary_search(struct dormitory arr[], int n, char key[], int search_by) {
int left = 0, right = n-1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (search_by == 1) {
if (strcmp(arr[mid].name, key) == 0) {
return mid;
} else if (strcmp(arr[mid].name, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 2) {
if (strcmp(arr[mid].id, key) == 0) {
return mid;
} else if (strcmp(arr[mid].id, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 3) {
if (strcmp(arr[mid].room_number, key) == 0) {
return mid;
} else if (strcmp(arr[mid].room_number, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
```
完整代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
struct dormitory {
char name[MAX_LENGTH];
char id[MAX_LENGTH];
char room_number[MAX_LENGTH];
};
struct dormitory all_dormitories[MAX_LENGTH];
void bubble_sort(struct dormitory arr[], int n, int sort_by) {
int i, j;
struct dormitory temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (sort_by == 1) {
if (strcmp(arr[j].name, arr[j+1].name) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
} else if (sort_by == 2) {
if (strcmp(arr[j].id, arr[j+1].id) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
} else if (sort_by == 3) {
if (strcmp(arr[j].room_number, arr[j+1].room_number) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
int binary_search(struct dormitory arr[], int n, char key[], int search_by) {
int left = 0, right = n-1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (search_by == 1) {
if (strcmp(arr[mid].name, key) == 0) {
return mid;
} else if (strcmp(arr[mid].name, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 2) {
if (strcmp(arr[mid].id, key) == 0) {
return mid;
} else if (strcmp(arr[mid].id, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 3) {
if (strcmp(arr[mid].room_number, key) == 0) {
return mid;
} else if (strcmp(arr[mid].room_number, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
int main() {
int n, i, sort_by, search_by, result_index;
char key[MAX_LENGTH];
printf("请输入宿舍数量:");
scanf("%d", &n);
printf("请依次输入每个宿舍的信息(姓名、学号、房号):\n");
for (i = 0; i < n; i++) {
scanf("%s %s %s", all_dormitories[i].name, all_dormitories[i].id, all_dormitories[i].room_number);
}
printf("请选择排序方式:\n");
printf("1.按姓名排序\n");
printf("2.按学号排序\n");
printf("3.按房号排序\n");
scanf("%d", &sort_by);
bubble_sort(all_dormitories, n, sort_by);
printf("排序后的宿舍信息如下:\n");
for (i = 0; i < n; i++) {
printf("%s %s %s\n", all_dormitories[i].name, all_dormitories[i].id, all_dormitories[i].room_number);
}
while (1) {
printf("请选择查询方式:\n");
printf("1.按姓名查询\n");
printf("2.按学号查询\n");
printf("3.按房号查询\n");
scanf("%d", &search_by);
printf("请输入要查询的关键字:");
scanf("%s", key);
result_index = binary_search(all_dormitories, n, key, search_by);
if (result_index == -1) {
printf("没有找到匹配结果。\n");
} else {
printf("查询结果如下:\n");
printf("%s %s %s\n", all_dormitories[result_index].name, all_dormitories[result_index].id, all_dormitories[result_index].room_number);
}
printf("是否继续查询?(1-是,0-否)");
scanf("%d", &i);
if (i == 0) {
break;
}
}
return 0;
}
```
用c语言写一个代码实现针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序,并分析平均查找长度(姓名以汉语拼音形式,待填入哈希表的人名不低于30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。)
好的,以下是我给你提供的代码,其中包含了哈希表的建立、查找和哈希函数的设计。在本代码中,我使用的是链地址法处理哈希冲突。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HASHSIZE 101 //哈希表长度,选择一个大质数
struct student {
char name[20];
int id;
char phone[12];
struct student *next;
};
struct student *hashtable[HASHSIZE];
int hash(char *name) //哈希函数,将姓名转化为数字
{
unsigned int hashval = 0;
while (*name != '\0')
hashval = *name++ + hashval * 31;
return hashval % HASHSIZE;
}
void insert(struct student *newstu) //向哈希表中插入新学生信息
{
int index = hash(newstu->name);
newstu->next = hashtable[index];
hashtable[index] = newstu;
}
void search(char *name) //按姓名查找学生信息
{
int index = hash(name);
struct student *p = hashtable[index];
int count = 0;
while (p != NULL) {
count++;
if (strcmp(p->name, name) == 0) {
printf("学生姓名:%s 学号:%d 电话号码:%s\n", p->name, p->id, p->phone);
printf("比较次数:%d\n", count);
return;
}
p = p->next;
}
printf("找不到该学生信息!\n");
}
int main()
{
int i;
char name[20], phone[12];
struct student *newstu;
//手动输入学生信息,也可以读取文件或从数据库中获取
for (i = 0; i < 30; i++) {
newstu = (struct student *)malloc(sizeof(struct student));
printf("请输入第%d个学生的姓名、学号和电话号码:", i + 1);
scanf("%s%d%s", newstu->name, &newstu->id, newstu->phone);
insert(newstu);
}
//按姓名查找学生信息
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search(name);
return 0;
}
```
在上面的代码中,我们定义了一个结构体`student`,包含了学生的姓名、学号和电话号码等信息,同时也定义了`hashtable`哈希表数组。在`insert`函数中,我们将新学生信息插入到哈希表中,如果出现哈希冲突,我们使用链地址法将新学生信息挂在冲突的链表后面。在`search`函数中,我们按照哈希函数计算出学生姓名对应的哈希值,然后在哈希表中查找该学生信息,如果找到则输出学生信息和比较次数,否则输出“找不到该学生信息!”。
最后,我们可以在`main`函数中手动输入学生信息,也可以从文件或数据库中读取,然后按照学生姓名查找学生信息。在查找的过程中,我们可以通过输出比较次数来分析平均查找长度。
阅读全文