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;
    }
    

      

    程序源代码 
posted @ 2022-03-20 22:22  炸天帮帮主  阅读(97)  评论(0编辑  收藏  举报