#include<stdio.h>
//分支语句和循环语句
//
//分支语句:if语句,switch语句
//循环语句:do while语句,while语句,for语句
//转向语句:break语句,go to语句,return语句,continue语句
1.if语句
//if语句即判断语句
// 可实现单分支多分支
//
// if语句格式
// if(条件判断)
// 运行程序
// else //非必要
// 运行程序
//
//
// eg1.单分支
//int main()
//{
// int a = 10;
// if (a == 2) //括号里面进行判断若为真则执行命令
// printf("hehe\n");//本该加大括号,但if语句下面只有一条语句可省略
// //if只控制到一个分号便结束,故不可在()后面加分号,若加则为空语句
// return 0;
//}
//eg2.
//int main()
//{
// int a = 10;
// if (a < 18)
// {
// printf("未成年\n");
// printf("不完全民事行为人\n");
// }
// else
// printf("成年人\n");
// return 0;
//}
//eg3.
//天坑:else会自动和最近if语句进行匹配,不是对齐谁和谁匹配
//int main()
//{
// int a = 0;
// int b = 2;
// if (a == 1)//即a不等于1为假不会执行if里面内容
// {if (b == 2)
// printf("hehe\n");
// else//故实际else对应离他最近if而不是打印haha;
// printf("haha\n");
// } 为防止出bug可能应养成良好的习惯,if后边加大括号
// return 0;
//}
//eg4.多分支
//int main()
//{
// int age = 100;//可此处直接赋值
// scanf_s("%d\n", &age);
//
// if (age <= 12)
// {
// printf("未成年\n");
// }
// else if (age > 12 && age < 18)
// {
// printf("青少年\n");
// }
// else if (age >= 18 && age < 28)
// {
// printf("青年\n");
// }
// else if (age>= 28 && age < 40)
// {
// printf("壮年\n");
// }
// else if (age >= 40 && age < 60)
// {
// printf("中年\n");
// }
// else if (age >= 60 && age < 99)
// {
// printf("老年\n");
// }
// else
// {
// printf("老寿星\n");
// }
// return 0;
//}
//eg5.坑
//int main()
//{
// int a = 5;
// if (5 == a)
// printf("常量应该放在左边,若放右边等于赋值符合编译规则,漏等号容易出错,放常量在左边漏等号会报错");
// return 0;
//}
//练习1.判断一个数是否为奇数
// 判断1-100内是否为奇数
//int main()
//{
// int num = 0;
// //输入
// scanf_s("%d\n", &num);
// //判断
// if (num <= 100)
// {
// if (num % 2 == 1)
// {
// printf("奇数\n");
// }
// else
// {
// printf("NO\n");
// }
// return 0;
// }
// else
// {
// printf("请在范围内查找\n");
// }
//
//}
//输入1-100之间的奇数
//int main()
//{
// int i = 1;
// while (i <= 100)
// {
// if(i % 2 == 1)
// printf("%d\n", i);
//
// i++;
// }
//
// return 0;
//}
2.switch语句
//switch语句属于分支语句
//语句用法:
//switch(必须整形)
//{case 整形:
//若想到此为止则case后面加break不加则会一直循环下去
// default子句 // 即所有无法匹配的case都会走到这个句子中
// switch可嵌套使用
//}
//eg:
//int main()
//{
// int day = 0;
// scanf_s("%d\n", &day);
// switch (day)//此数字决定从下面哪个入口进入
// {
// case 1:
// printf("星期一\n");
// break;//有无break决定还要不要继续往下滑
// case 2:
// printf("星期二\n");
// break;
// case 3:
// printf("星期三\n");
// break;
// case 4:
// printf("星期四\n");
// break;
// case 5:
// printf("星期五\n");
// default :
// printf("请从规定分支入口进入");
//
//
// }
//
// return 0;
//}
//练习
//
//打印1-200奇数
//int main()
//{
// int i = 0;
// while (i <= 200)
// {
// if (i % 2 == 1)
// {
// printf("%d\n", i);
// }
// i++;
//
//
// }
// return 0;
//}
//int main()
//{
// int a = 20;
// int* p = &a;
// *p = 20;
// printf("%d\n", a);
// return 0;
//}
3.while语句
//循环语句
//while循环
//int main()
//{
// int i = 0;
// while (i <= 10)
// {
// if (i == 5)
// {
// break;//当i==5时永久退出循环,不在执行循环内代码
// }
// printf("%d\n", i);
// i++;
//
// }
// return 0;
//}
//int main()
//{
// int i = 1;
// while (i <= 10)
// {
// i++;
// if (i == 5)
// {
// break;
// }
// printf("%d\n", i);
// }
// return 0;
//}
//int main()
//{
// int i = 1;
//
// while (i <= 10)
// {
// i++;
// if (i == 5)
// continue;//跳过本次循环不再执行后边代码,区别于break
// printf("%d\n", i);
//
// }
// return 0;
//}
//数组名本就是地址不需要取地址符
//scanf和putchar是一类型函数
//scanf和getchar读取特点:读取到空格便会自动停下
//
//int main()
//{//登录界面
// printf("welcome to sb family\n");
//
// char possword[20] = { 0 };
//
// printf("请输入密码:\n");
//
// 输入
// scanf_s("%d\n", possword);
//
// char ch = 0;
// while ((ch = getchar()) != '\n')
// {
// ;
// }
// printf("请确认密码(y/n):");
// 输出
// int ret = getchar();
// if ('y' == ret)
// {
// printf("登录成功\n");
// }
// else
// {
// printf("密码错误,请再次输入\n");
// }
// return 0;
//}
//练习:求四个数里的最大值
//int main()
//{
// int arr[4] = { 0 };
// //输入 通过循环把数组内四个数通通输入;
// int i = 0;
// while (i < 4)
// {
// scanf_s("%d\n", &arr[i]);
// i++;
// }
// int max = arr[0];//定义假设数组内第一个数为最大值
// i = 1;
// while (i < 4)
// {
// if (max < arr[i])
// {
// max = arr[i];
// }
// i++;
// }
// printf("%d\n", max);
//
// return 0;
//}
4.for语句
//for循环表达式
//for(表达式1;表达式2;表达式3)
//{循环语句};
//表达式1:用于初始化循环变量
//表达式2:用于判断是否进行循环
//表达式3:调整部分
//int main()
//{
// int i = 0;
// while (i < 10)
// {
// printf("%d\n", i);
// i++;
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// for (i = 1; i <= 10; i++)
// printf("%d\n", i);
// return 0;
//}
//break和continue作用和while循环作用一致,break只挑出一层for循环,continue只结束本次循环后面代码
//不要在for循环体内随便修改变量,可能让循环体失去控制,他调整部分在表达式3,
//eg1.
//int main()
//{
// for (;;)//若省去判断部分将陷入死循环;
// printf("hehe\n");
// return 0;
//}
//eg2.
//int main()
//{
// int i = 0;
// int j = 0;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 3; j++)//允许for循环嵌套使用
// {
// printf("hehe\n");
// }
// }
// return 0;
//}
//eg3.区别于例2,i在第二个for循环里面结束后值为3然后返回到第一个for循环++变4,进行判断后超出范围,结束循环,故该代码只打印3个hehe;
//int main()
//{
// int i = 0;
// for (i = 0; i < 3; i++)
// {
// for (i = 0; i < 3; i++)
// {
// printf("hehe\n");
// }
// }
// return 0;
//}
//eg4.可以多个变量进行判断类似于一个scanf可同时取多个地址
//*****任何分支、循环若判断为假则不会进行
//***天坑 a = 0;这个即为假不会进入循环
//eg5.判断该代码进行几次循环
//int main()
//{
// int i = 0;
// int j = 0;
// for (i = 0, j = 0; j = 0; i++, j++)//j = 0即赋值,j处于判断部分,为零即为假,故不会进行循环直接跳出循环部分;
// //对 = 和 == 须有一个敏感度;
// {
// j++;
// }
// return 0;
//
//}
5.do while语句
//do while循环语句
//特点:至少执行一次,然后才开始循环
//break和continue作用和其他循环一致
//break:永久退出循环
//continue:跳过本次循环
//eg1.
//int main()
//{
// int i = 1;
// do
// {
// printf("%d\n", i);//逻辑进入do打印一次然后+1符合while判断进入循环;
// i++;
// }
// while (i <= 10);
//
// return 0;
//}
//int main()
//{
// int i = 1;
// do
// {
// printf("%d\n", i);
// break;//break打破循环跳出循环;
// i++;
// }
// while (i <= 10);
// return 0;
//}
//练习:
//1.计算n的阶乘;
//大致思路先把1-n打印出来在相乘
int main()
{
int n = 0;
int i = 1;
int ret = 1;
//输入
scanf_s("%d", &n);
while (i <= n)
{
ret = ret * i;
i++;
}
printf("%d\n", ret);
return 0;
}