导航:首页 > 信息系统 > 如何用数组存放学生信息

如何用数组存放学生信息

发布时间:2022-10-08 19:06:36

① 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;
}

② 定义一个一维数组存储学生学号,二维数组存储学生姓名,二维数组存储学生三门课程成绩及总分

#include<stdio.h>

intmain()
{
intid[100],n,i=0,len;
charname[100][10];
intscore[100][4];
while(1)
{
printf("分别输入学生%d的学号、姓名、三门成绩 ",i+1);
printf("(学号输入负数结束输入):");
scanf("%d",&n);
if(n<0)
break;
id[i]=n;
scanf("%s%d%d%d",name[i],&score[i][0],&score[i][1],&score[i][2]);
score[i][3]=score[i][0]+score[i][1]+score[i][2];
if(i++==99)
break;
}
printf(" 您输入的学生信息为: ");
len=i;
for(i=0;i<len;i++)
printf("%d%s%d%d%d%d ",id[i],name[i],score[i][0],score[i][1],score[i][2],score[i][3]);
}

③ 使用结构数组存储学生信息,信息包括了姓名name和成绩score,按学生成绩从高到低排

我现写的一个,简洁明了,应该是符合你的口味的,测试完全通过
#include <stdio.h>
#define N 100
typedef struct student
{
int id; //学号
char name[20]; //姓名
int gender; //性别(0代表男生,1代表女生)
float score; //成绩
}stu;
stu s[N];
int main()
{
int i;
for(i=0;i<N;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%d",&s[i].id);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",&s[i].name);
printf("请输入第%d个学生的性别:",i+1);
scanf("%d",&s[i].gender);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",&s[i].score);
}
stu ss[N];
stu* p=ss;
for(i=0;i<N;i++)
ss[i]=s[i];
for(i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(ss[i].score<ss[j].score)
{
stu temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
printf("所有学生的信息按成绩由高到低排名如下:\n");
printf("学号\t姓名\t性别\t成绩\n");
for(i=0;i<N;i++)
{
printf("%d\t%s\t%d\t%.1f\n",(p+i)->id,(p+i)->name,(p+i)->gender,(p+i)->score);
}
return 0;
}

④ 学生数据处理,用对象数组存储输入的学生数据

#include <iostream>
using namespace std;

class Student
{
public:
void get_student();
void display();
private:
int num;
int score;
};
void Student::get_student()
{
cin>>num>>score;
}
void Student::display()
{
cout<<"num="<<num<<"\t"<<"score="<<score<<endl;
}
int main()
{
int i;
Student *p;
p = new Student[5]; //这里创5个student

for(i=0;i<5;i++)
{
cout<<"请输入第"<<i+1<<"名学号和成绩:";
p[i].get_student();//这里指定p所指向的第几个student 的值
}
cout<<"输出第1.3.5个学生的数据:\n";
for(i=0;i<5;i=i+2)
{
p[i].display();//同理指定所对应的第几个student

}
delete p;
return 0;
}

你原来那个p创建的时候没有指定个数,然后p始终指向创建的第一个student,所以把那个改了以后还是会有错,所以要用下标,我也只是初学,所以不是很懂

⑤ 怎么定义一个数组保存全班所有人的姓名用javascript

varname=newArray("a0","a1","a2");
varpeople_number=3;
varran_number=Math.ceil(Math.random()*(people_number-1));
varran_number2=Math.round(Math.random()*(people_number))-1;
if(ran_number2==-1){
ran_number2=2;
}
alert("编号:"+ran_number+",名字:"+name[ran_number]+"编号2:"+ran_number2
+",名字2:"+name[ran_number2]);

不好意思问题没看全

Math.random(); 返回0和1间(包括0,不包括1)的一个随机数。

Math.ceil(n); 返回大于等于n的最小整数。取0的几率极小。

Math.round(n); 返回n四舍五入后整数的值。其中获取最小值0和最大值的几率少一半。

ran_number极少出现0 可能导致不会出现a0这个名字,如果写成

var ran_number = Math.ceil(Math.random()*(people_number))-1;可能导致出现ran_number为-1 提示报错。

ran_number2 的写法相当于把最小值归于最大值,使最大值的概览和其他值差不多。

真是不好意思 一开始没看全问题。

⑥ 用结构体数组存储学生信息,每个学生有姓名、学号、年龄和成绩。输入N(10)名学生信息,按成绩从高低

注意输入数据时的形式。
#include<stdio.h>
struct person
{int xuehao;
char name[20];
char sex;
int year;
int grade;
}man[80];
main()
{int n,i,max,k=0;
printf("一共有多少学生;");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d,%d,%d,",&man[i].xuehao,&man[i].year,&man[i].grade);
scanf("%c,%s",&man[i].sex,&man[i].name);}
max=man[0].grade;
for(i=0;i<n;i++)
if(max<man[i].grade)
{max=man[i].grade;
k=i;}
printf("name sex xuehao year grade\n");
printf("--------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-12s%-4c%4d%8d%10d\n",man[i].name,man[i].sex,man[i].xuehao,man[i].year,man[i].grade);
printf("最高分的学生信息:\n");
printf("name sex xuehao year grade\n");
printf("--------------------------------------------------\n");
printf("%-12s%-4c%4d%8d%10d\n",man[k].name,man[k].sex,man[k].xuehao,man[k].year,man[k].grade);
}

⑦ 利用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;

}

⑧ 定义一个数组存放5个学生的姓名查看张三是否在内

第一步:定义一个数组存放5个学生的姓名




⑨ java如何创建二维数组进行学生姓名,学号,成绩三个信息的存储,使用for循环语句进行二维数组的遍

1、分析题目,需要存储姓名学号成绩,因此,二维数组需要定义成字符串类型

姓名学号成绩
012
0[][][]
1[][][]
2[][][]

数组的每列存储内容是固定的,一行代表一个学生,遍历过程嵌套for循环就可以遍历全部学生,

intn=input;
Stringstu[][]=newString[n][2];//学生个数不定
for(inti=0;i<n;i++){
//i是行,一行就是一个“学生”,如i=0,是第一个学生
for(intj=0;j<3,j++)
{//j,是列,是每个学生的信息,0是姓名,1是学号,2是成绩
//循环过程是i=0是,遍历[0][0],[0][1],[0][2],也就依次是姓名学号成绩
System.out.print(stu[i][j]);
}
System.out.println("");//输完一个学生,换行
}

2、源代码如下

publicstaticvoidmain(Stringargs[])
{
System.out.println("请输入学生个数");
Scannerinput=newScanner(System.in);
intn=input.nextInt();
Stringstu[][]=newString[n][3];//学生个数不定
//输入信息
for(inti=0;i<n;i++){
//i是行,一行就是一个“学生”,如i=0,是第一个学生
System.out.println("请输入第"+(i+1)+"个学生的信息:");
for(intj=0;j<3;j++)
{//j,是列,是每个学生的信息,0是姓名,1是学号,2是成绩
//循环过程是i=0是,遍历[0][0],[0][1],[0][2],也就依次是姓名学号成绩
switch(j){
case0:
System.out.print("姓名:");
stu[i][j]=input.next();
break;
case1:
System.out.print("学号:");
stu[i][j]=input.next();
break;
case2:
System.out.print("成绩:");
stu[i][j]=input.next();
break;
default:
break;
}

}
}

//输出信息
for(inti=0;i<n;i++){//循环同理
for(intj=0;j<3;j++)
{//j,是列,是每个学生的信息,0是姓名,1是学号,2是成绩
//循环过程是i=0是,遍历[0][0],[0][1],[0][2],也就依次是姓名学号成绩
switch(j){
case0:
System.out.print("姓名:");
System.out.print(stu[i][j]);
break;
case1:
System.out.print("学号:");
System.out.print(stu[i][j]);
break;
case2:
System.out.print("成绩:");
System.out.print(stu[i][j]);
break;
default:
break;
}

}
System.out.println("");//输完一个学生,换行
}
}

3、运行效果如图

阅读全文

与如何用数组存放学生信息相关的资料

热点内容
龙岗市批发市场在哪里 浏览:557
如何获得癌症发病数据 浏览:955
现在市场生猪什么价 浏览:503
图文信息处理技术专业怎么样 浏览:65
山西素肉技术培训多少钱 浏览:907
苹果手机微信怎么逐条回复信息 浏览:703
如何静止电脑程序开机自启 浏览:630
浙江金华交通技术学院有哪些专业 浏览:52
我的世界什么东西都可以交易 浏览:916
皇茶什么加盟代理 浏览:366
南宁龙屯农贸市场是哪个开发商的 浏览:809
如何查看会展信息 浏览:745
华港燃气公司客户信息怎么看 浏览:893
小程序我的订单如何隐藏 浏览:573
岳西有哪些名牌产品 浏览:279
微信运动如何显示小程序 浏览:436
工厂技术员考核表怎么写 浏览:353
程序员和架构师哪个好 浏览:589
代理的价格表叫什么 浏览:515
虾皮用erp系统如何上传产品 浏览:312