5process contro-循环(1-for循环)
循环
循环的定义:某些代码会重复执行。
循环的分类:
for
for循环的格式:
for (1; 2; 3)
语句A;
for(1; 2; 3)
for(4; 5; 6)
语句A;
语句B;
for循环的执行流程:
单个for循环的使用;1->2->语句A->3->2->语句A...
多个for循环的使用;1->2->4->5->语句A->6...->3->2->4->5->语句A->6... ->语句B
for循环的范围:
for循环的举例:
例题:1+2+3+4+5+6+.. +100=
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 4; ++i)
sum = sum + i;
printf("sum = %d\n", sum);
return 0;
}
/*
在vc++6.0中的输出结果:sum = 10
执行过程:
1. i=1 i<=4 √ sum = 0+1 i=2
2. i=2 i<=4 √ sum = 1+2 i=3
3. i=3 i<=4 √ sum = 1+2+3 i=4
4. i=4 i<=4 √ sum = 1+2+3+4 i=5
5. i=5 i<=4 ×
*/
例题:1-10之间的奇数之和
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i < 10; i += 2)//i+=2 等价于 i=i+2
{
sum = sum + i;
//printf("语句执行\n");//验证测试循环多少次
}
//printf("i = %d\n", i);//i=11
printf("sum = %d\n", sum);
return 0;
}
例题:1-100之间被3整除的数之和
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i < 10; ++i)
{
if (i % 3 == 0)
sum = sum + i;
}
printf("sum = %d\n", sum);
return 0;
}
例题:1+1/2+1/3+1/4+1/5+1/6=
#include <stdio.h>
int main(void)
{
int i;
float sum = 0;
for (i=1; i<=100; ++i)
{
sum = sum + 1 / (float)i;//不推荐使用。float(1/i)写法是错误的,更为简单的写法1.0/i,推荐使用。
}
printf("sum = %f\n", sum);
return 0;
}
【强制类型转换】
格式:(数据类型)(表达式)
功能:把表达式的值强制转化成前面指定的数据类型
例题:(int)(4.5+2.2) = 6 (float)(5) = 5.000000
•课后作业:
1)求1-100之间的奇数之和
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i=1; i<=100; ++i)
{
if (i % 2 != 0)
sum = sum + i;//等价于 sum += i;
}
printf("sum = %d\n", sum);
return 0;
}
2)求1-100之间的奇数个数
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
int cnt = 0;//个数一般用cnt表示
for (i=1; i<=100; ++i)
{
if (i % 2 != 0)
++cnt;//等价于 sum += i;
}
printf("cnt = %d\n", cnt);
return 0;
}
3)求1-100之间奇数的平均值
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
int cnt = 0;//个数一般用cnt表示
float average;
for (i=1; i<=100; ++i)
{
if (i % 2 != 0)
{
sum += i;
++cnt;//等价于 sum += i;
}
}
average = 1.0 * sum / cnt;
printf("average = %f\n", average);
return 0;
}
4)求1-100之间的奇数之和,再求1-100之间的偶数和
#include <stdio.h>
int main(void)
{
int i;
int odd_sum = 0;
int even_sum = 0;
for (i=1; i<=100; ++i)
{
if (i % 2 != 0)
odd_sum = odd_sum + i;
else
even_sum = even_sum + i;
}
printf("odd_sum = %d, even_sum = %d\n", odd_sum, even_sum);
return 0;
}
【浮点数存储所带来的问题】
float和double都不能保证可以精确的存储一个小数
例题:
1 # include <stdio.h> 2 int main(void) 3 { 4 float i = 99.9; 5 printf("%f\n", i); 6 return 0; 7 } 8 /* 9 在vc++6.0中的输出结果:99.900002 10 浮点数不能精确存储 11 */
举例:有一个浮点型变量,如何判断X值是否是零
if (|x - 0.000001| <= 0.000001)
是
else
不是
为什么循环中更新的变量不能定义浮点型,因为浮点型不能保证精确存储。
【进制转换】
1)什么叫n进制:逢n进一
2)把r进制转成十进制:按权展开法
3)把十进制转r进制:除r取余,直至商为0,余数倒序排列
4)不同进制所代表数值之间的关系:十进制 3981 转化成 十六进制 F8D(十进制的3981 和十六进制F8D所代表的本质上都是同一个数字);
5)对小数进二进制一般用不到
6)补码
【运算符】
附录一些琐碎的运算符知识
自增和自减 三目运算符 逗号表达式
(1)自增或自减:
1)分类:前自增 ++i ;后自增 i++;
2)前自增和后自增的异同:相同:都是i值加1;不同:前自增整体表达式的值是i加1之后的值,后自增整体表达式的值是i加1之前的值。
#include <stdio.h>
int main(void)
{
int i;
int j;
int k;
int m;
i = j = 3;
k = i++;//k=3, i=4
m = ++j;// m=4, j=4
printf("i = %d, j = %d, k = %d, m = %d\n", i, j, k, m);
return 0;
}
/*
在vc++6.0中的输出结果:i = 4, j = 4, k = 3, m = 4
相同:都是i值加1;
不同:前自增整体表达式的值是i加1之后的值,后自增整体表达式的值是i加1之前的值。
*/
3)为什么会出现自增或自减:代码更精炼,代码执行速度更快
4)学习自增或自减要明白的几个问题
a.我们编程时应该尽量屏蔽掉前自增和后自增的差别;
b.自增表达式最好不要作为一个更大的表达式的一部分来使用(++i 和 i++单独成一个语句,不要把它作为一个完整复合语句的一部分来使用);
(2)三目运算符
#include <stdio.h>
int main(void)
{
int i;
i = (5 > 3 ? 4 :1);
printf("i = %d\n", i);
return 0;
}
/*
在vc++6.0中的输出结果:i = 4
A ? B : C 等价于 if(A)
B;
else
C;
*/
(3)逗号表达式
1)格式:(A, B, C, D)
2)功能:从左向右执行,最终表达式的值是最后一项的值
#include <stdio.h>
int main(void)
{
int i;
int j = 2;
i = (j++, ++j, j+2, j-3);
printf("i = %d\n", i);
return 0;
}
/*
在vc++6.0中的输出结果:i = 1
*/

浙公网安备 33010602011771号