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 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容