C语言必会100题(15)。输出5个学生的数据记录/创建一个链表/反向输出一个链表/连接两个链表/放松一下
特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。
71,输出5个学生的数据记录
- 题目:编写input()和output()函数输入,输出5个学生的数据记录。
- 要求:使用数组和结构体进行编写
- 程序源代码:
#include <stdio.h> #define N 5 void input(); void print(); struct student { char num[6]; char name[8]; int score[4]; }stu[N]; int main() { input(); print(); return 0; } void input() { struct student stu[N]; int i, j; for(i = 0; i < N; i++) { printf("please input %d of %d\n", i+1, N); printf("num(学号): "); scanf("%s", stu[i].num); printf("name(名字): "); scanf("%s", stu[i].name); for(j = 0 ; j < 3; j++) { printf("score %d.(第%d科分数)", j + 1, j + 1); scanf("%d", &stu[i].score[j]); } printf("\n"); } } void print() { struct student stu[N]; int i, j; printf("\nNo. Name Sco1 Sco2 Sco3\n"); for(i = 0; i < N; i++) { printf("%-6s%-10s", stu[i].num, stu[i].name); for(j = 0; j < 3; j++) { printf("%-8d", stu[i].score[j]); } printf("\n"); } }
72,创建一个链表
- 题目:创建一个链表,输入5个数字,再使用链表打印输出。
- 程序源代码:
#include <stdio.h> #include <stdlib.h> struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; int main() { link ptr, head; int num, i; // malloc申请函数,申请动态内存 // void* malloc(unsigned size);其中,size为申请的总字节大小。 // malloc()函数返回的是一个无类型的指针(void *),所以可以根据程序的需要来对其进行强转。 ptr = (link)malloc(sizeof(node)); head = (link)malloc(sizeof(node)); ptr = head; printf("please input 5 numbers==>\n"); for(i = 0; i <= 4; i++) { scanf("%d", &num); ptr -> data = num; ptr -> next = (link)malloc(sizeof(node)); if(i == 4) { ptr -> next = NULL; } else { ptr = ptr -> next; } } ptr = head; while(ptr != NULL) { printf("The value is ==>%d\n", ptr -> data); ptr = ptr -> next; } return 0; }
73,反向输出一个链表
- 题目:创建一个链表,输入5个数字,再使用链表反向输出。
- 程序源代码:
#include <stdio.h> #include <stdlib.h> typedef struct list { int data; struct list *next; }node, *link; /* // 等价于: struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; */ int main() { link ptr, head, tail; int num, i; tail = (link)malloc(sizeof(node)); ptr = (link)malloc(sizeof(node)); tail -> next = NULL; ptr = tail; printf("please input 5 data==>\n"); for(i = 0; i <= 4; i++) { scanf("%d", &num); ptr -> data = num; head = (link)malloc(sizeof(node)); head -> next = ptr; ptr = head; } ptr = ptr -> next; while(ptr != NULL) { printf("The value is ==>%d\n", ptr -> data); ptr = ptr -> next; } return 0; }
74,连接两个链表
- 题目:创建两个数组并赋值,分别创建两个链表指向两个数组,连接两个链表。
- 程序源代码:
include <stdio.h> #include <stdlib.h> typedef struct list { int data; struct list *next; }node, *link; link create_list(int array[], int num); link connect_list(link pointer1, link pointer2); int main(void) { int array1[5] = {1, 2, 3, 4, 5}; int array2[5] = {6, 7, 8, 9, 10}; link ptr, ptr1, ptr2; ptr1 = create_list(array1, 5); ptr2 = create_list(array2, 5); ptr = connect_list(ptr1, ptr2); printf("连接后的链表为:\n"); while (ptr -> next) { printf("%d ", ptr -> data); ptr = ptr -> next; } printf("%d\n", ptr -> data); getchar(); return 0; } link create_list(int array[], int num) { link tmp1, tmp2, pointer; int i; pointer = (link)malloc(sizeof(node)); pointer -> data = array[0]; tmp1 = pointer; for(i = 1; i < num; i++) { tmp2 = (link)malloc(sizeof(node)); tmp2 -> next = NULL; tmp2 -> data = array[i]; tmp1 -> next = tmp2; tmp1 = tmp1 -> next; } return pointer; } link connect_list(link pointer1, link pointer2) { link tmp; tmp = pointer1; while(tmp -> next != NULL) { tmp = tmp -> next; } tmp -> next = pointer2; return pointer1; }
75,放松一下
- 题目:无
- 要求:读懂下面代码,并重写背打一份源代码。
-
#include <stdio.h> int main(void) { int i, n; for(i = 1; i < 5; i++) { n = 0; if(i != 1) n = n + 1; if(i == 3) n = n + 1; if(i == 4) n = n + 1; if(i != 4) n = n + 1; if(n == 3) printf("%c", 64 + i); } return 0; }