iOS开发技能树之C语言-结构语句

分支结构

1、简单if

基本结构

if (表达式) { 如果表达式为真,则执行语句,否则跳过不执行
    执行语句;
}
e.g

int result = 100;
if (result == 100) {
    printf("考试成绩满分");
}

2、if-else

基本结构

if (表达式) { //如果表达式为真,执行语句1,否则执行语句2
   执行语句1;
} else {
   执行语句2;
}

e.g

int result = 69;
if (result >= 60) {
    printf("成绩及格");
} else {
    printf("成绩不及格");
}

3、多重嵌套if-else

基本结构

//多重
if (表达式) { //直到满足表达式为真,执行对应语句
   执行语句1;
} else if (表达式2) {
   执行语句2;
} .... else {
    执行语句n;
}

//嵌套
基本结构

if (表达式1) { 
    if (表达式2) { //满足表达式1为真,并且满足表达式2为真,执行语句1
        执行语句1;
    } else { //满足表达式1为真,并且不满足表达式2为真,执行语句2
    执行语句2;
   }
} else {
    执行语句3;
}
int result = 69;
if (result >= 90) {
    if (result > 95) { //嵌套,这里也可以直接写成多重,但在有些情况下嵌套能更好的表述问题。
        printf("成绩:A+");
    } else {
        printf("成绩:A");
    }
} else if (result >= 80) {
    printf("成绩:B");
} else if (result >= 70) {
    printf("成绩:C");
} else if (result >= 60) {
    printf("成绩:D");
} else {
    printf("成绩:E");
}

4、switch分支

switch用于多分支选择。

一般表达式

switch (表达式) {
    case 常量表达式1:
        执行代码块1
        break;
    case 常量表达式2:
        执行代码块2
        break;
        ......
    default:
        break;
}

switch后面括号里的表达式将被逐个与常量表达式进行比较,如果表达式与常量表达式的值相等,对应该常量表达式后面的语句将被执行。

break语句表示某个case语句结束,同时switch语句执行也将中止。每个case的最后要加上break,否则程序就会转到后面的case中。

如果表达式和任何一个常量表达式都不相同,那么程序将执行default语句。

switch语句可以理解为多重的if-else语句。

成绩分级

int result = 69;
result = result / 10;
switch (result) {
    case 10:
    case 9:
        printf("成绩:A");
        break;
    case 8:
        printf("成绩:B");
        break;
    case 7:
        printf("成绩:C");
        break;
    case 6:
        printf("成绩:D");
        break;

    default:
        printf("成绩:E");

        break;
}
printf("\n");
打印结果:
成绩:D

循环结构

1、for循环

一般表达式

for (初始化表达式; 循环条件; 循环表达式) { //只要循环条件为真,就一直执行
        执行代码块;
    }

初始表达式,对循环变量做初始化;

循环条件,结果为真执行循环体,结果为假,跳出循环;

循环表达式,改变循环变量

e.g 计算10以内所有整数和
// 定义变量sum, num
int sum, num;
sum = 0;
for(num = 0;  num <= 10;   num ++   ) //for循环条件与num的变化值
{
    sum += num   ; //计算每次数字之间的和sum
}
printf("10以内数的和为:%d\n", sum);
e.g 打印所有水仙花数 (所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数,如:153就是一个水仙花数,153=1*1*1+5*5*5+3*3*3。)

//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for(num = 100 ; num < 1000 ; num ++)
{
    //获取三位数字num百位上的数字
    hd = num/100;
    //获取三位数字num十位上的数字
    td = num/10 % 10;
    //获取三位数字num个位上的数字
    sd = num % 10;
    //水仙花数的条件是什么?
    if( num == hd * hd * hd + td * td * td + sd * sd * sd)
    {
        printf("水仙花数字:%d\n", num);
    }
}

for循环一般用于指定次数的循环

2、while循环

一般形式

while (循环条件) { //只要循环条件为真,就一直执行。所以要在循环体中改变循环变量的值,否则会出现死循环
   执行代码块;
}

通过while循环计算任意两个整数的最大公约数。这个算法是阿基米德在大约公元前300年发现的,算法描述如下:

问题:找出两个非负整数u和v的最大公约数
第一步:如果v等于0,那么u就是最大公约数
第二步:执行下面表达算式:temp = u%v,u=v,v=temp,然后执行第一步

这里不研究这个算法能否正确工作,只是通过程序实现这个算法:

e.g (C语言编程)
int u,v,temp;
    printf("Please type in tow nonnegative integers.\n");
    scanf("%i%i",&u,&v);
    while (v != 0) {
        temp = u % v;
        u = v;
        v = temp;
    }
    printf("Their greaterst common divisor is %i\n",u);

输出结果:
Please type in tow nonnegative integers.
12 45
Their greaterst common divisor is 3

while 语句一般用于知道结束条件,但是循环次数不确定的情况。

3、do-while循环

for和while循环语句,在执行循环体之前,都会检测特定循环条件,因此如果一开始就不满足循环条件,循环体会一次也不执行。 有些时候,我们需要在循环体结束的时候,而不是在循环开始的地方检验循环条件,因此有了do-while循环。

一般表达式

do { //先至少执行一次代码块,再验证表达式是否为真,如果为真继续下一次循环,如果为假则跳出循环。
    执行代码块;
} while (循环表达式)
e.g 倒序打印输入的数字 (C语言编程)

int number ,right_digit;

printf("enter your number: \n");
scanf("%i",&number);

do {
    right_digit = number % 10;
    printf("%d",right_digit);
    number /= 10;
} while (number != 0);
printf("\n");

打印结果:
enter your number: 
13457
75431

4、多重循环

多重循环,即循环嵌套。

在执行过程中,外层循环为父循环,内层为自循环。父循环一次,自循环需要全部执行完,知道跳出循环。父循环再进入下一次,子循环继续执行…

一个父循环可以有多个自循环。

打印 :
    *
   ***
  *****
 *******


 int i, j, k;
for(i=1; i<5; i++)
{
    /* 观察每行的空格数量,补全循环条件 */
    for(j = i ;  j < 5 ;  j++  )
    {
        printf(" ");    //输出空格
    }
    /* 观察每行*号的数量,补全循环条件 */
    for( k = 0 ;  k < i * 2 - 1;  k ++     )
    {
        printf("*");   //每行输出的*号
    }
    printf("\n");     //每次循环换行
}
倒打乘法表,正打乘法表
int i,j,result;
for (i=9; i > 0; i--) {
    for (j = 1; j <= i; j++) {
        result = j * i;
        printf("%d*%d=%2d ",i,j,result);
    }
    printf("\n");
}

for (i = 1; i <= 9; i ++) {
    for (j = 1; j <= i; j ++) {
        result = i * j;
        printf("%d*%d=%2d ",j,i,result);
    }
    printf("\n");
}

打印结果:

9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 
4*1= 4 4*2= 8 4*3=12 4*4=16 
3*1= 3 3*2= 6 3*3= 9 
2*1= 2 2*2= 4 
1*1= 1 
1*1= 1 
1*2= 2 2*2= 4 
1*3= 3 2*3= 6 3*3= 9 
1*4= 4 2*4= 8 3*4=12 4*4=16 
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

break 语句

在某些情况下,需要在某个条件成立的时候(非循环条件)立刻退出循环,这个时候需要break语句。

使用break;可以使程序退成正在执行的循环,直接中止当前循环,break后的语句直接跳过,程序接着循环后面的语句开始执行。

在多层循环中,一个break语句只能跳出当前循环。

查找0-50之间的所有素数:

tips:素数就是只能被1和它本身整除的数

int n ,m;
    for (m = 2; m <= 50; m++) {
        for (n = 2; n < m; n++) { //遍历1-m判断是否有能被其整除的数,如果有跳出循环。
            if (m%n == 0) {
                break;
            }
        }
        if (m == n) { //两种情况,自循环break跳出,m != n,说明其有可整除的数,不是素数;子循环结束,1-m没有其能整除的数,是素数。
            printf("%d ",m);
        }
    }

continue 语句

continue语句,结束本次循环并开始执行下一次循环。

当程序执行到continue语句时,该语句后面的所有语句都被跳过,循环其他部分照常执行。

打印20以内能被3整除的数

for (int i = 0; i < 20; i ++) {
    if (i % 3 != 0) {
        continue;
    }
    printf("%d",i);
}

打印结果:
0 3 6 9 12 15 18 

猜你喜欢

转载自blog.csdn.net/fengzhixinfei/article/details/80093305