C语言——for循环

版权声明:本文为博主原创文章,未经博主允许不得转载! https://blog.csdn.net/weixin_42839965/article/details/86573395
流程控制
	1.什么是流程控制【C语言的第一个重点】
	   程序代码执行的顺序;
	2.流程控制的分类
	    顺序执行:
		选择执行:
		    定义:
			    某些代码可能执行,也可能不执行,有选择的执行某些代码;
			分类:
			    if
				   1.if最简单的用法
				    格式:
				        if(表达式)
				          语句;
					   功能:
					       如果表达式为真,执行语句,否则,不执行
				   2.if的范围问题
				    1.格式:
					  if(表达式)
					    语句A;
					    语句B;
					//if默认只控制语句A的执行与否,无法控制语句B是否执行;
					//换言之,语句B一定会执行;
					2.if(表达式)
					    {语句A;
					    语句B;}
					//语句A和语句B的执行与否受if()的控制
					//若是if语句控制多个语句,用{}将语句括起来;
				   3.if...else...的用法
				   4.if...else if...else...的用法
				   5.C语言对真假的处理
				       非零是真,零是假;
					   例题:if90<=score<=100)其中90<=score是逻辑表达式,返回值是0或者1,均小于100,所以,表达式永远成立;
					        修改:if(90<=score&&score<=100)
				   6.if举例-求分数等级、两个数交叉互换、三个数字的最大值
				      三个数排序
					  #include<stdio.h>
					  int main(void)
					  {//编写代码,其中,a是最大值,b是中间值,c是最小值
						int  a,b,c;
						int t;
						printf("请输入三个整数(中间以空格分开):");
						scanf("%d %d %d",&a,&b,&c);
						
						/*如果a>b
						    则a与c比较,若a>c,则输出a,
										若a<c,则输出c;
						否则,
						    b与c比较,若b<c,则输出c,
									  若b>c,则输出b;*/
						if(a<b)
						{
							t=a;
							a=b;
							b=t;
						}
						if (a<c)
						{
							t=a;
							a=c;
							c=t;
						}
						if (b<c)
						{
							t=b;
							b=c;
							c=t;
						}
						printf("%d %d %d\n",a,b,c);
						return 0;
					}
					  1.判断一个数字是否是素数/回文数
					  2.编程实现求一个十进制数字的二进制形式
					  3.求一个数字的每位是奇数的数字取出来组合形成的新数字
					  4.求一个数字倒过来的数字	
				   7.if的常见问题解析
				      1.空语句的问题
					     if3>2);
						等价于
						 if3>2)
						    ;//这是一个空语句
					  2.分号问题:
					    if(表达式)//若在此处加分号会导致语法错误;
						    A;
					    else 
							B;
					  3.if(表达式1)
					        A;
						else if (表达式2)
							B;
						else if(表达式3)
							C;
						else
							D;
					    //若是条件1与条件2都满足,仍然执行A;
						//执行顺序问题,两者不会同时执行
					  4.if(表达式1)
					        A;
						else if (表达式2)
							B;
						else if(表达式3)
							C;
						//语法不会有错,但是逻辑上有误
					  5.if(表达式1)
					        A;
						else if (表达式2)
							B;
						else if(表达式3)
							C;
						else (表达式4)//第7行,此处语法错误
						    D;7行的语法错误订正:
							1.else
								D; 
							2.else if(表达式4)
								D;//此处的if不能省略
					  6.else (表达式4;
								D;//语法无错,但逻辑有误
						等价于
						else 
							(表达式4);
						D;
			如何看懂一个程序,三部曲:
				1.流程;
				2.每个语句的功能;
				3.试数;
		循环执行:
			定义:
				某些代码会被重复执行
			分类:
				for
					1.格式:
						for(1;2;3)
						{
							语句A;//循环体
						}
					2.执行的流程【重点】
						1.单个for循环的使用;
//求和1+2+3+...+10;
#include<stdio.h>

int main(void)
{
	int i;
	int sum=0;
	
	for (i=1;i<11;i++)
		sum =sum+i;

	printf("sum=%d\n",sum);
	
	return 0;
}
说明:
	  ❶    ❷   ❸
for (i=1;i<11;i++)
			❹
		sum =sum+i;
先执行❶,再执行❷判断条件是否满足,
满足执行❹,最后执行❸,一次循环结束;
再执行❷判断条件是否满足,
满足执行❹,最后执行❸,二次循环结束;
其中❶只在第一次循环时执行一次;
若是❷不成立则执行printf()语句;
2.求和1~100之间能被3整除的数的和
将上述循环体
for (i=1;i<11;i++)
		sum =sum+i;
修改为
for (i=1;i<100;i++)
	if(i%3==0)
		sum =sum+i;
课外题:求1100之间的奇数之和、偶数之和;
		求1100之间的奇数的个数;
		求1100之间的奇数的平均值;
#include <stdio.h>
int main(void)
{
	int i;
	int sum1 = 0, sum2 = 0, count = 0;
	float ave;

	for (i = 1; i<101; i++)
	{
		if (i % 2 == 1)
		{
			sum1 = sum1 + i;
			count++;
			ave = (float)(sum1) / count;//另一种表达形式:ave=1.0*sum1/count;
/*1.0默认是double类型,等式的计算结果是double类型,
ave是float类型,double类型转换成float类型,
会造成数据的精准度的缺失*/
		}
		
		if (i % 2 == 0)
			sum2 = sum2 + i;
	}

	printf("奇数之和是:%d\n", sum1);
	printf("奇数的个数是:%d\n", count);
	printf("平均值是:%.2f\n", ave);
	printf("偶数之和是:%d\n", sum2);
	return 0;
}
	

在这里插入图片描述

				2.多个for循环
				2.多个for循环的使用;
							for(1;2;3)
							{
								for(4;5;6)
									A;
							}
							B;//执行过程类似单个for循环
					3.范围问题
					4.举例:
						1+2+3++1001+1/2+1/3++1/100;
					#include <stdio.h>
					int main(void)
					{
						int i;
						float sum=0;
						
						for (i=1;i<101;i++)
							sum =sum +1/i;//1/i 均为整型,整除,结果为整型,无小数位
						//sum=sum+1.0/i;
						printf("sum=%.3f\n",sum);
						return 0;
					}
				/*
				(float)(1/i) 的结果仍为0.000000;因为整除的结果为零;
				可修改为1/(float)(i)或者是sum=sum+1.0/i;
				*/
				while
				do...while
			breakcontinue
试数的详细步骤:
	
强制类型转换:
	格式:
		(数据类型)(表达式)
	功能:
		把表达式的值强制转化为前面所执行的数据类型
	举例:(int)(4.5+2.2)  最终值6float)(5)	 最终值5.000000
	       浮点数存储带来的问题
#include<stdio.h>
int main(void)
{
	float i;
	float sum=0;
	
	for (i=1;i<101;i++)
		sum =sum +1/i;
	
	printf("sum=%f\n",sum);
	
	return 0;
}
	浮点数的存储所带来的问题
		floatdouble都不能保证可以精确的存储一个小数;
		举例:
			有一个浮点型的变量x,如何判断x的值是否是零
				if(|x-0.000001|<=0.000001)
					是零值;
				else
					非零值;
	为什么循环中更新的变量不能是浮点型?
		浮点数不能保证准确存储;

猜你喜欢

转载自blog.csdn.net/weixin_42839965/article/details/86573395
今日推荐