}
(1)
(2)
(3)
4.2(6分)
函数digit()用来计算十进制整数num从左往右数第index位的数字。
请完善该函数
#include
#include
intdigit(intnum,intindex)
{
intcount=0;
while(count++,num/int(pow(10,count)));{
num=num-int(num/pow(10,count-index+1))*pow(10,count-index+1);
count++;
}
return(num/int(pow(10,count-index-1)));
}
voidmain()
{inta,b;
cin>>a>>b;
cout<}
函数digit()用来计算十进制整数num从右往左数第index位的数字。
请完善该函数
intdigit(intnum,intindex)
{
intcount=0;
while(______
(1)_______)
{
num=________
(2)_________;
count++;
}
________(3)_________;
}
(1)
(2)
(3)
#include
#include
intdigit(intnum,intindex)
{
intcount=0;
while(count++,num/int(pow(10,count)));cout<cout<{//num=int((num-int(num/pow(10,count-index+1))*pow(10,count-index+1)))%int(pow(10,count-index-1));
cout<<"pow(10,count-index)"<cout<<"num/pow(10,count-index)"<cout<<"num/pow(10,count-index)*pow(10,count-index)"<cout<<"num-int(num/pow(10,count-index))"<count++;
}
returnnum;
}
voidmain()
{cout<}
4.3(6分)
函数Square()测试输入的参数是否是完全平方数,如是返回1否则返回0(例如对1,4,9,16,25返回1)。
请完善该函数。
intisSquare(intn)
{
____
(1)____;
while(______
(2)_______)
++i;
if(_____(3)_______)return1;
elsereturn0;
}
(1)
(2)
(3)
#include
intisSquare(intn)
{
inti=0;
while(i*i++i;
if(i*i==n)return1;
elsereturn0;
}
voidmain()
{inta;
cin>>a;
cout<<"square"<}
方法二:
#include
intisSquare(intn)
{
inti=2;
while(n/i>i)
++i;
if(i*i==n)return1;
elsereturn0;
}
voidmain()
{inta;
cin>>a;
cout<<"square"<}
4.4(6分)
函数Count()计算字符串str1在字符串str中出现的次数。
请完善该函数
intCount(charstr[],charstr1[])
{
inti,j,k,num=0;
for(i=0;_____
(1)______;i++)
for(_____
(2)______,k=0;str1[k]==str[j];k++,j++)
if(str1[_____(3)_____]==’\0’)
{
num++;
i+=k;
break;
}
returnnum;
}
(1)
(2)
(3)
4.5(6分)
猴子第一天摘下若干个桃子,当即吃一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。
到第十天时,只剩下一个桃子。
下面的程序用来计算猴子第一天摘了多少桃子,请完善该程序。
#include
voidmain()
{
intfun(int);
cout<<"Total:
"<}
intfun(intb)
{
intc=0;
if(______
(1)_______)
c=1;
else
{
________
(2)__________
}
_________(3)__________
}
(1)
(2)
(3)
得分
五、编程题(本题共20分)
5.1(10分)
1742年6月7日,哥德巴赫写信给欧拉,提出了以下猜想:
任何一个大于等于6的偶数都可以表示成为两个奇素数之和;任何一个大于等于9的奇数都可以表示成为三个奇素数之和——这就是著名的哥德巴赫猜想。
请编写程序验证在10000以内哥德巴赫猜想是否成立。
如果成立输出Yes否则输出No。
5.2(10分)
电影《2012》中提到的历法来自于玛雅文明。
玛雅文明是最早发明、使用历法的文明之一。
玛雅人日常生活使用的是哈布历(Haab’)。
哈布历规定一年365天,分为19个月,前18个月每月20天,第19个月5天。
玛雅文明还使用一种用于宗教祭祀的卓尔金历(Tzolk'in,就是这个历法预言2012年的灾难)。
卓尔金历规定一年260天,分为13个月,每个月20天。
哈布历和卓尔金历的公元0年1月1日是同一天开始的(考古学家认为是公元前3114年8月31日),请编写一个程序实现哈布历和卓尔金历的相互转换,要求:
(1)如果输入一组哈布历日期,将其转换为卓尔金历日期(日期以日月年的顺序表示),并按照日期由小到大的顺序输出
(2)如果输入一组卓尔金历日期,将其转换为哈布历日期(日期以日月年的顺序表示),并按照日期由小到大的顺序输出
例如:
输入历法(H表示哈布历,T表示卓尔金历):
H
8
11
2002
13
3
1996
7
16
2563
16
1
835
1
9
245
输出历法卓尔金历(T),排序后结果为:
6
8
344
11
4
1172
3
1
2803
18
4
2811
12
11
3724
信息技术科学学院本科生2009—2010学年第1学期
《高级语言程序设计》课程期末考试试卷(A卷)参考答案及点评
一、程序改错
(1)n=20;//常量赋值,删除该语句并在const处修改为constintn=20;
(2)for(inti=0;i<=n;i++)//应该为i(3)while(i二、选择题
(1)A.考察字面常量中八进制数的表示方式
(2)D.考察短路表达式。
(3)B.考察存储类型的种类
(4)A.考察字符数组表示字符串时,字符数组的长度
(5)D.考察数据类型的隐式转换
(6)C.考察枚举类型的基本概念
(7)D.考察生存期与作用域的基本概念
三、读程序写结果
(1)错1行扣一分,全错得0分
result=2
result=3
result=4
result=5
result=6
(2)每行结果2分,一行2个数正确得1分,1个数正确得0.5分
x=66,y=77,z=44
a=22,b=77,c=44
x=177,y=111,z=44
(3)错1行扣1分,全错得0分,一行不完全正确得0分
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
(4)错1行扣1.5分,全错得0分,一行不完全正确得0.5分
array[5]=15
array[8]=18
array[6]=16
array[7]=17,itistheresult
(5)每行结果1分,一行不完全正确得0分
5=1*5
10=2*5
15=3*5
20=2*2*5
25=5*5
30=2*3*5
四、程序填空(所填内容不完全正确酌情给1分或0.5分,填写语句时,有无分号均不扣分)
1、
(1)ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'
(2)ch-=32
(3)ch+=32
2、
(1)num>0&&count(2)num/10
(3)returnnum%10
3、
(1)inti=0
(2)i*i(3)i*i==n
4、
(1)str[i]!
='\0'
(2)j=i
(3)k+1
5、
(1)b==1
(2)c+=(fun(b-1)+1)*2;
(3)returnc
五、程序设计
评分标准建议:
1、程序功能模块划分合理(2分)。
函数的安排与使用
2、程序流程合理(2分)。
主函数流程
3、关键点逻辑与语法(4分)。
解决问题的关键之处,参考答案中标记为红色的部分代码
4、能够运行出结果(2分)。
执行程序能够得出正确的结果。
根据程序的不同,考虑上述问题的等价问题
1、哥德巴赫猜想
思路:
偶数和奇数分别判定
#include
intisprime(intn)//判定素数函数,如果素数返回1,否则返回0
{
for(inti=2;iif(n%i==0)
return0;
return1;
}
inteven(intn)//判定一个大于等于6的偶数是否符合哥德巴赫猜想
{
for(inti=3;i{
if(isprime(i)&&isprime(n-i))
{
return1;
}
}
return0;
}
intodd(intn)//判定一个大于等于9的奇数是否符合哥德巴赫猜想
{
for(inti=3;i{
if(isprime(i)&&even(n-i))
{
return1;
}
}
return0;
}
//主程序在6到10000,9到10000做循环分别判定偶数和奇数
voidmain()
{
boolg1=true,g2=true;
for(inti=6;i<=10000;i+=2)
{
g1=g1&&even(i);
}
for(i=9;i<=10000;i+=2)
{
g2=g2&&odd(i);
}
if(g1&&g2)
cout<<"Yes"<else
cout<<"No"<}
2、历法问题
#include
constintN=5;
structdate
{
intyear;
intmonth;
intday;
}calendar[N];
voidsort_calendar(date[],int);
voidswap(date&,date&);
voidmain()
{
charch;
intday,mon,year;
longsum;
cout<<"pleaseinputcatelogofcalendar:
";
cin>>ch;
if((ch=='H')||(ch=='h'))
{
for(inti=0;i{
cin>>calendar[i].day>>calendar[i].month>>calendar[i].year;
day=calendar[i].day;
mon=calendar[i].month;
year=calendar[i].year;
sum=day+mon*20+year*365;
year=sum/260;
sum=sum%260;
mon=sum/20;
day=sum%20;
calendar[i].day=day;
calendar[i].month=mon;
calendar[i].year=year;
}
cout<<"OutputcalendarofTzolk'in"<}
else{
if((ch=='T')||(ch=='t'))
{
for(inti=0;i{
cin>>calendar[i].day>>calendar[i].month>>calendar[i].year;
day=calendar[i].day;
mon=calendar[i].month;
year=calendar[i].year;
sum=day+mon*20+year*260;
year=sum/365;
sum=sum%365;
mon=sum/20;
day=sum%20;
calendar[i].day=day;
calendar[i