为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦帮忙讲一下这程序中各个语句的功能。谢谢啊

麻烦帮忙讲一下这程序中各个语句的功能。谢谢啊

C
炎炎设计 2023-01-02 15:11:45

#include <stdlib.h>
#include <stdio.h>
#include <memory.h> //提供了内存操作相关的一些函数及声明
float waterfact, powerfact;
int counter;
typedef struct userinfo
{
long number;
int waterconsump;
int powerconsump;
} userinfo;

userinfo users[100];

void createdatafile()
{
FILE *fp;
int ws, ps;
long num;
float t1, t2;

if ((fp = fopen("input.dat", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}

printf("请输入水费的标准和电费标准(空格分开):\n");
scanf("%f %f", &t1, &t2);
fprintf(fp, "%.2f %.2f\n", t1, t2);

printf("请输入住户信息(住户地址 水耗<吨> 电耗<度>,0结束输入):\n");

while (1)
{
scanf("%ld", &num);

if (num == 0) break;

scanf("%d %d", &ws, &ps);
fprintf(fp, "%ld %d %d\n", num, ws, ps);
}

fclose(fp);
}

void readdatafile()
{
FILE *fp;
int i = 0;

if ((fp = fopen("input.dat", "r")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
fscanf(fp, "%f %f", &waterfact, &powerfact);

while (1)
{
memset(users + i, 0, sizeof(userinfo));
fscanf(fp, "%ld %d %d", &users[i].number, 
&users[i].waterconsump, &users[i].powerconsump);

if (users[i].number == 0)
break;

++i;
}
counter = i;
fclose(fp);
}

void processdata()
{
FILE *fp;
float t1, t2, t3, s1, s2, s3;
int i, s4, s5;

t1 = t2 = t3 = s1 = s2 = s3 = 0.0;
s4 = s5 = 0;

if ((fp = fopen("charge.dat", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}

printf("住户地址 水耗(吨) 水费(元) 电耗(度) 电费(元) 合计(元)\n");

for (i = 0; i < counter; ++i)
{
t1 = users[i].waterconsump * waterfact;
t2 = users[i].powerconsump * powerfact;
t3 = t1 + t2;
s1 += t1; s2 += t2;
s3 += t3;
s4 += users[i].waterconsump;
s5 += users[i].powerconsump;
fprintf(fp, "%ld %d %.2f %d %.2f %.2f\n", users[i].number, 
users[i].waterconsump, t1, users[i].powerconsump, t2, t3);

printf("%ld\t%d\t%.2f\t%d\t%.2f\t%.2f\n", users[i].number, 
users[i].waterconsump, t1, users[i].powerconsump, t2, t3);
}

fprintf(fp, "总共 %d %.2f %d %.2f %.2f\n", s4, s1, s5, s2, s3);

printf("总共\t%d\t%.2f\t%d\t%.2f\t%.2f\n", s4, s1, s5, s2, s3);

fclose(fp);

}

void main()
{
createdatafile();
readdatafile();
processdata();
system("PAUSE");
}

查看完整描述

3 回答

?
Helenr

TA贡献1535条经验 获得超2个赞

初学者吧,先打好基础,从简单开始,慢慢深入

查看完整回答
反对 回复 2023-01-06
?
largeQ

TA贡献1770条经验 获得超7个赞

#include 
#include 
#include  //提供了内存操作相关的一些函数及声明
float waterfact, powerfact;
int counter;
typedef struct userinfo
{
 long number;
 int waterconsump;
 int powerconsump;
} userinfo;

userinfo users[100];//定义结构体数组 

void createdatafile()
{
 FILE *fp;
 int ws, ps;
 long num;
 float t1, t2;
 
 if ((fp = fopen("input.dat", "w")) == NULL)  //判断文件是否能打开
 {
  printf("打开文件失败!\n");
  exit(-1); // 打开文件失败 退出
 }
 
 printf("请输入水费的标准和电费标准(空格分开):\n");
 scanf("%f %f", &t1, &t2); // 输入   注意 : 两个输入之间有一个空格 格式输出 ,  
 fprintf(fp, "%.2f %.2f\n", t1, t2); // 数据写入 文件fp 
 
 printf("请输入住户信息(住户地址 水耗 电耗,0结束输入):\n");
 
 while (1)  //  录入数据,直到 num=0
 {
  scanf("%ld", &num);
  
  if (num == 0) break;
  
  scanf("%d %d", &ws, &ps);
  fprintf(fp, "%ld %d %d\n", num, ws, ps);
 }
 
 fclose(fp);
}

void readdatafile()
{
 FILE *fp;
 int i = 0;

 if ((fp = fopen("input.dat", "r")) == NULL)
 {
  printf("打开文件失败!\n");
  exit(-1);
 }
 fscanf(fp, "%f %f", &waterfact, &powerfact);

 while (1)
 {
  memset(users + i, 0, sizeof(userinfo));
  fscanf(fp, "%ld %d %d", &users[i].number, 
   &users[i].waterconsump, &users[i].powerconsump);

  if (users[i].number == 0)
   break;

  ++i;
 }
 counter = i;
 fclose(fp);
}

void processdata()
{
 FILE *fp;
 float t1, t2, t3, s1, s2, s3;
 int i, s4, s5;

 t1 = t2 = t3 = s1 = s2 = s3 = 0.0; // 初始化
 s4 = s5 = 0;

 if ((fp = fopen("charge.dat", "w")) == NULL)
 {
  printf("打开文件失败!\n");
  exit(-1);
 }


查看完整回答
反对 回复 2023-01-06
?
幕布斯7119047

TA贡献1526条经验 获得超8个赞

createdatafile(); 让用户输入一些数据(住户地址 水耗<吨> 电耗<度>等 ),然后产生一个数据文件 ;
readdatafile 则从改文件中读出数据放到 users,counter中;
processdata 比较简单,对Users数据进行处理打印,同事做点统计工作。

查看完整回答
反对 回复 2023-01-06

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信