当前位置:首页 » 服务存储 » 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;

}