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

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;
}

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值