循环
while 循环
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i = 1;
while ( i <= 10) //0,1判断循环条件是否满足,满足执行代码块,不满足则跳出循环,回到while进行条件判断
{
printf ("%d ", i ); //注意点,只有一条语句的时候可以不加括号,但是建议加上。
i++; //while;加分号是不对的,因为;结束就是一条语句;总是忘记加花括号{}
//printf ( "qwe");
}
//printf ("%d", i<=10); //打印到11为假
system("pause");
return 0;
}
while 条件的意义
//#include <stdio.h>
//#include <stdlib.h>
//int main (void)
//{
// int i = 1; //循环控制变量一定要有初始值
//
// while (i <= 5) //循环控制变量,条件一定要有循环控制变量的参与
// {
// printf ("%d ", i);
// //i++ ; //如果把这个注释掉,不可控循环,条件就会一直为真,就会进入死循环。
// //i += 2; //循环控制变量有规律的值变化,自变
// }
// system("pause");
// return 0;
//}
while 嵌套循环
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 1 ,
j = 1;
int ncount = 0; //for循环嵌套要比while嵌套要清晰,嵌套建议用for
while (i<=3)
{
//j = 1; 只执行两次解决的办法,在代码块里加上这个让j重复的去赋值
while (j<3)
{
ncount++;
printf("次数%d\n", ncount );
j++;
}
i++;
}
system("pause");
return 0;
}
do while
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 1;
while(i<=6) //条件为假就不执行
{
printf("%d\n", i++); //入口条件循环
}
printf("\n");
i = 1; //注意要重置赋初始值,因为c语言是从上往下执行的,不重新赋初始值就会影响下面的输出
do //while和dowhile都为真的时候两者功能是一模一样的,只有为假的时候不一样
{ //dowhile至少执行一次代码块,即使我们条件为假,也执行一次代码块
printf("我吃了%d个冰淇凌\n", i); //先执行代码块,再自增然后判断条件成立;再执行代码块以此类推
i++;
}while(i <= 6); //最后一定要加分号;应为结构在最后;叫做退出条件循环
system("pause");
return 0;
}
for循环
#include <stdio.h>
#include <stdlib.h>
///*1分析功能,实现功能 2平方根功能,搜索平方根函数sqrt
//1 返回值,参数。2 查函数所需要的头文件*/
int main (void)
{
int i ; // 可以在这赋初始值,也可以不赋初始值
for (i = 1; i <= 5; i++) //语句1只执行一次,语句一完了就判断语句2;条件成立的话就执行代码块,然后再执行语句3;语句三变化完之后就又执行语句2是否满足;满足的话就执行代码块
//可控循环三要素,1是赋初始值;2是判断可控循环条件要有变量的参与;3是可控循环的变化自变。注意分号结尾
{
printf ("%d ", i);
}
//对比while循环,for循环是while循环的一个集中的写法,把循环三要素都写在同一行了
//for循环跟容易看的清循环结构,while循环内容多的话,不容易看清。熟悉哪个就用哪个
system("pause");
return 0;
}
for循环嵌套
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i , //外部循环控制变量
j, //内部循环控制变量
ncount = 0; //计数器
//语句1循环控制变量赋初始值.2循环执行条件.3循环控制变量变化.(可控循环三要素)
//顺序,从语句1到语句2判断1<=3为真,执行内部的代码块for;
//从语句1到语句2判断1<3为真执行代码块nocunt输出执行次数后再跳到j++自变
//自变完再判断2<3语句2为真再执行代码块,再到j++自变后判断3<3语句2为假则跳出内循环
//到外部循环i++里自变后再判断2<=3语句2为真则执行内部for循环代码块,以此类推循环
for ( i = 1 ; i <= 3 ; i++)
{
printf ("执行次数\n");
for ( j = 1 ; j < 3 ; j++)
{
ncount++;
printf ("执行第%d次\n", ncount);
}
}
system ("pause");
return 0;
}
for 循环嵌套注意点
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i = 1,
j = 1;
int ncount =0;
//分析,为什么只输出两次呢。赋值完执行for,语句一已经赋值过了所以到语句二1<=3条件成立执行代码块里面的for
//语句一也赋值过了所以执行语句二1<3成立,然后执行代码块打印次数1,输出完再到j++自变自增后再判断语句二
//语句二2<3条件成立执行里面的代码块打印次数2,再到j++判断条件不成立跳出内部循环,到下面括号没有代码就
//跳到i++自增2<=3条件成立执行里面代码块for,注意此时代码块的for语句一没有再赋初始值了;c语言的逻辑是从上到下
//执行的是人自己规定好的不会跳的上面再赋值,所以此时的i还是3条件不成立不执行代码块跳出循环,再到i++
//判断语句二2<=3成立执行里面的代码块for,里面的for语句一依然没有赋初始值j依然是3条件不成立,以此类推就只执行了两次
for ( ; i <= 3 ; i++ ) //入口条件循环
{
for ( ; j < 3; j++) //外面的可以不用赋初始值;但里面的一定要赋初始值j=1;不建议省略容易出错
{
ncount++;
printf ("次数%d\n", ncount);
}
}
system ("pause");
return 0;
}
for 循环灵活性
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int a ,i ;
a = 6 ;
for (i = 1 ; i <= 1000 ; i++) //语句1循环控制变量赋初始值.2循环执行条件.3循环控制变量变化.(可控循环三要素)
{
printf ("%d ", a);
}
*语句一,1、通常是做循环控制变量的初始值
2、可以写多条赋值语句,之间用逗号
3、可以什么都不写:。分号一定不能丢
4、可以写其他表达式,甚至写个函数调用都行
综合:只要是合法语句都能写,通常,循环控制变量的初始值
语句二,1、必须写条件
2、可以什么都不写,表示真,死循环
3、甚至可以加个函数
综合:只要是合法语句都能写,通常,条件
语句三,1、一般写循环控制变量的变化
2、可以写多个变化,逗号隔开
3、可以啥都不写。 变化可以放在代码块内
综合:只要是合法语句都能写,通常,循环控制变量的变化
*/
system ("pause");
return 0;
}
break
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i , j;
for (i = 1; i <= 2; i++)
{
for (j = 1; j < 3; j++)
{
printf("%d\n", i);
break; //碰到break直接跳出循环,循环之外不能写break,多层循环嵌套只能跳出一层所在的循环
}
}
system("pause");
return 0;
}
continue
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i; //一到五十的偶数
for (i = 1; i <= 50; i++)
{
if (i % 2 != 0)
{
continue; //只在循环中使用; 执行下一次循环
}
printf("%d ", i);
//printf("床前明月光");
//continue; // 执行下一次循环
//printf("地上鞋两床\n");
}
system("pause");
return 0;
}
goto
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// int j = 0;
//
//step : //标签的名字可以随便写,不能缺少冒号
// printf ("王德发\n");
// j++;
// if ( j == 3 )
// {
// goto step1; //退出循环也是用goto
// }
// goto step; //执行里面代码然后再到goto 到标签再执行代码再到goto,以此类推
//step1 :
// printf("退出循环");
//建议别用goto,用了会挨骂,能用就别用,只用一种情况可以用,就是跳出多层嵌套循环
int i, j, k;
for (i = 1; i <= 2 ; i++)
{
for (j = 1; j <= 2 ; j++)
{
for (k = 1; k <= 2 ; k++) //用break只能跳出所在的循环,不能跳出多层循环
{
printf ("我不做大哥\n");
if (1 == k)
//break; //用break的话,每个循环都要写一遍break
{
goto step; //可以直接跳到标签
}
}
/* if (1 == k)
break;*/
}
/* if (1 == k)
break;*/
}
step : //跳到这,跳出循环
system("pause");
return 0;
}
循环小结
c 风格读取循环
while 小结
小结: while 语句
关键字: while
一般注解:
while语句创建了一个循环,重复执行直到测试表达式为假或0。while语句是一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环。因此,循环有可能不被执行。循环体可以是简单语句,也可以是复合语句。
形式:
while ( expression )
s ta temen t
在expression部分为假或0之前,重复执行statement部分。
示例:
while (n++ < 100)
printf(“号d &d\n”,n, 2 n + 1); //简单语句
while (fargo < 1000)
{ //复合语句
fargo = fargo + step;
step = 2 step;
}
关系表达式:
简单的关系表达式由关系运算符及其运算对象组成。如果关系为真,关系表达式的值为1; 如果
关系为假,关系表达式的值为0.
示例:
5 > 2为真,关系表达式的值为1
(2 + a)==a为假,关系表达式的值为0
关系表运算符
for 小结
小结: for 语句
关键字: for
一般注解:
for语句使用3个表达式控制循环过程,分别用分号隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真(或非零),执行循环一次;接着对update表达式求值,并再次检查test 表达式。for 语句是一种入口条件循环,即在执行循环之前就决定了是否执行循环。因此,for 循环可能一次都不执行。statement 部分可以是一条简单语句或复合语句。
形式:
for ( initialize; test; update )
sta tement
在test 为假或0之前,重复执行statement部分。
示例: .
for(n=0;n<10;n++)
printf(“ gd号d\n”, n,*n+1);
6.6其他赋值运算符:+=、-=、*=、/=、号=
C有许多赋值运算符。最基本、最常用的是=,它把右侧表达式的值赋给左侧的变量。其他赋值运算符都用于更新变量,其用法都是左侧是一个变量名,右侧是一个表达式。赋给变量的新值是根据右侧表达式的值调整后的值。确切的调整方案取决于具体的运算符。例如:
scores += 20 与 scores = scores + 20 相同
dimes -= 2 与 dimes = dimes - 2 相同
bunnies = 2 与 bunnies = bunnies 2 相同
time/=2.73 与 time = time / 2.73 相同
reduce号= 3 与 reduce = reduce 号% 相同
小结:新的运算符
赋值运算符:
下面的运算符用右侧的值,根据指定的操作更新左侧的变量:
+= 把右侧的值加到左侧的变量.上
-= 从左侧的变量中减去右侧的值
*= 把左侧的变量乘以右侧的值
/= 把,左侧的变量除以右侧的值号=左侧变量除以右侧值得到的余数
关键点及小结
循环是一个强大的编程I具。在创建循环时,要特别注意以下3个方面:
■注意循环的测试条件要能使循环结束;
■确保循环测试中的值在首次使用之前已初始化;
■确保循环在每次迭代都更新测试的值。
C通过求值来处理测试条件,结果为0表示假,非0表示真。带关系运算符的表达式常用于循环测
试,它们有些特殊。如果关系表达式为真,其值为1;如果为假,其值为0。这与新类型_ _Bool 的值保
持一致。
数组由相邻的内存位置组成,只储存相同类型的数据。记住,数组元素的编号从0开始,所有数组最
后一个元素的下标- -定比元素数目少1。C编译器不会检查数组下标值是否有效,自己要多留心。
使用函数涉及3个步骤:
■通过函数原型声明函数:
■在程序中通过函数调用使用函数;
■定义函数。
函数原型是为了方便编译器查看程序中使用的函数是否正确,函数定义描述了函数如何工作。现代的
编程习惯是把程序要素分为接口部分和实现部分,例如函数原型和函数定义。接口部分描述了如何使用一
个特性,也就是函数原型所做的;实现部分描述了具体的行为,这正是函数定义所做的。
小结
本章的主题是程序控制。C语言为实现结构化的程序提供了许多工具。while语句和for语句提供了入口条件循环。for 语句特别适用于需要初始化和更新的循环。使用逗号运算符可以在for循环中初始化和更新多个变量。有些场合也需要使用出口条件循环,C为此提供了do while 语句。
典型的while循环设计的伪代码如下:
获得初值
while (值满足测试条件)
{
处理该值.
获取下一个值
}
for循环也可以完成相同的任务:
for (获得初值;值满足测试条件;获得下一个值)
处理该值
这些循环都使用测试条件来判断是否继续执行下一次迭代。- .般而言,如果对测试表达式求值为非0,则继续执行循环;否则,结束循环。通常,测试条件都是关系表达式(由关系运算符和表达式构成)。表达式的关系为真,则表达式的值为1;如果关系为假,则表达式的值为0。C99新增了Bool 类型,该类型的变量只能储存1或0,分别表示真或假。
除了关系运算符,本章还介绍了其他的组合赋值运算符,如+=或*=。这些运算符通过对其左侧运算对象执行算术运算来修改它的值。
接下来还简单地介绍了数组。声明数组时,方括号中的值指明了该数组的元素个数。数组的第1个元素编号为0,第2个元素编号为1,以此类推。例如,以下声明:
double hippos [20] ;
创建了一个有20个元素的数组hippos,其元素从hippos[0]~hippos[19]。利用循环可以很方
便地操控数组的下标。