上半年 程序员应用技术Word文件下载.docx
《上半年 程序员应用技术Word文件下载.docx》由会员分享,可在线阅读,更多相关《上半年 程序员应用技术Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
【C代码】
#defineswap(a,b){a=a∧b;
b=a∧b;
a=a∧b;
}//交换a与b的值
intless(intx,inty)
{
return((x<
y)?
1:
0);
}
intlarger(intx,inty)
return((x>
voidbubbleSort(intarr[],intn,int(*compare)(int,int))
{inti,j;
intswapped=1;
for(i=0;
swapped;
i++){swapped=0;
for(j=0;
j<
n-l-i;
j++)
if(compare(arr[j+1],arr[j])){swap(arr[j+1],arr[j]);
swapped=1;
【问题】设有如下数组定义:
intdata1[]={4,2,6,3,1};
intdata2[]={4,2,6,3,1};
intdata3[]={4,2,6,3,1};
请分别给出下面的函数调用执行后,数组data1、data2和data3各自的元素序列。
(1)bubbleSort(data1,5,less);
(2)bubbleSort(data2,5,larger);
(3)bubbleSort(data3,3,larger);
3、阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。
某市根据每天早上5点测得的雾霾指数(pm2.5值)决定是否对车辆进行限行。
规则如下:
(1)限行时间为周内.(即周一到周五),周六周日不限行;
(2)根据车牌号的尾号(最后1位数字)设置限行车辆(车牌号由英文字母和
十进制数字构成,长度为6位,至少包含1位数字);
(3)雾霾指数低于200时,不限行;
(4)雾霾指数在区间[200,400)时,周内每天限行两个尾号的汽车:
周一限行
1和6,周二限行2和7,周三限行3和8,周四限行4和9,周五限行5和0,即尾号
除以5的余数相同者在同一天限行;
(5)雾霾指数大于等于400时,周内每天限行五个尾号的汽车:
周一、周三和
周五限行1,3,5,7,9,周二和周四限行0,2,4,6,8,即尾号除以2的余数相同者在同一
天限行;
下面程序运行时,输入雾霾指数、星期(数字1表示星期一,数字2表示星期二,...,
数字7表示星期日)和车牌号,输出该车牌号是否限行的信息。
#include<
stdio.h>
#definePM25_L1200
#defmePM25_L2400
typedefenum{YES,NO}MARKTAG;
intisDigit(charch)
{//判断ch是否为十进制数字字符,是则返回1,否则返回0return(ch>
='
0'
&
&
ch<
9'
);
voidprt_msg(char*msg,MARKTAGflag)
if(flag==YES)
printf("
%s:
trafficrestrictions\n"
msg);
else
free\n"
intisMatched(intweekday,intt,intd)//判断是否符合限行规则,是则返回1,否则返回0
{return(weekday%d==t%d);
}
voidproc(intpm25,intweekday,char*licence)
inti,lastd;
if(weekday==6||weekday==7||
(1))prt_msg(licence,NO);
else{
for(i=5;
i>
=0;
i--)
if(isDigit(licence[i])){
lastd=
(2);
//获取车牌号的尾号break;
if(pm25>
=PM25_L2){//限行5个尾号的汽车
if(isMatched((3)))prt_msg(licence,YES);
prt_msg(licence,NO);
else{//限行2个尾号的汽车
if(isMatched((4)))
prt_msg(licence,YES);
intmain()
intweekday=0,pm25=0;
charlicence[7];
scanf("
%d%d%s’’,&
pm25,&
weekday,licence);
//输入数据的有效性检测略,下面假设输入数据有效、正确
proc((5));
return0;
Pm<
200
licence[i]-‘0’
weekday,lastd,2
weekday,lastd,5
4、阅读以下说明和C代码,填写程序中的空
(1)~(5),将解答写入答题纸的对应栏内。
【说明】下面程序运行时,对输入的表达式进行计算并输出计算结果。
设表达式由两个整数和一个运算符(+或-)构成,整数和运算符之间以空格分隔,运算符可以出现在两个整数之前、之间或之后,整数不超过4位,输入的两个整数和运算符都用字符串表示。
例如,输入分别为“25+7”、“+257”、“257+”时,输出均为“25+7=32”。
#include<
intstr2int(char*s);
//将数字字
符串转换为整数
intisOperator(char*str);
//判断字符串的开头字符是否为运算符
voidcal(charop,chara[],charb[]);
//将数字串转化为对应整数后进行op所要求的计算
voidsolve(chara[],charb[],charc[]);
intmain()
chara[10],b[10],c[10];
scanf(’’%s%s%s’’,a,b,c);
Solve(a,b,c);
Return0;
intstr2int(char*s)
intval=0;
while(*s){
val=
(1)+(*s-'
//将数字字符串
转换为十进制整数
(2);
//令
字符指针指向下一个数字字符
returnval;
intisOperator(char*str)
return(*str==‘+’||*str==‘-’);
voidcal(charop,chara[],charb[])
switch(op){
case‘+’:
printf(”%s+%s=%d”,a,b,str2int(a)+str2int(b));
break;
case‘-’
%s-%s=%d”,a,b,str2int(a)-str2int(b));
voidsolve(chara[],charb[],charc[])
{//解析输入的3个字符串,输出表达式及计算结果
if(isOperator(a)){//运算符在两个整数之前
cal((3));
elseif(isOperator(b)){cal((4)
//运算符在两个整数之间
cal((5)
)
//运算符在两个整数之后
第四题答案:
1、Val*10
2、S++
3、*abc
4、*bac
5、*cab
5、阅读以下说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
现如今线下支付系统可以使用现金(Cash)、移动支付、银行卡(Card)(信用卡(CreditCard)和储蓄卡(DebitCard))等多种支付方式(PaymentMethod)对物品(Item)账单(Bill)进行支付。
图5-1是某支付系统的简略类图。
【Java代码】
Importjava.util.ArrayList;
importjava.util.List;
interfacePaymentMethod{
public
(1);
//Cash、DebitCard和Item实现略,Item中getPrice()获取当前物品对象的价格abstractclassCard
(2){
privatefinalStringname,num;
publicCard(Stringname,Stringnum){this.name=name;
this.num=num;
@Oveiride
publicStringtoString(){
returnString.format(“%scard[name=%s,num=%s]”,this.getType(),
name,num);
@Override
publicvoidpay(intcents){
System.out.println(“Payed"
+cents+“centsusing“+toString());
this.executeTransaction(cents);
protected