【c++/c】C语言“小小计算器”扩展功能【期末大作业】

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 【c++/c】C语言“小小计算器”扩展功能【期末大作业】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述


上一篇:小小计算器基本功能

实验1、“小小计算器”扩展功能实现(1)

扩充小小计算器功能:
<1> “22 学生成绩排序”
定义学生结构体数组,长度为10,依次输入这十个学生的学号、姓名、成绩,利用冒泡排序,对这10个学生排序,从小到大输出这10个学生的信息,然后输出10个学生的总成绩和平时成绩

代码整合:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


int main() {
const int n=10;
struct student //定义结构体变量
{
	string name;
 
	int num;
 
	double score;
 
};
	struct student student1[n];
	struct student student2;
	int i,j;
 
	for(i=0;i<n;i++)
	{
		cout<<"请输入第"<<i+1<<"个学生的信息:";
		cin>>student1[i].num
		   >>student1[i].name
		   >>student1[i].score;
	}
 
	double sum=0;
	double average;
 
	//各学生的平均成绩
	for(i=0;i<n;i++)
	{
		
		sum=sum+student1[i].score;
		
		average=sum/3;

	}
	// 冒泡排序
	for(int j=0;j<n;j++){
		for(i=0;i<n-j-1;i++){
				if(student1[i].score>student1[i+1].score){
						student2 = student1[i];
						student1[i] = student1[i+1];
						student1[i+1] = student2;
		       }
	    }
	
	} 
	//打印出各学生的信息
	cout<<"输出各学生信息:"<<endl;
 
	for(i=0;i<n;i++)
	{
		cout<<student1[i].num<<"  "
 
		   <<student1[i].name<<"  "
 
		   <<student1[i].score<<"  "
		   
		   <<endl;
	}

 
	cout<<"总成绩:"<<sum<<"  "
	    <<"平均成绩"<<average
		<<endl;
 
 
 
	return 0;
}


结果

在这里插入图片描述

实验2、“小小计算器”扩展功能实现(2)

扩充小小计算器功能:
<1> “23 学生成绩普涨10分”
d盘根目录下存在一个文本文件my.txt,里面存放了10个学生的成绩,一行一个成绩,从文件中读取学生的成绩,每个成绩都加10分后,保存到原文件中。
提示:

 注意d:\my.txt在fopen中如何表示;—> “d:\my.txt”  文件打开方式 —> r+
 从文件中读取数据,直到文件结束,如何判断文件结束—> feof()
 将增加10后的数据保存到原文件时,要保证从文件头开始,如何使文件指针回到文件头—> rewind()
 在写数据时,一定要避免在最后一个数据写完后,再写一个回车,否则下次在操作时可能出错。

代码

#include <stdio.h>
#include <stdlib.h>
#define N 10
struct Student
{
int num;
char name[10];
double score;
};
int main()
{
FILE *fp;
struct Student stu[N];
int i;
fp=fopen("d:\\my.txt","r+");
if(fp==NULL)
{
	
printf ("文件打开失败!\n");
exit(1);
}
printf("打开读取文件,内容是:\n");
i=0;
while(1)
{
if(feof(fp)) break;
fscanf(fp,"%d\t%s\t%lf\n",&stu[i].num,stu[i].name,&stu[i].score);
printf("%d\t%s\t%.2f\n",stu[i].num,stu[i].name,stu[i].score);
i++;
}
rewind(fp);
for(i=0;i<N-1;i++)
{
fprintf(fp,"%d\t%s\t%.2f\n",stu[i].num,stu[i].name,stu[i].score+10);
}
fprintf(fp,"%d\t%s\t%.2f",stu[N-1].num,stu[N-1].name,stu[N-1].score+10);
fclose(fp);
return 0;
}

结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决问题:中文乱码

可以看到,虽然读取成功但是出现了中文乱码😫😫,根据以往经验,应该是编码方式问题!
在这里插入图片描述
可以看到编码为UTF-8
将其改为ANSI
在这里插入图片描述
在运行一下,看看结果
在这里插入图片描述
读取没问题,看看写入
在这里插入图片描述
完美解决🤗🤗!

如果有帮助的话,麻烦点个赞吧!
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147430.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!