实验6函数与预处理1_参考答案 下载本文

内容发布更新时间 : 2024/5/22 5:03:06星期一 下面是文章的全部内容请认真阅读。

实验6函数与预处理1(2)

自测题一 编写函数,实现删除字符串中字符’T’的功能,要求使用内联函数

#include #include using namespace std;

inline char fun(char ch) //内联函数fun首部 { }

int main() { }

char c;

cout << \ << endl; while ((c = getchar()) != '\\n') { }

cout << \; return 0;

if (fun(c)) //对于if来说除了0之外都是1

cout << fun(c);

if (ch == 'T')

return 0;

//内联函数fun函数体,语句数量不限

自测题二 编写重载函数Max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

#include using namespace std; int max(int a, int b)

{/*功能:求取两个整数的最大值,语句数量不限 */ }

int max(int a, int b, int c)

{/*求取三个整数的最大值,语句数量不限 */ }

double max(double a, double b)

{/*求取两个双精度的最大值,语句数量不限 */ }

double max(double a, double b, double c) {/*求取三个双精度的最大值,语句数量不限 */

cout << \; cout << \; return a > b ? a : b;

cout << \;

return a > b ? (a > c ? a : c ) : ( b > c ? b : c); cout << \; return a > b ? a : b;

}

return a > b ? (a > c ? a : c) : (b > c ? b : c);

int main() { }

int a, b, c, d, e; double m, n, o, p, q;

cout << \请输入两个整数:\ << endl; cin >> a >> b;

cout << \最大值为\ << max(a, b) << endl; cout << \请输入三个整数:\ << endl; cin >> c >> d >> e;

cout << \最大值为\ << max(c, d, e) << endl; cout << \请输入两个双精度数:\ << endl; cin >> m >> n;

cout << \最大值为\ << max(m, n) << endl; cout << \请输入三个双精度数:\ << endl; cin >> o >> p >> q;

cout << \最大值为\ << max(o, p, q) << endl; return 0;

自测题三 设计一个打印年历的程序。要求:打印每个月的月历的功能有一个独立的函数完成,程序运行时,主程序通过若干次调用该函数完成年历的输出。注意处理闰年问题。

#include #include

using namespace std;

void printmonth(int m); //5个被调函数声明 void printhead(int m); int daysofmonth(int m); int isleap(int y); void firstday(int m);

int year, weekday; //定义全局变量 int main() { while (true) { cout << \输入年份:\; cin >> year; cout << \; cout << year << \年\\n\; for (int i = 1; i <= 12; i++) { printmonth(i); cout << \;

}

cout << \;

} return 0;

}

void printmonth(int m)

{ /*功能:1、调用printhead(m),输出月历首行形式并确定m月第1天的位置 2、从第1天输出该月其它天的日历,注意换行控制格式*/ int days; printhead(m);

for (int i = 0; i < (weekday + 1) % 7; i++)//控制是星期的输出

cout << setw(4) << \;

days = daysofmonth(m);//得到每月的天数 for (int i = 1; i <= days; i++) { cout << setw(4) << i;

weekday = (weekday + 1) % 7;//为了配合星期的显示 if (weekday == 6)

cout << endl << endl;

}

}

void printhead(int m) { /*功能:1、输出月历首行形式: m 月 日 一 二 三 四

2、确定m月第1天的位置,即对齐改天是星期几*/

cout << endl << endl;

五 六 }

cout << m << \月\ << endl;

cout << setw(4) << \日\ << setw(4) << \一\ << setw(4) << \二\ << setw(4) << \三\ << setw(4)

<< setw(4) << \五\ << setw(4) << \六\ << endl;

<< \四\

firstday(m);

int daysofmonth(int m) { }

int isleap(int y) { }

void firstday(int m) {

/*功能:判断该月的第一天是星期几? 思路:这个问题需找一个参照点,如设2000年1月1日为参照点,这天是星期六,则可计算该月的第一天距离参照点有多少天,(注意闰年要多加1天)如2012年4月1日与2000年1月1日相差4474天,4474%7=1,所以2012年4月1日是星期日。返回值是y月第1天是星期几*/

long n;

n = (year - 1) * 365;//从公元 1 年 1 月 1 日天始算, 到现在所输入年有多少天 /*功能:判断y是否为闰年,是返回1,否返回0,闰年判断表达式见上机指导P19 二、填空题第5return (y % 4 == 0 && y % 100 != 0 || y % 400 == 0); 题*/

/*功能:判断m月多少天,返回值是m月的天数,注意闰年*/ switch (m) { case 1: case 3: case 5: case 7: case 8: case 10:

case 12:return 31;//1,3,5,7,8,10,12,月每月有31天 case 4: case 6: case 9:

case 11:return 30;//4,6,9,11月每月31天 case 2: }

if (isleap(year))

return 29;//闰年每年二月29天 return 28;//非闰年二月28天 else

default:return 30;