Ⅰ 在c语言程序中 ,用链表形式输入和输出学生信息,求年龄平均值
#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
//#include <math.h>
struct student
{
int num;
char name[10];
int age;
struct student *next;
} Mystu;
int n;
struct student *input()
{
int i;
struct student *head=NULL,*p=NULL,*q=NULL;
for(i=0;i<n;i++)
{
//从键盘上输入学生信息
q=p;//保存前一个元素的地址
p=(struct student *)malloc(sizeof(struct student));
printf("第%d个学生的信息(包括学号、名字、年龄): ",i+1);
scanf("%d %s %d",&p->num,p->name,&p->age);
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
}
return head;
}
void average(struct student *head)
{
double agev=0.0;
struct student *p=NULL;
p=head;
while(p!=NULL)
{
agev=agev+p->age; //求总年龄
p=p->next;
}
printf("平均年龄=%2.2f ",agev/n); //求出平均年龄
}
void output(struct student *head)
{
struct student *p=NULL;
p=head;
printf("No. name age ");
while(p!=NULL)
{
printf("%-6d %s %4d ",p->num,p->name,p->age);
p=p->next;
}
}
void Destroy(struct student **head)
{
struct student *tmp;
tmp = *head;
while(*head)
{
tmp = (*head)->next;
printf("destroy:%p ", *head);
free(*head);
*head=tmp;
}
}
int main()
{
struct student *head=NULL;
printf("please input student number(n): ");
scanf("%d",&n);
head=input();
printf("main:%p ", head);
average(head);
output(head);
Destroy(&head);
return 0;
}
修改了一下
voidaverage(structstudent*head)
和主函数中的调用
另外增加了动态内存的释放,不释放会造成内存泄露的!!
Ⅱ 链表——学生信息——C语言
1.LinkNode L 指针的指针 L存储着一个地址, L指向该地址,被指向的地址中又存储着一个地址,*L指向LinkNode。
2.在case 中定义变量时候,如果报错,可以在定义变量的语句前面添加一个空语句。
Ⅲ C语言链表学生信息输入
scanf("%c",&x);
你输入的时候,肯定是按个y再按个回车,这样下一轮循环时就会读入回车字符了。
可以改成
scanf("%c%*c",&x);
Ⅳ C语言:链表,录入学生信息:学号、姓名、性别、年龄、宿舍号码、电话号码。保存在文件里。这个哪里错了
新建链表里面有一个很明显的错误,fscanf的name参数输出格式不应该为%c,而应该是%s
Ⅳ c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)
代码如下:
/*用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,学号,姓名,成绩(实现添加,删除,查询,排序,平均)*/
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
const int n=5;
/*
* nodeEntry : 节点数据类型
* nodeADT : 节点结构
* linkADT : 链表结构
*/
typedef struct Student
{
int num;
char name[30];
char sex;
float score1;//语文
float score2;//数学
float score3;//英语
//struct Student *next;
}Student;
typedef struct linkCDT {
nodeADT head;
}*linkADT;
/*
* InitLink : 初始化链表
* CreateNode : 创建节点
* AppendLink : 添加数据
*/
nodeADT CreateNode(Student entry) {
nodeADT p=(nodeADT)malloc(sizeof*p);
p->entry=entry,p->next=0;
return p;
}
/*
SortLink : 排序链表
//按学号排序
void SortLinkID(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.num>=p->entry.num)
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
//按英语成绩排序
void SortLinkEnglish(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.score3>=p->entry.score3)
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
}
//按姓名的字典序进行排序
void SortLinkName(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (pHead->entry.name[0]>=p->entry.name[0])
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
}
//按姓名的长度进行排序
void SortLinkNameLength(linkADT link) {
nodeADT pHead,pRear,p,tp;
if (!link) return;
for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)
if (strlen(pHead->entry.name)>=strlen(p->entry.name))
tp->next=p->next,p->next=pHead,pHead=p,p=tp;
if (!pRear) link->head=pHead;
else pRear->next=pHead;
pRear=pHead;
}
循环链表是与单链表一样
是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。
循环链表的运算与单链表的运算基本一致。所不同的有以下几点:
1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。
2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。
以上内容参考:网络-链表
Ⅵ 用C语言编写一个程序:用链表输入很多和学生的信息,要求实现增、删和查等功能
仅仅给你实现一个最基本的链表和功能,许多细节你自己添加,比如没有判断有没有重复的学生信息输入,如id重复。
还有删除是依靠姓名删除的,因为你的题目含糊不清,很多学生的信息具体是什么你也没有给出,只能给你个最基本的studentid 如果还有学科成绩什么的 自己在结构体中添加吧
后面你自己改了 最基本的给你写好
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<malloc.h>
typedef struct student student;
struct student{
int sid;//student id
char sname[30];
struct student *next;
};
//链表
student *linklist;
int len;
void init_linklist()
{
linklist=NULL;
len=0;
}
bool addstudent(int studentid,char *name)
{
student *p;
p=(student*)malloc(sizeof(student));
strcpy(p->sname,name);
p->sid=studentid;
len++;
p->next=linklist;
linklist=p;
return 1;
}
bool removestudent(char *name)
{
student *p=linklist;
student *tmp=p;
while(p!=NULL&&strcmp(p->sname,name)!=0)
{
tmp=p;
p=p->next;
}
if(p==NULL)//no find
return 0;
if(tmp==p)//说明是表头
{
linklist=p->next;
free(p);
len--;
return 1;
}
//非表头
tmp->next=p->next;
free(p);
len--;
return 1;
}
student* findstudent(char *name)
{
student *p=linklist;
while(p!=NULL&&strcmp(p->sname,name)!=0)
p=p->next;
if(p==NULL)
return 0;
else
return p;
}
void printlist()
{
student *p=linklist;
while(p!=NULL)
{
printf("name:%s studentID:%d\n",p->sname,p->sid);
p=p->next;
}
}
int main(void)
{
init_linklist();
addstudent(111,"limin");
addstudent(222,"xiaoc");
printlist();
removestudent("xiaoc");
printlist();
char na[30];
int si;
printf("input the student you want to add:\n");
scanf("%s %d",na,&si);
addstudent(si,na);
printlist();
return 0;
}
Ⅶ c语言用链表添加学生信息
#include<stdio.h>
#include<string.h>
#include"stdlib.h"
#defineLENsizeof(structstu)
structstu
{
longnum;
charname[20];
charsex;
intage;
charaddr[30];
structstu*next;
};
intmain()
{
intn;
structstu*head;
structstu*p1,*p2;
head=(structstu*)malloc(LEN);
head->next=NULL;
p1=head;
p2=(structstu*)malloc(LEN);
p2->next=NULL;
printf("学号 姓名 性别 年龄 住址 ");
scanf("%ld, %s, %c, %d, %s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr);
while(p2->num!=0)
{
p1->next=p2;
p1=p2;
fflush(stdin);
p2=(structstu*)malloc(LEN);
printf("学号 姓名 性别 年龄 住址 ");
scanf("%ld,%s,%c,%d,%s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr);
}
}
纯手打,希望采纳。
Ⅷ 要求用C语言并结合数据结构链表编写一个学生信息管理系统
//xieai999
#include <stdio.h>
typedef struct study
{
int a;
char b[10];
int c[5][1];
int total;
double pg;
}LT;
typedef struct e
{
LT *e[10];
int top;
}LY;
void creat(LY **s)
{
(*s)=(LY *)malloc(sizeof(LY));
(*s)->top=-1;
}
void pop(LT **s)
{
(*s)=(LT *)malloc(sizeof(LT));
printf("学号:");
int s1;
scanf("%d",&s1);
(*s)->a=s1;
printf("姓名:");
char s2[10];
scanf("%s",&(*s)->b);
int i=0,m=0;
for(i;i<5;i++)
{
printf("科%d:",i+1);
int x;
scanf("%d",&x);
(*s)->c[i][0]=x;
m=m+x;
}
(*s)->total=m;
(*s)->pg=(*s)->total/5.0;
}
void print(LT *s)
{
printf("学号:%d ",s->a);
printf("姓名: %s ",s->b);
int i=0;
for(i;i<5;i++)
printf("科%d:%d ",i+1,s->c[i][0]);
printf("\n总分: %d",s->total);
printf("平均分: %.01f\n",s->pg);
}
void IN(LY *s,LT *a)
{
pop(&a);
s->top++;
s->e[s->top]=a;
}
void Delete(LY *s,int a)
{
int i=0;
for(i;i<=s->top;i++)
{
if(s->e[i]->a==a)
{
LT *x;
if(i!=s->top)
{
x=s->e[i];
s->e[i]=s->e[s->top];
s->e[s->top]=x;
}
s->top--;
break;
}
}
}
void paishu(LY *s)
{
printf("1,按学好升序\n2,按总分降序\n");
int x1;
int i,j;
scanf("%d",&x1);
switch(x1)
{
case 1:
for(i=0;i<=s->top;i++)
{
for(j=0;j<s->top-i;j++)
{
LT *x;
if(s->e[j]->a<s->e[j+1]->a)
{
x=s->e[j];
s->e[j]=s->e[j+1];
s->e[j+1]=x;
}
}
}
break;
case 2:
for(i=0;i<=s->top;i++)
{
for(j=0;j<s->top-i;j++)
{
LT *x;
if(s->e[j]->total>s->e[j+1]->total)
{
x=s->e[j];
s->e[j]=s->e[j+1];
s->e[j+1]=x;
}
}
}
break;
}
}
main()
{
int k=0,j=0;
LY *A;
creat(&A);
LT *r[100]={NULL};
for(k; ;k++)
{
printf("1,新建学生数据\n2,输出学生数据\n3,增加学生数据\n4,删除学生数据\n5,排序\n6,查询\n7,按其他数字键退出\n");
int x,i=0,n,m=0;
scanf("%d",&x);
switch(x)
{
case 1:
IN(A,r[j]);
j++;
break;
case 2:
for(i=A->top;i>-1;i--)
print(A->e[A->top]);
break;
case 3:
IN(A,r[j]);
j++;
break;
case 4:
scanf("%d",&n);
Delete(A,n);
break;
case 5:
paishu(A);
break;
case 6:
printf("暂时无此功能\n");
break;
default:
m=1;
break;
}
if(m==1)
break;
}
return 0;
}
第六项功能你自己加吧 我有事情要做了
Ⅸ 如何用C语言链表实现学生信息管理系统
你来我们学校里吧,我这里有,济南市,文化东路55号,
这里同学学C语主的每人都做了
Ⅹ c语言编写 学生信息链表
float average(struct node * head)
{
int i=0;
float sum=0;
for(;head!=NULL;head=head->next)
{
sum=sum+(float)(head->s);
i++;
}
return (sum/i);
}