您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页结构体—动态内存分配

结构体—动态内存分配

来源:化拓教育网

动态内存分配

学生结构体写题思路

1.定义宏

2.划分功能模块

3.main()调用实现

4.函数实现

注意:若较简单可  先写函数

n个学生信息(学号 姓名 成绩) 要求按照成绩高低输出  (动态内存分配)

#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct
{
	long no;
	char name[10];
	float score;

}STU;
int main()
{
	STU* stu;   //结构体指针
	stu = (STU*)malloc(sizeof(STU) * N);
	if (stu == NULL)   //判断内存分配是否成功
	{
		printf("分配空间失败");
		return 1;
	}
		
	int i, j, k;
	for (i = 0; i < N; i++)
	{
		scanf("%ld%s%f", &stu[i].no, stu[i].name, &stu[i].score);
	}
	//降序
	for (i = 0; i < N - 1; i++)
	{
		k = i;
		for (j = i + 1; j < N; j++)
		{
			if (stu[k].score < stu[j].score)k = j;
		}
		if (k != i) { STU t = stu[k]; stu[k] = stu[i]; stu[i] = t; } //交换结构体变量
	}
	//输出
	for (i = 0; i < N; i++)
		printf("%ld  %s  %f\n", stu[i].no, stu[i].name, stu[i].score);

	free(stu);  //空间释放
	return 0;
}

n学生信息,学号 、姓名、2门成绩。要求输出平均成绩最高学生信息(包含 学号 姓名  2门成绩和平均成绩)

1.平均成绩:输入每个学生2门成绩是   累加取平均

2.最高学生信息  —— 用结构体变量接收 返回结构体变量

                          ——

3.最大平均分 :用 变量记录下标

1.结构体

2.学号 姓名 成绩   --- 平均成绩

/*
*
* 1.结构体
* 2.输入 学号 姓名  3门成绩  ----计算平均成绩
* 3.输入 最高平均成绩信息  ----返回结构体   传结构体变量 指针
* 4.最高成绩  用下标法记录
* 
*/
#include<stdio.h>
#define N 3
typedef struct s
{
	long num;
	char name[10];
	double score[2];
	double avg;
}STU;
void input(STU s[])
{
	double avg = 0.0;
	for (int i = 0; i < N; i++)
	{
		scanf("%ld%s", &s[i].num, s[i].name);
		scanf("%lf%lf", &s[i].score[0], &s[i].score[1]);
		s[i].avg = (s[i].score[0] + s[i].score[1]) / 2.0;
	}
}
void max(STU s[], STU* t)
{
	int j=0; //记录最大平均分下标
	for (int i = 1; i < N; i++)
	{
		if (s[j].avg < s[i].avg)
			j = i;
	}
	*t = s[j]; //指针传回最大

}

int main()
{
	STU s[N]; //定义结构体数组
	input(s);
	STU m;  //接收最大信息对应变量
	max(s, &m);
	printf("%ld %s  %lf %lf %lf\n", m.num, m.name, m.score[0], m.score[1], m.avg);
	return 0;
}

n学生信息,学号 、姓名、3门成绩,平均成绩 输出6号学生信息

技巧:

如何容易   求3门平均成绩 

#define N 3
typedef struct
{
	char stu_num[6];
	char name[8];
	double score[3];
	double avr;
}STU;
void input_avg(STU s[])
{
	for (int i = 0; i < N; i++)
	{
		scanf("%s%s", s[i].stu_num,s[i].name);
		double sum = 0.0;
		for (int k = 0; k < 3; k++)
		{
			scanf("%lf", &s[i].score[k]);
			sum += s[i].score[k];
		}
		//平均成绩
		s[i].avr = sum / 3.0;
	}
}
int main()
{
	STU s[N];
	input_avg(s);
	//6号成绩
	printf("%s  %s %lf %lf %lf\n", s[1].stu_num, s[2].
		name, s[2].score[0], s[2].score[1], s[2].score[2], s[2].avr);
	return 0;
}

/*
* 1.图书 N 50   结构体
* 2.函数 输入 并排序   
* 3.查询 有输出作者  无 输出无
*
*/
#include<stdio.h>
#include<string.h>
#define N 2
typedef struct
{
	char name[10];
	char author[10];
	int price;
}Book;
void input_sort(Book b[]);
void select(Book b[]);
int main()
{
	Book b[N];
	//输入并排序
	input_sort(b);
	//查询
	//Book* t; 
	select(b);
	return 0;
}
void input_sort(Book b[])
{
	int i, j, k;
	for (int i = 0; i < N; i++)
	{
		printf("%d 书名 作者 价格\n", i + 1);
		scanf("%s%s%d", b[i].name, b[i].author, &b[i].price);
	}
	//排序
	for (i = 0; i < N - 1; i++)
	{
		k = i;
		for (j = i + 1; j < N; j++)
		{
			if (b[k].price < b[j].price)
				k = j;
		}
		if (k != i)
		{
			Book t = b[i]; b[i] = b[k]; b[k] = t;
		}
	}
}
void select(Book b[])
{
	printf("请输入要查询书名:\n");
	char tname[10];
	/*gets(tname);  运行不出*/
	scanf("%s", tname);
	int flag = -1; //记录是否找到
	for (int i = 0; i < N; i++)
	{
		/*&b[i].name错误 字符串首地址*/ 
		if (strcmp(tname, b[i].name) == 0)
		{
			flag = i;
			break;
		}
	}
	if (flag == -1)
	{
		printf("无此书\n");
	}
	else
		printf("作者:%s\n", b[flag].author);

}

函数学生问题

#include<stdio.h>
#define S 3
#define C 2
void input_Avg(double s[][C], double savg[])
{
	double t;
	for (int i = 0; i < S; i++)
	{
		t = 0.0;
		for (int j = 0; j < C; j++)
		{
			scanf("%lf", &s[i][j]);
			t += s[i][j];
		}
		savg[i] = t / C;
	}
}

void corse_Avg(double s[][C], double cavg[])
{
	double avg;  //每门课程均分
	for (int i = 0; i < C; i++)
	{
		avg = 0.0;
		for (int j = 0; j < S; j++)
			avg += s[i][j];
		cavg[i] = avg / S;
	}
}
void max(double s[][C])
{
	double max = 0,k=0;
	int i, j;
	for (i = 0; i < S; i++)
	{
		for (j = 0; j < C; j++)
		{
			if (max < s[i][j])
			{
				max = s[i][j]; //记录高课程分数
				k = i; //记录最高学生
			}
		}

	}
	printf("最高学生%d,分数%lf\n", k + 1, max);
}
int main()
{
	double st[S][C];
	double avg1[S]; //每个学生平均分
	double avg2[C]; //每门均分
	input_Avg(st, avg1);
	corse_Avg(st, avg2);
	printf("//每个学生均分");
	for (int i = 0; i < S; i++)
		printf("%lf ", avg1[i]);
	printf("\n");
	printf("//每门课程均分");
	for (int i = 0; i < C; i++)
		printf("%lf ", avg2[i]);
	printf("\n");
	max(st); //最高分
}

1.input   sort并输出

2.low <60 学生姓名显示出来

3.总avg    输出低于均分记录   返回人数

include<stdio.h>
#define N 3
typedef struct
{
	long num;
	char name[10];
	double score;
}STU;
void input(STU s[]);
void sort(STU s[]);
void low(STU s[]);
int low_avg(STU s[]);
int main()
{
	STU s[N];
	input(s);
	sort(s);
	low(s);
	int t = low_avg(s);;
	printf("低于均分人数:%d\n", t);
	return 0;
}
void input(STU s[])
{
	int i;
	for (i = 0; i < N; i++)
		scanf("%ld%d%lf", &s[i].num, s[i].name, &s[i].score);
}
void sort(STU s[])
{
	int i, j, k;
	for (i = 0; i < N - 1; i++)
	{
		k = i;
		for (j = i + 1; j < N; j++)
		{
			if (s[k].score < s[j].score)
				k = j;
		}
		if (k != j)
		{
			STU t = s[k];
			s[k] = s[i];
			s[i] = t;
		}
	}
	//输出
	for (i = 0; i < N; i++)
		printf("%ld  %s  %lf\n", s[i].num, s[i].name, s[i].score);
}

void low(STU s[])
{
	for (int i = 0; i < N; i++)
		if (s[i].score < 60)
			printf("%s\n", s[i].name);
}
int low_avg(STU s[])
{
	int count = 0;
	double avg = 0.0;
	//统计均分
	for (int i = 0; i < N; i++)
		avg += s[i].score;
	printf("//低于均分记录");
	for (int i = 0; i < N; i++)
	{
		if (s[i].score < avg)
		{
			count++;
			printf("%ld %s %lf", s[i].num, s[i].name, s[i].score);
		}
	}
	return count;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务