实验7:结构体和文件程序设计 C语言上机实验

实验要求、实验目的:

1.掌握结构体类型的概念、定义和使用;
2.掌握结构体数组、结构体指针的定义和使用;
3.掌握文件的打开,读写,定位和关闭;
4.熟练掌握程序调试方法(第一,设置断点单步跟踪,第二,通过输出语句查看程序执行流程)

实验内容:

  1. 建立一个结构体数组,输入n位同学(n不超过32)的基本信息:学号(整数),姓名(字符串),数学课程的成绩(整数),C语言课程的成绩(整数),求每位同学的平均分和总分,然后按照总分从高到低排序(排序算法自选)。试给出完整的代码。
    输入:学生人数n和这n个学生的基本数据
    输出:排序之后的学生信息。
    要求:对排序后的学生信息存入到文件中

2.编写函数,将字符串str1中的数字字符全部拷贝到字符串str2中,并返回被拷贝的字符的个数。
函数原型为:int mystrcpy( char *str1,char *str2);
要求:将字符串str2和个数存入文件中

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
typedef struct student
{
int id;
char name[10];
float sc[2];
float average;
float sum;
}STD;
void getdata(STD*p, int n)
{
int i, j;
for (i = 0; i < n; i++)
{
printf("---student %d---\n", i + 1);
printf("ID:");
scanf("%d", &p[i].id);
printf("Name:");
scanf("%s", p[i].name);
printf("2 scores:");
for (j = 0; j < 2; j++)
scanf("%f", &p[i].sc[j]);
}
}
void caltotal(STD*p, int n)
{
int i, j;
for (i = 0; i < n; i++)
{
p[i].sum = 0;
for (j = 0; j < 2; j++)
p[i].sum += p[i].sc[j];
p[i].average = p[i].sum / 2;
}
}
void outdata(STD*p, int n)
{
int i, j;
printf("----ID----Name--Score1--Score2--Average--Sum--\n");
for (i = 0; i < n; i++)
{
printf("M %8s", p[i].id, p[i].name);
for (j = 0; j < 2; j++)
printf("%8.1f", p[i].sc[j]);
printf("%8.1f", p[i].average);
printf("%8.1f\n", p[i].sum);
}
}
void sort(STD*p, int n)
{
STD t;
int i, j;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - i - 1; j++)
if (p[j].sum < p[j + 1].sum)
{
t = p[j]; p[j] = p[j + 1]; p[j + 1] = t;
}
}
int main()
{
STD s[20];
int n;
printf("Enter student's number:\n");
scanf("%d", &n);
getdata(s, n);
caltotal(s, n);
sort(s, n);
outdata(s, n);
FILE*fp;
FILE *fpWrite = fopen("D:\\1.text.txt", "w");
if (fpWrite == NULL)
{
exit(0);
}
char*c = (char*)"----ID----Name--Score1--Score2--Average--Sum--\n";
fprintf(fpWrite, "%s", c);
for (int i = 0; i < n; i++)
{
fprintf(fpWrite, "M %8s", s[i].id, s[i].name);
for (int j = 0; j < 2; j++)
fprintf(fpWrite, "%8.1f", s[i].sc[j]);
fprintf(fpWrite, "%8.1f", s[i].average);
fprintf(fpWrite, "%8.1f\n", s[i].sum);
}
fclose(fpWrite);
return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)
int my_strcpy(char* str1, char* str2);
int main()
{
char str1[20];
char str2[20];
int b;
puts("请输入字符串str1:");
gets_s(str1);

my_strcpy(str1, str2);
printf("字符串str2:%s\n", str2);

FILE *fpWrite = fopen("D:\\1.text.txt", "w");
if (fpWrite == NULL)
{
exit(0);
}
b = strlen(str2);
printf("%d", b);
fprintf(fpWrite, "%s ", str2);
fprintf(fpWrite, "%d", b);
fclose(fpWrite);
return 0;
}
int my_strcpy(char* str1, char* str2)
{
int i = 0;
while (str1[i] != 0)
{
str2[i] = str1[i];
i++;
}
str2[i] = '\0';
return i;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值