一道c语言题目?

用数组似乎好做,但是不能用啊n为输入的变量,求大神解答... 用数组似乎好做,但是不能用啊n为输入的变量,求大神解答 展开
 我来答
匿名用户
2020-11-10
展开全部

#include <stdlib.h>
#include <stdio.h>
struct link *AppendNode (struct link *head);

struct link
{
int stu_id;
int data;
struct link *next;
};

struct link* sort(struct link* list)               //冒泡排序,
{
struct link *p, *q;
int temp1,i;
long temp2;
for (p = list, i =1;p->next != NULL;i++,p=p->next)
for (q = p->next;q!= NULL;q=q->next)
if (p->data < q->data)
{
temp1 = p->data;
p->data = q->data;
q->data = temp1;
temp2 = p->stu_id;
p->stu_id = q->stu_id;
q->stu_id = temp2;
}
return list;
}

int main(void)
{
int i = 0;
int num;
struct link *head = NULL;    //链表头指针
printf("输入要录入学生的个数");
scanf_s("%d", &num);
while (num > 0)
{
head = AppendNode(head);//向head为头指针的链表末尾添加节点
num--;
}
sort(head);
printf("最高分数:%d   %d\n",head->stu_id,head->data);
getchar();
getchar();
return 0;
}
/* 函数功能:新建一个节点并添加到链表末尾,返回添加节点后的链表的头指针 */
struct link *AppendNode(struct link *head)
{
struct link *p = NULL, *pr = head;
int data;
int stu_id;
p = (struct link *)malloc(sizeof(struct link));//让p指向新建的节点
if (p == NULL)        //若新建节点申请内存失败,则退出程序
{
printf("No enough memory to allocate\n");
exit(0);
}
if (head == NULL)    //若原链表为空表
{
head = p;        //将新建节点置为头节点
}
else                //若原链表为非空,则将新建节点添加到表尾
{
while (pr->next != NULL)//若未到表尾,则移动pr直到pr指向表尾
{
pr = pr->next;        //让pr指向下一个节点
}
pr->next = p;            //让末节点的指针指向新建的节点
}
printf("输入学号:\n");
scanf_s("%d", &stu_id); //输入节点数据
p->stu_id = stu_id;
printf("输入分数:\n");
scanf_s("%d", &data); //输入节点数据
while (data>100 || data <0)
{
printf("输入非法!");
printf("请继续输入:");
scanf_s("%d", &data); //输入节点数据
}
p->data = data;        //将新建节点的数据域赋值为输入的节点数据值
p->next = NULL;        //将新建的节点置为表尾
return head;        //返回添加节点后的链表的头指针
}

运行结果如下:

追问
老哥强啊,可是现在我只学了c语言啊
采纳了吧
我是金牛座echo
2020-11-10
知道答主
回答量:5
采纳率:0%
帮助的人:2574
展开全部
Java
paint“(hello
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友19bf92e
2020-11-10
知道答主
回答量:16
采纳率:0%
帮助的人:8561
展开全部
你代替一个数就行了
追问
说详细一点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小黑哎啊
科技发烧友

2020-11-11 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1642
采纳率:74%
帮助的人:359万
展开全部

#include<stdio.h>

#include<stdlib.h>//头文件 

#include <time.h>//头文件 

int main()

{

int a[111],b[100],c[111],n,m,k=0,t,l=0,s;

scanf("%d%d",&n,&m);

    srand((unsigned)time(NULL));//srand()就是给rand()提供种子

    for(int i=0;i<50;i++)

    {

        a[i]=rand()%101;//对101取余; 

    }

for(int i=0;i<50;i++)

{

if(a[i]>n&&a[i]<=m)

{

c[l++]=a[i];//这个供冒泡排序用; 

b[k++]=a[i];//这个供选择排序用; 

printf("%d ",a[i]);//未排序前的序列; 

}

printf("\n");

for(int i=0;i<k-1;i++)//选择排序 

{

for(int j=i+1;j<k;j++)

{

if(b[i]>b[j])

{

t=b[i];

b[i]=b[j];

b[j]=t;

}

}

}

for(int i=0;i<l;i++)//冒泡排序 

{

for(int j=0;j<l-i-1;j++)

{

if(c[j]>c[j+1])

{

s=c[j];

c[j]=c[j+1];

c[j+1]=s;

}

}

}

for(int i=0;i<k;i++)

{

printf("%d ",b[i]);

}

printf("\n");

for(int i=0;i<l;i++)

{

printf("%d ",c[i]);

    return 0;

}

根据你给的信息,代码大致就是这样;可能有些瑕疵,你再根据原题修改一下;希望能帮到你,望采纳;

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式