c语言用电
⑴ 请c语言大神帮忙!
这个题目要点。
1、收费标准必须为可操作修改。
2、收费标准档位是不确定的,需要动态数组。(当然用常量,每次手改源代码就不需要了)
3、收费标准的输入除第一个阀值,其他要求增量(较上一个阀值),不能直接用于运算。
4、输入范围需要有验证。
最简易做法是将标准定义成常量,然后需要时修改代码常量,但这样对用户够不友好,所以我这里把标准定义成结构,定义函数动态申请数组,修改收费标准。
#include<stdio.h>
#include<malloc.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("异常终止! ");
return 1;
}
while(1)
{
printf("1、打印收费标准;2、修改收费标准;3、计算电费 ");
n=0;
while(n!=1 && n!=2 && n!=3)
scanf("%d",&n);
switch(n)
{
case 1:showEQ();break;
case 2:
if(!setEQ())
printf("异常!修改失败! ");
else
printf("修改成功! ");
break;
case 3:printf("请输入年度用电量:");
scanf("%f",&at);
printf("年度用电费用:%.2f ",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(amount>eq->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 && i<tn;i++)
{
eq->fb[i]=(float *)malloc(sizeof(float)*2);
if(!eq->fb)
flag=3;
}
if(flag==3)//内存申请失败,释放已申请的新地址,还原旧地址
{
for(i=0;i<tn;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档计费标准: ",eq->tn);
for(i=0;i<eq->tn;i++)
printf("电量超过%.0f,%s%.1f(实际金额%.1f) ",eq->fb[i][0],i>0?"每度再增加":"每度",i>0?eq->fb[i][1]-eq->fb[i-1][1]:eq->fb[i][1],eq->fb[i][1]);
printf(" ");
}
int setEQ()//修改收费标准,成功返回1,失败返回0
{
int i,tn;
float money;
printf("请输入新的计费档数(输入0退出修改):");
scanf("%d",&tn);
if(!tn)
return 0;
if(newFb(tn))
{
for(i=0;i<eq->tn;i++)
{
printf("请输入第%d档电量阀值(%s%.0f),及%s(单位元)",i+1,i>0?"必须大于":"大于等于",i>0?eq->fb[i-1][0]:0,i>0?"每度增加收费":"每度收费");
scanf("%f%f",&eq->fb[i][0],&money);
if(i==0 && eq->fb[i][0]<0)
{
printf("输入错误!起始阀值不能小于0!请重新输入 ");
i--;
continue;
}
if(i>0 && eq->fb[i][0]<=eq->fb[i-1][0])
{
printf("输入错误!当前阀值不能小于上一次的阀值!请重新输入 ");
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语言做电路编程设计
本设计是在51单片机与PC机上实现基于RS232串行通讯功能的,制定和实现可靠的上下位机通讯协议,完成显示数据的下传和读取,图形和文字有静止、移入移出等多种显示方式是本设计的最大特点。
第二章 系统组成与工作原理2.1系统设计要求和技术指标
此次设计的系统将由五部分(主要分为上位机部分和下位机部分,其中下位机主要分成,显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏)组成来实现,分别为:上位PC机﹑串行电平转换器﹑显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏。控制系统的结构框图如图2.1所示。
设计要求系统能控制中文LED汉字显示,主控板采用以单片机为核心的单片机系统。MCS-51单片机具有扩展性强﹑功能强盛﹑价格较低等长处,因此,采用Atmel公司的AT89C52单片机。采用MAX232作为RS-232与TTL电平的转换器件。PC机发送到下位机的数据先由SBUF(数据缓冲区)接收,再存入EEPROM器件AT24C256中。
汉字点阵显示屏可分为屏体和控制器两部分。屏体的主要部分是LED点阵屏,还有行列驱动电路。LED点阵显示屏采用8*8LED显示模块拼接而成。控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据预备好,一旦该行选通,这一行上的LED发光器件就可以根据列数据进行显示。
从理论上讲,不论显示图形还是文字,只要控制这些组成图形或文字的各个点所在位置相应的LED器件发光,就可以得到想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。16*16点阵共有256个发光二极管,显然单片机没有这么多的端口,假如采用锁存器来扩展端口,按8位的锁存器来计算,16*16的点阵需要256/8=32个锁存器。这个数字很大,因为这里仅仅是16*16的点阵,但是在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本也就将是一个很大的数字。因此,在实际应用中的显示屏几乎都不采用静态驱动显示方式之中设计,而是采用另一种称为动态扫描的显示方式。
所谓动态扫描,简朴地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行同名列共用一套列驱动器。以本次设计的16*16点阵为例,把所有的同一行发光管的阳极连在一起,把所有同一列发光管的阴极连在一起(共阳极接法),先发送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其点亮一定的时间,然后熄灭;再发送出第二行的数据并锁存,然后选通第二行使其点亮一定的时间,然后熄灭;……第十六行之后又重新点亮第一行,这样反复轮回。当这样轮回的速度足够快时(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。
采用串行传输方案,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面,这无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相称长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响LED的亮度。
为解决串行传输中列数据准备与列数据显示的时间矛盾问题,可以采用重叠处理的方法,即在显示本行各列数据的同时,传送下一行的列数据。为达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述的分析,可以归纳出列驱动器电路应具备的主要功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据送入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而会不影响本行的显示。
⑶ C语言课程设计----设计数据删除函数和用电收费管理程序
#include<stdio.h>
#include<string.h>
#include<ctype.h>
typedef struct resisdent
{
long num;
char adress[50];
char name[50];
long last_num;
long now_num;
long cost_remain;
struct resisdent *next;
}res;
void main()
{
res *enter();
res *delete(res *);
res *alter(res *);
void display(res *);
void search(res *);
res *jiaofei(res *);
res *chaobiao(res *);
int menu_select();
res *head=NULL;
res *p1,*p2,*p3;
int i,j,k;
for(;;)
{
switch(menu_select())
{
case 1:head=enter();break;
case 2:head=delete(head);break;
case 3:head=alter(head);break;
case 4:display(head);break;
case 5:search(head);break;
case 6:head=jiaofei(head);break;
case 7:head=chaobiao(head);break;
case 8:exit(0);
}
}
}
int menu_select()
{
int ch;
printf("***************Welcome to the eletronic system**********************************\n");
printf("\t1.Enter the static of the resisdent.\n");
printf("\t2.Delete the static of the resisdent.\n");
printf("\t3.Alter the static of the resisdent.\n");
printf("\t4.Display the static of the resisdent.\n");
printf("\t5.Search the static of the resisdent.\n");
printf("\t6.Hand up the cost.\n");
printf("\t7.Updata the reader.\n");
printf("\t8.Quit.\n");
printf("********************************************************************************\n");
do
{
printf("Make a chioce(1--8):");
scanf("%d",&ch);
}while(ch<1 || ch>8);
return(ch);
}
res *enter()
{
res *head;
res *p1,*p2,*p3;
int n=0;
p1=p2=(res *) malloc (sizeof(res));
printf("Enter the static of the resisdent:\n");
printf("num:");
scanf("%ld",&p1->num);
if(p1->num==0)
goto end;
printf("adress:");
scanf("%s",p1->adress);
printf("name:");
scanf("%s",p1->name);
printf("The number of last time:");
scanf("%ld",&p1->last_num);
printf("The number of now:");
scanf("%ld",&p1->now_num);
printf("The cost remain:");
scanf("%ld",&p1->cost_remain);
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(res *) malloc (sizeof(res));
printf("num:");
scanf("%ld",&p1->num);
if(p1->num==0)
goto end;
printf("adress:");
scanf("%s",p1->adress);
printf("name:");
scanf("%s",p1->name);
printf("The number of last time:");
scanf("%ld",&p1->last_num);
printf("The number of now:");
scanf("%ld",&p1->now_num);
printf("The cost remain:");
scanf("%ld",&p1->cost_remain);
}
end:
p2->next=NULL;
return(head);
}
res *delete(res *head)
{
res *p1,*p2;
long num;
if(head==NULL)
printf("The list is empty.!\n");
else
{
printf("Enter the num to delete:");
scanf("%ld",&num);
p1=p2=head;
while(p1->num!=num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(head==p1)
head=p1->next;
else
p2->next=p1->next;
}
else
printf("Not found!\n");
}
return(head);
}
res *alter(res *head)
{
res *p1,*p2;
long num;
if(head==NULL)
printf("Null list.\n");
else
{
printf("Enter the num to alter:");
scanf("%ld",&num);
p1=head;
while(p1->num!=num &&p1->next!=NULL)
p1=p1->next;
if(num==p1->num)
{
printf("new num:");
scanf("%ld",&p1->num);
printf("new adress:");
scanf("%s",p1->adress);
printf("new name:");
scanf("%s",p1->name);
printf("The number of last time:");
scanf("%ld",&p1->last_num);
printf("The number of now:");
scanf("%ld",&p1->now_num);
printf("The cost remain:");
scanf("%ld",&p1->cost_remain);
}
else
printf("Not found!\n");
}
return(head);
}
void display(res *head)
{
res *p1,*p2;
p1=p2=head;
printf("********************************************************************************\n");
printf("\tNUM\tADRESS\tNAME\tNUMBER_LAST\tNUMBER_NOW\tCOST_REMAIN\n");
while(p1!=NULL)
{
printf("\t%-3ld\t%-6s\t%-4s\t%-11ld\t%-10ld\t%-5ld\n",p1->num,p1->adress,
p1->name,p1->last_num,p1->now_num,p1->cost_remain);
p1=p1->next;
}
printf("********************************************************************************\n");
}
void search(res *head)
{
res *p1,*p2;
char ser[50];
int n;
printf("1.search by adress.\n");
printf("2.search by name.\n");
printf("choose 1 || 2:\n");
scanf("%d",&n);
if(head==NULL)
printf("NULL list.\n");
switch(n)
{
case 1:
printf("input the adress:");
scanf("%s",ser);
p1=p2=head;
while(strcmp(p1->adress,ser)!=0 &&p1->next!=NULL)
p1=p1->next;
if(strcmp(p1->adress,ser)==0)
{
printf("\tNUM\tADRESS\tNAME\tLAST_NUM\tNOW_NUM\tCOST_REMAIN\n");
printf("\t%-3ld\t%-6s\t%-4s\t%-11ld\t%-10ld\t%-5ld\n",p1->num,p1->adress,p1->name,
p1->last_num,p1->now_num,p1->cost_remain);
}
else
printf("Not found!\n");break;
case 2:
{
printf("input the name:");
scanf("%s",ser);
p1=p2=head;
while(strcmp(p1->name,ser)!=0 && p1->next!=NULL)
p1=p1->next;
if(strcmp(p1->name,ser)==0)
{
printf("\tNUM\tADRESS\tNAME\tLAST_NUM\tNOW_NUM\tCOST_REMAIN\n");
printf("\t%-3ld\t%-6s\t%-4s\t%-11ld\t%-10ld\t%-5ld\n",p1->num,p1->adress,p1->name,
p1->last_num,p1->now_num,p1->cost_remain);
}
else
printf("Not found!\n");break;
}
default:break;
}
}
res *jiaofei(res *head)
{
res *p1,*p2;
char adress[50];
long cost;
printf("input the adress:");
scanf("%s",adress);
if(head==NULL)
printf("NULL list!\n");
else
{
p1=head;
while(strcmp(p1->adress,adress)!=0 && p1->next!=NULL)
p1=p1->next;
if(strcmp(p1->adress,adress)==0)
{
printf("input the number of the cost:");
scanf("%ld",&cost);
p1->cost_remain+=cost;
}
else
printf("Not found!\n");
}
return(head);
}
res *chaobiao(res *head)
{
res *p1,*p2;
char adress[50];
if(head==NULL)
printf("NULL list!\n");
else
{
printf("input the adress:");
scanf("%s",adress);
p1=head;
while(strcmp(p1->adress,adress)!=0 && p1->next!=NULL)
p1=p1->next;
if(strcmp(p1->adress,adress)==0)
{
p1->last_num=p1->now_num;
printf("input the num:");
scanf("%ld",&p1->now_num);
}
else
printf("Not found!\n");
}
return(head);
}
总算做出来了,总体功能是可以的,我调试过了,只是在输入编号时,只要输入0就会结束,另外,对名字,编号等的长度我都作了限制,当时是为了方便我的习惯,你可以改一下,应该会吧!
我也比较菜,程序在容错方面还是有缺陷的,例如,当输入俩同样的地址,俩同样的名字的时候,你去查找的时候,只可以打出第一个。
有问题你可以反馈回来,我也在学c,在找东西练手呢!
⑷ 谁能帮忙用C语言编写一个关于电费管理系统的源程序代码
网上有很多C语言的源码查考滴
给你找了个这个,对你自己编写有帮助,要是还有问题自己找几个编程的QQ群加入交流下。
资源描述:Visual C++ 2005管理系统开发经典案例
文件大小:28.20MB
文件格式:rar
发布日期:2008-02-21 16:35:32
作者: 罗斌
内容简介
本书根据软件工程的设计思想,使用Visual C# 2005/SQL Server 2005(SQLEXPRESS)编程语言和数据库管理系统,以小区物业管理系统、学校教务管理系统、会员消费管理系统、家电维修管理系统、汽车货运管理系统、餐饮消费管理系统等当今最为经典实用的数据库开发案例的商业逻辑为基础,以实际开发流程为线索,详细地介绍了这些数据库开发案例的应用背景、业务分析、功能分析、数据库设计、代码编写的过程和方法,以期使读者迅速了解和掌握使用数据库开发现代管理信息系统的分析方法和编程技巧,从而全面提升开发管理信息系统的统筹操作能力。本书配套光盘提供了书中所有数据库开发案例的完整源代码和数据库文件。
本书案例典型、结构合理、讲解清晰、分析透彻、实用性强,适合作为 Visual C# 2005/SQL Server 2005(SQLEXPRESS)用户使用数据库开发管理信息系统的案头参考书,也可作为高等院校计算机和管理专业学生的毕业设计范例。
目录
前言
第1章 小区物业管理系统
1.1 小区物业管理系统总体分析
1.2 小区物业管理系统功能分析
1.2.1 登录管理系统模块分析
1.2.2 退出管理系统模块分析
1.2.3 系统帮助信息模块分析
1.2.4 分配用户权限模块分析
1.2.5 修改用户密码模块分析
1.2.6 小区信息设置模块分析
1.2.7 楼栋信息管理模块?治?br> 1.2.8 公共财产管理模块分析
1.2.9 业主登记管理模块分析
1.2.10 业主迁出管理模块分析
1.2.11 车位使用管理模块分析
1.2.12 公共维修管理模块分析
1.2.13 业主维修管理模块分析
1.2.14 服务投诉管理模块分析
1.2.15 突发事件管理模块分析
1.2.16 水电气费登记模块分析
1.2.17 水电气费查询模块分析
1.2.18 水电气费交纳模块分析
1.2.19 物管费用登记模块分析
1.2.20 物管费用查询模块分析
1.2.21 物管费用交纳模块分析
1.2.22 其他费用交纳模块分析
1.2.23 业主统计报表模块分析
1.2.24 投诉统计报表模块分析
1.2.25 业主维修报表模块分析
1.2.26 公共维修报表模块分析
1.2.27 收入统计报表模块分析
1.3 小区物业管理系统数据库设讨
1.3.1 操作用户数据表设计
1.3.2 车位使用数据表设计
1.3.3 费用收据数据表设计
1.3.4 服务投诉数据表设计
1.3.5 公共财产数据表设计
1.3.6 公共维修数据表设计
1.3.7 楼栋信息数据表设计
1.3.8 迁出信息数据表设计
1.3.9 水电气费数据表设计
1.3.10 突发事件数据表设计
1.3.11 物管费用数据表设计
1.3.12 小区信息数据表设计
1.3.13 业主维修数据表设计
1.3.14 业主信息数据表设计
1.4 编写小区物业管理系统实现代码
1.4.1 编写管理系统主窗体代码
1.4.2 编写登录管理系统模块代码
1.4.3 编写小区信息设置模块代码
1.4.4 编写分配用户权限模块代码
1.4.5 编写修改用户密码模块代码
1.4.6 编写系统帮助信息模块代码
1.4.7 编写楼栋信息管理模块代码
1.4.8 编写公共财产管理模块代码
1.4.9 编写业主登记管理模块代码
1.4.10 编写业主迁出管理模块代码
1.4.11 编写车位使用管理模块代码
1.4.12 编写公共维修管理模块代码
1.4.13 编写业主维修管理模块代码
1.4.14 编写服务投诉管理模块代码
1.4.15 编写突发事件管理模块代码
1.4.16 编写水电气费登记模块代码
1.4.17 编写水电气费查询模块代码
1.4.18 编写水电气费交纳模块代码
1.4.19 编写物管费用登记模块代码
1.4.20 编写物管费用查询模块代码
1.4.21 编写物管费用交纳模块代码
1.4.22 编写其他费用交纳模块代码
1.4.23 编写业主统计报表模块代码
1.4.24 编写投诉统计报表模块代码
1.4.25 编写业主维修报表模块代码
1.4.26 编写公共维修报表模块代码
1.4.27 编写收入统计报表模块代码
第2章 学校教务管理系统
第3章 会员消费管理系统
第4章 家电维修管理系统
第5章 汽车货运管理系统
第6章 餐饮消费管理系统
⑸ 用c语言计算电功率w=l∧2R
电功率是用P表示的。计算电功率的函数如下:
double epow(double i,double r)
{return i*i*r;}
⑹ 水电费管理用C语言进行系统编程
使用习语言, 很完美的中文知识, 有问题还可以在 习语言论坛 请教专家。
⑺ C语言设计问题 电费系统
#include<stdio.h>
/*
*计算一层花费
*/
voidper_layer(int*money,inta,intb)
{
intn=0;
n=a-b;
if(n>0)//降
*money=n*10;
else//升
{
n=b-a;
*money=n*20;
}
}
/*
*计算一次(一天)花费
*返回总钱数
*/
intper_time(int*a,intlen)
{
intmoney=0;
inti=0;
intret=0;//sum
for(i=0;i<(len-1);i++)
{
per_layer(&money,a[i],a[i+1]);
ret+=money;
}
returnret;
}
intmain()
{
intnArray[1000]={0};
intSi[101]={0};
inti=0;
intn=0;
intj=0;
// intmoney=0;
// inta1[]={2,8,5};
// inta2[]={2,9,7,3,4,6,1};
// money=per_time(a2,7);
while(scanf("%d",&n),n!=0)
{
while(i!=n)
{
scanf("%d",&(Si[i]));
i++;
}
i=0;
nArray[j++]=per_time(Si,n);
}
for(i=0;i<j;i++)
{
printf("%d ",nArray[i]);
}
return0;
}
运行结果:
⑻ c语言暂停几秒比连续运行代码省电吗
这个是会省一点电的。
但是里面的单位是毫秒,而不是秒。
关于sleep()函数在windows系统和linux系统下是两个不同的函数,差别较大,但功能是相同的,都是将进程挂起一段时间。
windows系统下函数名为Sleep(),其函数原型为:
#include <windows.h> 函数使用头文件
void Sleep(DWORD dwMilliseconds); 参数为毫秒
参考代码:
#include <windows.h> //win头文件
#include<stdio.h>
int main()
{
int i;
printf("你");
fflush(stdout); //赞制刷新缓存,输出显示
for( i=0;i<10;i++ )
{
Sleep(1000); /* windows 使用Sleep,参数为毫秒 */
printf(".");
fflush(stdout);//赞制刷新缓存,输出显示
}
printf("好\n"); /*输出“你”和“好”之间会间隔10秒,并输出10个点*/
return 0;
}
linux系统下函数名为sleep(),其函数原型为:
#include <unistd.h> 函数使用头文件
unsigned int sleep(unsigned int seconds);参数为毫秒 (如果需要更精确可以用usleep,单位为微秒)
修改上面的代码,以适应linux系统
#include <unistd.h> //1、linux 头文件
#include<stdio.h>
int main()
{
int i;
printf("你");
fflush(stdout);//赞制刷新缓存,输出显示
for( i=0;i<10;i++ )
{
sleep(1); /*2、linux 使用sleep,参数为秒*/
printf(".");
fflush(stdout);//赞制刷新缓存,输出显示
}
printf("好\n"); /*输出“你”和“好”之间会间隔10秒,并输出10个点*/
return 0;
}
注意:
1.在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h>
2.在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep。
3.在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。
========================
delay()是循环等待,该进程还在运行,占用处理器。
sleep()不同,它会被挂起,把处理器让给其他的进程,所以会省一点电。
⑼ c语言程序设计(周信东版)的综合程序设计如下:编写程序,从键盘输入某楼6家住户某月的水电消耗及水费和电费
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char user[4];
char waterNum[4];
char elecNum[4];
char inlinebuf[32];
char outlinebuf[32];
char pbuf[256];
FILE *fp1;
FILE *fp2;
int WaterNum=0;
int ElecNum=0;
int length =0;
int m=0;
int n=0;
int weishuflag=0;
int flagnum=0;
int i=0;
int j=0;
float waterPrice=0.0;
float elecPrice=0.0;
if((fp1=fopen("./input.dat","r"))==NULL)
{
printf("open input data error!\n");
return -1;
}
if((fp2=fopen("./change.dat","w"))==NULL)
{
printf("open input data error!\n");
return -1;
}
fseek(fp1,0,SEEK_END);
length = ftell(fp1);
fseek(fp1,0,SEEK_SET);
memset(pbuf,0,sizeof(pbuf));
printf("the input data length == %d\n",length);
fread(pbuf,length,1,fp1);
fseek(fp2, 0, SEEK_SET);
sprintf(outlinebuf,"住户\t\t水费\t\t电费\n");
fputs(outlinebuf, fp2);
while(length--)
{
if(pbuf[m]!='\n')
{
inlinebuf[n]=pbuf[m];
n++;
}
else
{
j = 0;
inlinebuf[n++]='\t'; //为处理每一行的最后一个数据(即用电量),需加入一个tab或空格键
inlinebuf[n] = '\0';//一行数据结束
while( inlinebuf[j] != '\0')
{
switch(flagnum)
{
case 0: //用户
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
user[i]=inlinebuf[j];
i++;
}
else
{
user[i]='\0';
flagnum++;//表示之前获取的是住户,下两个数据分别获取用水量与用电量
i=0;
}
break;
case 1: //用水量
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
waterNum[i]=inlinebuf[j];
i++;
}
else
{
waterNum[i]='\0';
weishuflag=i;//表示当前数据的位数,住户、用水量、用电量均限制为三位数以内
flagnum++;//表示下个数据获取的是用电量
if(weishuflag == 1)
{
WaterNum = waterNum[0] - 48;
}
else if(weishuflag == 2)
{
WaterNum = (waterNum[0] - 48)*10 + (waterNum[1] - 48);
}
else
{
WaterNum = (waterNum[0] - 48)*100 + (waterNum[1] - 48)*10 + (waterNum[2] - 48);
}
i=0;
weishuflag = 0;
}
break;
case 2: //用电量
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
elecNum[i]=inlinebuf[j];
i++;
}
else
{
elecNum[i]='\0';
weishuflag=i;//表示当前数据的位数,住户、用水量、用电量均限制为三位数以内
flagnum = 0;//表示一行三个数据获取完毕
if(weishuflag == 1)
{
ElecNum = elecNum[0] - 48;
}
else if(weishuflag == 2)
{
ElecNum = (elecNum[0] - 48)*10 + (elecNum[1] - 48);
}
else
{
ElecNum = (elecNum[0] - 48)*100 + (elecNum[1] - 48)*10 + (elecNum[2] - 48);
}
i=0;
weishuflag = 0;
}
break;
default:
break;
}
j++;
}
waterPrice = (float)WaterNum * 1.5;
elecPrice = (float)ElecNum * 0.5;
printf("The user == %s,waterNum == %d,elecNum == %d\n",user,WaterNum,ElecNum);//打印用户,用水量,用电量
printf("The user == %s,waterPrice == %.1f,elecPrice == %.1f\n\n",user,waterPrice,elecPrice);//打印用户,水费,电费
sprintf(outlinebuf,"%3s \t\t%4.1f \t\t%4.1f\n",user,waterPrice,elecPrice);
fputs(outlinebuf, fp2);//写入每一行数据(数据格式为 住户 + 水费 + 电费)
memset(outlinebuf,0,sizeof(outlinebuf));
memset(inlinebuf,0,sizeof(inlinebuf));
n=0; //一行数据处理结束,开始新的一行
}
m++;
}
fclose(fp1);
fclose(fp2);
return 0;
}
input.dat(每一行数据分别为住户 用水量 用电量,以空格或tab键隔开,且每行数据必须以回车结尾)
101 5 150
201 4 90
301 4 120
401 3 78
501 4 60
601 6 105
charge.dat (输出文件格式如下)
住户 水费 电费
101 7.5 75.0
201 6.0 45.0
301 6.0 60.0
401 4.5 39.0
501 6.0 30.0
601 9.0 52.5
⑽ C语言用电压电流计算电阻
#include <stdio.h>
int main()
{
float v,i,r;
printf("输入电压值:");
scanf("%f",&v);
printf("输入电流值:");
scanf("%f",&i);
r=v/i;
printf("电阻值为%.2f欧姆\n",r);
return 0;
}