一、分支语句
1.if语句|
if语句语法 0表示假,非0表示真。
if(表达式)
语句1;
else
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
.......
示例
注意 如果执行多条语句要用大括号括起来
#include<stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else //else只管一个printf
{
语句列表2;
}
return 0;
}
这里一对{}是代码块
1.1悬空else
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hhhh\n");
else
printf("hhhh\n");
return 0;
}
结果:未输出结果!
编译器默认将else与离它最近的if匹配(就近原则)
解决:只需一个大括号就可解决
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
{
if(b==2)
printf("hhhh\n");
}
else
printf("hhhh\n");
return 0;
}
1.2 if书写形式的对比
//代码1
if(condition)
{
return x;
}
else
return y;
//条件满足返回下,条件不满足返回y。
//代码2 与代码1相比阅读更清晰
if(condition)
{
return x;
}
else
{
return y;
}
//代码3
int a=1;
if(a==5)// =赋值 ==相等 若少个等号不会报错
{
printf("hhh\n");
}
//代码4
int a=1;
if(5==a) // 若少个=会报错,这样书写更好
{
printf("hhh\n");
}
//代码1示例
#include<stdio.h>
int test()
{
int a = 5;
if (a == 3)
return 1;
return 0;
}
int main()
{
int r = test();
printf("%d\n", r);
return 0;
}
//代码2 阅读更清晰
#include<stdio.h>
int test()
{
int a = 3;
if (a == 3)
return 1;
else
return 0;
}
int main()
{
int r = test();
printf("%d\n", r);
return 0;
}
2.switch语句
语法:
switch(整型变量或字符型变量)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
.....
case 常量n:语句n;break;
default:语句n+1:break;
}
//示例
#include<stdio.h>
int main()
{
int day=0;
scanf_s("%d", &day);
switch (day)
{
case 1:printf("星期一\n"); break;
case 2:printf("星期二\n"); break;
case 3:printf("星期三\n"); break;
case 4:printf("星期四\n"); break;
case 5:printf("星期五\n"); break;
case 6:printf("星期六\n"); break;
case 7:printf("星期天\n"); break;
default:printf("输入不正确\n"); break;
}
return 0;
}
上下结果相同时上方可不写
switch(整型变量或字符型变量)
{
case 1;
case 2;
case 3;
case 4;printf("...");break;
case 5;
case 6;printf("...");break;
}
二、循环语句!
1.while循环
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
打印1-10数字
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
printf("%d", i);
i++;
}
return 0;
}
结果
1.1while语句中的break和continue
1.1.1break 是用于永久终止循环
#include<stdio.h>
int main()
{
int i=0;
while(i<=10)
{
i++;
if(5==i)
break;
printf("%d",i);
}
return 0;
}
1.1.2continue 跳过本次循环后面的代码,直接去判断部分,进行下一次循环判断
#include<stdio.h>
int main()
{
int i=0;
while(i<=10)
{
i++;
if(5==i)
continue;
printf("%d",i);
}
return 0;
}
结果跳过5
2.for循环(最常使用)
2.1语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1 用于循环变量的初始化 表达式2 用于循环结束条件的判断 表达式3 用于循环变量的调整
打印1-10的数字
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
printf("%d", i);
return 0;
}
2.2 for语句中的break和continue
2.2.1break
循环中的break一样,for循环中的break也是用于终止循环的,不管循环还需要循环多少次,只要执行到了break,循环就彻底终止
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
break;
printf("%d", i);
}
return 0;
}
2.2.2 continue
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
continue;//这里continue跳过了后面的打印,直接来到i++部分
printf("%d", i);
}
return 0;
}
2.3for循环的变量
for循环的判断部分省略意味着这判断会恒成立(最好写明条件)
//for循环中的初始化部分,判断部分,调整部分,可省略,不建议初学时省略,容易导致问题
#include<stdio.h>
int main()
{
for (;;)
{
printf("hhhh\n");
}
return 0;
}
//陷入死循环
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("hhhh\n");
}
}
return 0;
}
//打印10*10=100个hhhh
//如果初始化部分省略
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 3; i++)
{
for (; j < 3; j++)
{
printf("hhhh\n");
}//j=3时不再进入该循环
}
return 0;
}
//打印3个hhhh
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i=0; i < 3; i++)
{
for (j=0; j < 3; j++)
{
printf("hhhh\n");
}
}
return 0;
}
//打印9个hhhh
//使用多余一个变量控制
#include<stdio.h>(
int main()
{
int x, y;
for (x = 0, y = 0; x < 7 && y < 4; ++x, ++y)
printf("hhhh\n");
return 0;
}
//打印4个hhhh
3.do…while循环
3.1语法
do
循环语句;
while(表达式);
//错误示范1
int main()
{
int i = 0;
do
printf("hhhh\n");
while (i < 10);
return 0;
}
//错误示范2
#include<stdio.h>
int main()
{
int i = 0;
do
printf("hhhh\n");
i++;
while (i < 10);
return 0;
}
//正确示范
#include<stdio.h>
int main()
{
int i = 0;
do
{
printf("hhhh\n");
i++;
}
while (i < 10);
return 0;
}
3.2 break,continue
3.3.1break
#include<stdio.h>
int main()
{
int i = 0;
do
{
if (5 == i)
break;
printf("%d\n",i);
i++;
}
while (i < 10);
return 0;
}

3.2.2 continue
#include<stdio.h>
int main()
{
int i = 0;
do
{
i++;
if (5 == i)
continue;
printf("%d\n",i);
}
while (i < 10);
return 0;
}

#include<stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
continue;
printf("%d\n",i);
i++;
}
while (i < 10);
return 0;
}

三、练习
1.计算n的阶乘
==代码如下==
#include<stdio.h>
int main()
{
int n;
int a = 1;
int s = 1;
scanf_s("%d", &n);
for (a = 1; a <= n; a++)
{
s = s * a;
//s*=a;
}
printf("%d", s);
return 0;
}
==结果==
2.计算阶乘的和 例如:1!+2!+3!+…+10!|
==代码如下==
代码1:
#include<stdio.h>
int main()
{
int a = 1;
int n = 0;
int s = 1;
int sum = 0;
for (n = 1; n <=10; n++)
{
s = 1;
for (a = 1; a <= n; a++)
{
s = s * a;
}
sum = sum + s;
}
printf("%d", sum);
return 0;
}
//for (a = 1; a <= n; a++)
// {
// s = s * a;
// }
//计算n的阶乘,每次计算s为1必须说明
代码2:
#include<stdio.h>
int main()
{
int n = 1, sum = 0, a = 1;
while (n <= 10)
{
n++;
sum = sum + a;
a = a * n;
}
printf("%d", sum);
return 0;
}
代码3:
#include<stdio.h>
int main()
{
int n = 1, sum = 0, a = 1;
for (n = 1; n <= 10; n++)
{
a = a * n;
sum = sum + a;
}
printf("%d", sum);
return 0;
}
3.在一个有序数组中查找某个数
代码1:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int k;
int sz = sizeof(arr) / sizeof(arr[0]);
scanf_s("%d", &k);
for (i = 0; i < sz; i++)
{
if (arr[i] == k)
{
printf("找到了,下标是:%d\n", i);
}
if (i == sz)
{
printf("没找到\n");
}
}
return 0;
}
代码2 二分查找(更高效):
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
int k = 3;
while (left<=right)
{
//int mid = (left + right) / 2;
int mid = left + (right - left) / 2;//防止left和right的平均值超出范围
// left/2+right/2这种表达是错误的
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是:%d", mid);
break;
}
}
if (left > right)
printf("无\n");
return 0;
}
4.编写代码,演示多个字符从两端移动,向中间汇聚
替代
#include<stdio.h>
int main()
{
char arr1[] = "I LOVE YOU !" ;
char arr2[] = "############";
int left = 0;
int right = strlen(arr2) - 1; //strlen是求长度,strlen不算\0,算的是\0之前的元素个数
//int right=sizeof(arr1)/sizeof(arr[0])-2; //size是求内存,sizeof算\0,算总元素个数
//char buf[]="a,b,c";
//[a,b,c,\0] 四个元素 c的下标为2,用strlen-1;用sizeof-2
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
要延迟效果的话:可加Sleep函数并添加头文件#include<windows.h>
清空屏幕的话:可用system函数并添加头文件#include<stdlib.h>
#include<windows.h>
#include<stblib.h>
#include<stdio.h>
int main()
{
char arr1[] = "I LOVE YOU !" ;
char arr2[] = "############";
int left = 0;
int right = strlen(arr2) - 1; //strlen是求长度,strlen不算\0,算的是\0之前的元素个数
//int right=sizeof(arr1)/sizeof(arr[0])-2; //size是求内存,sizeof算\0,算总元素个数
//char buf[]="a,b,c";
//[a,b,c,\0] 四个元素 c的下标为2,用strlen-1;用sizeof-2
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);// 延迟 休息 毫秒为单位
//清空屏幕
system("cls")//system是一个库函数,可以执行系统命令
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
4.代码编写实现,模拟用户登录场景,并且只能登陆3次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序。
错误示范
#include<stdio.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s",password)//数组名本来就是地址不需要取地址
if (password == "abcdef")//比较2个字符串是否相等,不能使用==,而应该使用一个库函数:strcmp
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误");
}
}
if (i == 3)
{
printf("三次密码均输入错误,退出程序");
}
}
后面无法进行下去,if (password == "abcdef")//比较2个字符串是否相等,不能使用==,而应该使用一个库函数:strcmp
正确示范
#include<stdio.h>
#include<string.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf_s("%s", password);//数组名本来就是地址不需要取地址
if (strcmp(password, "abcdef") == 0)//比较2个字符串是否相等,不能使用==,而应该使用一个库函数:strcmp
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误");
}
}
if (i == 3)
{
printf("三次密码均输入错误,退出程序");
}
}