分支语句
if语句(条件判断语句)
int main()
{
int age=0;
printf("输入年龄:\n");
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age <= 28)
printf("青年\n");
else if (age >= 28 && age<= 50)
printf("壮年\n");
else if (age >= 50 && age <=80)
printf("老年\n");
else
printf("高龄\n");
return 0;
}
如果if语句后边有多条代码,需要加大括号{};
#include <stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
return 0;
}
悬空else(特别注意)
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("111\n");
else
printf("222\n");
return 0;
}
这段代码输出结果为什么都没有,第一个if不符合直接不执行后边代码,if和离他最近的else匹配
改进后
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{ if (b == 2)
printf("111\n");
}
else
{ printf("222\n");
}
return 0;
}
练习:打印出100以内的奇数
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 101; i++)
{
if (i%2 == 1)
printf("奇数=%d\n",i);
}
return 0;
}
switch语句(分支语句)
switch语句也是一种分支语句。 常常用于多分支的情况。定义后边判断变量时必须是整型;
switch(整型表达式)
{
语句项;
}
//是一些case语句:
//如下:
case 整形常量表达式:
语句;
示例程序
工作日
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误");
break;
}
return 0;
}
编程习惯:每个case语句中都放default,然后再加上break。
循环语句
while循环
break与continue
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
for循环
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
printf("hehe\n");
}
同样的效果显然for循环能够使循环的三个条件位置更加集中,调试代码时不容易忽略条件,所以for循环更胜一筹。
for语句循环控制变量
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
for循环其它变种
#include <stdio.h>
int main()
{
//代码1
for(;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
//代码2
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
//代码3
int i = 0;
int j = 0;
//如果省略掉初始化部分,这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
do...while循环
这个循环程序至少会被执行一次,不经常使用。
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
练习
//
//int main()
//{
// int i = 0;
// int n = 0;
// int j = 0;
// for (i = 1; i < 10; i++)
// {
// for (j = 1; j <=i; j++)
// {
// n = i * j;
// printf("%d*%d=%2d ", i, j, n);
// }
// printf("\n");
// }
// return 0;
//}
//比大小
//int main()
//{
// int i = 0;
// int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// int max= arr[0];
// int sz = sizeof(arr) / sizeof(arr[0]);
// for (i = 0; i < sz; i++)
// {
// if (arr[i] > max)
// {
// max = arr[i];
// }
// }
// printf("max=%d\n", max);
// return 0;
//}
//质数
//#include<math.h>
//int main()
//{
// int i = 0;
// int n = 0;
// for (i = 100; i <=200; i++)
// {
// int j = 0;
// for (j = 2; j <=sqrt(i); j++)
// {
// if (i % j == 0)
// {
// break;
// }
// }
// if (j>sqrt(i))
// {
// printf("%d\n", i);
// n++;
// }
// } printf("%d\n", n);
// return 0;
//}
//闰年
//int main()
//{
// int year = 1000;
// int i = 0;
// for (year = 1000; year <= 2022; year++)
// {
// if (year % 4 == 0 && year % 100 != 0)
// {
// printf("%d ", year);
// i++;
// }
// }
// printf("%d\n", i);
// return 0;
//}
//打印一百以内3的倍数
//int main()
//{
// int i = 0;
// for (i = 0; i <= 100; i++)
// {
// if (i%3 == 0)
// printf("%d\n", i);
//
// }
// return 0;
//}
//最大公约数
//int main()
//{
// int m = 0;
// int n = 0;
// int r = 0;
// scanf("%d%d",&m,&n);
// while (r = m % n)
// {
// m = n;
// n = r;
// }
// printf("%d", n);
// return 0;
//}
//比大小
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
// scanf("%d %d %d",&a,&b,&c);
// if (a < b)
// {
// int tmp = a;
// a = b;
// b = tmp;
// }
// if (a < c)
// {
// int tmp = a;
// a = c;
// c = tmp;
// }
// if (b < c)
// {
// int tmp = b;
// b = c;
// c = tmp;
// }
// printf("%d%d%d\n", a, b, c);
// return 0;
// }
//#include<stdio.h>
//#include<string.h>
//int main()
//{ int i= 0;
// char password[20] = {0};
// for (i = 0; i < 3; i++)
// {
// printf("请输入密码:");
// scanf("%s", password);
// if(strcmp(password, "123456") == 0)
// {
// printf("登陆成功\n");
// break;
// }
// else
// {
// printf("密码错误!\n");
// }
// }
// if (i == 3)
// printf("超过三次,无法登陆。\n");
// return 0;
//}
//滚动文字
//#include<stdio.h>
//#include<string.h>
//#include<windows.h>
//#include<stdlib.h>
//
//int main()
//{
// char arr1[] = { "welcome to here!" };
// char arr2[] = { "################" };
// int left = 0;
// int right = strlen(arr1) - 1;
// while(left<right)
// {
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// left++;
// right--;
// Sleep(1000);
// system("cls");
// printf("%s\n", arr2);
// }
// printf("welcome to here!");
// return 0;
//}
//找数字
//int main()
//{
// int left = 0;
// int arr[ ] = {0, 1, 2, 3, 4, 6, 7, 8, 9};
// int right = sizeof(arr) / sizeof(arr[0])-1;
// int n = 0;
// int mid = 0;
// printf("输入一个数:");
// scanf("%d",&n);
// while(left<=right)
// {
// mid = (left+right)/2;
// if(arr[mid]<n)
// {
// left = mid+1;
// }
// else if ( arr[mid]>n)
// {
// right = mid-1;
// }
// else
// {
// printf("找到了,下标=%d\n", mid);
// break;
// }
// }
// if(left>right)
// {
// printf("输入错误!");
// }
// return 0;
//}
//阶乘相加
//int main()
//{
// int i = 0;
// int n = 0;
// int sum = 0;
// int ret = 1;
// for (n = 1; n <= 3; n++)
// {
// ret = 1;
// for (i = 1; i <= n; i++)
// {
// ret = ret* i;
// }
// sum = ret + sum;
// }
// printf("%d", sum);
//
// return 0;
//}
//任意数阶乘
//int main()
//{
// int i = 0;
// int n = 9;
// int sum = 1;
// for (i = 1; i <=n; i++)
// {
// sum = sum* i;
// }
// printf("%d",sum);
// return 0;
//}