C语言学习第五课

一、什么是语句

C语言中由一个分号;隔开的就是一条语句

二、分支语句(选择结构)

1.if语句

a.if的表达式

if(表达式)                                    if(表达式)                                               if(表达式1)

         语句;                                           语句1;                                                        语句1;

                                                       else                                                            else if(表达式2)

                                                               语句2;                                                        语句2;

                                                                                                                          else 

                                                                                                                                    语句3;

int main()
{
	int age = 20;
	if (age < 18)
	{                                 //实行多条命令要大括号
		printf("未成年\n");
		printf("好好学习\n");
	}
	else if (age >= 18 && age < 30)
		printf("青年");
	else if (age > 30 && age < 45)
		printf("中年");
	else
		printf("老年");

	return 0;
}

C语言中非零即为真

b.悬空else

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

else就近匹配,建议书写规范使用{ }

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

c.if书写形式对比

两个整型变量比较时,将常量放在左边

int main()
{
	int a = 1;
	if (5 == a)
	{
		printf("good");
	}
	return 0;
}
int main()
{
	int a = 0;
	for( a =1; a <= 100; a++)
		if (a % 2 == 1)
		{
			printf("%d ", a);
		}
	return 0;
}

写出100以内的奇数

2.swith分支语句(常用于多分支的情况

a.swith表达式

语句项:是一些case语句。如:case 整形常量表达式

b.break语句

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("Mon\n");
		break;
	case 2:
		printf("Tue\n");
		break;
	case 3:
		printf("Wed\n");
		break;
	case 4:
		printf("Thr\n");
		break;
	case 5:
		printf("Fri\n");
		break;
	case 6:
		printf("Sat\n");
		break;
	case 7:
		printf("Sun\n");
		break;
	}
	return 0;
}

case是进入,break就是终止

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:	
	case 3:
	case 4:	
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	}
	return 0;

break语句的实际效果是把语句列表划分为不同的分支部分

int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1: m++;    //没有break语句的情况下要执行下去
	case 2: n++;  
	case 3: 
		switch (n)
		{
		case 1: n++;       //n是几就从几开始执行,此时是2
		case 2: m++; n++;
			break;
		}
	case 4: m++;
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}

三、循环语句

1.while语句

翻译成好理解的就是为真时无限打印,为假时自动退出

int main()
{
	int i = 1;            //初始化
	while (i <= 10)       //判断部分
	{
		printf("%d ", i);
		i++;              //调整部分
	}
	return 0;
}

 a.while语句中的break和continue

int main()
{
	int i = 1;
	while (i <= 10)
	{                     //break改为continue,是跳过本次循环continue后面代码
		if (i == 5)       //直接判断是否要继续进行
			break;        //在while循环中,break用于永久终止循环
		printf("%d ", i);
		i++;
	}
	return 0;
}

b.使用while语句

清理单个字符缓存区的方法

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", password);  //这里没有用&是因为数组名就是地址
	printf("请确认密码(Y/N)");
	getchar();              //这里是处理\n
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

清理多个字符缓存区的方法

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", password);  //这里没有用&是因为数组名就是地址
	printf("请确认密码(Y/N)");
	int tmp = 0;
	while ((tmp = getchar()) != '\n')  //把缓存区东西都删了
	{
		;                  //相当于什么都不干 
	}
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

2.for语句

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

 a.for语句中的break和continue

int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
   if(i == 5)
   continue;
   printf("%d ",i);
 }
 return 0;
}

不会陷入死循环

b.for语句的循环控制变量

建议1:不可在for循环内修改循环变量,防止for循环失去控制

建议2:建议for语句的循环控制变量的取值采用前闭合后开区间方式

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++) //这就是左闭合右开区间
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

c.一些for循环的变种

int main()
{
	for (;;)
	{
		printf("hehe\n");
	}
	return 0;
}

for循环中的初始、判断、调整部分都可以省略。但是不建议省略判断部分,因为这样会导致判断部分恒为真。

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)  //省略了初始化导致结果不一样
	{
		for (; j < 3; j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
}

3.do while循环语句

循环至少执行一次

a.do语句的语法

 

int main()
{
	int i = 1;
	do                     //先执行循环
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);     //后判断

	return 0;
}

 b.do while循环中的break和continue

int main()
{
	int i = 1;
	do                     //先执行循环
	{
		if (i == 5)
			break;         //break是跳出整个do while循环
		printf("%d ", i);
		i++;
	} while (i <= 10);     //后判断

	return 0;
}

计算3的阶乘之和

方法一

int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <=3; n++)
	{
		ret = 1;    //计算n的阶乘之前,把ret初始为1
		for (i = 1; i <= n; i++)
		{
			ret = ret * i;
		}
		sum = sum + ret;

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

优化方法二

int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <=3; n++)
	{
		ret = ret * n;
		sum = sum + ret;
	}
	printf("%d", sum);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值