控制流
1.1 else-if语句:
if(表达式)
语句1;
else
语句2;
其中else部分是可选的,可有可无。该语句进行执行时首先计算表达式的值,如果结果为真,则执行 语句1,如果为假,并且该语句含有else部分,则执行语句2。
其次,if语句后面只能有一个语句,如果要使用多条语句(复合语句),必须使用{};使用大括号有 百利而无一害。当然if语句也可以有多种形式,例如
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
……
else
语句;
其中的表达式将进行一次求职值,一但表达式为真则执行相对应语句,并终止整个语句的执行。
1.2 举例说明if语句的用法
折半查找 ;
在折半查找时,首先将输入值 x与数组v的中间 元素进行比较。如果x小于中间元素的值,则在该数组 的前半部分查找;否则,在该数组的后半部分进行查找。在这两种情况下,下一步都是将X与所选部分的 中间元素进行比较。这个过程一直进行下去,直到找到指定的值或查找范围为空。
2.2 switch语句;
多路判定语句,他测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作。
switch(表达式)
{
case 常量表达式:语句序列
case 常量表达式:语句序列
……
default:语句序列
}
每一个分支都由一个或多个整数值常量或常量表达式标记,如果某个分支与表达式的值匹配,则从该 分支开始执行。如果所有的表达式都不能匹配成功,则执行default分支或者不执行任何动作。
2.2 统计各个数字,空白符及其他所有字符出现的次数;
#include <stdio.h>
#include <stdlib.h>
int main() {
int letter = 0, digital = 0, space = 0, other = 0, i;
char c;
printf("请输入一些字符:");/*这里删除scanf("%c",&c); */
while ((c = getchar()) != '\n') {
if (c >= '0'&&c <= '9') i = 0; //数字
else if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z')) i = 1; //字母
else if (c == ' ') i = 2; //空格,这里用==
else if (32<c<48 || 57<c<65 || 90<c<97 || 122<c<127) i = 3; //其他字符
switch (i) {
case 0:digital++; break;
case 1:letter++; break;
case 2:space++; break;
case 3:other++; break;
}
}
printf("数字有%d个,字母有%d个,空格有%d个,其他字符有%d个。\n", digital, letter, space, other);
system("pause");
return 0;
}
switch语句中,case的作用只是一个标号,因此某个分支执行结束之后程序将进入下一个分支继续执行,除非在程序中显式的跳转。使用break或return语句;break可以强制控制从while,for,do循环语句中跳出。并且在正常情况下为了防止直接进入下一个分支执行,每个分支后必须以一个break语句结束。尽量减少从一个分支直接进入下一个分支执行的用法。最后在default后加上break降低错误的可能性。
3.1 while循环与for循环;
while(表达式)
语句;
for(循环语句);
for(表达式1;表达式2;表达式3)
{
语句;
}
for循环语句中的表达式都可以省略,但是分号不能省略,可以有形式
for(;;)
{
……
};是一个无线循环语句,借助break,return语句才能结束;
3.2.1 编写atoi函数将字符串数字转换为对应的数字;
#include <stdio.h>
#include <stdlib.h>
int my_atoi(char s[10])
{
int ret = 0;
int flag = 1;
char *p = s;
if (*p == '-')
{
flag = -1;
}
if (*p == '+' || *p == '-')
{
p++;
}
while (*p != '\0')
{
if (*p <= '9' && *p >= '0' && *p !=' ')
{
ret = ret * 10 + *p - '0';
p++;
}
else
p++;
}
return flag*ret;
}
int main()
{
char input[10];
gets(input);
int ret = my_atoi(input);
printf("%d\n", ret);
system("pause");
return 0;
}
3.2.2 打印输出9*9乘法口诀表
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i<10; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%2d ", i, j, i*j);
}
printf("\n");
}
system("pause");
return 0;
}
当然,while,for都可以进行嵌套循环,两者也可以放在一起进行嵌套循环;
4.1 do-while循环;
该循环在循环体执行一次后测试终止条件,循环体至少执行一次。
语法形式:
do
语句
while(表达式);
5.1 break语句与continue语句;
break语句课用于从switch,佛如,do-while等循环中提前退出;
continue语句与break是相关联的,continue适用于for,while,do-while语句开始下一次循环的执行。在while,do-while语句中,continue语句的执行意味着立即执行测试部分;在for语句中则意味着使控制转移到递增循环变量部分。continue只用于循环语句,不用于switch语句。
例如处理数组a中的非负元素,则跳过
for(i0;i<len;i++)
{
if(a[i]<0)
continue;
……
}
6.1 goto语句 ;
goto语句可以一次跳出2层或多层循环,这种情况下使用goto可以达到目的;例如下面的程序:
for(……)
{
for(……)
{
……
if(disaster)
goto error;
}
error:
}
转载于:https://blog.51cto.com/10324228/1689198