随机生成指定个数学生的语文数学外语成绩并求平均值

该博客介绍了一个程序,用于随机生成指定数量学生在语文、数学、外语三门科目的成绩,并计算这些成绩的平均值。这个程序对于教育数据分析或者模拟教学场景有所帮助。
摘要由CSDN通过智能技术生成
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>


int main(void)
{
	srand((unsigned int)time(NULL));

	//int num = rand()%10+1;
	printf("请输入生成学生的个数\n");

	int count;
	scanf("%d", &count);


	//int arr1[3][3] = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

	
	int **arr = (int **)malloc(sizeof(int*)* count);


	

	//arr = (int *)malloc(sizeof(int)*count);

	for (int i = 0; i<count; i++)
	{
		arr[i] = (int *)malloc(count*sizeof(int));


	}

	//printf("二维数组的长度%d", sizeof(arr1)); //只能求静态的 动态的求出结果就是4


	int i, j;

	//随机生成学生成绩 语文 外语 数学
	
	for (i = 0; i<count; i++)
	{

		//3 是3门学科
		for (j = 0; j < 3; j++){

			switch (j){
				//按照语文数学外语的顺序排列 0就是语文成绩
				case 0:
					arr[i][j] = rand() % 100 + 1;
					break;
				//按照语文数学外语的顺序排列 1就是数学成绩
				case 1:
					arr[i][j]  = rand() % 10
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要定义一个结构体来表示每个学生的信息: ```c struct student { char name[20]; char gender[10]; float chinese; float math; float english; float average; }; ``` 然后,我们需要读入原始数据集,并对其进行处理,生成5匿数据: ```c #include <stdio.h> #include <string.h> // 定义学生结构体 struct student { char name[20]; char gender[10]; float chinese; float math; float english; float average; }; // 读入原始数据集 int read_data(struct student students[], int size) { FILE *fp; int i = 0; fp = fopen("data.txt", "r"); if (fp == NULL) { return -1; } while (i < size && fscanf(fp, "%s %s %f %f %f", students[i].name, students[i].gender, &students[i].chinese, &students[i].math, &students[i].english) != EOF) { students[i].average = (students[i].chinese + students[i].math + students[i].english) / 3; i++; } fclose(fp); return i; } // 生成5匿数据 void anonymize_data(struct student students[], int size) { int i, j, k; float sum_chinese, sum_math, sum_english; int count_chinese, count_math, count_english; for (i = 0; i < size; i += 5) { // 计算每组的平均值 sum_chinese = sum_math = sum_english = 0; count_chinese = count_math = count_english = 0; for (j = i; j < i + 5 && j < size; j++) { sum_chinese += students[j].chinese; sum_math += students[j].math; sum_english += students[j].english; count_chinese += (students[j].chinese > 0); count_math += (students[j].math > 0); count_english += (students[j].english > 0); } float avg_chinese = sum_chinese / count_chinese; float avg_math = sum_math / count_math; float avg_english = sum_english / count_english; // 将每组学生成绩替换为平均值 for (j = i; j < i + 5 && j < size; j++) { students[j].chinese = avg_chinese; students[j].math = avg_math; students[j].english = avg_english; } // 随机打乱每组学生的顺序 for (j = i; j < i + 5 && j < size; j++) { k = i + rand() % 5; struct student temp = students[j]; students[j] = students[k]; students[k] = temp; } } } // 输出学生信息 void print_students(struct student students[], int size) { int i; printf("姓\t性别\t语文\t数学\t英语\t平均成绩\n"); for (i = 0; i < size; i++) { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].name, students[i].gender, students[i].chinese, students[i].math, students[i].english, students[i].average); } } int main() { struct student students[100]; int size; // 读入原始数据集 size = read_data(students, 100); if (size < 0) { printf("读取数据文件失败!\n"); return -1; } // 生成5匿数据 anonymize_data(students, size); // 输出学生信息 print_students(students, size); return 0; } ``` 注意,我们这里采用了一个简单的方法来生成5匿数据,即将每组学生成绩都替换为该组的平均值,并且随机打乱每组学生的顺序。这种方法的缺点是可能会导致某些学生成绩被替换为其他学生成绩,从而降低了数据的准确性。更复杂的方法可以采用k-anonymity、l-diversity等技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值