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
*/

 

posted @ 2024-08-03 14:29  java帝国  阅读(8)  评论(0)    收藏  举报