fqh666 发表于 2024-1-8 21:26

C语言数据结构作业求助😢

第一步就遇到了问题,头文件预编译?
有模版也抄不明白{:1_937:}
有没有大佬教一下
大学生什么都学,什么都学不会
过几天还要作小答辩{:1_924:}
C语言和没学一样{:1_923:}

fqh666 发表于 2024-1-8 21:42

第一次发帖,模板发下载链接了:'(weeqw
待会补个图

fqh666 发表于 2024-1-9 00:49

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
typedef int ElemType ;
typedef struct node
{    int id;
    int shuxue;
        int yingyu;
        int yuwen;
        int wuli;
        int huaxue;
        struct n0de *next;
} LinkList;//初始化单链表
void Initlist(LinkList*&L)
{
        L=(LinkList*)malloc(sizeof(LinkList));
        L->next+NULL;//创建头结点,其next域置为NULL
}
void print (char *str);//提示文字函数
{        printf(str);
}
void DispList(LinkList*L)//输出单链表
{
        LinkList *p=L->next;
        printf("<<<<<<<所以学生成绩>>>>>>>\n");
        if(p==NULL)
        {
                print("无学生数据!\n")
        }
        else
        {
                printf("学号\t数学\t英语\t语文\t物理\t化学\t总分\n");
                while(p!=NULL)
                {
                        printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p->id,
                                p->shuxue,p->yingyu,p->yuwen,p->wuli,p->huaxue,p->shuxue+p->yingyu+p->yuwen+p->wuli+p->huaxue);
                }
        }
        int ListInsert(LinkList*&L,int id,int math,int english,int chinese,int physics,int chemistry)//直接尾部插入元素
        {LinkList *p=L, *s;
        if (p==NULL)//未找到第i-1个结点
                return 0;
        else
        {
                s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*s
                s->shuxue=math;
                s->yingyu=english;
                s->yuwen=chinese;
                s->wuli=physics;
                s->huaxue=chemistry;
                s->next=p->next;
                p->next=s;//将*s插入到*p之后
                return 1;
        }
}
        int Search(LinkList *L, ElemType e)//搜索元素
        {
                LinkList *p=L->next;
                int n=1;
                while (p!=NULL&&p->id!=e)
                {
                        p=p->next;
                        n++;
                }
                if(p==NULL)
                        return(0);
                else
                        return(n);
        }
        int ListDelete(LinkList *L,ElemType e)//删除数据元素
        {
                int j=0;
                LinkList *p=L, *q;
                while(j<e-1&&p!=NULL)
                {
                        j++;
                        p=p->next;
                }
                if(p==NULL)//未找到第i-1个结点
                        return 0;
                else
                {
                        q=p->next;//q指向要删除的结点
                        if(q==NULL)
                                return 0;
                        p->next=q->next;//从单链表中删除*q结点
                        free(q);//释放*q结点
                        return 1;
                }
        }
        int check(int a)//检测是否为数字
        {
                if(a>0&&a<100000)
                        return 0;
                else
                        getchar();//清除缓冲区的内容
                        return 1;
        }
        void DestroyList(LinkList *&L)//销毁单链表
        {
                LinkList *p=L,*q=p->next;
                while (q!=NULL)
                {
                        free(p);
                        p=q;
                        q=p->next;
                }
                free(p);
        }
        void mian()//主函数入口
        {
                printf("\t***欢迎使用学生成绩管理系统***\n");
                LinkList *h;
                int e,i;
                int id,math,english,chinese,physics,chemistry;
                InitList(h);
ex1:printf("------------------------------\n");
        printf("\n\t *1录入成绩
                        \n\t *2浏览所有人成绩
                        \n\t *3根据学号查询成绩
                        \n\t *4删除学生成绩
                        \n\t *5退出程序\n")
        printf("请选择要进行的操作(填入序号<1-5>):");
        scanf("%d",&i);
        if(check(i))//check函数的调用
        {
                printf("输入错误值,请重新选择!\n");
                goto ex1;
        }
        printf("------------------------------\n");
        switch(i)
        {
case 1://录入
ex2:        printf("请输入学号")
ex3:        scanf("%d",&id);
       
        if(check(id)||search(h,id)!=0)
        {
                printf("当前输入学号已存在或输入的成绩中包含错误\n");
                printf("请重新输入学号");
                goto ex3;
        }
        printf("请输入成绩(每门成绩请用空格或回车隔开):\n数学 英语 语文 物理 化学\n");
ex4:scanf("%d%d%d%d%d",&math,&english,&chinese,&physics,&chemistry);
        if(check(math)||check(english)||check(chinese)||check(physics)||check(chemistry))//check函数的调用
        {
                printf("输入的成绩中包含错误值;\n");
                printf("请重新输入成绩(每门成绩请用空格或者回车隔开):\n 数学 英语 语文 物理 化学\n");
                goto ex4;
        }
        printf("确定输入录入!(1-是/其他数字-否):");
        scanf("%d",&i);
        if(i==1)
        {if(ListInsert(h,id,math,english,chinese,physics,chemistry)==1)
                {
                printf("录入成绩成功!");
                }
        }
        else
        {
                printf("录入成绩失败!");
                goto ex2;
        }
        goto ex1;
case 2://浏览
        DispList(h);
        goto ex1;
case 3://查找
ex5:        printf("请输入查询的学号:");
                scanf("%d",&e);
                if(check(id)==1||search(h,id)==0)
                {
                        printf("当前输入学号不存在或输入错误信息\n");
                        printf("请重新输入学号:");
                        scanf("%e",&math);
                        goto ex5;
                }
                Locate Elem(h,e);
                goto ex1;
case4://删除
ex6:        printf("请输入要删除的学号:");
                scanf("%d",&e);
                if(check(id)==1||search(h,id)==0);
                {
                        printf("请重新输入学号:");
                        goto ex6;
                }
                if(ListDelete(h,search(h,e))==1)
                {
                        printf("删除成功!\n");
                }
                else
                {
                        printf("删除失败!\n");
                }
                goto ex1;
        case 5:
                DestoryList(h);
                break;
                default;
                        goto ex1;
        }
}

fqh666 发表于 2024-1-9 00:52

fqh666 发表于 2024-1-9 00:49
#include "stdafx.h"
#include
#include


手机排版稍微有点乱{:1_924:}

陌上雨蓝 发表于 2024-1-9 08:18

fqh666 发表于 2024-1-9 00:52
手机排版稍微有点乱

大佬6啊!!

璐璐诺 发表于 2024-1-9 09:03

会用gpt也不至于这样

fqh666 发表于 2024-1-9 11:09

璐璐诺 发表于 2024-1-9 09:03
会用gpt也不至于这样

有什么好的推荐吗,国内的大部分稀烂

fqh666 发表于 2024-1-9 22:22

本帖最后由 fqh666 于 2024-1-9 22:34 编辑

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int id;
    int shuxue;
    int yingyu;
    int yuwen;
    int wuli;
    int huaxue;
    struct node *next;
} LinkList;

// 初始化单链表
void InitList(LinkList *&L)
{
    L = (LinkList *)malloc(sizeof(LinkList));
    L->next = NULL; // 创建头结点,其next域置为NULL
}

// 输出单链表
void DispList(LinkList *L)
{
    LinkList *p = L->next;
    printf("<<<<<<<所有学生成绩>>>>>>>\n");
    if (p == NULL)
    {
      printf("无学生数据!\n");
    }
    else
    {
      printf("学号\t数学\t英语\t语文\t物理\t化学\t总分\n");
      while (p != NULL)
      {
            printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n", p->id,
                   p->shuxue, p->yingyu, p->yuwen, p->wuli, p->huaxue, p->shuxue + p->yingyu + p->yuwen + p->wuli + p->huaxue);
            p = p->next;
      }
    }
}

// 直接尾部插入元素
int ListInsert(LinkList *&L, int id, int math, int english, int chinese, int physics, int chemistry)
{
    LinkList *p = L, *s;
    if (p == NULL) // 未找到第i-1个结点
      return 0;
    else
    {
      s = (LinkList *)malloc(sizeof(LinkList)); // 创建新结点*s
      s->id = id;
      s->shuxue = math;
      s->yingyu = english;
      s->yuwen = chinese;
      s->wuli = physics;
      s->huaxue = chemistry;
      s->next = p->next;
      p->next = s; // 将*s插入到*p之后
      return 1;
    }
}

// 搜索元素
int Search(LinkList *L, int e)
{
    LinkList *p = L->next;
    int n = 1;
    while (p != NULL && p->id != e)
    {
      p = p->next;
      n++;
    }
    if (p == NULL)
      return 0;
    else
      return n;
}

// 删除数据元素
int ListDelete(LinkList *L, int e)
{
    int j = 1; // 将j的初始值改为1
    LinkList *p = L, *q;
    while (j < e && p != NULL) // 修改循环条件
    {
      j++;
      p = p->next;
    }
    if (p == NULL) // 未找到第i-1个结点
      return 0;
    else
    {
      q = p->next;            // q指向要删除的结点
      if (q == NULL)
            return 0;
      p->next = q->next;      // 从单链表中删除*q结点
      free(q);                // 释放*q结点
      return 1;
    }
}

// 检测是否为数字
int check(int a)
{
    if (a > 0 && a < 100000)
      return 0;
    else
    {
      getchar(); // 清除缓冲区的内容
      return 1;
    }
}

// 销毁单链表
void DestroyList(LinkList *&L)
{
    LinkList *p = L, *q = p->next;
    while (q != NULL)
    {
      free(p);
      p = q;
      q = p->next;
    }
    free(p);
}

// 根据学号查询成绩
void LocateElem(LinkList *L, int e)
{
    LinkList *p = L->next;
    while (p != NULL && p->id != e)
    {
      p = p->next;
    }
    if (p == NULL)
    {
      printf("未找到该学号的成绩!\n");
    }
    else
    {
      printf("学号\t数学\t英语\t语文\t物理\t化学\t总分\n");
      printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n", p->id,
               p->shuxue, p->yingyu, p->yuwen, p->wuli, p->huaxue, p->shuxue + p->yingyu + p->yuwen + p->wuli + p->huaxue);
    }
}

// 主函数入口
int main()
{
    printf("\t***欢迎使用学生成绩管理系统***\n");
    LinkList *h;
    int e, i;
    int id, math, english, chinese, physics, chemistry;
    InitList(h);

ex1:
    printf("------------------------------------------------------------\n");
    printf("\n\t *1录入成绩\n\t *2浏览所有人成绩\n\t *3根据学号查询成绩\n\t *4删除学生成绩\n\t *5退出程序\n");
    printf("请选择要进行的操作(填入序号<1-5>): ");
    scanf("%d", &i);

    if (check(i)) // check函数的调用
    {
      printf("输入错误值,请重新选择!\n");
      goto ex1;
    }
    printf("------------------------------------------------------------\n");

    switch (i)
    {
    case 1: // 录入
    ex2:
      printf("请输入学号:");
    ex3:
      if (scanf("%d", &id) != 1) // 添加判断,检查输入是否为数字
      {
            printf("输入错误,请重新输入数字学号!\n");
            while (getchar() != '\n') // 清空输入缓冲区
                continue;
            goto ex3;
      }

      if (check(id) || Search(h, id) != 0)
      {
            printf("当前输入学号已存在或输入的成绩中包含错误\n");
            printf("请重新输入学号:");
            goto ex3;
      }

      printf("请输入成绩(每门成绩请用空格或回车隔开):\n数学 英语 语文 物理 化学\n");
    ex4:
      if (scanf("%d %d %d %d %d", &math, &english, &chinese, &physics, &chemistry) != 5) // 添加判断,检查输入是否为数字
      {
            printf("输入错误,请重新输入数字成绩!\n");
            while (getchar() != '\n') // 清空输入缓冲区
                continue;
            goto ex4;
      }

      if (check(math) || check(english) || check(chinese) || check(physics) || check(chemistry)) // check函数的调用
      {
            printf("输入的成绩中包含错误值;\n");
            printf("请重新输入成绩(每门成绩请用空格或者回车隔开):\n数学 英语 语文 物理 化学\n");
            goto ex4;
      }

      printf("确定输入录入!(1-是/其他数字-否):");
      scanf("%d", &i);

      if (i == 1)
      {
            if (ListInsert(h, id, math, english, chinese, physics, chemistry) == 1)
            {
                printf("录入成绩成功!\n");
            }
      }
      else
      {
            printf("录入成绩失败!\n");
            goto ex2;
      }
      goto ex1;

    case 2: // 浏览
      DispList(h);
      goto ex1;

    case 3: // 查找
    ex5:
      printf("请输入查询的学号:");
      if (scanf("%d", &e) != 1) // 添加判断,检查输入是否为数字
      {
            printf("输入错误,请重新输入数字学号!\n");
            while (getchar() != '\n') // 清空输入缓冲区
                continue;
            goto ex5;
      }

      if (check(id) == 1 || Search(h, id) == 0)
      {
            printf("当前输入学号不存在或输入错误信息\n");
            printf("请重新输入学号:");
            scanf("%d", &e);
            goto ex5;
      }

      LocateElem(h, e);
      goto ex1;

    case 4: // 删除
    ex6:
      printf("请输入要删除的学号:");
      if (scanf("%d", &e) != 1) // 添加判断,检查输入是否为数字
      {
            printf("输入错误,请重新输入数字学号!\n");
            while (getchar() != '\n') // 清空输入缓冲区
                continue;
            goto ex6;
      }

      if (check(id) == 1 || Search(h, id) == 0)
      {
            printf("请重新输入学号:");
            goto ex6;
      }

      if (ListDelete(h, e) == 1) // 修改此处的函数调用
      {
            printf("删除成功!\n");
      }
      else
      {
            printf("删除失败!\n");
      }
      goto ex1;

    case 5:
      DestroyList(h);
      return 0;

    default:
      goto ex1;
    }
}

fqh666 发表于 2024-1-9 22:23

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100

typedef char ElemType;

typedef struct
{
    ElemType data;
    int top;
} Sqstack;

void InitStack(Sqstack *&s)
{
    s = (Sqstack *)malloc(sizeof(Sqstack));
    s->top = -1;
}

void DestroyStack(Sqstack *&s)
{
    free(s);
}

bool StackEmpty(Sqstack *s)
{
    return (s->top == -1);
}

bool Push(Sqstack *&s, ElemType e)
{
    if (s->top == MAXSIZE - 1)
      return false;
    s->top++;
    s->data = e;
    return true;
}

bool Pop(Sqstack *&s, ElemType &e)
{
    if (s->top == -1)
      return false;
    e = s->data;
    s->top--;
    return true;
}

bool GetTop(Sqstack *s, ElemType &e)
{
    if (s->top == -1)
      return false;
    e = s->data;
    return true;
}

bool Match(char exp[], int n)
{
    Sqstack *Ls;
    InitStack(Ls);
    int i = 0;
    ElemType e;
    bool flag = true;
    while (i < n && flag)
    {
      if (exp == '[' || exp == '{')
            Push(Ls, exp);
      else if (exp == ')')
      {
            if (GetTop(Ls, e))
            {
                if (e == '(')
                  Pop(Ls, e);
                else
                  flag = false;
            }
            else
                flag = false;
      }
      else if (exp == '}')
      {
            if (GetTop(Ls, e))
            {
                if (e == '{')
                  Pop(Ls, e);
                else
                  flag = false;
            }
            else
                flag = false;
      }
      i++;
    }
    if (!StackEmpty(Ls))
      flag = false;
    DestroyStack(Ls);
    return flag;
}

int main()
{
    char exp;
    printf("please input a string: ");
    gets(exp);
    if (Match(exp, strlen(exp)))
      printf("表达式 %s 括号匹配\n", exp);
    else
      printf("表达式 %s 括号不匹配\n", exp);
    return 0;
}

fqh666 发表于 2024-1-9 22:41

后面就没管头文件了,就正常写了{:1_924:}
页: [1] 2
查看完整版本: C语言数据结构作业求助&#128546;