欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件中放表达式,读取进行计算

程序员文章站 2022-05-12 16:14:14
...

P321.C
  在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个(数量不确定)算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格。计算这些算式的结果并在屏幕上显示。
  
文件中放表达式,读取进行计算

#include<stdio.h>
int main(void)
{
	int a, b, n = 1;
	char c;
	FILE *fp;
    fp = fopen("Comp.txt", "r");
	if (fp == NULL)
	{
		printf("error!\n");
		return 0;
	}

	while ( !feof(fp) )  //文件结束,返回非0值;文件未结束,返回0值
	{
		if (fscanf(fp, "%d %c %d", &a, &c, &b) == 3){
			if (c == '+')
				printf("Line %03d:  %5d + %-5d = %-6d\n", n, a, b, a + b);
			else
				printf("Line %03d:  %5d - %-5d = %-6d\n", n, a, b, a - b);
			n++;
		}
	}
	fclose(fp);
	return 0;
}

P323.C
  在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中只有一个算式,运算类型只有“加法(+)”、“减法(-)”、“乘法(*)”且运算符前后至少有一个空格。计算该算式的结果并在屏幕上显示。
文件中放表达式,读取进行计算

#include<stdio.h>
int f1(int n1, int n2, char ch);

int main(){
	FILE *fp;
	int a1, a2, a3, result;
	char ch1, ch2;

	fp = fopen("Comp.txt", "r");
	if (fp == NULL){
		printf("error\n");
		return 0;
	}
	fscanf(fp, "%d %c %d %c %d", &a1, &ch1, &a2, &ch2, &a3);
	if (ch2 == '*')
		result = f1(a1, f1(a2, a3, ch2), ch1);
	else
		result = f1(f1(a1, a2, ch1), a3, ch2);
	printf("%d %c %d %c %d = %d\n", a1, ch1, a2, ch2, a3, result);
	fclose(fp);
	return 0;
}

int f1(int n1, int n2, char ch){
	int sum;
	if (ch == '+')
		sum = n1 + n2;
	else if (ch == '-')
		sum = n1 - n2;
	else
		sum = n1 * n2;
	return sum;
}

P324.C
  在文本文件Comp.txt、CompA.txt、CompB.txt里有需要计算结果的整数算式,文件Comp.txt提供参加运算的第一个数,文件CompA.txt提供进行运算的运算符(只有“加法(+)”或者“减法(-)”),文件CompB.txt提供参加运算的第二个数,每个数或运算符均占一行,组合起来成为一个算式,**遇到无法组成一个完整算式时即结束运算。**这样的算式有多个(数量不确定)。计算这些算式的结果并在屏幕上显示。

#include<stdio.h>
int main(void)
{
	int a1, a2, n = 1;
	char ch;
	FILE *fp1, *fp2, *fp3;
	fp1 = fopen("Comp.txt", "r");
	fp2 = fopen("CompA.txt", "r");
	fp3 = fopen("CompB.txt", "r");
	if (fp1 == NULL || fp2 == NULL || fp3 == NULL){
		printf("error\n");
		return 0;
	}

	while (1){
		if ((fscanf(fp1, "%d", &a1) == 1) && (fscanf(fp2, "%c\n", &ch) == 1)&&(fscanf(fp3, "%d", &a2) == 1)){
		if (ch == '+')
		printf("Line %03d:  %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 + a2);
		else
		printf("Line %03d:  %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 - a2);
		n++;
		else	break;
		}
	}
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	return 0;
}

P325.C
  在文本文件Comp.txt、CompA.txt、CompB.txt里有需要计算结果的整数算式,文件Comp.txt提供参加运算的第一个数,文件CompA.txt提供进行运算的运算符(只有“加法(+)”或者“减法(-)”),文件CompB.txt提供参加运算的第二个数,每个数或运算符均占一行,组合起来成为一个算式,遇到无法组成一个完整算式时即结束运算。这样的算式有多个(数量不确定)。计算这些算式的结果并将结果以文本文件格式保存到程序P325.C所在的文件夹中且文件名命名为CompC.txt

int main(void)
{
	int a1, a2, nn = 1;
	char op;
	FILE *fp1, *fp2, *fp3, *fp4;

	fp1 = fopen("d:\\Comp.txt", "r");
	fp2 = fopen("d:\\CompA.txt", "r");
	fp3 = fopen("d:\\CompB.txt", "r");
	fp4 = fopen("d:\\CompC.txt", "w");  //新建一个文件

	if (fp1 == NULL || fp2 == NULL || fp3 == NULL || fp4 == NULL)
		return 0;
	while (1)
	{
		if (fscanf(fp1, "%d", &a1) == 1 && fscanf(fp2, "%c%*c", &op) == 1 && fscanf(fp3, "%d", &a2) == 1){
			if (op == '+')
			fprintf(fp4, "Line %03d:  %5d %c %-5d = %-6d\n", nn, a1, op, a2, a1 + a2);
			else
			fprintf(fp4, "Line %03d:  %5d %c %-5d = %-6d\n", nn, a1, op, a2, a1 - a2);
			nn++;
		}
		else	break;
	}

	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	fclose(fp4);

	return 0;
}

编写一程序P314.C实现以下功能
  有一存储很多商品数据(每件商品的属性先后包括:品名、规格、单价(有小数位)、数量,数据的最长长度分别为20、10、6、5,在文件中以空格为分隔,每个商品的数据占一行)的文本文件,从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔,单价显示时只显示2位小数),若无则显示没有相应品名的商品。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 定义商品的结构体类型 */
struct sp
{
	char pinming[21];
	char guige[11];
	float danjia;
	int shuliang;
};

int main(void)
{
	
	int flag = 0; 
	char mingch[21]; 
	struct sp shangpin;
	FILE *fp;

	printf("Please input shang pin pin ming:");
	scanf("%s", mingch); //输入要查询的商品名
	printf("\n");
	
	printf("cha zhao qing kuang:\n");
	fp = fopen("sp.txt", "r"); 
	if (fp == NULL) return 0;
	
	while(fscanf(fp, "%s %s %f %d", shangpin.pinming, shangpin.guige, &shangpin.danjia, &shangpin.shuliang) == 4) {
		if (strcmp(shangpin.pinming, mingch) == 0) {
			printf("%s,%s,%d,%.2f\n", shangpin.pinming, shangpin.guige, shangpin.shuliang, shangpin.danjia);
			flag = 1; 
		}
	}
	if (flag == 0)	printf("mei you shang pin %s\n", mingch);
	fclose(fp);
	return 0;
}

相关标签: #文件操作