2019-2020程序设计思想与方法(C )试卷与参考答案(A)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.
#include <iostream>
using namespace std;
int main(){
for (int i=0; i < 3; ++i){
int j = 5;
while(i < j){
j = j - 3 - i;
cout << '*';
}
switch (j) {
case -1:
cout << 'A';
break;
case 0:
cout << 'B';
break;
case 1:
cout << 'C';
default:
cout << 'E';
}
}
return 0;
} 参考答案:**A*CE*B
3.
#include <iostream>
using namespace std;
int *addone(int &arg){
arg += 1;
int *ptr = new int(arg);
return ptr;
}
int main() {
int a[5] = {1, 2, 3, 4}, *p, i;
p = a;
for(i=0; i<5; ++i) {
p = addone(a[i]);
a[i] *= *p;
delete p;
cout << a[i] << endl;
}
return 0;
2. 定义一个日期类TDate,使得下面测试程序(15分)
int main()
{
TDate dt1(2,28,2020),dt2(12,31,2020);
dt1.nextDay();
dt1.print();
cout << endl;
dt2.nextDay();
dt2.print();
cout << endl;
return 0;
}
运行结果为:
2/29/2020
1/1/2021
其中:函数nextDay()实现求第二天日期的功能,函数print()实现输出日期的功能。
参考答案:
#include <iostream>
using namespace std;
class TDate // 3分
{
private:
int month;
int day;
int year;
bool isLoopYear();
public:
TDate(int,int,int);
void print() const;
void nextDay();
};
TDate::TDate(int m,int d,int y) // 2分
{
month = m;
day = d;
year = y;
bool TDate::isLoopYear() //2分
{
return(((year % 4 == 0)&&(year % 100 != 0))||(year % 400 == 0));
}
void TDate::print() const //2分
{
cout << month << '/' << day << '/' << year;
}
void TDate::nextDay() //6分
{
int monthDays[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if((month == 2)&&isLoopYear())
monthDays[2] = 29;
if(day < monthDays[month])
++day;
else
{
day = 1;
++month;
if(month > 12)
{
month = 1;
++year;
}
}
}
说明:如果没有单独写isLoopYear()函数,而是直接在nextDay()函数中实现,nextDay()函数满分为8分。
3.实现函数int* searchRange(int array[], int sz, int target),该函数完成如下功能:对于一个已经
按照非递增顺序排列的长度为sz的整型数组array,寻找包含整数target的区间。
如果有,返回包含左右边界下标的数组;若没有,返回整型数组[-1, -1]。
请使用二分查找分别寻找左右边界。
(15分)
运行下面测试程序
int main()
{
int array[] = {26, 24, 15, 15, 15, 7, 4, 2};
int target = 15;
int *p = searchRange(array, 8, target);
cout << "[" << p[0] <<"," << p[1] << "]" << endl;
target = 8;
p = searchRange(array, 8, target);
cout << "[" << p[0] <<"," << p[1] << "]" << endl;
}
结果为:
[2,4]
[-1,-1]
参考答案:
int* searchRange(int array[], int sz, int target) {
int* result = new int[2];
int prev_l = 0, l = sz - 1; // 1分
while (prev_l < l) //4分
{
int mid = (prev_l + l) / 2;
if (target < array[mid])
prev_l = mid + 1;
else
l = mid;
}
if (array[l] == target) // 3分
result[0] = l;
else {
result[0] = -1, result[1] = -1;
return result;
}
int prev_r = sz - 1, r = 0; //1分
while (prev_r > r) { //4分
int mid = (prev_r + r + 1) / 2;
if (target <= array[mid])
r = mid;
else
prev_r = mid - 1;
}
result[1] = r; //1分
return result; //1分
}。