一些代码小技巧&经典代码

小数四舍五入转化为整数的小技巧

double result = 1.0;
result += 2.6;
result ++;
result * 5;
result = (int)(result + 0.5)

答:

double result = 1.0;  // result == 1.0
result += 2.6;  // result == 3.6
result ++;  // result == 4.6
result * 5;  // result == 4.6,虽然乘以 5,但结果并没有保存起来
result = (int)(result + 0.5)  // result == 5

最后的加 0.5 是一个很实用的小技巧,用于转化为整数后实现四舍五入

输出格式左右对齐控制

-(负号):输出结果左对齐,右边填空格;缺省时则输出结果右对齐,左边填空格。

 ("%5d",123)    <space><space>123
("%-5d",123)    123<space><space>

请说明逻辑与(&&)在下边表达式中起到的重要作用

count != 0 && sum/count

答:该表达式使用逻辑与(&&)来确保 sum/count 的除数不为 0。
因为当 count 为 0 时,并不会导致 sum/0,因为根据短路求值的原则,&& 运算符在左侧为假的情况下,并不会计算右侧的表达式。(这个技巧放在实际开发中,逼格顿时嗷嗷的 )

请用一个逻辑表达式来判断某一年是否为闰年

某一年份如果符合下边 A 或 B 其中一个,我们称之为闰年:
A. 能被 4 整除,但不能被 100 整除;
B. 能被 400 整除。
答:

(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

解析:|| 左边为 A 条件,右边为 B 条件,符合其中一个,逻辑表达式即为真。

请说明下边语句的作用。

while ((ch = getchar()) == ' ')
{
   ;
}

答:过滤掉空格。先 getchar() 函数获得的值存放到变量 ch 中,再检测 ch 的值是否为空格(' '),如果是,执行循环体的内容,即空语句,然后开始第二轮循环……

请说明下边语句的作用。(假设下列语句在main函数中且在下列语句之前已经定义了一个动态数组new char[int])

do
{
   cout<<"请随便输入一串数字,回车键进行下一次输入:";
   cin>>char;
}
while ( getchar() != '/n');

答:用户按回车键即可进行下一次输入。先执行一次循环,用户按回车后进入下一次输入。

如果下边代码被执行,程序将怎么样?

#include <stdio.h>

int main()
{
        while (1)
                ;

        return 0;
}

答:进入死循环。因为决定退出 while 循环的条件表达式的值为 1,即永远为真,所以这是一个永远都不会结束的程序。
TIPS:快捷键 ctrl + c 可以强制退出程序。(Windows 系统请在“任务管理器”中结束程序)

请问下边进入循环的条件是什么?

……
while (!condition)
{
        // 循环体
}
……

答:只有当变量 condition 的值为 0 时,才进入循环,执行循环体的内容。
TIPS:初学者可能更倾向于写成 while (condition == 0),但 while (!condition) 的写法是 C++ 程序员更常用的,应该尝试去适应这种表示形式。

比起 while 语句,do…while 语句的特点是什么?

答:do…while 语句的特点是先进入循环再判断表达式的值。也就是说,无论如何 do…while 语句都会至少执行循环体的内容一次。

如果不上机实验,你能看出下边代码会打印哪个范围内的所有数值呢?

#include <stdio.h>

int main()
{
        signed char i = 0;

        while (i <= 0)
        {
                printf("%d", i);
                i = i - 1;
        }

        return 0;
}

答:会打印 0 ~ -128 这个范围内的所有数值。

为什么 getchar() 返回值为 int 是为了存放 EOF,而 EOF 通常被定义为 -1,char 类型即可存放,为啥还要 int 类型?

答:因为 char 默认定义为 unsigned char 还是 signed char 是取决于编译系统,所以 char 在某些编译系统可能无法存放负数;而 int 默认是 signed int。

putchar和getchar比较

putchar函数(字符输出函数)的作用是像终端输出一个字符,其一般形式是:putchar (c),它输出字符变量是c,能够是字符型变量和整形变量。
getchar函数(字符输入函数) 此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 getchar函数没有参数,其一般形式为getchar( )函数的值就是从输入设备得到的字符。

下列代码执行了什么

 while ((ch = getchar()) != '\n')
        {
                if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch - 'A' + 'a';
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                        ch = ch - 'a' + 'A';
                }

                putchar(ch);
        }

        putchar('\n');

答:将用户输入的英文句子中的字母大小写进行调换。

字符串中数字转换成整型的数字

详细介绍请点击这里

请将下边的 for 语句写成 while 语句的表示方式。

for ( ; ; )
    ;

答:for 语句省略三个表达式即表示永远为真的循环,即死循环。用 while 语句应该这样写:

while (1)
    ;

请将下边的 while 语句写成 for 语句的表示形式。

while ((ch = getchar()) != '\n')
{
        printf("%c", ch);
}

答:在这种情况下(没有计数的时候),使用 while 语句会更加自然。

for ( ; (ch = getchar()) != '\n'; )
{
        printf("%c", ch);
}

用scanf_s判断输入数据是否合法

scanf_s函数会返回成功接收字符的个数,所以我们只需检查每次调用 scanf_s函数的返回值是否为 1 即可。

详细介绍请点击这里

while(i++)和while(++i)的区别

++i 先对i自加后再执行
i++ 先执行后再自加
++i 先把i加上1再执行程序;
i++ 先执行完程序在加1;
第一种是先自增 在赋值,后一种是先赋值后自增,i>=0的时候都是无限循环,貌似
前者比后者少一次。
第一个判断i+1的值,第二个是判断i的值,
int i==-10;\i赋一个负数;
while(++i)和while(i++)的别在于:
1,循环体的循环次数不同,while(++i)偱环i次;while(i++)循环i+1次
2,循环完后,不的值不同while(++i)执行完后,i=0;while(i++)执行完后,i=1;
因为在while终止时括号内的逻辑值为0;而i++在循体结束后又执行了一次加1运算;
最大的区别是当 i 为 0 的时候。
while(++i)能被执行
while(i++)不能被执行

posted @ 2021-05-15 21:43  Stéphane  阅读(179)  评论(0)    收藏  举报