用C语言结构体指针编程序实现输入十个学生的学号,期中和期末成绩,计算输出成绩表和学生平均分

\u8bf7\u7528\u7ed3\u6784\u4f53\u548c\u6307\u9488\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u5b66\u751f\u4fe1\u606f\u7cfb\u7edf\u7ed3\u6784\u4f53\u5b58\u50a8\u5b66\u751f\u5b66\u53f7\u4e0e\u59d3\u540d\uff0c\u7a0b\u5e8f\u4ee5C\u8bed\u8a00\u5b9e\u73b0\u3002

\u7ed9\u4f60\u4e3e\u4e2a\u6700\u7b80\u5355\u7684\u4f8b\u5b50\uff1a
#include
struct Student
{
int num;
float score;
};
void main()
{
struct Student a[3],*p;
int i;
//\u4e3e\u4f8b\u5b66\u751f\u4fe1\u606f
for (i=0;i<3;i++)
{
a[i].num=1000+i;
a[i].score=90.5+i*2;
}

p=a;
for (i=0;i<3;i++)
{
printf("%ld%5.1f\n",p->num,p->score);
p++;
}
}
\u5982\u679c\u60f3\u7528\u6570\u636e\u94fe\u8868\uff0c\u4e3e\u4f8b\u5982\u4e0b\uff1a
#include

struct Student
{
int num;
float score;
struct Student *next;
};

void main()
{
struct Student s1,s2,s3,*p;
//\u4e3e\u4f8b\u5b66\u751f\u4fe1\u606f
s1.num = 1000;
s1.score = 89.5;
s1.next = &s2;

s2.num = 1001;
s2.score = 99.5;
s2.next = &s3;

s3.num = 1002;
s3.score = 79;
s3.next = NULL;

p=&s1;
while (p!=NULL)
{
printf("%ld%5.1f\n",p->num,p->score);
p=p->next;
}
}

#include
#include
struct stu
{
int num;
char name[20];
float grade;
};
int main()
{
int n,i,n1;
float sum=0.0,ave;
printf("\u8bf7\u8f93\u5165\u5b66\u751f\u4eba\u6570:\n");
scanf("%d",&n);
struct stu *p;
p=(struct stu*)calloc(n,sizeof(stu));
printf("\u8bf7\u8f93\u5165%d\u4e2a\u5b66\u751f\u4fe1\u606f(\u5b66\u53f7\uff0c\u59d3\u540d\uff0c\u6210\u7ee9):\n",n);
for(i=0;i<n;i++)
{
scanf("%d %s %f",&p[i].num,&p[i].name,&p[i].grade);
}
for(i=0;i<n;i++)
{
printf("%d %s %f\n",p[i].num,p[i].name,p[i].grade);
}
printf("\u8bf7\u8f93\u5165\u8981\u67e5\u8be2\u5b66\u751f\u6210\u7ee9\u7684\u7f16\u53f7:\n");
scanf("%d",&n1);
printf("%d\u53f7\u5b66\u751f\u7684\u6210\u7ee9\u4e3a:%f\n",n1,p[n1-1].grade);
for(i=0;i<n;i++)
{
sum+=p[i].grade;
}
ave=sum/n;
printf("%d\u4e2a\u5b66\u751f\u7684\u5e73\u5747\u6210\u7ee9\u4e3a:%f\n",n,ave);
delete []p;
return 0;
}
\u4f60\u6240\u6307\u7684\u7edf\u8ba1\u529f\u80fd\u4e0d\u77e5\u9053\u662f\u4ec0\u4e48\uff0c\u6211\u5c31\u6539\u6210\u8ba1\u7b97\u5e73\u5747\u6570\u4e86

#include<iostream>
#include<string>

using namespace std;
//=============<开始定义结构体>===================================================
struct combox{

int num;
int mark;
string name;
combox *next;

};
//=============<结束定义结构体>===================================================

//=============<开始定义Commonbox类>==============================================

//-----类体开始------------------------
class Commonbox{

private:

combox *head;void Swap(combox *,combox *); //交换两个combox变量的数据域

void Print(combox *); //输出一combox指定的记录

combox *Find(int); //查找条例条件的记录,并返回该记录的指针

public:

Commonbox(){head=NULL;}

int ListCount(); //统计当前链表的记录总数,返回一个整数

void AddItem(int num, string name, int mark); //添加一条记录到表尾
void RemoveItem(int); //删除一条指定的记录

void List(); //列出当前链表中的所有记录

void Sort(); //对当前链表进行排序

void Search(int); //在当前链表查找指定记录并输出

float Average(); //计算平均成绩

扩展资料

用C语言结构体指针编程序应用方法:

将一个结构体变量中的数据传递给另一个函数,有下列3种方法:

(1) 用结构体变量名作参数。一般较少用这种方法。

(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。

(3) 用结构体变量的引用变量作函数参数。

在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。C语言中是利用库函数malloc和free来分配和撤销内存空间的。



#include<iostream>
#include<string>
using namespace std;
//=============<开始定义结构体>===================================================
struct combox{

int num;
int mark;
string name;
combox *next;

};
//=============<结束定义结构体>===================================================

//=============<开始定义Commonbox类>==============================================

//-----类体开始------------------------
class Commonbox{

private:
combox *head;
void Swap(combox *,combox *); //交换两个combox变量的数据域
void Print(combox *); //输出一combox指定的记录
combox *Find(int); //查找条例条件的记录,并返回该记录的指针

public:
Commonbox(){head=NULL;}
int ListCount(); //统计当前链表的记录总数,返回一个整数
void AddItem(int num, string name, int mark); //添加一条记录到表尾
void RemoveItem(int); //删除一条指定的记录
void List(); //列出当前链表中的所有记录
void Sort(); //对当前链表进行排序
void Search(int); //在当前链表查找指定记录并输出
float Average(); //计算平均成绩
};
//-----类体结束------------------------

//-----类成员函数开始----------------------------------
int Commonbox::ListCount(){//统计当前链表的记录总数,返回一个整数

if(! head)return 0;
combox *p=head;
int n=0;
while(p){
n++;
p=p->next;
}
return n;

}

void Commonbox::AddItem(int num, string name, int mark){//添加一条记录到表尾

if(! head){
head=new combox;
head->mark=mark;
head->num=num;
head->name=name;
head->next=NULL;
return;
}

combox *t=head;
while(t && t->num!=num)
t=t->next;

if(t){
cout<<"操作失败:学号为"<<num<<"的记录已经存在!"<<endl;
return;
}

combox *p=head;
while(p->next)p=p->next;
combox *p1=new combox;
p1->num=num;
p1->mark=mark;
p1->name=name;
p1->next=NULL;
p->next=p1;

return;
}

void Commonbox::RemoveItem(int num){//删除一条指定的记录

combox *t=Find(num);
if(! t)return;

combox *p=head;

//如果要删除的记录位于表头
if(head==t){
head=head->next;
delete p;
cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;
return;
}

while(p->next!=t)p=p->next;
combox *p1=p->next;
p->next=p1->next;
delete p1;
cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;

return;
}

void Commonbox::Print(combox *p){//输出一combox指定的记录

cout<p->num<<"\t\t";
cout<<p->name<<"\t\t";
cout<<p->mark<<endl;

return;
}

void Commonbox::List(){//列出当前链表中的所有记录

if (ListCount==0){
cout <"错误:当前的列表为空!"<<endl;
return;
}

combox *p=head;
cout<"共有记录:"<<ListCount()<endl;
cout<"学号\t\t姓名\t\t分数"<<endl;
while(p){
Print(p);
p=p->next;
}
cout <<endl;
return;
}

void Commonbox::Search(int num){//在当前链表查找指定记录并输出

cout <"Searching...."<<endl;

combox *p=Find(num);
if(p){
cout<"学号\t\t姓名\t\t分数"<<endl;
Print(p);
}
cout <endl;
}

combox *Commonbox::Find(int num){

if (ListCount()==0){
cout <"错误:当前的列表为空!"<<endl;
return NULL;
}

combox *p=head;
while(p){
if(p->num==num)break;
p=p->next;
}

if(! p){
cout <<"错误:找不到该记录!\n";
return NULL;
}

return p;
}

void Commonbox::Swap(combox *p1, combox *p2){//交换两个combox变量的数据域

combox *temp=new combox;
temp->num=p1->num;
temp->mark=p1->mark;
temp->name=p1->name;

p1->num=p2->num;
p1->mark=p2->mark;
p1->name=p2->name;

p2->num=temp->num;
p2->mark=temp->mark;
p2->name=temp->name;

}

void Commonbox::Sort(){//对当前链表进行排序
cout <<"Sorting..."<<endl;
if(ListCount()2) return;

combox *temp=NULL,*p=NULL,*p1=NULL,*p2=NULL,*k=NULL;
int n=ListCount(),i,j;

p=head;
for(i=1;i<n;i++){
k=p;
p1=p->next;
for(j=0;j<n-i;j++){
if(k->num > p1->num){
k=p1;
}
p1=p1->next;
}
if(p!=k)Swap(k,p);
p=p->next;
}
cout <<"Complete successfully!"<<endl<<endl;
return;
}

float Commonbox::Average(){ //计算平均成绩

if (ListCount()==0){
cout <"错误:当前的列表为空!"<<endl;
return -1;
}
int sum=0,n=0;
combox *p=head;
while(p){
sum += p->mark;
p=p->next;
n++;
}
return float(sum)/n;
}
//-----类成员函数结束----------------------------------

//=============<结束定义Commonbox类>==============================================

Commonbox student; //定义全局变量

int Menu(){
cout <<"===========[主选单:]==========="<<endl;
int n=1,select=-1;
cout <n++<".输入学生成绩;"<<endl<<endl;
cout <n++<".按学号排序;"<<endl<<endl;
cout <n++<".按学号查找记录;"<<endl<<endl;
cout <n++<".删除由学号指定的记录;"<<endl<<endl;
cout <n++<".列出所有记录;"<<endl<<endl;
cout <n++<".计算平均成绩;"<<endl<<endl;
cout <"0.退出;"<<endl<<endl;

cout <"[请选择(输入相应数字)]:";
cin >>select;
return select;
}

char Exit(){ //返回一个字符患,用于确认退出
char s;
cout<<"确定要退出程序吗?[Y/N]:";
cin >>s;
return s;
}

void Input(int *num, string *name, int *mark){ //输入学生信息

cout <<"请输入 学号 姓名 分数:";
cin >>*num;
if(*num==-1)return;
cin >>*name>>*mark;

return;
}

void AddNew(){ //增加记录

int num=0,mark=0;
string name="";

cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl;
Input(&num, &name, &mark);
while(num!=-1){
student.AddItem(num,name,mark);
Input(&num, &name, &mark);
}
return;
}

void DoFind(){ //按学号查找

int num;
cout<endl<<"当输入的学号为-1时表示结束输入."<<endl;
do{
cout <"请输入要查找的学生的学号: ";
cin>>num;
if(num==-1)continue;
student.Search(num);
}while(num!=-1);

return;
}

void DoDelete(){ //删除记录

cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl;
int num;
do{
cout <"请输入要删除的学生的学号:";
cin>>num;
if(num==-1)continue;
student.RemoveItem(num);
}while(num!=-1);
return;
}

void ShowAverage(){ //输出平均数

float avr=student.Average();
if(avr>0){
cout<<"共有记录:\t"<<student.ListCount()<endl<<endl;
cout<"平均成绩:\t"<<avr<<endl<<endl;
}
return;
}
//-------******主函数开始>******-------

int main(){

cout<<"Welcome!\n学生成绩管理系统\nVer 1.01\nBy FondBoy\n\n";

int select;
char s;

while(1){
select=Menu();
switch(select){
case 0: //退出程序
s=Exit();
if(s=='y' || s=='Y')return 0;
break;

case 1: //输入学生成绩
AddNew();
break;

case 2: //按学号排序
student.Sort();
break;

case 3: //按学号查找记录
DoFind();
break;

case 4: //删除由学号指定的记录
DoDelete();
break;

case 5: //列出所有记录
student.List();
break;

case 6: //输出平均成绩
ShowAverage();
break;

default:
cout<<"无效输入!"<<endl;
}
}

return 0;
}
//-------******主函数结束>******-------
//------!!!!!!---------EOF-[程序代码结束]-------------------

这么菜的问题也有,把网络当作义务为你打工的了。

  • 鐢–璇█缁撴瀯浣撴寚閽堢紪绋嬪簭瀹炵幇杈撳叆鍗佷釜瀛︾敓鐨勫鍙,鏈熶腑鍜屾湡鏈垚缁,璁 ...
    绛旓細include<iostream>#include<string> using namespace std;//===<寮濮嬪畾涔缁撴瀯浣>===struct combox{ int num;int mark;string name;combox *next;};//===<缁撴潫瀹氫箟缁撴瀯浣>=== //===<寮濮嬪畾涔塁ommonbox绫>=== /
  • 濡備綍鐢╟璇█缁撴瀯浣撴寚閽杈撳叆涓缁勫鐢熸垚缁,鏌ユ壘鏈濂芥垚缁,骞惰緭鍑哄叾瀛︾敓...
    绛旓細鏈変袱绉嶆柟娉 1锛氱敤閾捐〃鍋 2锛氱敤鏂囦欢鍋 鐢ㄩ摼琛ㄥ仛涓昏鍦ㄤ簬缁撴瀯浣鐨勬瀯閫 鍜岀浉鍏虫暟鎹殑杈撳叆 鏌ユ壘 鐢ㄦ枃浠跺仛 涓昏鍦ㄤ簬瀵规枃浠剁殑璇诲啓 鎿嶄綔 浣犲彲浠ュ弬鑰冪浉鍏崇殑c璇█涔︾睄 姣斿鑰佽碍鐨刢璇█
  • C璇█绋嬪簭 鐢ㄧ粨鏋勪綋缂栧啓涓涓▼搴,瀹炵幇杈撳叆涓や釜鏁,姹傚嚭骞冲潎鏁
    绛旓細include<stdio.h>typedef struct stt{ float num;}STT;int main( ){ STT stt1,stt2; scanf("%f%f",&stt1.num,&stt2.num); printf("骞冲潎鍊硷細%f\n",(stt1.num+stt2.num)/2); return 0;}
  • C璇█缁撴瀯浣撴寚閽鐢╯canf杈撳叆娴偣鏁,鏃犳硶杈撳叆,娌℃湁杈撳叆鐣岄潰,涔熸病鏈夎緭...
    绛旓細C璇█涓粠閿洏杈撳叆鐨勮緭鍏ヨ鍙ユ渶甯哥敤鐨勬槸scanf璇彞锛屽嚱鏁板師鍨嬩负int scanf( char *format,args,...);鍔熻兘鏄粠鏍囧噯杈撳叆璁惧鎸塮ormat鎸囧悜鐨勬牸寮忓瓧绗︿覆鎵瑙勫畾鐨勬牸寮忥紝杈撳叆鏁版嵁缁檃rgs鎵鎸囧悜鐨勫崟鍏.C++涓紝鍙互浣跨敤scanf璇彞鍜宑in锛堟爣鍑嗚緭鍏ユ祦锛変袱绉嶆柟寮忋傛爣鍑嗚緭鍏ユ祦cin鏄粠閿洏鍚戝唴瀛樻祦鍔ㄧ殑鏁版嵁娴侊紝鐢>>杩愮畻绗...
  • c璇█:鍒╃敤缁撴瀯浣撶紪鍐:鍒嗗埆杈撳叆10涓鐢熺殑鑻辫 鏁板 缂栫▼鎴愮哗,骞舵眰鍜...
    绛旓細C_pro;int sum;}s[N], *p=s;void input(struct student *p, int n){printf("璇疯緭鍏%d涓鐢熶俊鎭細\n", n);for (int i = 0; i < n; i++) {scanf("%s%s%d%d%d", &p[i].na, &p[i].ID, &p[i].English, &p[i].Math, &p[i].C_pro);p[i].sum = p[i]....
  • C璇█绋嬪簭杈撳叆5瀛︾敓3闂ㄨ鎴愮哗骞惰緭鍑哄钩鍧囧垎鐢ㄧ粨鏋勪綋鎸囬拡鍋
    绛旓細void add_node(nodelist* phead,long num,char *s,long classnum,float c,float eng,float math); void display_list(pnodelist phead); void add_stu(pnodelist phead); void destroy_list(pnodelist phead ); void del_node(pnodelist phead, long num ); pnodelist update_stu( pnodelist phead, ...
  • C璇█,鍒╃敤鎸囧悜缁撴瀯浣鐨鎸囬拡缂栫▼
    绛旓細h>#include<stdlib.h>#include <string>#define STUDENT_NUM 3//闇瑕佽緭鍏ョ殑瀛︾敓鎬绘暟typedef struct{int nNumber;//瀛﹀彿char chName[32];//濮撳悕float MidScore;//鏈熶腑鎴愮哗float EndScore;//鏈熸湯鎴愮哗float AverScore;//骞冲潎鎴愮哗}STUDENT_UNIT;/*brief:鎴愮哗鎺掑簭para锛 pStudent 鎸囧悜缁撴瀯浣鐨鎸囬拡nNum...
  • c璇█绋嬪簭棰樼浜旈 瑕佹眰浣跨敤璋冪敤缁撴瀯浣撴寚閽鐨勫嚱鏁,杈撳嚭姣忎釜瀛︾敓鐨勬垚缁...
    绛旓細255];};void printScore(struct STUDENT *);int main(){struct STUDENT stu[10];int i;for(i=0;i<10;++i){printf("璇疯緭鍏ュ鍚嶏細");scanf("%s",stu[i].name);printf("Please input the ID:");scanf("%d",&stu[i].id);printf("杈撳叆涓夐棬鎴愮哗锛岀┖鏍煎垎闅");scanf("%lf%lf%lf",...
  • c璇█缁撴瀯浣鏁扮粍鐨勮緭鍏ヨ緭鍑
    绛旓細C 璇█涓紝缁撴瀯浣(struct)鏄竴绉嶆暟鎹粨鏋勶紝鏄C璇█涓仛鍚堟暟鎹被鍨(aggregate data type)鐨勪竴绫汇傜粨鏋勪綋鍙互琚0鏄庝负鍙橀噺銆鎸囬拡鎴栨暟缁勭瓑锛岀敤浠瀹炵幇杈冨鏉傜殑鏁版嵁缁撴瀯銆傜粨鏋勪綋鍚屾椂涔熸槸涓浜涘厓绱犵殑闆嗗悎锛岃繖浜涘厓绱犵О涓虹粨鏋勪綋鐨勬垚鍛(member)锛屼笖杩欎簺鎴愬憳鍙互涓轰笉鍚岀殑绫诲瀷锛屾垚鍛樹竴鑸敤鍚嶅瓧璁块棶銆傚畾涔変笌澹版槑 缁撴瀯浣...
  • 3.C璇█ 鐢ㄧ粨鏋勪綋绫诲瀷缂栦竴绋嬪簭,杈撳叆涓涓鐢熺殑瀛﹀彿,濮撳悕鍙婁笁闂ㄨ鐨勬垚 ...
    绛旓細include<stdio.h>struct stud {int num;char name[30];float score[3];} ;int main(){struct stud stu ;int i;float avg ;printf("input number: "); scanf("%d", &stu.num );printf("input name: " ); scanf("%s", stu.name );printf("input 3 score:\n");avg=0;for( i=...
  • 扩展阅读:学编程一年大概多少钱 ... c++和python先学哪个 ... c语言代码生成器 ... c语言struct结构体数组 ... 初学编程必背50个 ... c++入门程序代码 ... 编程必背100个代码 ... cnc编程必背50个程序 ... c语言如何使用结构体 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网