![](https://lstatic.shangxueba.com/jiandati/h5/images/m_q_title.png)
【说明】
某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件dial.txt,其数据格式如下:
拨入或拨出标记通话开始时间通话结束时间对方号码 注1:数据字段以一个空格作为分隔符。
注2:拨入和拨出标记均为小写字母。拨入标记为i,表示其他用户呼叫本机,本机用户不需付费:拨出标记为o,表示本机呼叫其他用户,此时本机用户需要付费。
注3:通话开始和结束时间的格式均为HH:MM:SS。其中HH表示小时,取值00~ 23;MM表示分钟,取值00~59;SS表示秒,取值00~59。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为1秒,最长不超过24小时。
注4:跨月的通话记录计入下个月的通话数据文件。
例如“o23:01:1200:12:15…”表示本次通话是本机呼叫其他用户,时间从23时01分12秒至次日的0时12分15秒,通话时间为71分03秒。
下面程序的功能是计算并输出该用户本月电话费(单位:元)。
通话计费规则为:
1.月通话费按每次通话费累加;
2.每次的通话费按通话时间每分钟0.08元计算,不足1分钟时按1分钟计费。
对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日0点0分0秒的时间长度(以秒为单位),然后算出本次通话时间和通话费。
例如,若输入文件dial.txt的数据如下所示,则输出fee=7.44。
o 14:05:23 14:11:25 82346789
i 15:10:00 16:01:15 13890000000
o 10:53:12 11:07:05 63000123
o 23:01:12 00:12:15 13356789001
【C程序代码】
include<stdio.h>
FILE *fin;
Int main()
{
char str[80];
int h1,h2,m1,m2,s1,s2;
long t_start,t_end,interval;
int c;
double fee=0;
fin=fopen("dial.txt","r");
if (!fin)
return-1;
while (!feof(fin)) {
if (!fgets(str,80,fin)) break;
if ((1) ) continue;
h1= (str[2] -48) *10+str[3] -48;
m1= (str[5] -48) *10+str[6] -48;
s1= (str[8] -48) *10+str[9] -48;
h2= (str[11] -48) *10+str[12] -48;
m2= (str[14] -48) *10+str[15] -48;
s2=(str[17]-48)*10+str[18]-48;
t_start=h1*60*60+m1*60+s1; /*通话开始时间*/
t_end=h2*60*60+m2.60+s2; /*通话结束时间*/
if((2) ) /*若通话开始和结束时间跨日*/
interval;(3)-t_start+t_end;
else
interval=t_end-t_start;
c= (4) ; /*计算完整分钟数表示的通话时间*/
if (interval % 60)
(5);
fee+=c*0.08;
}
fclose(fin);
printf("fee=%.2lf\n",fee);
return 0;
}
【填空题】1、简易秒表的设计,根据电路补充程序 要求: 设计一个简易秒表,系统一上电,数码管显示“00”每间隔1S,显示加1,当加到60时,数码管显示0,从0开始加。<reg51.h> //包含头文件reg51.h com1=P3^0; com2=P3^1; unsigned char dm ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9对应段码 unsigned char c1,miao=0; //定义无符号字符型变量c1为5万us计数器,变量miao为秒计数器。 void ys(unsigned int t)//延时函数 { while( ) } void t0csh()//T0初始化程序的编写 { TH0=(65536- ) 256;//设置T0计数初值高8位,定时时间50ms TL0=(65536- ) 256;//设置T0计数初值低8位,定时时间50ms =0X01; //设置T0为工作方式1,定时器使用 //定时器T0中断允许 //总中断允许 //启动T0 } void xs()//显示函数 { com1= ;com2= ;//选中1号数码管 P2=dm[ ];//显示变量miao的十位 ys(1000); =0xff;//关闭显示,消影 com1=0;com2=1;//选中2号数码管 P2=dm[ ];//显示变量a的个位 ys(1000); //关闭显示,消影 } void main() { //t0初始化 While { xs(); } void tozd( ) //T0中断函数 { TH0=(65536-50000) 256; TL0=(65536-50000) 256; ;//5万us计算器加1 if( )//1S时间到 { c1=0; miao++; if( >59) miao=0;//当秒计数到60,回到0 } }
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!