當前位置:首頁 » 服務存儲 » C用數組存儲學生信息
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C用數組存儲學生信息

發布時間: 2023-05-15 06:09:50

⑴ c程序設計 簡單學生信息的管理(用數組實現)

/*構建學生信息庫,實現輸入、計算平均分、排序、輸出狀元信息*/
#include<stdio.h>
#include<string.h>
#define MaxSize 50
struct student{
int num;
char name[10];
char sex[5];
int cxsj,english,math;
double average;
};
int Count=0;
void inputInfo(struct student students[]); /*函數聲明,鬧型輸入學生信息*/
void getAverage(struct student students[]); /*函數聲明,計算平均分*/
void sort(struct student students[],int n); /*函數聲明,學生成績排序*/
void getTop(struct student students[]); /液培猜*函數聲明,輸出狀元信息*/
int main(void)
{
int choice;
struct student students[MaxSize];
do{
printf("choice: 1:輸入學生信息 2:計算平均分 3:排序 4:輸出狀元信息 0:退出\n"); /*用戶操作界面*/
scanf("%d",&choice);
switch(choice){
case 1:inputInfo(students);break;
case 2:getAverage(students);break;
case 3:sort(students,Count);break;
case 4:getTop(students);break;
case 0:break;
}
}while(choice!=0);
printf("END!\n");
return 0;
}
/*新建學生信息*/
void inputInfo(struct student students[])
{
struct student s;
if(Count==MaxSize){
printf("the array is full!\n");
return;
}
printf("請中襲輸入姓名、學號、性別、高數成績、英語成績、程序設計成績:\n");
scanf("%s%d%s%d%d%d",s.name,&s.num,s.sex,&s.math,&s.english,&s.cxsj);
while(s.num!=0){
students[Count]=s;
Count++;
scanf("%s%d%s%d%d%d",s.name,&s.num,s.sex,&s.math,&s.english,&s.cxsj);
}
return;

}
/*計算平均分*/
void getAverage(struct student students[])
{
int i;
if(Count==MaxSize){
printf("the array is full!\n");
return;
}
for(i=0;i<Count;i++)
students[i].average=(students[i].math+students[i].english+students[i].cxsj)/3.0;
}
/*學生成績排序*/
void sort(struct student students[],int n)
{
int i,j,index;
struct student temp;
for(i=0;i<n-1;i++){
index=i;
for(j=i+1;j<n;j++)
if(students[j].average>students[index].average)
index=j;
temp=students[i];
students[i]=students[index];
students[index]=temp;
}
}
/*輸出狀元信息*/
void getTop(struct student students[])
{
if(Count==0){
printf("count of student is zero!\n");
return;
}
printf("姓名\t學號\t性別\t高數成績\t英語成績\t程序設計成績\t平均分\n");
printf("%s\t%d\t%s\t%d\t\t%d\t\t%d\t\t%.2f\n",students[0].name,students[0].num,students[0].sex,students[0].math,students[0].english,students[0].cxsj,students[0].average);
}

c語言基礎,採用結構體數組的方法保存學生成績

定義攔襪了char number[3],所以只保存前三個字元,而你printf時卻要輸出6個,就連名字那前三個字元也輸出了。比如第一個哪局信息,學號只存成了B13,後面寫的沒有存入,姓名存了SDF,因為name跟在李衡讓number之後,所以你在輸出六個字元,就成了B13SDF

⑶ C 語言二維數組保存學生數據

#include "stdio.h"
#define N 10
void main()
{
void zongfen(int c[][3],int &n);
void paiming(int b[][3],int &n);

int x,i ,t,a[N][3];
printf("請輸入有多少個明稿學生?\n");
scanf(" %d",&t);
for(i=0;i<t;i++){
printf(" 輸入學生學號及激春孝成績1成績2\n");
scanf(" %d %d %d",&a[i][0],&a[i][1],&a[i][2]);

}
for(i=0;i<t;i++){
printf(" %d %d %d\n",a[i][0],a[i][1],a[i][2]);
}

while(x){
printf("請根據下面的指示進行!\n\n");

printf("按 2 算出總分!\n");
printf("按 3 排出名次!\n");
printf("按 4 進行查詢!\n");
printf("按 5 修改學森皮生成績或者學號!\n");
printf("按 6 刪除學生!\n");
printf("按 7 插入一個學生!\n");
printf("按 8 輸出全體信息!\n");
printf("按 0 退出!\n");

scanf(" %d",&x);
switch(x){

case 2:zongfen(a,t);break;
case 3:paiming(a,t);break;
case 4:
case 5:
case 6:
case 7:
case 8:
default :
x=0;
break;

}
}

}

void zongfen(int c[][3],int &n)
{
int i;
int sum[100];
for(i=0;i<n;i++){
sum[i]=c[i][1]+c[i][2];
}
for(i=0;i<n;i++){
printf(" %d %d %d %d\n",c[i][0],c[i][1],c[i][2],sum[i]);
}

}

void paiming(int b[][3],int &n)//冒泡法排名次
{
int i,j,t,k;
int sum[100];
for(i=0;i<n;i++){
sum[i]=b[i][1]+b[i][2];
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(sum[j]<sum[j+1])
{
for(k=2;k>=0;k--)
{
t=b[j][k];
b[j][k]=b[j+1][k];
b[j+1][k]=t;
}
t=sum[j];
sum[j] = sum[j+1];
sum[j+1] = t;
}
}
}
for(i=0;i<n;i++){
printf(" %d %d %d %d\n",b[i][0],b[i][1],b[i][2],sum[i]);
}
}

⑷ c語言中用一個結構體數組保存其相關學生信息,然後輸入一個學號,檢索該學號的信息。

這題目咋這么熟悉呢,好像我們當初c結課的時候課程設計就是這個。。。。這個很簡單的.
#include
<stdio.h>
struct
student
{
/*這裡面定義你的學生變數,學號啥的*/
};

int
main()
{
student
s[5];
int
num
=
0;
for(int
i
=
0;
i
<
5;
i++)
{
printf("請輸入第%d個學生的信息\n",
i);
scanf(「%s」,
&s[i].name);//這里是輸入第i個學生的名字啥的
自己補充吧
}
//求學生成績總和
printf("total
=
%d\n",
(s[0].grade+s[1].grade+s[2].grade+s[3].grade+s[4].grade));//grade是在結構體中定義的,名字靈活寫,定義什麼寫什麼
//顯示信息
printf("輸入學號:");
scanf("%d",
&num);
printf("%d
%s
%d
%d\n",
s[num].num,
s[num].name,s[num].age,s[num].grade);//同之前結構體中變數
return
0;
}

⑸ c語言中用一個結構體數組保存其相關學生信息,然後輸入一個學號,檢索該學號的信息。

void inputMSG(STUDENT *student,int i)
{
printf("please print some message about %d student\nnumber name score:\n",i+1);
scanf("%d%s%d",&student->number,student->name,&student->score);
}
把這個函數改為這樣

⑹ 用C語言數組寫一個學生基本信息表,包括學號,姓名,年齡,成績。有5個學生。

#include<stdio.h>橘數
#defineN5
typedefstructStudent
{
intnumber;
charname[64];
intage;
floatgrade;
}STUDENT;

intmain()
{
inti;
STUDENT歲喚stud[N]={
{10001,"張三",18,85.5},
{10002,"李四",19,88.5},
{10003,"王五",20,90.8},
{10004,"小明",21,60.0},
{10005,"小紅",18,75.5}
};
for(i=0;i<N;i++)
printf("學號=%d 姓名=%s 年齡=%d 成績=%.2f ",
stud[i].number,stud[i].name,stud[i].age,stud[i].grade);
return0;
}

運行結果:

學號=10001 姓名=張三 年齡=18 成績=85.50

學號=10002 姓名=李乎伍凱四 年齡=19 成績=88.50

學號=10003 姓名=王五 年齡=20 成績=90.80

學號=10004 姓名=小明 年齡=21 成績=60.00

學號=10005 姓名=小紅 年齡=18 成績=75.50

⑺ C 語言二維數組保存學生數據

/***用二維數組保存學生成績****/
#include"stdio.h"
#define
m
100
main()
{
int
i,a[m][2],n,c=0,m=0,max,min;
printf("請輸入學生記錄數:");
scanf("%d",&n);
/*********輸入每個學生的成績保存在數組中*********/
for(i=0;i<n;i++)
{printf("請輸入第%d學生的瞎沒胡記錄\n",i+1);
printf("請輸入磨攔語文成績:");
scanf("%d",&a[i][0]);
printf("請輸入數學成績:");
scanf("%d",&a[i][1]);
printf("\n");
}
/********各課總成績********************/
for(i=0;i<n;i++)
{c+=a[i][0];
m+=a[i][1];
}
printf("語文總成績:%d\n",c);
printf("數學總成績:%d\n",m);
printf("語文平均成績:%f\n",(float)(c)/n);
printf("數學平均成績:%f\n\n",(float)(m)/n);
/**********輸出成績單*********/
for(i=0;i<n;i++)
{printf("第%d個學察陵生:語文成績%d
數學成績%d\n",i+1,a[i][0],a[i][1]);
}
getch();
}

⑻ c#用結構數組存儲多個學生的信息每個學生的信息姓名、學號和成績。輸入學生學號,可以輸出他姓名,成績

見下面的程序

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;

namespaceConsoleApplication13
{
//Student結構
structStudent
{
//姓名
publicstringName;
//學號
纖孫publicintID;
//成績
publicfloatScore;

publicoverridestringToString()
{
returnstring.Format("姓名:{0},學號:{1},成績:{2}",
Name,
ID,
Score);
}
}

classProgram
{
staticvoidMain(string[]args)
{
//學生結構數組
蔽螞Student[]students=newStudent[5];

students[0]=newStudent{Name="張三",ID=1,Score=90};
students[1]=newStudent{Name="李四",ID=2,Score=80};
students[2]=newStudent{Name="王五",ID=3,Score=70};
students[3]=newStudent{Name="趙六",ID=4,Score=60};
students[4]=newStudent{Name="錢七",ID=5,Score=50};

//輸出
for(inti=0;i<students.Length;i++)
{
毀並鏈Console.WriteLine(students[i].ToString());
}
}
}

⑼ 利用C語言讀取含文件頭的txt文本並將學生信息和成績分別保存到數組

思路:

1、fgets每次讀取一行,根據文本格式找到姓名和分數的行字元串。

2、分別解析行字元串,獲取其中的姓名和成績(成績字元串拆解後用atof函數轉換成浮點數保存在浮點數數組中)。

3、通過malloc和realloc申請一個對應大小的結構數組(你題目要求用數組,換成鏈表更好)

4、將解析的數據保存到結構數組成員中。

注意:代碼是根據你提供的樣本格式解析的,如格式發生改變,需自行修改條件

注意:你成績之後內容沒有貼出來,所以成績內容到哪裡為結束,我只能參照姓名的個數。如成績行數比姓名行數多,多餘的會被忽略。

下面是我寫得演示代碼,已詳細備注(注意我的函數你如想單獨調用,注意free釋放內存):

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#define M 1000 //預估一行最大字元數,必須大於等於文本一行最大長度

#define S 5 //預讀取的成績科目數量

int slen=0;//學生人數

typedef struct student

{

char *name;//姓名

float *scores;//成績數組

}STU;

/*getaLine每調用一次讀取一行字元串(返回的是動態申請地址,如你要單獨調用該函數,記得free釋放)

函數用靜態變數記錄文件指針偏移量。參數傳非0每次調用往下行讀取,參數傳0從第一行重新讀取

讀取成功返回字元串首地址,失敗或者讀取到文件末尾返回NULL

*/

char *getaLine();

/*

getName截取名字,注意該函數只是截取,多餘字元空間沒有刪除,如單獨調用該函數自行處理地址空間。

參數傳入包含名字的那一行字元串,根據內容規則遇到第一個數字就在前一個字元置0

成功返回處理後的字元串首地址,失敗返回NULL

*/

char *getName(char *nameStr);

float *getScores(char *scoreStr);//通過字元串空格分隔格式截取各科成績,重組浮點數數組返回。異常返回NULL

STU *getNamesAndScore();

int main()

{

int i,j;

STU *stus=NULL;

stus=getNamesAndScore();

if(!stus) return 1;

for(i=0;i<slen;i++)

{

printf("姓名:%s ",stus[i].name);

for(j=0,printf("成績:");j<S;j++)

printf("%.2f ",stus[i].scores[j]);

printf(" ");

}

return 0;

}

STU *getNamesAndScore()

{

int flag=0,n=1,scnt=0;

STU *stups=NULL,*spTemp=NULL;

char *sLine=NULL;

while(1)

{

sLine=getaLine(1);

if(!sLine) break;//文件讀取到末尾或異常

if(sLine[0]=='#' && sLine[1]=='-' && sLine[2]=='-' && sLine[3]=='-'&& sLine[4]=='-'&& sLine[5]=='-')

{

flag++;

continue;

}

if(flag==2 && sLine[0]=='~' && sLine[1]=='A' && sLine[2]==' ' && sLine[3]=='C' && sLine[4]=='h'&& sLine[5]=='i')

{

continue;

}

if(flag==0) continue;

if(flag==1)//開始讀取姓名

{

if(!stups)

{

stups=(STU *)malloc(sizeof(STU));

if(!stups) return NULL;

}

else

{

n++;

spTemp=(STU *)realloc(stups,sizeof(STU)*n);

if(!spTemp) return NULL;

stups=spTemp;

}

slen++;

getName(sLine);

stups[n-1].name=(char *)malloc(sizeof(char)*(strlen(sLine)+1));

strcpy(stups[n-1].name,sLine);

free(sLine);

}

if(flag==2)//開始讀取成績

{

scnt++;

stups[scnt-1].scores=getScores(sLine);

if(!stups[scnt-1].scores)return NULL;

if(scnt==slen) break;//確保成績和姓名個數匹配,只讀對應行數的成績

}

}

return stups;

}

float *getScores(char *scoreStr)

{

int n=0;

char *p0=scoreStr,*p1=scoreStr;

float *scs=NULL;

scs=(float *)malloc(sizeof(float)*S);

if(!scs)return NULL;

while(*p1!=0)

{

if(*p1==' ')

{

*p1=0;

scs[n++]=atof(p0);

p0=p1+1;

}

p1++;

}

scs[n]=atof(p0);

return scs;

}

char *getName(char *nameStr)

{

char *p=nameStr;

if(!nameStr)return NULL;

while(*p!=0)

{

if(*p>='0' && *p<='9')

{

*(p-1)=0;

break;

}

p++;

}

return nameStr;

}

char *getaLine(int origin)

{

static long offsetSave=0;

int len=0;

char strTemp[M]={0},*rp=NULL,*sLine=NULL;

FILE *fp=NULL;

if(!origin) offsetSave=0;

fp=fopen("C:\testData.txt","r");

if(!fp) return NULL;

fseek(fp,offsetSave,SEEK_SET);

rp=fgets(strTemp,M,fp);

if(!rp)return NULL;

len=strlen(rp);

offsetSave+=len+1;

fclose(fp);

sLine=(char *)malloc(sizeof(char)*(len+1));

if(!sLine) return NULL;

strcpy(sLine,rp);

return sLine;

}