阅读以下说明和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;
}
第1题
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【说明】
设M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值后跟用“()”括起来的各子树的列表(若有子树的话),各子树的列表间用“,”分隔。例如,如下图所示的三叉树可用列表a(b(c,d),e,f(g,h,i))表示。
本程序根据输入的列表生成一棵M叉树,并由M叉树再输出列表。
【函数】
include
include
define M 3 /*三叉树*/
typedef struct node{
int val;
struct node *subTree[M];
}NODE;
char buf[255], *str=buf;
NODE *d=NULL;
NODE *makeTree() /*由列表生成M叉树*/
{
int k; NODE *s;
s=(1);
s->val=*str++;
for(k=0;k<M;k++)
s->subTree[k]=NULL;
if(*str=='(')
{
k=0;
do{
str++;
s->subTree[k]=(2);
if(*str==')')
{
str++;
break;
}
k=k+1;
}while((3));
}
return s;
}
void walkTree(NODE *t) /*由M叉树输出列表*/
{
int i;
if(t !=NULL)
{
(4);
if(t->subTree[0]==NULL)
return;
putchar('(');
for(i=0;i<M;i++)
{
(5);
if(i !=M-1 && t->subTree[i+1]!=NULL)
putchar(',');
}
putchar(')');
}
}
void main()
{
printf("Enter exp: ");
scanf("%s",str);
d=makeTree();
walkTree(d);
putchar('\n');
}
第2题
阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【函数1.1说明】
本程序可以打印出如下图形(菱形):
*
***
*****
*******
*****
***
*
【函数2.1】
main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf(" ");
for((1))
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for((2))
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
【函数2.2说明】
通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“CsaiWgm”中保存,输入的字符串以“!”结束。
【函数2.2】
include "stdio.h"
main()
{
FILE *fp;
char str[100],filename[10];
int i=0;
if((fp=fopen("CsaiWgm","w"))==NULL)
{
printf("cannot open the file\n");
exit(0);
}
printf("please input a string:\n");
gets(str);
while((3))
{
if(str[i]>='a'&&str[i]<='z')
str[i]=(4);
fputc(str[i],fp);
(5);
}
fclose(fp);
fp=fopen("CsaiWgm","r");
fgets(str,stden(str)+1,fp);
printf("%s\n",str);
fclose(fp);
}
第3题
阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。
【说明】
有数组A(4,4),把1到16个整数分别按顺序放入A(1,1),…,A(1,4),A(2,1),…,A(2,4),A(3,1),…,A(3,4),A(4,1),…,A(4,4)中,下面的流程图用来获取数据并求出两条对角线元素之积。
【流程图】
第5题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【程序2.1说明】
已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。
【程序2.1】
include <stdioh>
define N 100
void main()
{
float a[N+l],x;
int i,p;
printf("输入已经排好序的数列: ");
for(i=0; i<N; i++)
scanf(%f",&a[i]);
printf("输入要插入的数:");
scanf("%f",&x);
for(i=0,p=N; i<N; i++)
if(x<a[i])
{
(1)
break;
}
for(i=N-1; i>=p; i--)
(2)
(3)
for(i=0; i<=N; i++)
prinff("%f\t",a[i]);
}
【程序2.2说明】
本程序用变量count统计文件中字符的个数。
【程序2.2】
include <stdio.h>
include <stdlib.h>
void main()
{
FILE *fp;
long count=0;
if((fp=fopen("letter.txt","r"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while(!feof(fp))
{
(4)
count++;
}
printf("count=%d\n",count);
(5)
}
第6题
阅读以下应用说明及Visual Basic部分程序代码,将应填入(n)处的字句写在对应栏内。
【说明】
在窗体上画一个名称为Combo1的组合框,画两个名称分别Labe11、Labe12及Caption属性分别为“城市名称”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在Labe12中给出提示“已成功添加输入项”;如果存在,则在Labe12中给出提示“输入项已在组合框中”。
【程序】
Private Sub Combo1 (1) (KeyAscii As Integer)
If KeyAscii=(2) Then
For i=0 To (3)
If Combo1. Text=(4) Then
Labe12. Caption ="输入项已在组合框中"
Exit Sub
End If
Next i
Label2. Caption ="已成功添加输入项"
Combo1. (5) Combo1.Text
End If
End Sub
第7题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
编写程序,对于从键盘输入的3个实数a、b、c,计算实系数一元二次方程的根并输出所求的根。
【函数】
include<sldio.h>
include<sldlib.h>
include<math.h>
Main()
{
float a,b,c,delta,x1,x2;
printf("Enter a,b,c");
scanf("%f%f%f",&a,&b,&c));
if((1))
if((2))
printf("Input error!\n");
else
printf("The single root is%f\n",(3));
else
{
delta=b*b-4*a*c;
if((4))
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("x1=%8.2f\nx2=%8.2f\n",x1,x2,);
}
else if(delta==0)
printf("x1=x2=%8.2f\n",(5);
else
{
Printf("z2=%8.2f+%8.2f*i\n",-b/(2*a),sqrt(-delta)/)(2*abs(a)));
Printf("z2=%8.2f-%8.2f*i\n",-b/(2*a),sqrt(-delta)/(2*abs(a)));
}
}
}
第8题
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。
import java.io.*;
public class testThrows{
public static (1) readString() (2) IOException{
int ch;
String r="";
boolean done=false;
while((3)){
ch=System.in.read();
if(ch<0 || ch=0xd) //处理回车符中第一个符号
done=true;
else
r=r+(char)ch;
}
return r;
}
public static void main(Stling args[]){
String str;
(4) {
str=readString();
} (5) (IOException e){
System.out.println("error");
return;
}
System.out.println("input integer: "+Integer.parselnt(str));
}
}
第9题
阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
应用说明
某单位举办了一场知识竞赛,有300名选手参加竞赛,依次从1~300为选手编号。竞赛时间为9:00~11:00。8道竞赛题目依次从“A”~“H”编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。
选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(A~H)、是否正确(Y/N)。
对竞赛情况进行统计和排名的规则如下:
1.若选手X在竞赛时提交的题目P解答正确,则解答该题目所用时间如下计算:
解答题目P的用时=提交题目P正确的时间-竞赛的开始时间+罚时
罚时;提交题目P错误解答的次数×20
例如:设14号选手在10:27提交了题目A的正确解答,则该选手正确解答该题目所用时间为87分钟,由于他在09:37和09:52两次提交了题目A的错误解答,因此罚时为2×20=40分钟,所以14号选手解答题目A的用时=87+40=127(分钟)。
2.已经提交正确答案的题目再次提交时不再计算。
3.竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。
4.排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前:若完成的题目数和所用时间均相等,则名次相同;完成题目数为0的选手不参加排名。
本应用程序的运行窗口如下图所示:
窗口中的两个文本框为Txt_time和Txt_player,分别用于录入提交答案的时间和选手编号。组合列表框Combol提供题目编号(A~H),录入时从中选择。检查框Chk yn用于输入解答是否正确信息。当单击“确定”按钮(Cmd_comfirrn)时,录入的提交信息加入组合列表框Listl中,排名情况在列表框List2输出。单击“关闭”按钮时退出应用程序。
在开发过程中,需要编写的部分程序代码如下:程序代码
Private Tyve Info
no As Integer '选手编号
hum As Integer '完成的题目数量
time As Integer '完成题目的总用时
d(8) As Integer 'd[i]用于记录提交第i个题目错误答案的次数
a(8) As Boolean 'aC[i]用于记录第i个题目是否已经提交正确答案
End Type
Dim R(301) As Info 'R[j]用于统计编号为j的选手提交答案的情况
Dim Maxlndex As Integer 'MaxIndex记录提交答案的选手中编号最大者
Private Sub Form_Load()
For i=1 To 8
Combol.Addltem Chr( (1) )
Next
Combol.Text = Combol.List(0): Txt_time. Text= "": Txt_player. Text= ""
For i = 1 To 300
R(i).num=0: R(i).time = 0: R(i).no = I
Forj = 1 To 8
R(i).d(j) = 0: R(i).a(j) = False
Next j, i
End Sub
Private Sub Crud_confirm_Click()
Dimh, m, k, time As Integer, ch, pass, sl As String
k = InStr(Txt_time.Text, ":"): If k < 2 Then GoTo errorl
h = Val(Left(Txt_time. Text, k - 1 )): m = Val(Mid(Txt_time. Text, k + 1 ))
Ifh > 11 Or h = 11 And m > 0 Or m >= 60 Then GoTo errorl
time=(2) '计算答题时间,以分钟为单位
If Txt player. Text < 1 Or Txt_player. Text> 300 Then GoTo errorl
ch=(3) '取题目编号
pass = llf(Chk_yn. (4)= 0, "N", "Y")
s1 = Txt__time. Text+ Space(4)+ Txt_player. Text
s1 = s1 + Space(10 - Len(Txt_player. Text))+ ch + Space(8) + pass
Listl .Addltem s1
k = Val(Txt_player. Text) 'k为选手编号
R(k).no = k '编号为K的选手的提交信息记录在下标在K的数组元素中
If k > Maxlndex Then Maxlndex = k
m = Asc(ch) - Ase("A")
Ifpass <> "Y" Then '编号为K的选手提交第m个题目的解答不正确
R(k).d(m) = R(k).d(m) + 1
Elself R0(k).a(m) <> True Then '已经提交正确的题目的解答不再计算
R(k).a(m) = True: R(k).num = R(k).num + I
R(k).time = R(k).time +(5)
Call Statistic '调用过程 Statistic 进行实时排名和输出
End If
Exit Sub
errorl: MsgBox "录入信息有误!", vbOKOnly
End Sub
第10题
阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。
【说明】
C++标准模板库中提供了vector模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空间为std。vector模板类的部分方法说明如下表所示:
【C++代码】
include <iostream>
include <vector>
using namespace (1);
typedef vector< (2) > INTVECTOR;
const int ARRAY_SIZE = 6;
void ShowVector (INTVECTOR &theVector);
int main() {
INTVECTOR theVector;
// 初始化 theVector, 将theVector的元素依次设置为0至5
for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++}
theVector.push_back((3));
ShowVector(theVector); // 依次输出theVector中的元素
theVector.erase (theVector.begin () + 3};
ShowVector(theVector);
}
void ShowVector (INTVECTOR &theVector) {
if (theVector.empty ()) {
cout << "theVector is empty." << endl; return;
}
INTVECTOR::iterator (4);
for (theIterator=theVector.begin(); theIterator !=theVector.end(); theIterator++) {
cout << *theIterator;
if (theIterator != theVector.end()-1) cout << ", ";
}
cout << end1;
}
该程序运行后的输出结果为:
0,1,2,3,4,5
(5)
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!