求用电费用c语言调用函数 用电管理系统c语言

c语言中function的使用

函数的构成

网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都做网站、成都网站建设收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了十年的创新互联网站建设公司。

function+函数名(参数1,参数2){函数实现;}

函数名不能是数字开头,可以是字母和下划线;

函数的调用: 函数名();

作用域

定义在函数外面的变量,称之为全局变量,整个文档都可以访问。

定义在函数里面的变量为局部变量,只能在该函数内部访问。

var a=10;

function aa(){

var a=20;

alert(a);

}

alert(a);

aa()

函数是一个数据类型,可以把它赋给变量

var f=function (b){

return (b=b+1);

};

alert(f(5));

调用的时候使用f(参数)来使用

函数可以访问自身内部的函数

function b(){

var a=5;

function bb(){

alert(a);

}

bb();

}

b();

当内部函数有返回值的时候 调用函数要使用return+函数

function c(){

var a=10;

function bb(){

return a*2;

}

return bb();

}

alert(c())

函数对自身内部函数的调用

function d(a,b){

function dd(a){

return a+2

}

return c=dd(a)+dd(b);

}

alert(d(2,3))

函数对其他函数的调用

function add(a,b){

return a+b;

}

function sub(a,b){

return a-b;

}

function bb(x,a,b){

return  x(a,b);

}

alert(bb(sub,2,3))

函数的递归

function cc(a){

if (a==1){

return a;

}else{

return a*cc(--a);

}

}

alert(cc(4));

请c语言大神帮忙!

这个题目要点。

1、收费标准必须为可操作修改。

2、收费标准档位是不确定的,需要动态数组。(当然用常量,每次手改源代码就不需要了)

3、收费标准的输入除第一个阀值,其他要求增量(较上一个阀值),不能直接用于运算。

4、输入范围需要有验证。

最简易做法是将标准定义成常量,然后需要时修改代码常量,但这样对用户够不友好,所以我这里把标准定义成结构,定义函数动态申请数组,修改收费标准。

#includestdio.h

#includemalloc.h

typedef struct eq

{

int tn;//表示共有几档

float **fb;//表示各档计费标准的二维数组

}EQ;

int newFb(int tn);//构建收费标准数组地址空间,成功返回1,失败返回2。(成功自动释放旧地址,无需单独释放)

EQ *init();//初始化计费标准

void showEQ();//打印当前收费标准

int setEQ();//修改收费标准,成功返回1,失败返回0

float ecost(float amount);//计算电费

EQ *eq=NULL;

int main()

{

int n=0;

float at;

eq=init();

if(!eq)

{

  printf("异常终止!\n");

  return 1;

}

while(1)

{

  printf("1、打印收费标准;2、修改收费标准;3、计算电费\n");

  n=0;

  while(n!=1 n!=2 n!=3)

      scanf("%d",n);

  switch(n)

  {

      case 1:showEQ();break;

      case 2:

          if(!setEQ())

              printf("异常!修改失败!\n\n");

          else

              printf("修改成功!\n\n");

          break;

      case 3:printf("请输入年度用电量:");

             scanf("%f",at);

             printf("年度用电费用:%.2f\n\n",ecost(at));

             break;

  }

}

return 0;

}

float ecost(float amount)//计算电费

{

int i;

float sum=0;

if(amount=eq-fb[0][0])

  return 0;

for(i=eq-tn-1;i=0;i--)

  if(amounteq-fb[i][0])

  {

      sum+=(amount-eq-fb[i][0])*eq-fb[i][1];

      amount=eq-fb[i][0];

  }

return sum;

}

EQ *init()//初始化计费标准,

{

if(eq)

  return eq;

eq=(EQ *)malloc(sizeof(EQ));

if(!eq)

  return NULL;

eq-tn=4;

eq-fb=NULL;

if(!newFb(4))

{

  free(eq);

  return NULL;

}

eq-fb[0][0]=0,eq-fb[0][1]=0.6;

eq-fb[1][0]=3000,eq-fb[1][1]=0.7;

eq-fb[2][0]=5000,eq-fb[2][1]=0.9;

eq-fb[3][0]=7000,eq-fb[3][1]=1.2;

return eq;

}

int newFb(int tn)//构建收费标准数组地址空间,成功返回1,失败返回0。(成功自动释放旧地址,无需单独释放)

{

int i,flag=1;

float **fbSave=NULL;

if(!eq)

  return 0;

eq-tn=tn;

if(!eq-fb)//如果有旧地址,保存该地址,用于还原

  fbSave=eq-fb;

eq-fb=(float **)malloc(sizeof(float *)*tn);

if(!eq-fb)

  flag=2;

for(i=0;flag itn;i++)

{

  eq-fb[i]=(float *)malloc(sizeof(float)*2);

  if(!eq-fb)

      flag=3;

}

if(flag==3)//内存申请失败,释放已申请的新地址,还原旧地址

{

  for(i=0;itn;i++)

      free(eq-fb[i]);

  free(eq-fb);

  eq-fb=fbSave;

  return 0;

}

if(flag==2)

{

  eq-fb=fbSave;

  return 0;

}

return 1;

}

void showEQ()//打印当前收费标准

{

int i;

printf("当前共计%d档计费标准:\n",eq-tn);

for(i=0;ieq-tn;i++)

  printf("电量超过%.0f,%s%.1f(实际金额%.1f)\n",eq-fb[i][0],i0?"每度再增加":"每度",i0?eq-fb[i][1]-eq-fb[i-1][1]:eq-fb[i][1],eq-fb[i][1]);

printf("\n");

}

int setEQ()//修改收费标准,成功返回1,失败返回0

{

int i,tn;

float money;

printf("请输入新的计费档数(输入0退出修改):");

scanf("%d",tn);

if(!tn)

  return 0;

if(newFb(tn))

{

  for(i=0;ieq-tn;i++)

  {

      printf("请输入第%d档电量阀值(%s%.0f),及%s(单位元)",i+1,i0?"必须大于":"大于等于",i0?eq-fb[i-1][0]:0,i0?"每度增加收费":"每度收费");

      scanf("%f%f",eq-fb[i][0],money);

      if(i==0 eq-fb[i][0]0)

      {

          printf("输入错误!起始阀值不能小于0!请重新输入\n");

          i--;

          continue;

      }

      if(i0  eq-fb[i][0]=eq-fb[i-1][0])

      {

          printf("输入错误!当前阀值不能小于上一次的阀值!请重新输入\n");

          i--;

          continue;

      }

      if(i==0)

          eq-fb[i][1]=money;

      else

          eq-fb[i][1]=eq-fb[i-1][1]+money;

  }

}

return 1;

}

//PS:你说你代码运算不对,看看是否把增量当金额来用了。

帮忙编个c语言程序。。。。

int calculate_fee(int charge)

{

int fee;

if(charge = 300)

fee = charge * 9;

else if(charge = 600)

fee = (charge - 300)*8 + 300*9;

else if(charge = 1000)

fee = (charge - 600) * 6 + 300*(8+9);

else

fee = (charge - 1000)*3 + 400*6 + 300*(8+9);

return fee;

}

void main()

{

FILE *input, *output;

char custumer_id[20];

int charge, fee, custmer_count=0, charge_sum=0, fee_sum=0;

input = (FILE *) fopen("用电量.txt", "rt");

if(input == null) {

printf("用电量.txt文件不存在\n");

exit(-1);

}

output = (FILE *)fopen("用电费用.txt", "wt");

if(output == null)

fclose(input);

printf("无法创建用电费用.txt文件\n");

exit(-2);

}

while(fscanf(input, "%s %d\n", custerm_id, charge) != EOF) {

fee = calculate_fee(charge);

fprintf(output, "%s\t%d\t%d\n", customer_id, charge, fee);

customer_count ++;

fee_sum += fee;

charge_sum += charge;

}

fclose(input);

fclose(output);

printf("客户数量=%d, 总耗电千瓦时=%d, 总的电费=%d\n", customer_count, charge_sum, fee_sum);

}


分享名称:求用电费用c语言调用函数 用电管理系统c语言
网页URL:http://pwwzsj.com/article/doeoies.html