C语言学习记录--流程控制

完了,要重新学习C语言了。

  • 数据类型:
    整型:int(4个字节); 长整型:long int(8个字节); 短整型:short int(2个字节)
    浮点数[实数】:单精度浮点数–float(4个字节) ;双精度浮点型–double(8个字节)
    字符:单个字符 char (1个字节) 符号数据类型(结构体 枚举 共用体)
  • 代码规范:
    定义变量;
    对变量进行操作 ;
    输出值;
    (每部分都空格,每个功能模块直接空格)
  • 字节:
    一个字节等于8位;
  • 运算符:

优先级:算术>关系>逻辑>赋值
下面是讲除法与取模运算的:

逻辑运算符里真假的处理。
C语言里对真假的处理:非零即为真,零是假;
eg:m=(3>2)&&(m=8)//输出就是m=1;
&&:这个运算符里的话,要是左边为假的话,右边就不会执行;
通过下面这段代码就很好理解了。
#include <stdio.h>

int main()
{
	int i=10;
	int k=20;
	int m;
	m=(3>2)&&(k=5);
   printf("m=%d,k=%d\n",m,k);
   
   return 0;
}

输出就是m=1;k=5,但是要是改成下面这样子。

   #include <stdio.h>

int main()
{
	int i=10;
	int k=20;
	int m;
	m=(1>2)&&(k=5);
   printf("m=%d,k=%d\n",m,k);
   
   return 0;
}

输出就是m=1;k=20了。
或的话,如果前面是真,则后面的就不再执行;

  • 流程控制:

顺序执行;选择执行;循环执行

  • 选择:
    if最简单的用法:
    if(表达式)
    语句

    上面完成的功能就是如果表达式为真,则执行语句,如果为假,则不执行语句;
    举个简单的例子:
# include <stdio.h>

int main(void)
{
	if (3>2)
		printf("AAAA\n");//会输出AAAA
    if (3)
		printf("bbbb\n");//会输出bbbb
	if (0)
		printf("CCCC\n");//不会输出CCCC

	return 0;
}

这个可以和项目代码中的一些东西联系起来。
再看下面的一个代码:

include <stdio.h>

int main(void)
{
    if (0)
		printf("bbbb\n");//会输出bbbb
		printf("CCCC\n");//不会输出CCCC

	return 0;
}//结果是bbbb没有输出,但是CCCC会输出。

也就是说,if只能控制下面的一个语句!!!
也就是if的范围问题:

if(表达式)
    语句A;
    语句B

if默认只能控制A执行活着不执行,无法控制B的执行或者不执行。如果想要if同时控制A和B,则要把AB用大括号括起来。

 if(表达式)
      	{
      	 语句A;
        语句B
        }
    

同样的道理,

 if(表达式)
      	 语句A;
else
        语句B;
        语句C;
        }//else也只能控制一个语句,不管if里面的语句是真还是假,C语句都会执行;
    

if else if else 的用法

if(表达式1)
   语句A;
else if (表达式2)
   语句B;
else if(表达式3)
   语句C;
 else(表达式4)
`  语句D;
//意思是如果表达式1成立的话,就执行语句A,如果表达式1不成立,表达式2成立,就执行语句B;如果表达式1,2都不成立,表达式3成立,就执行语句C;如果表达式1,2,3都不成立,则执行语句D。

对是三个数进行排序:
``# include <stdio.h>

int main(void)
{
int a, b, c; //等价于: int a; int b; int c;
int t;

printf("请输入三个整数(中间以空格分隔): ");
scanf("%d %d %d", &a, &b, &c);

//编写代码完成a是最大值  b是中间值  c是最小值

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;
}

相当于先把ab进行比较,然后ac进行比较,最后bc进行比较。

  • 循环:
    分类:for;while;do while
    基本的for的使用:
    1111111
    首先是执行语句1,并且1只执行一次;然后执行语句2,再执行语句4,最后执行语句3,语句3执行完了标志着一次循环的结束。然后再执行语句2进行判断,如果是真的话就再执行语句4,以此类推。

下面是一个for和if的嵌套使用,这个在实际工程中很常见。

/*
	2009年10月21日15:51:16
	求1到100之间所有的能被3整除的数字之和
*/

# include <stdio.h>

int main(void)
{
	int i;
	int sum = 0;  // =0不能省

	for (i=3; i<=100; ++i)
	{
		if (i%3 == 0)//如果 i能被3整除
			sum = sum + i;
		printf("sum = %d\n", sum);
	}
	
	return 0;
}
  • 强制类型转换:
    格式:
    数据类型(表达式)
    功能:把表达式里面的值强制转换成前面所执行的数据类型;
    eg:int(4.2+2.5) 最后的结果是6
    float(5) 最后的结果是5.0000

浮点数存在的问题:
float和double都不能保证可以精确的存储一个小数。
eg:如何判断一个浮点型变量是不是0,
if(|x-0.00000001|<0.000001)
是零;
else
不是零;
eg:

	float i = 99.2;
	printf("%lf\n", i);

最后输出的结果是:99.199997

  • 自增自减
    前自增 ++i ;后自增 i++
    不同:
    前自增整体表达式的值是i+1后的值,后自增整体表达式是i加1之前的值;
    eg:
# include <stdio.h>

int main(void)
{
	int i;
	int j;
	int k;
	int m;

	i = j = 3; //等价于 i = 3;  j = 3;
	k = i++;
	m = ++j;

	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之前的值
*/

为什么要自增:
代码更精炼;自增的运算速度更快;

  • 三目运算符
  A?B:C
  

等价于

if(A)
    B;
else
   C;
  • while
    while(表达式)
       语句;

for 和 while的相互转换:

for(1;2;3)
    A;
    等价于:
    1;
    while(2)
    {  
        A;
        3
        }
  • do while
do
{
........
}while(表达式);

do while并不等价于while,因为do while 一定会执行一次,而while可能一次都不执行;
do while主要用于人机交互;
下面是一个距离,说明人机交互。

include <stdio.h>

include <math.h>

int main(void)
{
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", x1, x2);
	}
	else if (0 == delta)
	{
		x1 = x2 = (-b) / (2*a);
		printf("有唯一解,x1 = x2 = %lf\n", x1, x2);
	}
	else
	{
		printf("无实数解!\n");
	}
	
	printf("您想继续么(Y/N): ");
	scanf(" %c", &ch);  //%c前面必须得加一个空格 原因略
} while ('y'==ch || 'Y'==ch);//像这种判断类型的语句,尽量把常量放在前面,eg  if (0==a)

return 0;
}
  • switch
    看下面一个example。

int main(void)
{
	int val;

	printf("请输入您要进入的楼层: ");
	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;
}`

switch的执行过程是这样的:
case 1,case 2,case 3…相当于入口一样,switch(val)里面的val相当于钥匙,当val为1的时候就从case 1这个入口进去,然后依次往下执行,遇到break就跳出来。也就是说上面的code如果都把break注释掉的话,如果val输入的是2,则相当于从case 2进去,然后下面的都会执行。

  • break和continue:
    break如果用在循环就表示终止循环;
    break如果用在switch就表示终止switch;
    brake不能直接用在if,除非if是循环中的一个子句;
	{
		if (3 > 2)
			break;  //break虽然是if内部的语句,但break终止的确是外部的for循环
		printf("嘿嘿!\n");
	}

在多层循环中,break只能终止距离它最近的循环;
在多层switch中,break也只能终止距离它最近的switch;

  • continue:
    用于跳过本次循环余下的语句,转去判断是否需要执行以下次循环;
for(1;2;3)
{
A;
B;
continue;//如果执行该语句,则执行完该语句,则会转去执行3,C和D会被跳过去,C和D不会被执行
C;
D;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值