c语言单链表输出学生学号成绩
① C语言问题:建立一个由3个学生数据组成的单向动态链表,向每个结点输入学生的数据(学号姓名成绩)逐个输出
struct student*head,*p,*s;
head=p=(struct student*)malloc(LEN);
scanf("%d,%f,&p->num,&p->score");
p= (struct student*)malloc(LEn);
scanf ("%d,%f,&p->num,&p->score");
s= (struct student*)malloc(LEn);
scanf ("%d,%f,&p->num,&p->score"); ------------------>第一个错误,p应该为专s
head->next=p;
head->next=s; ------------------>第二个属错误,head应该为p
② c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)
#include<iostream>
using namespace std;
struct stu{
char name[20];
int num;
int age;
char sex;
int grade;
struct stu *next;
};
struct stu *mythis,*mynew;
void newrecord(struct stu *head)
{
mythis=head->next;
while(mythis!=NULL)
mythis=mythis->next;
mynew=(struct stu *)malloc(sizeof(struct stu));
cin>>mynew->name>>mynew->num>>mynew->age>>mynew->sex>>mynew->grade;
mynew->next=NULL;
if(mythis==NULL)
{
mythis=(struct stu *)malloc(sizeof(struct stu));
mythis=mynew;
}
}
void listall(stu *head)
{
mythis=head->next;
while(mythis!=NULL)
{
cout<<mythis->name<<mythis->num<<mythis->age<<mythis->sex<<mythis->grade;
mythis=mythis->next;
}
}
int main()
{
char decide;
struct stu *head;
head=(struct stu *)malloc(sizeof(struct stu));
head->next=NULL;
while(1)
{
cout<<"Please input decide:"<<endl;
cin>>decide;
if(decide=='n')
newrecord(head);
else
if(decide=='1')
listall(head);
else
return 0;
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
③ C语言:一个简单的学生成绩系统,用的是链表。能输出数据但是会提示停止工作,求指点
你在每个(struct Student *)malloc(LEN);后加一句:p1->next = NULL;
另提醒,别忘了释放分配的内存。
④ C语言,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。
首先,scanf("%d%s%d",&num,name,&score[i]); 每个百分号用空格或者逗号隔开,系统不会给你区别你现在输入的是字符串还是数字,你的%s%d,假设你输入是的qwe123,只会认为你qwe123是一个字符串,而不是qwe 是字符串,123是分数,这能解决你运行不过去的问题,至于结果,你的算法有问题,自己再改改
⑤ 用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩
/*
用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩
*/
//FileName: stuinfo.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SERIALLEN 20
#define COURSENUM 3
typedef struct
{
char course[SERIALLEN];
float score;
}_courseInfo;
typedef struct _stuinfo
{
char serial[SERIALLEN];
char name[SERIALLEN];
char sex[SERIALLEN];
_courseInfo courseInfo[COURSENUM];
struct _stuinfo *next;
}stuinfo;
int main(int argc, char **argv)
{
stuinfo *head=NULL,*ptr=NULL,*s=NULL;
char str[SERIALLEN];
int cycle=1;
int i=0;
memset(str,0,SERIALLEN);
printf("建立学生信息:\n");
head=(stuinfo *)calloc(1,sizeof(stuinfo));
if(!head)
{
perror("申请空间失败,没有足够内存。");
return -1;
}
ptr=head;
while(cycle)
{
puts("输入学生学号(0退出):");
scanf("%s",str);
if(strcmp(str,"0")) //如果学号为0,则退出链表的创建
{
s=(stuinfo *)calloc(1,sizeof(stuinfo));
if(!ptr)
{
perror("申请空间失败,没有足够内存。");
return -1;
}
memset(s->serial,0,SERIALLEN);
strcpy(s->serial,str);
memset(s->name,0,SERIALLEN);
puts("输入姓名:");
scanf("%s",s->name);
memset(s->sex,0,SERIALLEN);
puts("输入性别:");
scanf("%s",s->sex);
for(i=0;i<COURSENUM;i++)
{
memset(s->courseInfo[i].course,0,SERIALLEN);
puts("输入课程名称:");
scanf("%s",s->courseInfo[i].course);
s->courseInfo[i].score=0.0f;
puts("输入课程分数:");
scanf("%f",&(s->courseInfo[i].score));
}
ptr->next=s;
ptr=s;
}
else cycle=0;
}
ptr->next=NULL;
ptr=head;
head=head->next;
free(ptr);
//head=linkSort(head);
ptr=head;
printf("学号\t姓名\t性别");
for(i=0;i<COURSENUM;i++)
printf("\t课程[%d]",i);
printf("\n");
while(ptr!=NULL)
{
printf("%s\t%s\t%s",ptr->serial,ptr->name,ptr->sex);
for(i=0;i<COURSENUM;i++)
printf("\t%s[%.2f]",ptr->courseInfo[i].course,ptr->courseInfo[i].score);
printf("\n");
ptr=ptr->next;
}
return 0;
}
C:\mypro>gcc -g -Wall student.c -o student
C:\mypro>student
建立学生信息:
输入学生学号(0退出):
007
输入姓名:
zxsh
输入性别:
male
输入课程名称:
chinese
输入课程分数:
99
输入课程名称:
phy
输入课程分数:
100
输入课程名称:
english
输入课程分数:
98
输入学生学号(0退出):
002
输入姓名:
pipal
输入性别:
female
输入课程名称:
chem
输入课程分数:
98
输入课程名称:
math
输入课程分数:
97
输入课程名称:
chinese
输入课程分数:
100
输入学生学号(0退出):
0
学号 姓名 性别 课程[0] 课程[1] 课程[2]
007 zxsh male chinese[99.00] phy[100.00] english[98.00]
002 pipal female chem[98.00] math[97.00] chinese[100.00]
C:\mypro>
⑥ c语言写的链表,创建链表输入学生的学号,名字,分数,编译不正确,哪里需要改
#include<stdlib.h>
#include<stdio.h>
typedef struct student{
int number; //学号
char name[50]; //姓名
float score; //分数
}STU;
//typedef STU ElemType; //指定元素类型为学生
typedef struct _LNode{
STU data;
struct LNode *next;
} LNode; //单链表类型定义
LNode * Initiate_LinkList() //初始化
{
LNode * pHead;
pHead = (LNode *)malloc(sizeof (LNode)); //产生一个头结点
pHead->next = NULL; //设置后继指针为空
return (pHead);
}
int Length_LinkList(LNode *L)//返回表中元素的个数
{
LNode *p; int j = 0;
p = L->next;
while (p)
{
j++;
p = p->next;
}
return j;
}
//查找值为x的元素,返回它的地址,若无则返回NULL
LNode* Locate(LNode* L, int x)
{
LNode *p = L->next;
while (p != NULL && p->data.number != x)
{
p = p->next;
}
return p;
}
//创建链表(头插法)
void CreateLinkList(LNode* L)
{
LNode *s; int x;
L = (LNode*)malloc(sizeof(LNode)); //做头节点
L->next = s;
if (!L){ printf("\n-----初始化失败!\n"); return; }
printf("\n-----初始化成功!\n输入学号的值(以-1结束):\n");
scanf("%d", &x);
while (x != -1) {
s = (LNode*)malloc(sizeof(LNode));
s->data.number=x;
printf("输入学生的名字:\n");
scanf("%s", s->data.name);
printf("输入学生的分数:\n");
scanf("%f", &s->data.score);
s->next = s;
printf("输入学生的学号:\n");
scanf("%d", &s->data.number);//输入下一个值
}
}
这个是给你改的。不过我建议用下面规范的代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Student
{
int id;
struct Student *next;
}Stu;
//创建链表,遇到输入-1停止
Stu* SList_Creat()
{
Stu *pHead = NULL, *pM = NULL, *pCur = NULL;
int id = 0;
pHead = (Stu *)malloc(sizeof(Stu));
pHead->id = 0;
pHead->next = NULL;
printf("Please enter ID of students, -1 quit: ");
scanf("%d",&id);
if (id == -1)
{
return NULL;
}
pCur = pHead;
while (id != -1)
{
pM = (Stu *)malloc(sizeof(Stu));
pM->id = id;
pM->next = NULL;
pCur->next = pM;
pCur = pM;
printf("Please enter ID of students, -1 quit: ");
scanf("%d", &id);
}
return pHead;
}
//打印链表
int SList_Print(Stu* pHead)
{
int ret = 0;
if (pHead == NULL)
{
ret = -1;
printf("Fuc SList_Print()Err:%d", ret);
return ret;
}
Stu *pCur = NULL;
pCur = pHead->next;
printf("************Begin************\n");
while (pCur)
{
printf("%d\n", pCur->id);
pCur = pCur->next;
}
printf("*************End*************\n");
return ret;
}
//找到结点x并在x之前插入节点y
//如果找不到结点x,则把结点y插入到链表尾部
int SList_NodeInsert(Stu *pHead, int x, int y)
{
int ret = 0;
if (pHead == NULL)
{
ret = -1;
printf("Fuc SList_NodeInsert()Err:%d", ret);
return ret;
}
Stu *pCur = NULL, *pPre = NULL, *pM = NULL;
pPre = pHead;
pCur = pPre->next;
while (pCur)
{
if (pCur->id == x)
{
break;
}
pPre = pCur;
pCur = pCur->next;
}
pM = (Stu *)malloc(sizeof(Stu));
pM->id = y;
pM->next = pCur;
pPre->next = pM;
return ret;
}
//删除x结点
int SList_NodeDel(Stu *pHead, int x)
{
int ret = 0;
Stu *pPre = NULL, *pCur = NULL;
if (pHead == NULL)
{
ret = -1;
printf("Fuc SList_NodeDel()Err:%d", ret);
return ret;
}
pPre = pHead;
pCur = pPre->next;
while (pCur)
{
if (pCur->id == x)
{
break;
}
pPre = pCur;
pCur = pCur->next;
}
if (pCur == NULL)
{
ret = -2;
printf("\n没有找到结点x:%d\n", x);
return ret;
}
pPre->next = pCur->next;
free(pCur);
return ret;
}
//销毁链表
int SList_Destroy(Stu *pHead)
{
int ret = 0;
if (pHead == NULL)
{
ret = -1;
printf("Fuc SList_Destroy()Err:%d", ret);
return ret;
}
Stu *pCur = NULL,*p = NULL;
pCur = pHead;
while (pCur)
{
p = pCur->next;
free(pCur);
pCur = p;
}
return ret;
}
int SList_Reverse(Stu *pHead)
{
int ret = 0;
if (pHead == NULL)
{
ret = -1;
printf("Func SList_Reverse() Err: %d", ret);
return -1;
}
//如果没有业务结点或者只有一个业务结点,则没有必要逆置
if (pHead->next == NULL || pHead->next->next == NULL)
{
return ret;
}
//环境准备
Stu * pPre = NULL, *pCur = NULL, *tTmp = NULL;
pPre = pHead->next;
pCur = pHead->next->next;
while (pCur != NULL)
{
//1.缓存后链
tTmp = pCur->next;
//2.开始逆置
pCur->next = pPre;
//3.后移
pPre = pCur;
pCur = tTmp;
}
//处理尾结点
pHead->next->next = NULL;
//处理头结点
pHead->next = pPre;
return ret;
}
void main()
{
Stu *pHead = NULL;
int ret = 0;
pHead = SList_Creat();
ret = SList_Print(pHead);
printf("\n在20前面插入19\n");
ret = SList_NodeInsert(pHead, 20, 19);
ret = SList_Print(pHead);
printf("\n删除19\n");
ret = SList_NodeDel(pHead, 19);
ret = SList_Print(pHead);
printf("\n结点逆置后:\n");
ret = SList_Reverse(pHead);
ret = SList_Print(pHead);
ret = SList_Destroy(pHead);
system("pause");
}
⑦ c语言:写一个程序建立一个含有学生(学号成绩)数据的单向动态链表(我是个初学者希望可以解释清楚点)
1.n的存在没必要,直接在循环外面将head指向p1
2.新建节点顺序错误。你应该先用p2=malloc(…)分配空间,然后输入数据,最后将p1的next指向p2,最后令p1=p2就行了。之后进行循环
⑧ C语言编程,输入一个学生的姓名、学号、英语、数学、计算机成绩,输出学生姓名、学号和平均成绩
#include<stdio.h>
#include<string.h>
voidmain()
{
charname[20],number[20];
floatmath,english,computer;
doubleaver;
printf("Pleaseinputstudent'sname:");
gets(name);;
printf("Pleaseinputstudent'snumber:");
gets(number);
printf("Pleaseinputstudent'sEnglishscore:");
scanf("%f",&english);
printf("Pleaseinputstudent'sMathscore:");
scanf("%f",&math);
printf("Pleaseinputstudent'sComputerscore:");
scanf("%f",&computer);
aver=(english+math+computer)/3;
printf("Name:%s ",name);
printf("Number:%s ",number);
printf("Score:%5.2f ",aver);
}
输入:
Pleaseinputstudent'sname:Lihua
Pleaseinputstudent'snumber:123456789
Pleaseinputstudent'sEnglishscore:80.5
Pleaseinputstudent'sMathscore:91
Pleaseinputstudent'sComputerscore:89.5
输出:
Name:Lihua
NUmber:123456789
Score:87.00