Appearance
循环语句
循环结构是 C 语言中三大常用程序结构之一, 循环就是重复地执行同一段代码. 例如, 我们需要输出 10 行 “Hello world!” 在我们的屏幕上. 为了方便, 增加行号.
实现上面的代码:
c
#include <stdio.h>
int main() {
printf("Hello world!\n");
return 0;
}#include <stdio.h>
int main() {
printf("Hello world!\n");
return 0;
}while
C 语言中的 while 语言使用方法:
c
int main () {
,------------------------------ C 语言 关键字
| ,--------------------------- 循环的条件, 非零即为真.
while (1) {
printf("Hello world!\n"); <---- 循环的语句
}
};int main () {
,------------------------------ C 语言 关键字
| ,--------------------------- 循环的条件, 非零即为真.
while (1) {
printf("Hello world!\n"); <---- 循环的语句
}
};上面输入的结果与我们想要的结果是不一样的. 那说明程序出现的另外的一种错误就是逻辑错误, 在工业界也称之为bug. 程序代码中最常见的两种错误, 一种是语法错误, 是编译时就能发现, 一种就是逻辑错误, 运行时才能发现, 但是有一些逻辑错误很难发现, 这个周期会长一些. 所以, 我们需要专业的软件测试工程, 对我们的代码进行测试. 帮助我们发现 bug 逻辑上的错误.
上面的代码, 我们需要引入计数器, 在这我们使用 int i 为计数变量, 用来存放我们输出多少行 hello world. 修改上面的代码, 如下:
c
#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
printf("Hello world!\n");
}
return 0;
}#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
printf("Hello world!\n");
}
return 0;
}发现运行结果还是不对, 想一下我们那里出的问题. 发现, 我们的计数变量并没有使用. 再次修改代码. 将输出完 hello world , 将 i 进行加 1.
全代码:
c
#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
printf("Hello world!\n");
i++;
}
return 0;
}#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
printf("Hello world!\n");
i++;
}
return 0;
}这回代码对了.
思考题
- 输出行号. (printf 中的 %d)
- 修改上面的程序的计数变量 i = i + 2; 看看循环结果是什么?
- 修改上面的程序的循环条件 i < 20 看看输出的结果是什么?
总结
null
字母转成数字
大家有没有注意到, 我们的手机在拔打的电话界面,按键式也好,拨号式也罢,除了1和0之外的2~9八个数位上,都各有三个或四个英文字母(手机上的按键字母顺序)。美国的电话号码不仅仅是十个数字的组合,还融进了英文字母, 便把电话号码以数字加字母的形式组合成代表某种意思的英文词汇——或公司名字,或产品品牌,既是电话号码,又是商业广告,一举两得。 例如,
1-800-STAPLES 是全球卓越的办公用品公司,创立于1986年的美国波士顿。(中文商标: 史泰博 订书钉)
1-800-GATEWAY 是一家1985年成立于美国爱荷华州的公司,现成长为美国知名的PC品牌.(中文商标: 捷威)。
1-800-helloword 是一家昆明著名的少儿编程培训学校.

代码:
c
#include <stdio.h>
#include <ctype.h>
const char table[]="22233344455566677778889999";
int main(void){
// 输入
int ch;
while((ch=getchar())!=EOF){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
ch = table[toupper(ch)-'A'];
putchar(ch);
}
return 0;
}#include <stdio.h>
#include <ctype.h>
const char table[]="22233344455566677778889999";
int main(void){
// 输入
int ch;
while((ch=getchar())!=EOF){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
ch = table[toupper(ch)-'A'];
putchar(ch);
}
return 0;
}这里用到几个知识点:
c
getchar(): 作用是从标准输入(键盘) stdin 中读取一个字符, 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
putchar(): 作用是向标准输出(屏幕) stdout 中写入一个字符, 该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
toupper(): 作用是把小字母转成大字字符.
EOF: 是 End Of File 是C语言标准函数中表示文件结束符, 用来表示资料结束. C语言中的数据都是以字符串的ASCII代码值来存放的, ASCII的值是 0 ~ 127 , EOF定义为-1.getchar(): 作用是从标准输入(键盘) stdin 中读取一个字符, 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
putchar(): 作用是向标准输出(屏幕) stdout 中写入一个字符, 该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
toupper(): 作用是把小字母转成大字字符.
EOF: 是 End Of File 是C语言标准函数中表示文件结束符, 用来表示资料结束. C语言中的数据都是以字符串的ASCII代码值来存放的, ASCII的值是 0 ~ 127 , EOF定义为-1.当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
for
再例如, 我们要计算 1+2+3+4+ ... +99+100 的值, 就是重要重复执行加法运算.当然这个问题是一个很古老的问题, 想必大家都知道这可以使用高期的求和的公式轻松计算其结果.
数据公式:
(首项 + 末项) x 项数 / 2(首项 + 末项) x 项数 / 21加到100的算式:
(1 + 100) x 100 / 2 = 5050(1 + 100) x 100 / 2 = 5050c
#include <stdio.h>
int main () {
int sum = 0;
sum = 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100;
printf("1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100=%d", sum);
return 0;
}#include <stdio.h>
int main () {
int sum = 0;
sum = 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100;
printf("1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100=%d", sum);
return 0;
}C 语言中的 for 语言使用方法:
c
int i;
,------------------------------------ C语言的关键字
| ,------------------------------ 设置计数器的初始值
| | ,---------------------- 循环条件
| | | ,---------------- 计数器或循环的步长
for (i = 0; i < 10; i++) {
printf("Hello world!\n"); <--------- 循环语句
}int i;
,------------------------------------ C语言的关键字
| ,------------------------------ 设置计数器的初始值
| | ,---------------------- 循环条件
| | | ,---------------- 计数器或循环的步长
for (i = 0; i < 10; i++) {
printf("Hello world!\n"); <--------- 循环语句
}那我们来实现一下. 输出 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100 这文本内容.
c
#include <stdio.h>
int main () {
int i;
for(i = 1; i <= 100; i++) {
printf("%d", i);
if(i != 100)
printf("+");
}
return 0;
}#include <stdio.h>
int main () {
int i;
for(i = 1; i <= 100; i++) {
printf("%d", i);
if(i != 100)
printf("+");
}
return 0;
}思考题:
- 如果将计数器的初始改为0, 还需要修改那些地方?
- 用for循环实现 1 ~ 100 的加法运算.