阅读以下说明和C语言程序,将应填入(n)。【说明】某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件dial.txt,其数据格式如下:拨入或拨出标记通话开始时间通话结束时间对方号码 注1:数据字段以一个空格作为分隔符。注2:拨入和拨出标记均为小写字母。拨入标记为i,表示其他用户呼叫本机,本机用户不需付费:拨出标记为o,表示本机呼叫其他用户,此时本机用户需要付费。注3:通话开始和结束时间的格式均为HH:MM:SS。其中HH表示小时,取值00~ 23;M

题目

阅读以下说明和C语言程序,将应填入(n)。

【说明】

某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件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;

}


相似考题

3.●试题二阅读以下说明和流程图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长途。电信局保存了长话用户档案和长话业务档案。长话用户档案的记录格式为长话业务档案的记录格式为电话用户每次通话的计费数据都自动地记录在电信局程控交换机的磁带上。计费数据的记录格式为该电信局为了用计算机自动处理长话收费以提高工作效率,开发了长话计费管理系统。该系统每月能为每个长话用户打印出长话缴费通知单。长话缴费通知单的记录格式为流程图描述了该系统的数据处理过程。该系统每天对原始的计费数据进行分类排序,并确定每个通话记录的通话类型(市话/国内长途/国际长途),再根据话费单价文件算出每个通话记录应收取的话费。因此,形成的日计费文件中,增加了两个数据项:通话类型和话费。该系统每日对日计费文件进行累计(按电话号码和通话类型,对该类型的话费进行累计,得到该电话号码该通话类型的当月话费总计),形成月计费文件。月计费文件经过长话出账处理形成长话账单文件。长话账单文件的记录格式为长话账单文件经过处理5和处理6的处理后,就可以形成长话缴费通知单。【问题1】(1) 请说明流程图1中的文件F0、F1分别是哪个文件。(2) 处理1和处理5分别按照哪些数据项进行分类?【问题2】处理4能发现哪些错误(不需考虑设备故障错误)?【问题3】说明处理6的功能。【流程图】(如图3所示)图 3

更多“阅读以下说明和C语言程序,将应填入(n)。【说明】 某电信公司记录了每个用户的详细通话情况(每次通话 ”相关问题
  • 第1题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第2题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }


    正确答案:()
    (1)FILE *fp; (2)NULL  (3)!feof(fp)  (4)fgetc(fp)   (5)fclose(fp)
    从程序功能来看,程序中需要用到文件型指针变量中,而主函数体没有定义,所以(1)应该填写的是“FILE *fp;”。接下来的语句是标准的打开只读文本文件的语句,显示的是文件没打开,说明文件名不存在,也就是为“NULL”。接着的while循环语句中有两处空白。前一个空白是控制循环的条件,从程序功能来看,要将文本文件中的所有字符显示出来,这儿当然只能填写“不是文件尾则继续循环”,具体说,需要填写的是“!feof(fp)”。(4)出现在循环体中的语句中,该循环体的功能是从fp指向的文本文件中读取单个字符并显示在屏幕上,此处使用的是putchar函数,该函数的功能是将形参对应的字符显示在屏幕上,所以该处的空白就是要显示的字符,这个字符必须是从文本文件中读取的单个字符,完成这项工作的可以利用fgetc()函数,所以(4)填写的是“fgetc(fp)”。最后一句应当是关闭文件,所以(5)应填fclose(fp)。

  • 第3题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析:

  • 第4题:

    阅读以下说明、Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    IC卡和200卡都是从电话卡派生的。下面的程序将电话卡定义为抽象类。其中 balance为双精度变量,代表电话卡中的余额;cardNumber是长整型变量,代表电话卡的卡号;password是整型变量,代表电话卡的密码;connectNumber是字符串变量,代表电话卡的接入号码;connected是布尔变量,代表电话是否接通。

    performDial()实现各种电话接通后的扣除费用的操作。其中200卡每次通话扣除0.5元的通话费用和附加费用;IC卡每次通话扣除0.9元的通话费。TimeLeft()方法用于测试电话卡余额还可以拨打电话的次数。performConnection()用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。

    【程序】

    abstract class PhoneCard

    {

    doubte balace;

    (1) perfermDial();

    double getBalance()

    { return balance; }

    double TimeLeft()

    {

    double current=balance;

    int times=0;

    do

    {

    (2)

    times++;

    }white(balance>=0);

    balance=current;

    return times-1;

    }

    }

    abstract class Number_PhoneCard extends PhoneCard

    {

    long cardNumber:

    int password;

    String connectNumber;

    Boolean connected;

    Boolean performConnection(long cn, int pw)

    {

    if(cn==cardNumber && (3) )

    {

    connected=true;

    return true;

    }

    else return false;

    }

    }

    class IC Card (4)

    {

    boolean performDial()

    {

    if(balance>0.9)

    {

    balance-=0.9;

    return true;

    }

    else return false;

    }

    }

    class D200_Card (4)

    {

    static double additoryFee;

    static{ additoryFee=0.1; }

    boolean performDial()

    {

    if(balance>(0,5+additeryFee))

    {

    (5)

    return true;

    }

    else return false;

    }

    }


    正确答案:(1)abstract Boolean (2)performDial(); (3)pw==password (4)extends Number_PhoneCard (5)balance-=0.5+additoryFee;
    (1)abstract Boolean (2)performDial(); (3)pw==password (4)extends Number_PhoneCard (5)balance-=0.5+additoryFee; 解析:本题考查Java对抽象类的定义、继承及电话卡业务的实现。
    在Java程序设计语言中,抽象类是指在类中定义了抽象成员函数的类,程序中把基类PhoneCard定义为抽象类,其中有一个成员变量和三个成员函数,但是已给出定义的两个函数都不是抽象成员函数。因此,第(1)空的作用是把成员函数performDial0定义为抽象成员函数,结合后面的程序我们可以知道,函数performDial()的返回类型是布尔型,因此,此空的答案为abstract Boolean。
    第(2)空在函数TimeLeft()中,此函数用于测试电话卡余额还可以拨打电话的次数,要实现此功能应该知道每次电话接通后扣除的费用,函数performDial()能实现这个功能,此处应该是调用这个函数,因此,此空答案为performDial()。
    第(3)空在函数performConnection()中,此函数用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。结合程序中代码,我们知道此空是要判断密码是否正确,而参数pw中存放的是密码,因此,此空答案为pw==password。
    第(4)空是在派生类的定义时,对派生类继承关系的说明。电话卡的所有属性在抽象类Number_PhoneCard中都有了完整的定义,那么这两个电话卡的派生类应该继承 Number_PhoneCard抽象类,因此,此空答案为extends Number_PhoneCard。
    第(5)空在D200_Card类的performDial()函数中,这个函数的作用是对200卡每次通话进行扣费操作。根据题目条件,200卡每次通话扣除0.5元,再结合程序中的内容,我们可以推导出第(5)空要完成的任务是费用扣除操作,因此,此空答案为 balance-=0.5+additoryFee。

  • 第5题:

    试题三(共 15 分)

    阅读以下说明和 C 语言程序,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行) ,现将某用户某月的通话数据存入一个文本文件“dial.txt” ,其数据格式如下:

    拨入或拨出标记 通话开始时间 通话结束时间 对方号码

    注 1:数据字段以一个空格作为分隔符。

    注 2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o” ,表示本机呼叫其他用户,此时本机用户需要付费。

    注 3:通话开始和结束时间的格式均为:HH:MM:SS。其中 HH 表示小时,取值 00~23;MM 表示分钟,取值 00~59;SS 表示秒,取值 00~59。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为 1 秒,最长不超过 24 小时。

    注 4:跨月的通话记录计入下个月的通话数据文件。

    例如“o 23:01:12 00: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;

    }


    正确答案: