一、先看题目
使用一个文本文件存储一组数据(x),编程读取数据并计算y=1/(200-x)的值,显示并保存结果,如果是非法操作,输出"Error"。
具体要求:
1 输入数据要典型,有代表性,输入数据类型为float。
2 能够处理错误输入数据,并输出"Error"。
3 使用文本文件作为程序的输入和输出。
文件读写参考:
打开文件
fp=fopen("input.txt","r");
错误判断
cpp
if(fp==NULL){
printf("Not SUCH A FILE:%s",af);
getch();
return;
}
读入数据
cpp
fscanf(fp,"%d",&num);
fscanf(fp,"%f,%d",&x[i],&y[i]);
打开文件(写文件)
fp=fopen("result.txt","w");
写数据
fprintf(fp,"%d,%.2f,%d,%.2f\n",i,x[i],y[i],b[i]);
下面是程序
cpp
#include <iostream>
#include <cstdio>
int writeToFile(int n, FILE *f);
float fx(float x);
int main() {
const int N = 100;
// 打开文件并写入数据
FILE *f = fopen("./input.txt", "w");
if (f == NULL) {
std::cerr << "Failed to open input file for writing!" << std::endl;
return 1;
}
if (writeToFile(N, f) != 0) {
std::cerr << "Error writing to file!" << std::endl;
return 1;
}
// 打开文件并读取数据
FILE *fin = fopen("./input.txt", "r");
if (fin == NULL) {
std::cerr << "Failed to open input file for reading!" << std::endl;
return 1;
}
FILE *fout = fopen("./output.txt", "w");
if (fout == NULL) {
std::cerr << "Failed to open output file!" << std::endl;
fclose(fin);
return 1;
}
// 动态分配数组
float *x = new float[N];
float *y = new float[N];
// 读取文件内容并计算
for (int i = 0; i < N; i++) {
fscanf(fin, "%f", &x[i]);
y[i] = fx(x[i]);
}
// 将结果写入输出文件
for (int i = 0; i < N; i++) {
fprintf(fout, "%f\t%f\n", x[i], y[i]);
}
// 关闭文件并释放内存
fclose(fin);
fclose(fout);
delete[] x;
delete[] y;
return 0;
}
// 向文件中写数据
int writeToFile(int n, FILE *f) {
if (f == NULL) {
std::cerr << "Not SUCH A FILE !" << std::endl;
return 1;
}
for (float x = 0; x < n; x++) {
fprintf(f, "%f\n", x);
}
fclose(f);
return 0;
}
// 定义函数 f(x)
float fx(float x) {
if (x == 200) {
fprintf(stderr, "Error: division by zero\n");
return -1;
} else {
return 1 / (200 - x);
}
}