2025软考初级《程序员》案例模拟题合集

1阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。

【说明】

某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据A1、A2、…、An中,选出其中所有不重复的k个数据,置于原数组前k个数据的位置上。

该流程图的算法如下:第1个数据必然被选出,然后从第2个数据开始,逐个考察其余的数据。假设A1A2、…、Am(m≥1)是已经选出的、不重复的数据,则对于数据Ai(m<i≤n),将其依次与Am、Am-1、…、A1进行比较,若没有发现与之相同者,则Ai被选出并置于Bm+1的位置上;否则对Di不做处理。

例如,如下10个数据:

5,6,5,2,4,5,3,2,6,9(n=10)

经过上述算法处理后的结果为:

5,6,2,4,3,9(k=6)

请完善下列流程图,实现要求的功能。

【流程图】

2、阅读以下C代码,回答问题1至问题2,将解答填入答题纸的对应栏内。

【代码1
#include<stdio.h>

intmain(){

intm,s=0;

scanf("%d",&m);

switch(m%7){

case2:m=m/2;s++;

case3:m=m%3;++s;break;

case5:m=m/5;s--;

case6:m=m%6;--s;break;

default:m--;s--;

}

printf("m=%d,s=%d",m,s);

}

【代码2】

#include<stdio.h>

intmain(){

inta,b;

for(a=1,b=1;a<=10;a+=2){

printf("%d,%d\n",a,b);

if(b>=10)break;

if(b%4){b+=5;continue;}

}

return0;

}

问题1:查看代码1】,分析当输入分别为16、40、55时的输出结果

问题2:查看代码2】,分析程序的输出结果

3、阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。

【说明】

Fibonacci数列为1,1,2,3,5,8,13,…其第一项和第二项为1,后面每一项都是前面两项之和。【代码1】是采用数组来产生Fibonacci数列前10项。【代码2】采用递归函数来产生Fibonacci数列前10项,请填补代码中的空缺,实现程序的功能。

代码1】

#include<stdio.h>

intmain(){

inta[10],i;

a[0]=1;

a[1]=1;

for((1);i<10;i++){

a[i]=(2);//对数组元素赋值

printf("%d\t",(3));//输出数组元素

}

return0;

}

【代码2】

#include<stdio.h>

intF(intn)

{

if((4))

return1;

return(5);

}

intmain(){

inti;

for(i=1;i<=10;i++){

printf("%d\t",F(i));//输出数组元素

}

return0;}

4、阅读以下说明和C代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。

说明

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

o13:45:1114:31:2582346789

i14:20:1016:01:3413890010020

i10:43:2211:17:0763000123

o23:41:5200:22:5513356789001

o22:32:4423:25:2182346789

C代码

#include<stdio.h>

FILE*fin;

intmain(){

charstr[80];

inth1,h2,m1,m2,s1,s2;

longt_start,t_end,interval;

/*t_start表示通话开始时间,t_end表示通话结束时间,interval表示通话持续时间*/

intc;

doublefee=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=(2);/*通话开始时间*/

t_end=(3);/*通话结束时间*/

if(t_start>t_end)/*若通话开始和结束时间跨日*/

interval=(4);//计算持续时间

else

interval=t_end-t_start;//计算持续时间

c=interval/60;/*计算完整分钟数表示的通话时间*/

if(interval%60)(5);//若还有余数,分钟数增加1

(6);

}

fclose(fin);

printf("fee=%.2lf\n",fee);//输出最终花费

return0;}

5、阅读下列说明和JAVA代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】

5-1工厂类图

【JAVA代码】

//抽象产品类AbstractProduct

(1)AbstractSportProduct{

abstractvoidprintName();

abstractvoidplay();

}

//具体产品类Basketball

classBasketballextendsAbstractSportProduct{

publicBasketball(){

printName();

play();

}

//具体实现方法

publicvoidprintName(){System.out.println("获得篮球");}

publicvoidplay(){System.out.println("玩耍篮球");}

}

classFootballextendsAbstractSportProduct{

publicFootball(){

printName();

play();

}

//具体实现方法

publicvoidprintName(){System.out.println("获得足球");}

publicvoidplay(){System.out.println("玩耍足球");}

};

classVolleyballextendsAbstractSportProduct{

public Volleyball(){

printName();

play();

}

//具体实现方法

publicvoidprintName(){System.out.println("获得排球");}

publicvoidplay(){System.out.println("玩耍排球");}

}

classFactory{

(2);

PublicAbstractSportProductgetSportProduct(Stringproductname){

if(productname=="Basketball")pro=newBasketball();

elseif(productname=="Football")pro=newFootball();

elseif(productname=="Volleyball")pro=newVolleyball();

return(3);

}

}

classtext{

publicstaticvoidmain(Stringargs[]){

Factoryfac=(4);

(5);

product=fac.getSportProduct("Basketball");

product=fac.getSportProduct("Football");

product=fac.getSportProduct("Volleyball");

}

}

运行结果如下:

获得篮球

玩耍篮球

获得足球

玩耍足球

获得排球

玩耍排球

参考答案
第一题:

(1)i=1或者1→i

(2)i=n+1

(3)A[i]=A[j]

(4)j=m+1

(5)A[m]=A[i]

第二题:

问题1:

输入16时:m=2,s=2

输入40时:m=2,s=-2

输入55时:m=55,s=-1

问题2:

1,1

3,6

5,11

第三题:

(1)i=2

(2)a[i-1]+a[i-2]

(3)a[i]

(4)n<=2

(5)F(n-1)+F(n-2)

第四题:

(1)str[0]=='i'

(2)h1*60*60+m1*60+s1

(3)h2*60*60+m2*60+s2

(4)24*60*60-t_start+t_end

(5)c++

(6)fee+=c*0.08

第五题:

(1)abstractclass

(2)AbstractSportProductpro

(3)pro

(4)newFactory()

(5)AbstractSportProductproduct

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值