在C语言中,由分号隔开的就是一个语句
; //这是一条空语句
int a = 10;//这是一条语句
char arr[10] = {0};//这是一条语句
return 0;//这是一条语句
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
if语句的语法结构是怎么样的??
当满足条件的时候就执行,不满足就不执行
else与最近的if匹配
1、判断是否成年
int main()
{
int age = 0;
printf("请输入年龄:");
scanf("%d",&age);
if (age >= 18)
printf("成年");
printf("未成年");
return 0;
}
int main()
{
int age = 0;
printf("请输入年龄:");
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
int main()
{
//判断一个数是否为奇数
int a = 0;
printf("请输入一个整数:");
scanf("%d",&a);
if (a % 2 == 1)
{
printf("是奇数\n");
}
else
{
printf("不是奇数\n");
}
return 0;
}
写法1:
int main()
{
//输出1-100里面的奇数
int a = 1;
while (a <= 100)//首先要产生1-100这些数
{
if (a % 2 == 1)
{
printf("%d ", a);
a++;
}
a++;
}
return 0;
}
写法2:
int main()
{
//输出1-100里面的奇数
int a = 1;
while (a <= 100)//首先要产生1-100这些数
{
printf("%d ", a);
a = a + 2;
}
return 0;
}
要达到某一种效果,实现的代码方式又不同的方法
switch语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那就换一种方式写,满足哪个条件就执行哪个case语句
int main()
{
int day = 0;
scanf("%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");
case 7:
printf("星期日\n");
break;
default:
break;
}
return 0;
}
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个case标签可以出现的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
int main()
{
int n = 1;
int m = 2;
switch (n)//1
{
case 1:
m++; //m = 3
case 2:
n++; //n = 2
case 3:
switch (n) // 2
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++; //4
n++; //3
break;
}
case 4:
m++; //5
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
这个程序执行的结果????
但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了:while语句,可以实现循环
比如我们实现: 在屏幕上打印1-10的数字
break介绍
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的
continue介绍
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分。进行下一次循环的入口判断
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整
实际的问题: 使用for循环 在屏幕上打印1-10的数字
break
continue
在这里插入图片描述
1、死循环
2、
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用
break
continue
//计算 n的阶乘
int main()
{
int n = 0;
int i = 1;
int sum = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
printf("sum = %d", sum);
return 0;
}
//计算 1!+2!+3!+……+10!
int main()
{
int i = 1;
int sum = 1;
int ret = 0;
for (i = 1; i <= 10; i++)
{
sum = sum * i;
ret = ret + sum;
}
printf("ret = %d", ret);
return 0;
}
int main()
{
int a = 0;
int i = 0;
int flag = 0;
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };//定义一个有序数组
printf("请输入你要查找的数:");
scanf("%d",&a);
for (i = 0; i < 10; i++)
{
if (a == arr[i])
{
flag = 1;
break;
}
else
{
flag = 0;
}
}
if (1 == flag)
{
printf("这个数在数组里面,下标为:%d\n", i);
}
else
{
printf("这个数不在在数组里面\n");
}
return 0;
}
//二分查找
int main()
{
int k = 18;//查找的元素
int flag = 0;
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 mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] < k)//说明此时要查找的数在右边
{
left = mid + 1;
}
else if (arr[mid] > k)//说明此时要查找的数在左边
{
right = mid - 1;
}
else //中间元素==要查找的数arr[mid] == k
{
flag = 1;
break;
}
}
if (flag == 1)
{
printf("找到了,下标为: %d\n", mid);
}
else
{
printf("没找到\n");
}
return 0;
}
二分查找只适用于有序的数组进行查找,无序的要先进行排序,利用下标进行查找
#include
#include
int main()
{
char arr1[] = "helle worad !!!";
char arr2[] = "###############";
int left = 0;
int right = strlen(arr2) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
Sleep(1000);
//system("cls");
}
printf("%s\n", arr2);
return 0;
}
打印的就是这个效果
int main()
{
int i = 0;
char arr[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s",arr);
if (strcmp(arr,"123456") == 0)
{
break;
}
}
if (3 == i)
{
printf("密码错误,登录失败!\n");
}
else
{
printf("密码正确,登录成功!\n");
}
return 0;
}
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
关于shutdown命令的扩展
下面是使用goto语句的一个例子:
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}