WHILE语句和DOWHILE语句

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

#include <stdio.h>

int main()
{
        while (1)
                ;

        return 0;
}

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

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

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

答:只有当变量 condition 的值为 0 时,才进入循环,执行循环体的内容。z}GTA (
lm_SgHt.7U9b&@d*vn?3j`zfYZLJA4
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 这个范围内的所有数值。

请说明下边语句的作用。

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

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

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

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

统计从键盘输入的一行英文句子中大写字母的个数。

程序实现如图:版权属于:bbs.fishc.com
4Xb>Zy[nEsQ.R?":B}e|<
 

写一个程序,将用户输入的英文句子中的字母大小写进行调换(即大写字母转换为小写字母,小写字母转换为大写字母)。FCZ3E`ibY
(c}s<y3p'6^_d:;on{$gS~zk[YL#%
提示:你可能会需要使用 putchar 函数。<)`;ipcN%
gUTs"`_H^02P>K&};G3Lo
程序实现如图:来自:
#pr*,Ml>&0HZw<!cKvo"UGx_5$S;J
 

 C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。,W3%ZA2o~
)7Ml*]1,u56Nj?GkW-`$F
基本要求:Powered b
C2V ]4X?"0@vKl}L%YS_t
A. 将用户输入的字符串中代表数字的字符转换为整型数值4O]0QM
bs*jG7M:"$2&>x+Tei,t
B. 打印转换结果来自
C*KQ?fv8]><J^k`@M.Rg5
C. 只打印第一组数字来自:
?k6ledJ,0^:XhU$AI.Gzy+=Hm[
提示:你可以使用 break 语句在适当的时候跳出循环。q(@D0}_&|
<GE@&f7;%}`en$:N0"[Ba8-*Um
程序实现如图:Powered b
(&7L.IyWC~oz@?uJpVhl_na:SPA
 


W1lc-Y"'k9n

@Mo!j.,]fOgi$v^T07B
g#t&fi:MBEjPW[Vkc 5u9^
进阶要求(如果下边要求你能成功实现,请给自己点个赞!

):b'{Bd
A2h{w~t&TpK.V*suZN:!<
A. 如果字符串中不存在任何表示数值的字符,则打印“并未找到任何数值”5T eg]!Uur
W3)M1jksTo,[zFG@O5Z{^D?ldCI6-4
B. 检测数值是否超出整型变量(int)可存放的范围,如果超出范围,则打印“数值超出范围,结果未定义!”的提醒。
*@'H^>ry}-JEI6V&Yu$_
C. 为了达到锻炼的效果,整型变量的范围需要自己计算,不使用 <limits.h> 头文件。0hFMc[uC
`@8mRyIG-?u|0hYe7!Kw+b6#2L
程序实现如图:

#include <stdio.h>
#include <math.h>

int main()
{
        int ch;
        long long num = 0;
        long long temp; // 临时变量,用于测试是否超出范围
        int is_overflow = 0;

        const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
        const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

        printf("请输入待转换的字符串:");

        do
        {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        temp = 10 * num + (ch - '0');
                        if (temp > max_int || temp < min_int)
                        {
                                is_overflow = 1;
                                break;
                        }
                        else
                        {
                                num = temp;
                        }
                }
                else
                {
                        if (num)
                        {
                                break; // 如果已有数字,则退出循环
                        }
                }

        }
        while (ch != '\n');

        if (is_overflow)
        {
                printf("数值超出范围,结果未定义!\n");
        }
        else
        {
                if (!num)
                {
                        printf("并未找到任何数值!\n");
                }
                else
                {
                        printf("结果是:%d\n", num);
                }
        }

        return 0;
}

来自
4(%h,29}j.bK呃<C8gq=SLel;Vp

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倦504

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值