注:读《程序员面试笔记》笔记总结
1.知识点
1.1条件语句
(1)if……;(2)if……else……;(3)if……else if……;(4)switch(){case ():break;case():break;default:}。
关于switch的两点说明,第一是case后面结束后必须加break,否则将在执行某个case之后的所有case语句都会执行,第二是default可以省略。
1.2循环语句
(1)for(init;condition of continue circular;variables update);(2)while(condition)。
关于while的一点说明:当while(1)时一般在内部会有break来终止程序结束,否则进入死循环。
2.面试题
2.1.不使用break的switch语句
公司年底给员工发一条关于年终奖的短信,奖品根据员工年度绩效考评结果而定,具体见下表,请编写一个函数,输入为员工年度考评的结果,输出为短信的内容,短信中需要罗列员工所获得的所有奖品。
考评结果 | 年终奖品 |
优秀 A | 美国 或英国十日游,五千元超市卡,两千元亚马逊卡,一个月奖金 |
良好B | 五千元超市卡,两千元亚马逊卡,一个月奖金 |
及格C | 两千元亚马逊卡,一个月奖金 |
未达标D | 一个月奖金 |
1 string getMessage(char mark) {
2 string message = "";
3 switch (mark) {
4 case 'A'://注意此处使用单引号表示字符,双引号表示字符串
5 message.append("美国或英国十日游,");
6 case 'B':
7 message.append("五千元超市卡,");
8 case 'C':
9 message.append("两千元亚马逊卡,");
10 case 'D':
11 message.append("一个月奖金");
12 default:
13 break;
14 }
15 return message;
16 }
17 //注意#include<string>来重载cout,才能够输出string类型的数据
2.2.for循环的三要素
写出下面程序的输出结果:
1 bool foo(char c) {
2 cout << c;
3 return true;
4 }
5 int main(int argc, char *argv[]) {
6 int i = 0;
7 for (foo('A'); foo('B') && (i++ < 2); foo('C')) {
8 foo('D');
9 }
10 getchar();
11 return 0;
12 }
答案:ABDCBDCB
2.3巧打乘法口诀表
编写一个函数,接受一个整形参数n表示输出的规模。要求只用一重循环输出乘法口诀表的全部内容,并且程序中不能使用任何条件语句。
1 void print(int n) {
2 int row = 1, column = 1;
3 char flag[] = " \n";//当列数等于行数时为flag[1]换行
4 while (row<=n)
5 {
6 cout << row << " * " << column << " = " << row * column << flag[column / row];
7 int tem = column % row + 1;//当列数等于行数时,tem跳回1
8 row = column / row + row;//当列数等于行数时,行数加一
9 column = tem;
10 }
11 }
总结:(1)列号的变化规律符合取模运算,这种不断回到起点的数字排列特征符合取模运算的性质;
下一项列号=当前列号%当前行号+1
(2)对于行号来说,当列号等于行号时,行号加1,当列号等于行号时,行号不变。行号的变化规律符合整数除法的性质,当被除数小于除数时结果为零,当二者相等时结果为1。
下一项行号=当前列号/当前行号+1
原文链接: https://www.cnblogs.com/ys99/p/9192519.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/276179
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!