005-循环结构(上)-C语言笔记

学习目标

1.【掌握】switch-case结构

2.【理解】case语句穿透

3.【理解】Xcode断点调试

4.【理解】while循环结构初体验

5.【掌握】while循环结构的应用

6.【理解】break和continue

一、switch-case结构

switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2; ...
break;
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

switch(表达式){

case常量表达式1:

语句1;

break;

case常量表达式2:

语句2;...

break;

case常量表达式n:

语句n;

break;

default:

语句n+1;

break;

}

计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后跳出switch语句,继续执行程序。如果逐个比较都没有相等的值,则执行default后的代码,然后跳出switch,继续执行程序。

和if-else的区别:

1.能够使用switch-case结构写的代码一定可以使用if结构写出来,但能够使用if结构写出来的代码,不一定可以使用switch-case结构。

2.switch-case结构 只能直接做等值判断,判断switch后的值是否和给定的case值相等。if结构,不仅可以做等值判断 还可以做范围判断。

3.如果是做范围判断推荐使用if语句,如果是做等值判断则推荐使用switch语句。

switch语句注意事项:

1.表达式的类型(case语句后的值)必须是整型或可以转变为整型的值(byte、short、char和int类型)。

2.值1、值2...值n只能为常数或常量,不能为变量。

3.功能代码部分可以写任意多句。

4.break关键字的意思是中断,指结束switch语句,break语句为可选。

5.case语句可以有任意多句,可以不用加括号“{}”。

6.default语句可以写在switch语句中的任意位置,功能类似于if语句中的else。

执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break语句,则一直执行到switch语句的结束。

7.case后面不可以直接定义变量,使用定义的这个变量的作用域 8)如果在case后面定义的变量必须加上大括号

二、case语句穿透

case语句执行的过程中,如果在每一个case语句后没有break,则一旦进入某个分支后就会一直执行到switch结束。break的作用是直接跳出switch语句,当然还有其他作用,待会整理循环结构笔记的时候再说。

int year = 0, month = 0;
printf("请输入年份和月份:");
scanf("%d%d",&year,&month);

switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("%d年的%d月有31天\n",year,month);
break;//这里就是使用了case穿透,1,3,5,7,8,10,12任意分支满足,都会执行他们后面所有代码,直到遇到break跳出switch
case 4:
case 6:
case 9:
case 11:
printf("%d年的%d月有30天\n",year,month);
break;
case 2:
//判断年份是否为闰年.
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){

printf("%d年的%d月有29天\n",year,month);
}else{
printf("%d年的%d月有28天\n",year,month);
}
break;
default:
printf("你是都教授吗?\n");
break;
}

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

intyear=0,month=0;

printf("请输入年份和月份:");

scanf("%d%d",&year,&month);

switch(month){

case1:

case3:

case5:

case7:

case8:

case10:

case12:

printf("%d年的%d月有31天\n",year,month);

break;//这里就是使用了case穿透,1,3,5,7,8,10,12任意分支满足,都会执行他们后面所有代码,直到遇到break跳出switch

case4:

case6:

case9:

case11:

printf("%d年的%d月有30天\n",year,month);

break;

case2:

//判断年份是否为闰年.

if(year%400==0||(year%4==0&&year%100!=0)){

printf("%d年的%d月有29天\n",year,month);

}else{

printf("%d年的%d月有28天\n",year,month);

}

break;

default:

printf("你是都教授吗?\n");

break;

}

穿透的作用:不同case语句执行的代码相同,就可以使用穿透来简写代码。

三、Xcode断点调试

在程序运行期间,我们可以通过Xcode提供的断点调试监视CPU执行代码的步骤,变量的值的变化,以便我们排查BUG。下面图例就是使用断点调试 功能的图解,不是很详细,将就吧。。。整理笔记时间太短了,还得做练习,断点调试教程我会单独在【Xcode教程】栏目发布的。

Xcode如何显示行号:

在Xcode -》 Preferences -》 Text Editing -》 第一个选项,勾选Lines numbers。

添加断点

设置断点不起作用

删除断点:拖动断点到空白处,即可彻底删除断点。

调试程序:Command + R 运行后,如果设置了断点,则直接进入调试视图

四、while循环结构初体验

循环结构可以将一段代码重复执行指定次数,C语言中的循环结构有while循环结构、do-while循环结构和for循环结构。当然由goto语句和if判断也能组成循环,不过全世界人民都不建议使用goto语句。今天我们要讲解的是while循环结构的语法和应用场景。

while(条件表达式){
那段需要被反复不停执行的代码,也叫循环体;
}

1

2

3

while(条件表达式){

那段需要被反复不停执行的代码,也叫循环体;

}

执行过程:先判断while后面小括号里的表达式是否为真,为真则执行大括号里的循环体,然后再次判断while后面小括号里的表达式,为真再次继续执行,然后。。。直到while后面的表达式为假,则立即停止while循环。

关于死循环:

while (1){
printf("表达式一直为真。。。所以,死循环!");
}

1

2

3

while(1){

printf("表达式一直为真。。。所以,死循环!");

}

循环体一直反复不停的执行,永远不会结束,这种循环我们就叫做死循环。我们在写循环的时候,要特别注意合理利用死循环。

五、while循环结构的运用

第一种场景:确定循环体,也确定循环的次数。

#include <stdio.h>

int main() {
int i = 0;

//将一句话输出2万次
while (i < 20000){
printf("欢迎你来六阿哥的博客\n");
i++;
}
return 0;
}

1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

intmain(){

inti=0;

//将一句话输出2万次

while(i<20000){

printf("欢迎你来六阿哥的博客\n");

i++;

}

return0;

}

第二种场景:确定循环体,不确定循环次数,但确定循环结束或者继续的条件。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]){

int money = arc4random_uniform(101);
int guess = -1;

while (guess != money){
printf("请猜一下我给了你多少钱吧:");
scanf("%d",&guess);
if(guess > money){
printf("你猜得太大了\n");
}else if(guess < money){
printf("你猜得太小了\n");
}
}
printf("恭喜你,正确\n");
return 0;
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <stdio.h>

#include <stdlib.h>

intmain(intargc,constchar*argv[]){

intmoney=arc4random_uniform(101);

intguess=-1;

while(guess!=money){

printf("请猜一下我给了你多少钱吧:");

scanf("%d",&guess);

if(guess>money){

printf("你猜得太大了\n");

}elseif(guess<money){

printf("你猜得太小了\n");

}

}

printf("恭喜你,正确\n");

return0;

}

第三种场景:遍历指定范围的数,将每1个数据都找出来

int i = 100;
while ( i <= 150){
printf("%d\n",i);
i++;
}

1

2

3

4

5

inti=100;

while(i<=150){

printf("%d\n",i);

i++;

}

第四种场景:找出指定范围中符合特定条件的数

int i = 100;
while (i <= 999){
int bai = i / 100;
int shi = i % 100 / 10;
int ge = i % 10;
//只取出满足条件的值
if(bai * bai *bai + shi * shi * shi + ge * ge * ge == i){
printf("%d\n",i);
}

i++;
}

1

2

3

4

5

6

7

8

9

10

11

12

inti=100;

while(i<=999){

intbai=i/100;

intshi=i%100/10;

intge=i%10;

//只取出满足条件的值

if(bai *bai *bai+shi *shi *shi+ge *ge *ge==i){

printf("%d\n",i);

}

i++;

}

第五种场景:求累加和与平均值

int i = 1;
int sum = 0;

while (i <= 5){
sum += i;
i++;
}
printf("sum = %d\n",sum);

1

2

3

4

5

6

7

8

inti=1;

intsum=0;

while(i<=5){

sum+=i;

i++;

}

printf("sum = %d\n",sum);

第六种场景:求最大值和最小值

#include <stdio.h>
#include <limits.h>

int main(int argc, const char * argv[]){

int max = INT32_MIN; //先声明1个擂台变量.用来保存最大值的.
int i = 0;
while (i < 5){
printf("请输入第%d个数:\n",i+1);
int num = 0;
scanf("%d",&num);
//每循环1次 就拿刀了用户输入的1个数据.

//如果输入的是第1个数据 那么就直接将这个数据赋值给max。
// if(i == 0)
// {
// max = num;
// }
//拿刀用户输入的这个数据 和擂台上的数据做比较.
if(num > max){
max = num;
}
i++;
}
printf("max = %d\n",max);
return 0;
}

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

#include <stdio.h>

#include <limits.h>

intmain(intargc,constchar*argv[]){

intmax=INT32_MIN;//先声明1个擂台变量.用来保存最大值的.

inti=0;

while(i<5){

printf("请输入第%d个数:\n",i+1);

intnum=0;

scanf("%d",&num);

//每循环1次 就拿刀了用户输入的1个数据.

//如果输入的是第1个数据 那么就直接将这个数据赋值给max。

//        if(i == 0)

//        {

//            max  = num;

//        }

//拿刀用户输入的这个数据 和擂台上的数据做比较.

if(num>max){

max  =num;

}

i++;

}

printf("max = %d\n",max);

return0;

}

六、break和continue

break关键字:

可以使用在switch-case结构之中。如果在其中使用了break,就代表结束这个switch-case结构。

还可以使用在循环体之中。如果在循环体之中遇到了break,就会立即结束当前循环结构。

int i = 0;
while (i < 5){
printf("我爱你们\n");
if(i == 2){
break;//i等于2的时候直接结束while循环,最终i的值也只停留在2
}
i++;
}

1

2

3

4

5

6

7

8

inti=0;

while(i<5){

printf("我爱你们\n");

if(i==2){

break;//i等于2的时候直接结束while循环,最终i的值也只停留在2

}

i++;

}

continue关键字:

只能用在循环体之中,如果在循环体之中遇到了continue,会立即结束本次循环。再判断循环条件,决定是否要继续下一次循环。

int i = 0;
while (i < 5){

if(i == 2){
continue;//当i等于2的时候,直接结束本次循环
}
i++;//因为i等于2就结束了本次循环,所以i++没有被执行。最终i的值为2
printf("%d\n",i);

}

1

2

3

4

5

6

7

8

9

10

inti=0;

while(i<5){

if(i==2){

continue;//当i等于2的时候,直接结束本次循环

}

i++;//因为i等于2就结束了本次循环,所以i++没有被执行。最终i的值为2

printf("%d\n",i);

}

学习目标

1.【掌握】do-while循环结构

2.【掌握】for循环结构

3.【掌握】嵌套循环

一、do-while循环结构

do-while语法:

int main() {

do {
循环体;
} while ( 表达式 );
return 0;
}

1

2

3

4

5

6

7

intmain(){

do{

循环体;

}while(表达式);

return0;

}

do-while执行顺序:当遇到do-while循环结构时,首先执行一次循环体中的语句,接着判断表达式成立与否,如果成立就执行循环体中的语句。然后再次判断表达式,重复上述过程,直到表达式不成立则结束循环。

特点:无论表达式成立与否,循环体中的语句至少会被执行一次。

与while相比:while是先判断,再执行。do-while是先执行再判断。例如:

#include <stdio.h>

int main() {

int i = 10;
while (i < 10){
i++;
}
printf("i = %d\n",i);//打印i = 10

int j = 10;
do {
j++;
} while (j < 10);
printf("j = %d\n",j);//打印j = 11
return 0;
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include <stdio.h>

intmain(){

inti=10;

while(i<10){

i++;

}

printf("i = %d\n",i);//打印i = 10

intj=10;

do{

j++;

}while(j<10);

printf("j = %d\n",j);//打印j = 11

return0;

}

其他和while一样,没啥好说的了。只有while掌握得好,do-while和for循环都一样分分钟掌握。

二、for循环结构

for循环结构只是为while中最重要的三个要素设计了专门的位置,其作用效果都一样。而且由while写的循环,都能用for循环写出来,那么为嘛还要学while呢,只学for循环不就行了么。呵呵,这个看个人口味了,觉得使用哪个循环结构方便就使用哪个。

for循环语法:

int main() {

for(表达式1;表达式2;表达式3) {
循环体;
}
return 0;
}

1

2

3

4

5

6

7

intmain(){

for(表达式1;表达式2;表达式3){

循环体;

}

return0;

}

for循环结构执行顺序:

第一轮:先执行表达式1,再判断表达式2如果成立,则执行循环体,再执行表达式3。不成立直接结束for循环。

第二轮:先判断表达式2如果成立,则执行循环体,再执行表达式3。不成立直接结束for循环。

第三轮:重复第二轮操作。

分别利用for循环和while循环求1-100的累加和

int main() {
int sum = 0;
for(int i = 1;i <= 100;i++){
sum += i;//求1-100的累加和
}

//用while循环
int j = 1,res = 0;

while (j <= 100) {
res += j;
j++;
}

return 0;
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

intmain(){

intsum=0;

for(inti=1;i<=100;i++){

sum+=i;//求1-100的累加和

}

//用while循环

intj=1,res=0;

while(j<=100){

res+=j;

j++;

}

return0;

}

注意细节:

表达式可省略(三个表达式都可以省略)。for( ; ; ) 语句相当于while(1) 语句,即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体,也就是死循环。

表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:

int main() {

for(int sum = 0,i = 1;i <= 100;i++)
sum += i;

//或
for(int i = 0,j = 100,k = 0;i <= j;i++,j--){
k = i + j;
}
return 0;
}

1

2

3

4

5

6

7

8

9

10

11

intmain(){

for(intsum=0,i=1;i<=100;i++)

sum+=i;

//或

for(inti=0,j=100,k=0;i<=j;i++,j--){

k=i+j;

}

return0;

}

表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值。

三、循环嵌套

我们学习的三个循环结构是可以互相嵌套使用的,while循环嵌套 while循环,while循环嵌套do-while循环,while循环嵌套for循环等等,他们直接是可以互相多层嵌套的。嵌套循环的执行顺序和普通 循环也是一样的,只是循环体也是一个循环,我们还是把循环体中的循环结构当做普通的循环体去执行就行了。

#include <stdio.h>

int main() {

for (int i = 1; i <= 9; i++) {//外层循环
for (int j = 1; j <= i; j++) {//内存循环
printf("%d * %d = %d\t",j,i,i*j);
}
printf("\n");
}
return 0;
}

1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

intmain(){

for(inti=1;i<=9;i++){//外层循环

for(intj=1;j<=i;j++){//内存循环

printf("%d * %d = %d\t",j,i,i*j);

}

printf("\n");

}

return0;

}

打印出:

执行顺序:

把内层循环看作外层循环的普通循环体,外层循环执行一次,内层循环要执行到内层循环条件不满足才结束内层循环。然后再继续执行内层循环后面的循环体 语句,比如这里的printf("\n");。他和内层循环一样,都是外层循环的循环体。只是内层循环也是一个循环,按照循环的正常执行顺序来执行就行。

日期:2015-06-29  分类:Study标签:IOS入门到精通

时间: 2024-08-10 23:29:55

005-循环结构(上)-C语言笔记的相关文章

循环结构(c语言)

1.求Fibonacci数列的前40个数.这个数的特点:第1,2两个数为1.从第3个数开始,该数是其前两个数之和. 法1: #include <stdio.h> int main() { int f1=1,f2=1,f3; printf("%d\n%d\n",f1,f2); for(i=1;  i<=8; i++) { f3=f1+f2; printf("%d\n",f3); f1=f2; f2=f3; } return 0; } 法2: #inc

今天开始进入循环结构的C语言,压力慢慢开始了。

初学C语言,加上脑子不够灵光,今天学习了循环结构,for,which,do_which的语句,在计算循环算法上慢慢开始有压力. 一道特别有意思题,输入一个数让他反序输出. 自己写了一大截,结果网上查查发现这算法如此神奇. #include <stdio.h>void main(){     int a,b=0;     printf("输入任意一个数:");     scanf("%d",&a);     while(a!=0)     {   

08-黑马程序员------C 语言学习笔记---C语言的循环结构

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 循环结构 01 当型循环while 格式: while(表达式) 语句: *先计算while后面表达式的值,如果岂值为真,则执行循环体 *执行完循环体后,再次执行计算while后的表达式,其值还为真则继续执行循环体,其值为假,则

C语言-循环结构及break、continue

循环结构 -------------------------- --1-- 结构循环 1.1 while循环 1.2 do…while循环 1.3 for循环 --2-- break和continue 2.1 break关键字 2.2 continue关键字 -------------------------- [写在开头:] 『 生活中的循环: C语言中的循环: 循环结构是程序中一种很重要的结构.其特点是,在给定的条件成立时,反复执行某程序段,直到条件不成立为止. C语言中提供了多种循环语句:

2014年7月17日学习笔记--PHP的循环结构学习

今天重新开始学习PHP, 为了学习PHP买了书,但书是一本大部头的书,不好带一直没有好好学习,我决定把书拆了分章来看,这样也方便带 也可以很快完成任务. 今天在linux mint 17上安装了lnmp 环境 和brackets工具,来学PHP,小的例子用vim来完成的. 记录一下自己美化的九九乘法表 代码如下: <?php     for($i=1;$i<=9;$i++){         for($j=1;$j<=9;$j++){             if($i>=$j){

黑马程序员— C语言选择结构和循环结构的总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在学习完C语言的流程控制后,发现选择结构跟循环结构都各自有各自的特点,下面就来对选择结构与循环结构进行一个综合的总结 第一讲  选择结构与循环结构 选择结构主要包括if语句和switch语句,而循环结构包括for循环,while循环以及do while循环: 一 选择结构 1.if(条件){ }else if(条件2){ }else{ } 特点:同一时刻只有一个大括号里面的代码会执行. 2.s

C语言之循环结构

程序结构: 顺序结构 条件结构(分支结构) if结构,if-else结构 ,多重if分支结构,switch结构 循环结构:做重复的事情 while循环,do..while循环和for循环. 写循环结构主要注意两点:循环条件(做多少遍)和循环体(重复做的事情). while结构语法: while(条件){ //循环体; } 特点:先判断,后执行,条件不满足一次都不执行. 注意:检查循环条件是否恒成立,如果循环条件恒成立将造成死循环. 示例1: int i=1; while(i<=5){ print

C 语言循环结构

9 #import <Foundation/Foundation.h> 10 11 int main(int argc, const char * argv[]) { 12 13 /*#pragam mark--while-- 14 if (条件表达式){语句;} 15 16 while(条件表达式){循环体;} 17 18 */ 19 //要打印100次我爱你 20 //首先定义一个变量接收我们说的 我爱你的次数 21 // int i = 1; 22 // // i<=100 23

5、C语言——循环结构

循环结构 1.定义:从main()开始,从上向下,使得某些语句重复执行 2.循环结构的程序:在顺序结构中加入循环控制语句 方式1:当型循环 while(表达式) { 循环体语句序列: } 后继语句: 方式2:直到型循环 DO { 循环体语句序列: }while(表达式): 后继语句: 方式3: for(exp1:exp2 :exp3 ) { 循环体语句序列: } 后继语句: 方式4: if(){}else{} 与goto配合使用 两个控制语句--break,continue格式:break:功能