/*
* 功能:定义一个学生结构体
* 有姓名,年龄和三门
* 成绩,实现输入与
* 输出
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 20
#define N 3
#define SIZE 5
typedef struct student
{
char name[M];
int age;
double scores[N];
}Stu;
int main(void)
{
//struct student *p=NULL;
//p=&Stu;
Stu *ps=NULL;
ps=(Stu*)malloc(sizeof(Stu)*SIZE);
if(NULL==ps)
{
perror("malloc error");
}
memset(ps,0,sizeof(Stu)*SIZE);
int op;
while(1)
{
printf("请输入选项:\n");
printf("1......input\n");
printf("2......output\n");
printf("-1......exit\n");
scanf("%d",&op);
switch(op)
{
case 1:
printf("请输入姓名:\n");
scanf("%s",&(*ps).name[M]);
printf("请输入年龄:\n");
scanf("%d",&(*ps).age);
printf("请输入语文成绩:\n");
scanf("%lf",&(*ps).scores[0]);
printf("请输入数学成绩:\n");
scanf("%lf",&(*ps).scores[1]);
printf("请输入英语成绩:\n");
scanf("%lf",&(*ps).scores[2]);
break;
case 2:
printf("姓名为%s\n",(*ps).name[M]);
printf("年龄为%d\n",(*ps).age);
printf("语文成绩为%lf\n",(*ps).scores[0]);
printf("数学成绩为%lf\n",(*ps).scores[1]);
printf("英语成绩为%lf\n",(*ps).scores[2]);
break;
case -1:
break;
}
}
free(ps);
ps=NULL;
}
/*
* 功能:输入姓名,年龄
* 以及三门功课的成绩,
* 进行输入与输出
*
* 作者:徐子宸
*
* 来源:朱鸿飞老师
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define m 20
//#define n 3
//#define count 5
typedef struct student
{
char name[12];
int age;
float scores[3];
}stu;
void input(stu *ps)
{
int i,j;
for(i=0;i<5;i++)
{
printf("请输入姓名,年龄和三门课的成绩:\n");
scanf("%s",&ps->name[0]);
scanf("%d",&ps->age);
for(j=0;j<3;j++)
{
scanf("%f",&ps->scores[j]);
}
ps++;
}
}
void output(stu *ps)
{
int i,j;
for(i=0;i<5;i++)
{
printf("%s ",ps->name);
printf("%d ",ps->age);
for(j=0;j<3;j++)
{
printf("%.1f ",ps->scores[j]);
}
printf("\n");
ps++;
}
}
int main(void)
{
int count=5;
stu *ps=NULL;
ps=(stu*)malloc(sizeof(stu)*count);
if(NULL==ps)
{
perror("malloc error");
return -1;
}
memset(ps,0,sizeof(stu)*count);
while(1)
{
printf("清输入选项:\n");
printf("1 input\n");
printf("2 output\n");
printf("3 exit\n");
int op;
scanf("%d",&op);
switch(op)
{
case 1:
input(ps);
break;
case 2:
output(ps);
break;
case 3:
exit(1);
break;
}
}
free(ps);
ps=NULL;
}
#include"main.h"
int main()
{
stu *pmax=NULL;
stu *ps=NULL;
ps=(stu*)malloc(sizeof(stu)*2);
if(NULL==ps)
{
perror("malloc error");
return -1;
}
memset(ps,0,sizeof(stu)*2);
while(1)
{
printf("1 Input\n");
printf("2 Output\n");
printf("3 Calpmaxage\n");
printf("4 Sortbyage\n");
printf("5 Sortbyname\n");
printf("6 Sortbysumscores\n");
printf("7 Exit\n");
int op;
scanf("%d",&op);
switch(op)
{
case 1:
input(ps);
break;
case 2:
output(ps);
break;
case 3:
pmax=calpmaxage(ps);
printf("年龄最大的人是%s\n",pmax->name);
printf("年龄最大的人的首地址为%p\n",pmax);
break;
case 4:
sortbyage(ps);
break;
case 5:
sortbyname(ps);
break;
case 6:
sortbysumscores(ps);
break;
case 7:
exit(0);
break;
}
}
free(ps); // 释放内存空间
ps=NULL;
return 0;
}
#include"main.h"
void output(stu *ps)
{
for(int i=0;i<2;i++)
{
printf("%s ",ps->name);
printf("%d ",ps->age);
for(int j=0;j<3;j++)
{
printf("%.1f ",ps->scores[j]);
}
printf("\n");
ps++;
}
}
/*
(ps+j)->name指代上一个姓名
(ps+j+1)->name指代下一个姓名
如果上一个姓名的ASCII码值大于下一个姓名的ASCII码值
则将姓名交换
使用冒泡排序
*/
#include"main.h"
void sortbyname(stu *ps)
{
for(int i=0;i<2-1;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
{
swap((ps+j),(ps+j+1));
}
}
}
}
#include"main.h"
void swap(stu *pa,stu *pb)
{
stu temp={0};
temp=*pa;
*pa=*pb;
*pb=temp;
}
#include"main.h"
stu *calpmaxage(stu *ps)
{
stu *pmax=NULL;
pmax=ps;
for(int i=0;i<2;i++)
{
if(pmax->age<(ps+i)->age)
{
pmax=(ps+i);
}
}
return pmax;
}
/*
思路分析:
i={0,1}
age={28,58}
ps=28
pmax=ps=28
ps+0=28
ps+1=58
28<58
pmax=58
分析完毕
*/
#ifndef _MAIN_H_
#define _MAIN_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student
{
char name[12];
int age;
float scores[3];
}stu;
void swap(stu *ps,stu *pb);
float sumscores(float b[]);
void input(stu *ps);
void output(stu *ps);
stu *calpmaxage(stu *ps);
void sortbyage(stu *ps);
void sortbyname(stu *ps);
void sortbysumscores(stu *ps);
#endif
#!/bin/bash
gcc calpmaxage.c main.c output.c sortbyname.c sumscores.c input.c main.h sortbyage.c sortbysumscores.c swap.c
./a.out
#include"main.h"
void sortbysumscores(stu *ps)
{
for(int i=0;i<2-1;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(sumscores((ps+j)->scores)>sumscores((ps+j+1)->scores))
{
swap((ps+j),(ps+j+1));
}
}
}
}
/*
(ps+j)->scores指代上一门成绩
(ps+j+1)->scores指代下一门成绩
如果上一门成绩大于下一门成绩
则进行交换
采用冒泡排序
*/
#include"main.h"
void input(stu *ps)
{
for(int i=0;i<2;i++)
{
printf("请输入学生的姓名,年龄以及三门成绩:\n");
scanf("%s",&ps->name[0]); // &name[0]=name
scanf("%d",&ps->age);
for(int j=0;j<3;j++)
{
scanf("%f",&ps->scores[j]);
}
ps++;
}
}
#include"main.h"
void sortbyage(stu *ps)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
{
swap((ps+j),(ps+j+1));
}
}
}
}
/*
(ps+j)->name指代第一个姓名
(ps+j+1)->name指代第二个姓名
如果第一个姓名的ASSCII码值大于第二个姓名的ASCII码值
则进行交换
采用冒泡排序
*/
#include"main.h"
float sumscores(float b[])
{
float sum=0;
for(int i=0;i<2;i++)
{
sum=sum+b[i];
}
return sum;
}
作者:徐子宸
班级:华清远见西安中心
嵌入式
22101班
日期:2022年11月11日