3---循环(for、while、do....while、continue、break)

1_for

1. 初识for

/*
	定义:某些代码会被重复执行
	分类: 1. for  ***
				  2. while
				  3. do....while
*/

/*
	时间:2018.02.13
	项目:1+2+3+4+......+100
	目标:掌握 “for” 语句的执行流程
*/

# include <stdio.h>
int main (void)
{
	int i;
	int sum = 0;
	
	for (i = 1; i <= 10; i++) 
		sum = sum + i;

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

/*
	思考:i<=10,功能和 “if” 语句相似,如果成立,执行 “ sum = sum + i ”

	流程:step 1:  i=1 
							  i<=10 (成立)
							  sum=0+1=1
							  i++  (i=2)
				 step 2:  i<=10 (成立)
							   sum=1+2=3
							   i++  (i=3)
				 ……
				step 10: i<=10 (成立)
						   	   sum=sum+10
							   i++  (i=11)
				step 11: i<=11 (不成立)
							   "for" 语句执行完毕 (循环结束)
*/

2. for 的3个使用例子

    2.1 求解0-10的奇数之和

/*
	时间:2018.02.13
	目的:求解0-10的奇数之和
*/

/*
	自己写的程序,利用" i++ "
*/
/*
# include <stdio.h>
int main (void)
{
	int i = 0;
	int sum = 0;

	for ( i; i<=4; i++ )
	{
		sum = sum+(2*i+1);
	}
		
	printf ( "sum=%d\n",sum );

	return 0;
	*/

/*
	课程的例子,利用 " i+=2 "
*/
# include <stdio.h>
int main (void)
{
	int i;
	int sum = 0;

	for (i=1; i<10; i+=2)
	{
		sum = sum+i;
	}

	printf ( "i=%d\n", i );
	printf ( "sum=%d\n", sum );
	return 0;
}
/*
	结果: i=11  sum=25
*/

    2.2 求1-100内能被3整除的数之和

/*
	时间:2018.02.20
	目的:“ if ” 和 “ for ” 的嵌套使用
	项目:求1-100内能被3整除的数之和
*/
# include <stdio.h>
int main (void)
{
	int i;
	int sum = 0;
	int j;
	
	for ( i=3; i<=100; i++ )
	{
		j = i%3;
		if ( j == 0 )
			sum = sum + i;
	}

	printf ( "sum = %d\n", sum );
	return 0;
}
/*
	结果:sum = 1683
	学习心得:在C中,等于的符号是“ == ”,符号“ = ”是赋值
*/

    2.3 求1-100的偶数之和,奇数之和,偶数的个数,偶数平均值

/*
	时间:2018.02.20	正月初五
	项目:1. 求1-100的偶数之和
				 2. 求1-100的奇数之和
				 3. 求1-100的偶数的个数
				 4. 求1-100的偶数平均值
*/

# include <stdio.h>
int main ( void )
{
	int i, j;                
	int sum_e = 0; 
	int sum_o = 0;    
	int count_e = 0; 
	float average_e;
 
	for (i=1; i<=100; ++i)                                                                // i = 1-100
	{
		j = i % 2;                           

		if ( j == 0 )                                                                          // j =  i % 2  如果为0,则 i 为偶数
		{
			//sum_e = sum_e+i;                                                         // sum_even 偶数之和
			sum_e += i;                                                                      //  sum_e = sum_e + i
			//count_e = count_e+1;                                                  //  count_even 偶数的个数
			//count_e += 1;
			++count_e;
		    //average_e = sum_e/count_e;                                        //   average_even 偶数的平均值
		}
		else
			//sum_o = sum_o+i;                                                       //   sum_odd  奇数之和
			sum_o += i;
	}

	average_e = 1.0*sum_e/count_e;                                        //   average_even 偶数的平均值,sum_e 和 count_e 都是整型数据,1.0*sum_e 将sum_e的数据类型强制转换为浮点型
	//average_e = (float)sum_e/count_e;                                  // 上一句的另一种表达方式

	printf ( "1. 偶数之和 sum_e = %d\n", sum_e );
	printf ( "2. 奇数之和 sum_o = %d\n", sum_o );
	printf ( "3. 偶数的个数 count_e = %d\n", count_e );
	printf ( "4. 偶数平均值 average_e = %f\n", average_e );

	return 0;
}

/*
	结果:
				1. 偶数之和 sum_e = 2550
				2. 奇数之和 sum_o = 2500
				3. 偶数的个数 count_e = 50
				4. 偶数平均值 average_e = 51
	心得:
				求和、计数:都是通过 “for” 语句,逐个数相加、逐步加1实现
*/
2_while
/*
	时间:2018.03.07
	目的:1. while的执行顺序
	                  while (表达式)
								语句
				 2.  与for的相互比较
						求1+2+3+....100
				 3.  什么时候用 for?什么时候用 while?
					   没法说,用多了自然而然就知道了
*/
/*
项目:用for求1+2+3+....100
*/
/*
# include<stdio.h>
int main (void)
{
	int i;
	int sum = 0;

	for (i=1; i<=100; ++i)
	{
		sum = sum + i;
	}

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

	return 0;
}
*/
/*
项目:用while求1+2+3+....100
*/

# include<stdio.h>
int main (void)
{
	int i = 1;
	int sum = 0;

	while (i<=100)
	{	
		sum += i;
		++i;
	}

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

	return 0;
}

/*
	心得:“while” 是 “for” 语句的另一种表达方式,按照for的执行顺序写语句,关键while()括号里是判断的语句
*/

3_do....while
/*
		时间:2018.03.07  16:26
		项目:求多个一元二次方程的解
*/

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c;
	double delta;
	double x1,x2;
	char ch;

	do 
	{
		printf("请输入一元二次方程的三个系数:\n");
		printf("a = ");
		scanf("%lf", &a);
		printf("b = ");
		scanf("%lf", &b);
		printf("c = ");
		scanf("%lf", &c);

		delta = b*b-4*a*c;
		if (delta > 0)
		{
			x1 = (-b+sqrt(delta))/(2*a);
			x2 = (-b-sqrt(delta))/(2*a);
			printf ("有两个实数解:x1 = %lf  x2 = %lf\n\n", x1,x2);
		}
		else if (delta == 0)
		{
			x1 = x2 = -b/(2*a);
			printf ("有唯一实数解:x1 = x2 = %lf\n\n", x1,x2);
		}
		else
		{
			printf ("无实数解\n\n");
		}

		printf ("请问是否继续求解,如果是,请输入(y 或 Y),如果否,请输入(n 或 N)\n ");
		scanf (" %c", &ch);
	}while( ch == 'y' || ch =='Y'  );

	return 0;
}

/*
		心得:
					单个字符要用 '' 括起来,whlie ()括号里面是一个表达式
*/
break

/*
		时间:2018.03.07
		项目:break两个用的地方:1.终止switch语句;2.终止循环										
*/

/***   1.终止switch   ***/
/*
#include<stdio.h>
int main()
{
	int val;
	printf("请输入您要进入的楼层\n");
	scanf("%d", &val);

	switch (val)
	{
	case 1:
		printf("1层开!\n");
		break;
	case 2:		
		printf("2层开!\n");
		break;
	case 3:
		printf("3层开!\n");
		break;
	default:
		printf("还没盖到这一层!\n");
		break;
	}

	return 0;
}

/***    2.终止循环   ***/
/*
#include<stdio.h>
int main()
{
	int i;

	for (i=0; i<3; ++i)
	{
		if (3>2)
			break;
		printf("嘿嘿!\n");       
	}

	return 0;
}
*/


/***   2.终止循环(多个循环的情况)***/

#include<stdio.h>
int main()
{
	int i, j;

	for (i=0; i<3; ++i)
	{
		for (j=0; j<3; ++j)
			break;
		printf("在多层循环中,break只能终止离它最近的for语句!\n并非它之后的所有句子就不执行了!\n\n");
	}

	return 0;
}

/*
		心得:
					在多层嵌套的循环或switch语句中,break语句只能终止离他最近的那层
*/
continue
/*
	时间:2018.03.07   19:12
*/


#include<stdio.h>
int main()
{
	int i;

	for (i=0; i<3; ++i)
	{
		printf("A");
		printf("B\n\n");
		//continue;                                                    //执行结果:AB AB AB
		//break;                                                         // 执行结果:AB
		printf("C");
		printf("D");
	}

	return 0;
}

/***    另一个例子    ***/
/*
# include <stdio.h>

int main(void)
{
	int i;
	int j ;
	char ch ;

	printf("用户输入一个十进制的数\n");
	scanf("%d", &i);
	printf("i = %d\n", i);
	
	while ( ( ch=getchar() )  != '\n' )                             //作用是:上一句用户输入非法时的处理。getchar() 意思是等待用户从键盘输入字符
	continue;
	
	printf("用户再输入一个十进制的数\n");
	scanf("%d", &j);
	printf("j = %d\n", j);

	getchar();

	return 0;
}


/*
	心得:
				1.continue用于循环
				2.continue,继续的是循环命令,继续的是++i操作,相当于一种着急完成工作的心情,continue下面的就不继续执行了
*/

猜你喜欢

转载自blog.csdn.net/erlang_juan/article/details/80257857