當前位置:首頁 » 考試成績 » c語言單鏈表輸出學生學號成績

c語言單鏈表輸出學生學號成績

發布時間: 2021-03-15 04:28:03

① 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

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919