如果下边代码被执行,程序将怎么样?
#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|<
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