首页
试卷库
试题库
当前位置:
X题卡
>
所有题目
>
题目详情
在对互斥资源(信号量)进行P、V操作中,P操作是 (18) ,而V操作是 (19) 。 假如有3个进程(p1,p2,p3)都需要共享资源(m,个数为2)。则p1申请该资源时,执行操作: (20) 。...
查看本题答案
包含此试题的试卷
初级程序员《简单单选》真题及答案
点击查看
你可能感兴趣的试题
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
1
2
3
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
-7~1
-7~3
-3~0
-3~10
下列说法中正确的是
进程之间同步,主要源于进程之间的资源竞争,是指对多个相关进程在执行次序上的协调
信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由P-V操作来改变
V操作是对信号量执行加1操作,意味着释放一个单位资源,加1后如果信号量的值小于等于0,则从等待队列中唤醒一个进程,现进程变为等待状态;否则现进程继续进行
临界区是指每次仅允许一个进程访问的资源
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
-7~1
-7~3
-3~0
-3~10
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
1
2
3
试题12在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许两个进程进入互斥段
—2~0
—2~1
—6~2
—8~1
在对互斥资源信号量进行PV操作中P操作是18而V操作是19假如有3个进程p1p2p3都需要共享资源m
blocked
ready
new
dead
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信
1
2
3
在对互斥资源信号量进行PV操作中P操作是18而V操作是19假如有3个进程p1p2p3都需要共享资源m
使用一个资源
分配一个资源
释放一个资源
共享一个资源
下列说法中正确的是
进程之间同步,主要源于进程之间的资源竞争,是指对多个相关进程在执行次序上的协调
信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由P/
V.操作来改变
V操作是对信号量执行加1操作,意味着释放一个单位资源,加1后如果信号量的值小于等于0,则从等待队列中唤醒一个进程,现进程变为等待状态;否则现进程继续进行
临界区是指每次仅允许一个进程访问的资源
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
-7~1
-7~3
-3~0
-3~10
在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许2个进程进入互斥段临界区则信号量
1
2
3
4
下列说法中正确的是
进程之间同步,主要源于进程之间的资源竞争,是指对多个相关进程在执行次序上的协调
信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由P/操作来改变
V操作是对信号量执行加1操作,意味着释放一个单位资源,加1后如果信号量的值小于等于0,则从等待队列中唤醒一个进程,现进程变为等待状态;否则现进程继续进行
临界区是指每次仅允许一个进程访问的资源
在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许2个进程进入互斥段临界区则
1
2
3
4
试题12在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许两个进程进入互斥段
1
2
3
4
在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许2个进程进入互斥段临界区则信号量
-2~0
-2~1
-6~2
-8~1
有一个计数信号量S1假如若干个进程对S进行了28次P操作和18次V操作之后信号量S的值为02假如若干
2
3
5
7
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信号量S
1
2
3
在操作系统的进程管理中若系统中有10个进程使用互斥资源R每次只允许3个进程进入互斥段临界区则信
-7~1
-7~3
-3~0
-3~10
在操作系统的进程管理中若系统中有8个进程要使用互斥资源R但最多只允许2个进程进入互斥段临界区则
-2~0
-2~1
-6~2
-8~1
热门试题
更多
[说明]已知1900年1月1日是星期一下面的函数count_5_13intyear用于计算给定的年份year中有几个黑色星期五黑色星期五指既是13日又是星期五的日期函数count_5_13intyear首先算出年份year的1月13日是星期几然后依次计算每个月的13日是星期几若是星期五则计数程序中使用了函数isLeapYearintyear其功能是判断给定年份是否为闰年返回值为1或0分别表示year是或不是闰年[C语言函数]intCount_5_13intyearintdate;/*date为0表示星期日为1~6分别表示星期一至星期六*/longdays=0;/*days记录天数*/intmyc=0;/*c用于表示黑色星期五的个数*/ifyear<1900return-1;/*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/days=12fory=1900;y<year;y++days+=365;ifiSLeapYearY1;date=days%7+1%7;/*算出给定年份year的1月13日是星期几+/c=21:0;form=1;3;m++switchmcase1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:days=28;if4days=29;break;/*endofswitch*/date=days%7+5%7;ifdate==5c++;/*endoffor*/returnc;
[说明]下面的程序按照以下规则输出给定名词的复数形式1若名词以y结尾则删除y并添加ies2若名词以sch或sh结尾则添加es3其他所有情况直接添加s[C程序]#include<stdio.h>#include<string.h>char*pluralchar*wordintn;char*pstr;n=strlenword;/*求给定单词的长度*/pstr=char*mallocn+3;/*申请给定单词的复数形式存储空间*/if!pstr||n<2returnNULL;strcpypstrword;/*复制给定单词*/if1pstr[n-1]=’i’;pstr[n]=’e’;pstr[n+1]=’s’;2;elseifpstr[n-1]==’s’||pstr[n-1]==’h’&&3pstr[n]=’e’;pstr[n+1]=’s’;pstr[n+2]=’/0’;elsepstr[n]=’s’;pstr[n+1]=’/0’;4;maininti;char*ps;charwc[9][10]=chairdairybosscircusflydogchurchcluedish;fori=0;i<9;i++ps=5;printf%s:%s/nwc[i]ps;/*输出单词及其复数形式*/freeps;/*释放空间*/systempause;
[说明]已知1900年1月1日是星期一下面的函数count_5_13intyear用于计算给定的年份year中有几个黑色星期五黑色星期五指既是13日又是星期五的日期函数count_5_13intyear首先算出年份year的1月13日是星期几然后依次计算每个月的13日是星期几若是星期五则计数程序中使用了函数isLeapYearintyear其功能是判断给定年份是否为闰年返回值为1或0分别表示year是或不是闰年[C语言函数]intCount_5_13intyearintdate;/*date为0表示星期日为1~6分别表示星期一至星期六*/longdays=0;/*days记录天数*/intmyc=0;/*c用于表示黑色星期五的个数*/ifyear<1900return-1;/*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/days=12fory=1900;y<year;y++days+=365;ifiSLeapYearY1;date=days%7+1%7;/*算出给定年份year的1月13日是星期几+/c=21:0;form=1;3;m++switchmcase1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:days=28;if4days=29;break;/*endofswitch*/date=days%7+5%7;ifdate==5c++;/*endoffor*/returnc;
[说明]假设数组A中的各元素A1A2AM已经按从小到大排序M≥1数组B中的各元素B1B2BN也已经按从小到大排序N≥1执行下面的流程图后可以将数组A与数组B中所有的元素全都存入数组C中且按从小到大排序注意序列中相同的数全部保留并不计排列顺序例如设数组A中有元素25679数组B中有元素2347则数组C中将有元素223456779[流程图]本题流程图如图8-31所示
[说明]函数countmonthsDATEstartDATEend的功能是计算两个给定日期之间所包含的完整月份数该函数先算出起止日期中所含的完整年数再计算余下的完整月份数规定两个相邻年份的同月同日之间的问隔为1年例如2007.5.30—2008.5.30的间隔为1年若相邻两年中前一年是闰年并且日期是2月29日则到下一年的2月28日为1年即2008.2.29—2009.2.28的间隔为1年规定两个相邻月份的相同日之间的间隔为1个月但需要特别考虑月末的特殊情况例如2007.1.29—2007.2.28的间隔为1个月同理2007.1.30—2007.2.282007.1.31—2007.2.28的间隔都是1个月计算起止日期间隔不足一年的完整月份数时分两种情况1起止日期不跨年度先用终止日期的月号减去起始日期的月号得到月份数然后再根据情况进行修正例如起止日期为2008.3.31—2008.9.20通过月号算出月份数为6修正时通过调用函数makevalid将2008.9.31改为2008.9.30与终止日期2008.9.20比较后将月份数修正为52起止日期跨年度计算方法如下例所示对于起止日期2008.7.25—2009.3.31先计算2008.7.25—2008.12.25的月份数为5再算出2008.12.25—2009.3.25的月份数为3因此2008.7.25—2009.3.31之间的完整月份数为8日期数据类型定义如下typedefstructintyear;intmonth;intday;/*日期的年号4位月和日号*/DATE;程序中使用的函数cmp_dateisLeapYear和makevalid说明如表11-8所示表11-8函数说明函数名参数返回值说明cmp_dateDATEstartDATEend-1start<end0start=end1start>end比较两个日期的大小例如2007.1.30小于2007.5.152008.11.23等于2008.11.232008.1.31大于2007.5.15isLeapYearintyear1year表示的年号是闰年0year表示的年号不是闰年判断给定年号是否为闰年makevalidDATE*r无若日期*r是非法的即*r不是闰年时其日期为2月29日或者其46911等月份出现了31日则将其日期改为当月最后[C语言函数]intcount_monthsDATEstartDATEendintyears=0months=0;DATEr;ifcmp_datestartend>0r=start;start=end;end=r;years=end.year-start.year;/*计算年数*/r=start;r.year=end.year;ifcmp_daterend>0/*修正年数*/1;r.year--;ifr.year<end.year/*跨年度时先计算到12月的月份数*/months=2;r.month=12;months+=end.month+12-r.month%12;r.year=end.year;r.month=end.month;makeva!id3;/*将日期r修正为有效日期*/ifcmp_daterend>0/*修正月份数*/4;months+=5;/*计算总月份数*/returnmonths;
[说明]下面的程序按照以下规则输出给定名词的复数形式1若名词以y结尾则删除y并添加ies2若名词以sch或sh结尾则添加es3其他所有情况直接添加s[C程序]#include<stdio.h>#include<string.h>char*pluralchar*wordintn;char*pstr;n=strlenword;/*求给定单词的长度*/pstr=char*mallocn+3;/*申请给定单词的复数形式存储空间*/if!pstr||n<2returnNULL;strcpypstrword;/*复制给定单词*/if1pstr[n-1]=’i’;pstr[n]=’e’;pstr[n+1]=’s’;2;elseifpstr[n-1]==’s’||pstr[n-1]==’h’&&3pstr[n]=’e’;pstr[n+1]=’s’;pstr[n+2]=’/0’;elsepstr[n]=’s’;pstr[n+1]=’/0’;4;maininti;char*ps;charwc[9][10]=chairdairybosscircusflydogchurchcluedish;fori=0;i<9;i++ps=5;printf%s:%s/nwc[i]ps;/*输出单词及其复数形式*/freeps;/*释放空间*/systempause;
指出该代码是否存在内存泄漏
类Stock的定义中有两处错误请指出错误所在行号并给出该行修改后的完整结果
[说明]下面C程序代码的功能是对于输入的一个正整数n100≤n<1000先判断其是否是回文数正读反读都一样的数若不是则将n与其反序数相加再判断得到的和数是否为回文数若还不是再将该和数与其反序数相加并进行判断依此类推直到得到一个回文数为止例如278不是回文数其反序数为872相加后得到的1150还不是回文数再将1150与其反序数511相加得到的1661是回文数函数intisPalmlongm的功能是将正整数m的各位数字取出存入数组中然后判断其是否为回文数若m是回文数则返回1否则返回0[C程序代码]#include<stdio.h>#include<stdlib.h>intisPalmlongminti=0k=0;charstr[32];whilem>0str[k++]=1+’0’;m=m/10;fori=0;i<k/2;i++ifstr[i]!=str[2]return0;return1;intmainlongnat;printfinputapositiveinteger:;scanf%ld&n;ifn<100||n>=1000return-1;while3printf%id->n;fora=0t=n;t>0;a=4*10+t%10;t=t/10;n=5;printf%id/nn;systempause;return0;
[说明]某电信公司记录了每个用户的详细通话情况每次通话数据记录在一行现将某用户某月的通话数据存入一个文本文件dial.txt中其数据格式如下拨入或拨出标记通话开始时间通话结束时间对方号码注1数据字段以一个空格作为分隔符注2拨入和拨出标记均为小写字母拨入标记为i表示其他用户呼叫本机本机用户不需付费拨出标记为o表示本机呼叫其他用户此时本机用户需要付费注3通话开始和结束时间的格式均为HH:MM:SS其中HH表示小时取值00~23MM表示分钟取值00~59SS表示秒取值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.44o14:05:2314:11:2582346789i15:10:0016:01:1513890000000o10:53:1211:07:0563000123o23:01:1200:12:1513356789001[C语句程序代码]#include<stdio.h>FILE*fin;intmaincharstr[80];inth1h2m1m2s1s2;longt_startt_endinterval;intc;doublefee=0;fin=fopendial.txtrj;if!finreturn-1;while!feoffinif!fgetsstr80finbreak;if1continue;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/*通话结束时间*/if2/*若通话开始和结束时间跨日*/interval=3-t_start+t_end;elseinterval=t_end-t_start;c=4;/*计算完整分钟数表示的通话时间*/ifinterval%605;fee+=c*0.08;fclosefin;printffee=%.21f/nfee;return0;
[说明]下面C程序代码的功能是对于输入的一个正整数n100≤n<1000先判断其是否是回文数正读反读都一样的数若不是则将n与其反序数相加再判断得到的和数是否为回文数若还不是再将该和数与其反序数相加并进行判断依此类推直到得到一个回文数为止例如278不是回文数其反序数为872相加后得到的1150还不是回文数再将1150与其反序数511相加得到的1661是回文数函数intisPalmlongm的功能是将正整数m的各位数字取出存入数组中然后判断其是否为回文数若m是回文数则返回1否则返回0[C程序代码]#include<stdio.h>#include<stdlib.h>intisPalmlongminti=0k=0;charstr[32];whilem>0str[k++]=1+’0’;m=m/10;fori=0;i<k/2;i++ifstr[i]!=str[2]return0;return1;intmainlongnat;printfinputapositiveinteger:;scanf%ld&n;ifn<100||n>=1000return-1;while3printf%id->n;fora=0t=n;t>0;a=4*10+t%10;t=t/10;n=5;printf%id/nn;systempause;return0;
[说明] 下面流程图的功能是在已知字符串A中查找特定字符串B如果存在则输出B串首字符在A串中的位置否则输出-1设串A由n个字符A0A1…An-1组成串B由m个字符B0B1…Bm-1组成其中n≥m>0在串A中查找串B的基本算法如下从串A的首字符A0开始取子串A0A1…im-1与串B比较若不同则再取子串A1A2…Am与串B比较以此类推 例如字符串“CABBRFFD”中存在字符子串“BRF”输出3不存在字符子串“RFD”输出-1 在流程图中i用于访问串A中的字符i=01…n-1j用于访问串B中的字符j=01…m-1在比较AiAi+1…Ai+m-1与B0B1…Bm-1时需要对Ai与B0Ai+1与B1…Ai+j与Bj…逐对字符进行比较若发现不同则需要取下一个子串进行比较以此类推 [流程图] 本题流程图如图8-30所示 5处填
[说明] 某单位动态收集的数据中常包含重复的数据所以需要进行处理使得重复的数据仅出现一次下面流程图的功能是在nn≥1个数据D1D2…Dn中选出其中所有不重复的k个数据置于原来前k个数据的位置上 该流程图的算法如下第1个数据必然被选出然后从第2个数据开始逐个考察其余的数据假设D1D2…Dmm≥1是已经选出的不重复的数据则对于数据Dim<i≤n将其依次与DmDm-1…D1进行比较若没有发现与之相同者则Di被选出并置于Dm+1的位置上否则对Di不做处理 例如如下10个数据 5227447191n=10 经过上述算法处理后的结果为 527419k=6 [流程图] 本题流程图如图8-32所示 注循环开始的说明按照“循环变量名循环初值循环终值增量”格式描述 5处填
[说明]假设数组A中的各元素A1A2AM已经按从小到大排序M≥1数组B中的各元素B1B2BN也已经按从小到大排序N≥1执行下面的流程图后可以将数组A与数组B中所有的元素全都存入数组C中且按从小到大排序注意序列中相同的数全部保留并不计排列顺序例如设数组A中有元素25679数组B中有元素2347则数组C中将有元素223456779[流程图]本题流程图如图8-31所示
[说明]某电信公司记录了每个用户的详细通话情况每次通话数据记录在一行现将某用户某月的通话数据存入一个文本文件dial.txt中其数据格式如下拨入或拨出标记通话开始时间通话结束时间对方号码注1数据字段以一个空格作为分隔符注2拨入和拨出标记均为小写字母拨入标记为i表示其他用户呼叫本机本机用户不需付费拨出标记为o表示本机呼叫其他用户此时本机用户需要付费注3通话开始和结束时间的格式均为HH:MM:SS其中HH表示小时取值00~23MM表示分钟取值00~59SS表示秒取值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.44o14:05:2314:11:2582346789i15:10:0016:01:1513890000000o10:53:1211:07:0563000123o23:01:1200:12:1513356789001[C语句程序代码]#include<stdio.h>FILE*fin;intmaincharstr[80];inth1h2m1m2s1s2;longt_startt_endinterval;intc;doublefee=0;fin=fopendial.txtrj;if!finreturn-1;while!feoffinif!fgetsstr80finbreak;if1continue;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/*通话结束时间*/if2/*若通话开始和结束时间跨日*/interval=3-t_start+t_end;elseinterval=t_end-t_start;c=4;/*计算完整分钟数表示的通话时间*/ifinterval%605;fee+=c*0.08;fclosefin;printffee=%.21f/nfee;return0;
[说明] 某单位动态收集的数据中常包含重复的数据所以需要进行处理使得重复的数据仅出现一次下面流程图的功能是在nn≥1个数据D1D2…Dn中选出其中所有不重复的k个数据置于原来前k个数据的位置上 该流程图的算法如下第1个数据必然被选出然后从第2个数据开始逐个考察其余的数据假设D1D2…Dmm≥1是已经选出的不重复的数据则对于数据Dim<i≤n将其依次与DmDm-1…D1进行比较若没有发现与之相同者则Di被选出并置于Dm+1的位置上否则对Di不做处理 例如如下10个数据 5227447191n=10 经过上述算法处理后的结果为 527419k=6 [流程图] 本题流程图如图8-32所示 注循环开始的说明按照“循环变量名循环初值循环终值增量”格式描述 3处填
[说明]下面待修改的C程序完成的功能是对于给定的一个长正整数从其个位数开始每隔一位取一个数字即取其个位百位万位等数字形成一个新的整数并输出例如将该程序修改正确后运行时若输入14251382则输出的整数为4532下面给出的C程序代码中有5个错误请指出所有的错误[C程序代码]01#include<stdio.h>0203intmain0405longnnum;06inti;0708do09printf清输入一个正整数:;10scanf%idn;11whilen<=0;12k=1;13fori=1;n>=0;i++14ifiio2=115Rum=num+n%10*k;16k=k*10;1718n=n/10;1920printf新数据为:%d/nnum;21return0;22
[说明]假设数组A中的各元素A1A2AM已经按从小到大排序M≥1数组B中的各元素B1B2BN也已经按从小到大排序N≥1执行下面的流程图后可以将数组A与数组B中所有的元素全都存入数组C中且按从小到大排序注意序列中相同的数全部保留并不计排列顺序例如设数组A中有元素25679数组B中有元素2347则数组C中将有元素223456779[流程图]本题流程图如图8-31所示
[说明]C++标准模板库中提供了vector模板类可作为动态数组使用并可容纳任意数据类型其所属的命名空问为stdvector模板类的部分方法说明如表12-3所示表12-3vector模板类的部分方法方法含义push_backk向vector对象的尾部添加一个元素kbegin返回一个迭代器对象该对象指向vector中的第一个元素end返回一个迭代器对象该对象指向vector中的最后一个元素empty测试vector对象是否为空eraseptr删除vector中ptr指向的元素[C++代码]#include<iostream>#include<vector>usingnamespace1;typedefvector<2>INTZECTOR;constintARRAY_SIZE=6;voidShowVectorINTVECTOR&theVector;intmainINTVECTORtheVector;//初始化theVector将theVector的元素依次设置为0至5forintcEachItem=0;cEachItem<ARRAY_SIZE;cEachItem++theVector.push_back3;ShowVectortheVector;//依次输出theVector中的元素theVector.erasetheVector.begin+3;ShowVectortheVector;voidShowVectorINTVECTOR&theVectoriftheVector.emptycout<<theVectorisempty.<<endl;return;INTVECTORiterator4;fortheIterator=theVector.begin;theIterator!=theVector.end;theIterator++cout<<*theIterator;iftheIterator!=thevector.end-1cout<<;cout<<endl;该程序运行后的输出结果为0123455
[说明]下面待修改的C程序完成的功能是对于给定的一个长正整数从其个位数开始每隔一位取一个数字即取其个位百位万位等数字形成一个新的整数并输出例如将该程序修改正确后运行时若输入14251382则输出的整数为4532下面给出的C程序代码中有5个错误请指出所有的错误[C程序代码]01#include<stdio.h>0203intmain0405longnnum;06inti;0708do09printf清输入一个正整数:;10scanf%idn;11whilen<=0;12k=1;13fori=1;n>=0;i++14ifiio2=115Rum=num+n%10*k;16k=k*10;1718n=n/10;1920printf新数据为:%d/nnum;21return0;22
[说明]C++标准模板库中提供了vector模板类可作为动态数组使用并可容纳任意数据类型其所属的命名空问为stdvector模板类的部分方法说明如表12-3所示表12-3vector模板类的部分方法方法含义push_backk向vector对象的尾部添加一个元素kbegin返回一个迭代器对象该对象指向vector中的第一个元素end返回一个迭代器对象该对象指向vector中的最后一个元素empty测试vector对象是否为空eraseptr删除vector中ptr指向的元素[C++代码]#include<iostream>#include<vector>usingnamespace1;typedefvector<2>INTZECTOR;constintARRAY_SIZE=6;voidShowVectorINTVECTOR&theVector;intmainINTVECTORtheVector;//初始化theVector将theVector的元素依次设置为0至5forintcEachItem=0;cEachItem<ARRAY_SIZE;cEachItem++theVector.push_back3;ShowVectortheVector;//依次输出theVector中的元素theVector.erasetheVector.begin+3;ShowVectortheVector;voidShowVectorINTVECTOR&theVectoriftheVector.emptycout<<theVectorisempty.<<endl;return;INTVECTORiterator4;fortheIterator=theVector.begin;theIterator!=theVector.end;theIterator++cout<<*theIterator;iftheIterator!=thevector.end-1cout<<;cout<<endl;该程序运行后的输出结果为0123455
[说明]函数countmonthsDATEstartDATEend的功能是计算两个给定日期之间所包含的完整月份数该函数先算出起止日期中所含的完整年数再计算余下的完整月份数规定两个相邻年份的同月同日之间的问隔为1年例如2007.5.30—2008.5.30的间隔为1年若相邻两年中前一年是闰年并且日期是2月29日则到下一年的2月28日为1年即2008.2.29—2009.2.28的间隔为1年规定两个相邻月份的相同日之间的间隔为1个月但需要特别考虑月末的特殊情况例如2007.1.29—2007.2.28的间隔为1个月同理2007.1.30—2007.2.282007.1.31—2007.2.28的间隔都是1个月计算起止日期间隔不足一年的完整月份数时分两种情况1起止日期不跨年度先用终止日期的月号减去起始日期的月号得到月份数然后再根据情况进行修正例如起止日期为2008.3.31—2008.9.20通过月号算出月份数为6修正时通过调用函数makevalid将2008.9.31改为2008.9.30与终止日期2008.9.20比较后将月份数修正为52起止日期跨年度计算方法如下例所示对于起止日期2008.7.25—2009.3.31先计算2008.7.25—2008.12.25的月份数为5再算出2008.12.25—2009.3.25的月份数为3因此2008.7.25—2009.3.31之间的完整月份数为8日期数据类型定义如下typedefstructintyear;intmonth;intday;/*日期的年号4位月和日号*/DATE;程序中使用的函数cmp_dateisLeapYear和makevalid说明如表11-8所示表11-8函数说明函数名参数返回值说明cmp_dateDATEstartDATEend-1start<end0start=end1start>end比较两个日期的大小例如2007.1.30小于2007.5.152008.11.23等于2008.11.232008.1.31大于2007.5.15isLeapYearintyear1year表示的年号是闰年0year表示的年号不是闰年判断给定年号是否为闰年makevalidDATE*r无若日期*r是非法的即*r不是闰年时其日期为2月29日或者其46911等月份出现了31日则将其日期改为当月最后[C语言函数]intcount_monthsDATEstartDATEendintyears=0months=0;DATEr;ifcmp_datestartend>0r=start;start=end;end=r;years=end.year-start.year;/*计算年数*/r=start;r.year=end.year;ifcmp_daterend>0/*修正年数*/1;r.year--;ifr.year<end.year/*跨年度时先计算到12月的月份数*/months=2;r.month=12;months+=end.month+12-r.month%12;r.year=end.year;r.month=end.month;makeva!id3;/*将日期r修正为有效日期*/ifcmp_daterend>0/*修正月份数*/4;months+=5;/*计算总月份数*/returnmonths;
[说明]下面C程序代码的功能是对于输入的一个正整数n100≤n<1000先判断其是否是回文数正读反读都一样的数若不是则将n与其反序数相加再判断得到的和数是否为回文数若还不是再将该和数与其反序数相加并进行判断依此类推直到得到一个回文数为止例如278不是回文数其反序数为872相加后得到的1150还不是回文数再将1150与其反序数511相加得到的1661是回文数函数intisPalmlongm的功能是将正整数m的各位数字取出存入数组中然后判断其是否为回文数若m是回文数则返回1否则返回0[C程序代码]#include<stdio.h>#include<stdlib.h>intisPalmlongminti=0k=0;charstr[32];whilem>0str[k++]=1+’0’;m=m/10;fori=0;i<k/2;i++ifstr[i]!=str[2]return0;return1;intmainlongnat;printfinputapositiveinteger:;scanf%ld&n;ifn<100||n>=1000return-1;while3printf%id->n;fora=0t=n;t>0;a=4*10+t%10;t=t/10;n=5;printf%id/nn;systempause;return0;
[说明]某电信公司记录了每个用户的详细通话情况每次通话数据记录在一行现将某用户某月的通话数据存入一个文本文件dial.txt中其数据格式如下拨入或拨出标记通话开始时间通话结束时间对方号码注1数据字段以一个空格作为分隔符注2拨入和拨出标记均为小写字母拨入标记为i表示其他用户呼叫本机本机用户不需付费拨出标记为o表示本机呼叫其他用户此时本机用户需要付费注3通话开始和结束时间的格式均为HH:MM:SS其中HH表示小时取值00~23MM表示分钟取值00~59SS表示秒取值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.44o14:05:2314:11:2582346789i15:10:0016:01:1513890000000o10:53:1211:07:0563000123o23:01:1200:12:1513356789001[C语句程序代码]#include<stdio.h>FILE*fin;intmaincharstr[80];inth1h2m1m2s1s2;longt_startt_endinterval;intc;doublefee=0;fin=fopendial.txtrj;if!finreturn-1;while!feoffinif!fgetsstr80finbreak;if1continue;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/*通话结束时间*/if2/*若通话开始和结束时间跨日*/interval=3-t_start+t_end;elseinterval=t_end-t_start;c=4;/*计算完整分钟数表示的通话时间*/ifinterval%605;fee+=c*0.08;fclosefin;printffee=%.21f/nfee;return0;
[说明] 某单位动态收集的数据中常包含重复的数据所以需要进行处理使得重复的数据仅出现一次下面流程图的功能是在nn≥1个数据D1D2…Dn中选出其中所有不重复的k个数据置于原来前k个数据的位置上 该流程图的算法如下第1个数据必然被选出然后从第2个数据开始逐个考察其余的数据假设D1D2…Dmm≥1是已经选出的不重复的数据则对于数据Dim<i≤n将其依次与DmDm-1…D1进行比较若没有发现与之相同者则Di被选出并置于Dm+1的位置上否则对Di不做处理 例如如下10个数据 5227447191n=10 经过上述算法处理后的结果为 527419k=6 [流程图] 本题流程图如图8-32所示 注循环开始的说明按照“循环变量名循环初值循环终值增量”格式描述 1处填
[说明]函数countmonthsDATEstartDATEend的功能是计算两个给定日期之间所包含的完整月份数该函数先算出起止日期中所含的完整年数再计算余下的完整月份数规定两个相邻年份的同月同日之间的问隔为1年例如2007.5.30—2008.5.30的间隔为1年若相邻两年中前一年是闰年并且日期是2月29日则到下一年的2月28日为1年即2008.2.29—2009.2.28的间隔为1年规定两个相邻月份的相同日之间的间隔为1个月但需要特别考虑月末的特殊情况例如2007.1.29—2007.2.28的间隔为1个月同理2007.1.30—2007.2.282007.1.31—2007.2.28的间隔都是1个月计算起止日期间隔不足一年的完整月份数时分两种情况1起止日期不跨年度先用终止日期的月号减去起始日期的月号得到月份数然后再根据情况进行修正例如起止日期为2008.3.31—2008.9.20通过月号算出月份数为6修正时通过调用函数makevalid将2008.9.31改为2008.9.30与终止日期2008.9.20比较后将月份数修正为52起止日期跨年度计算方法如下例所示对于起止日期2008.7.25—2009.3.31先计算2008.7.25—2008.12.25的月份数为5再算出2008.12.25—2009.3.25的月份数为3因此2008.7.25—2009.3.31之间的完整月份数为8日期数据类型定义如下typedefstructintyear;intmonth;intday;/*日期的年号4位月和日号*/DATE;程序中使用的函数cmp_dateisLeapYear和makevalid说明如表11-8所示表11-8函数说明函数名参数返回值说明cmp_dateDATEstartDATEend-1start<end0start=end1start>end比较两个日期的大小例如2007.1.30小于2007.5.152008.11.23等于2008.11.232008.1.31大于2007.5.15isLeapYearintyear1year表示的年号是闰年0year表示的年号不是闰年判断给定年号是否为闰年makevalidDATE*r无若日期*r是非法的即*r不是闰年时其日期为2月29日或者其46911等月份出现了31日则将其日期改为当月最后[C语言函数]intcount_monthsDATEstartDATEendintyears=0months=0;DATEr;ifcmp_datestartend>0r=start;start=end;end=r;years=end.year-start.year;/*计算年数*/r=start;r.year=end.year;ifcmp_daterend>0/*修正年数*/1;r.year--;ifr.year<end.year/*跨年度时先计算到12月的月份数*/months=2;r.month=12;months+=end.month+12-r.month%12;r.year=end.year;r.month=end.month;makeva!id3;/*将日期r修正为有效日期*/ifcmp_daterend>0/*修正月份数*/4;months+=5;/*计算总月份数*/returnmonths;
[说明] 著名的菲波那契数列定义式为 f1=1f2=1fn=fn-1+fn-2n=34… 因此从第1项开始的该数列为1123581321…函数fib1和fib2分别用递归方式和迭代方式求解菲波那契数列的第n项调用fib1fib2时可确保参数n获得一个正整数1 [C函数代码] 将函数fib1和fib2改正后进行测试发现前46项都正确而第47项的值是一个负数请说明原因
[说明] 已知对某载客车辆Car进行类建模如图12-2所示其中类Engine表示发动机引擎类Wheel表示车轮类Body表示车身类Driver表示司机类Passenger表示乘客 constint1=7;//定义最多载客数 constintMAX_WHEELS=5;//定义最多轮胎数 classBody//此处代码省略;//车身类 classPassenger//此处代码省略;//乘客类 ClassWheel//此处代码省略;//车轮类 ClassDriver//司机类 public stringname;//表示第几路公交车司机 DriverstringdriverNamemarne2;//构造函数 ; classEngine//引擎类 public stringengineNo;//引擎编号 EnginestringengineNo3->engineNo=engineNo; //构造函数 ; ClassCar//汽车类 protected: Engine*engine;Driver*driver;Bodybody; Wheel*wheels[MAX_WHEELS];Passenger*passengers[MAX_PASSENGERS]; public CarDriver*driver//构造函数 this->driver=driver; engine=newEngine"TX6536型号引擎"; forintindex=0;index<MAX_WHEELS;index++ wheels[index]=newWheel; forintindex=0;indexpassengers[index]=NULL; virtual-Car//析构函数 forintindex=0;index<MAX_WHEELS;index++ deletewheels[index]; delete4; intgetPassengerNumber//获取车上乘客数量 //此处代码省略 voidgetonpassengerPassenger*apassenger //乘客上车 //此处代码省略 voidrun//开车 ifdriver==NULLcout<<"司机尚未上车!";return; //此处代码省略 ; voidmain Driverdriver"第五路公交车司机"; Carcar5; Passengerpassengers[MAX_PASSENGERS]; forintindex=0;index<MAX_PASSENGERS;index++ //乘客上车处理 car.getOnPasSenger&passengers[index]; car.run; 1处填
[说明]假设数组A中的各元素A1A2AM已经按从小到大排序M≥1数组B中的各元素B1B2BN也已经按从小到大排序N≥1执行下面的流程图后可以将数组A与数组B中所有的元素全都存入数组C中且按从小到大排序注意序列中相同的数全部保留并不计排列顺序例如设数组A中有元素25679数组B中有元素2347则数组C中将有元素223456779[流程图]本题流程图如图8-31所示
请补齐上述代码中的空缺1和2
热门题库
更多
中级系统集成项目管理工程师
中级网络工程师
中级信息系统管理工程师
初级程序员
中级软件设计师
初级网络管理员
初级信息处理技术员
中级数据库系统工程师
中级多媒体应用设计师
高级系统分析师
高级网络规划设计师
高级系统架构师
中级信息系统监理师
初级通信工程师
中级通信工程师
通信新技术、新业务知识