1.什么是语句?
C语句可分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
这章讲的是控制语句,包括三种结构(1.顺序结构2.选择结构3.循环结构),C语言有9种控制语句
可以分为三类
- 条件判断语句也叫分支语句:if语句和switch语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
2.分支语句(选择结构)
2.1 if语句
语法结构:
if(表达式)
语句1;
else if (表达式)
语句2;
else
语句3;
2.1.3练习
练习一下
1.判断一个数是否为奇数
2.输出1~100之间的奇数(两种方法)
#include <stdio.h>
int main()
{
int x = 0;
while (scanf("%d",&x)!=EOF)
{
if(x%2==0)
{
printf("Even");
}
else
{
printf("Odd");
}
}
return 0;
}
//第二题
#include<stdio.h>
int main()
{
int i = 0;
for(i=3;i<=100;i+=3)
{
printf("%d\n",i);
}
return 0;
}
2.2switch语句
switch适用于多分支
例如
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入5,输出星期五
输入4,输出星期四
输入6,输出星期六
输入7,输出星期日
switch的结构
switch(整句表达式)
{
语句项;
}
语句项是啥?
是一些case语句:
例如:
case 整形常量表达式:
语句;
2.2.1在switch中的break
break会跳出循环,
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&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");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
如果让输入1—5,输出weekday
如果让输入6—7,输出weekend
应该这样
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
break语句的实际效果是把语句列表划分为不同的分支语句。
2.2.2default语句
当表达的值与所有的case标签的值不匹配,可以在语句列表中增加一条default子句,defult可以下载语句列表的任何位置,而且语句会像执行case标签一样执行default子句。
在每个switch语句中都放一条default子句是个好习惯。
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch(n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n",m,n);
return 0;
}
3.循环语句
- while
- for
- do while
3.1while循环
//while 语法结构
while(表达式)
循环语句;
例如在屏幕上打印1~10的数字
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
printf("%d ",i);
i++;
}
return 0;
}
3.1.1while语句中的break和continue
在循环中遇到break永久终止循环
#include<stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
{
break;
}
printf("%d ",i);
i++;
}
return 0;
}//输出的值为1 2 3 4
continue介绍
continue用于终止循环,本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次while循环入口判断。
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
continue;
printf("%d ",i);
i++;
}
return 0;
}//输出的结果是1 2 3 4
发现一学到getchar 和putchar就睡觉
不知道看到这里你困不困
但是我实在不想学了。就跳过吧。
3.2 for循环
for(表达式1;表达式2;表达式3)
循环语句;
表达式1时初始化,表达式2是条件判断,表达式3时调整。
3.3 do…while()循环
3.3.1 do语句的语法
do
循环语句;
while(表达式);
do语句至少执行一次;
3.4 练习
1.计算n的阶乘;
#include<stdio.h>
int main()//计算n的阶乘
{
int n = 0;
scanf("%d",&n);
int i = 0;
int jet = 1;
for(i = 1;i < n+1;i++)
{
jet = jet * i;
}
printf("%d\n",jet);
return 0;
}
2.计算1!+ 2!+ 3!+…+ 10!
#include<stdio.h>
int main()
{
int i = 0;
int jet = 1;
int x = 0;
for(i = 1;i <= 10;i++)
{
jet *= i;
x = x + jet;
}
printf("%d",x);
return 0;
}
3.在一个有序数组中查找具体的某个数字n。(讲解二分查找)
//计算数组元素个数:sizeof(arr)/sizeof(arr[0]);
#include<stdio.h>
#include<string.h>
int main()
{
int k = 10;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
printf("猜猜k是几?\n");
int left = 0;
int right = 0;
int sz = 0;
sz = sizeof(arr)/sizeof(arr[0]);
right = sz - 1;
int mid = (left + right)/2;
while(left <= right)
{
if(k > arr[mid])
{
left = mid + 1;
mid = (left + right)/2;
}
else if(k < arr[mid])
{
right = mid - 1;
mid = (left + right)/2;
}
else
{
break;
}
}
printf("在数组中下标是%d\n",mid);
return 0;
}
这道题有点难啊。自己看看吧。
4.编写代码,演示多个字符从两端移动,向中间汇聚。
#include<stdio.h>//这个真不会
#include<stdio.h>
#include <unistd.h>//我这是ios系统,window系统用#include<windows.h>
#include<string.h>
int main()
{
char arr1[] = "welcome to bit...";
char arr2[] = "*****************";
int left = 0;
int right = strlen(arr1)-1;
while(left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
sleep(1);
printf("%s\n",arr2);
left++;
right--;
}
return 0;
}
5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
#include<stdio.h>
#include<string.h>
int main()
{
int i = 1;
int flag = 0;
char password[20] = {};
for(i = 0;i < 3;i++)
{
printf("请输入密码");
scanf("%s",&password);
if(strcmp(password ,"123456") == 0)//此处为字符串相等的用法,用到了strcmp
{
flag =1;
break;
}
}
if (flag == 0)
printf("密码错误");
}
return 0;
}
6.猜数字游戏实现
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
printf("******************************\n");
printf("************1.play************\n");
printf("************0.exit************\n");
printf("******************************\n");
}
void game()
{
int random_num = rand()%100+1;
int i = 1;
while(1)
{
printf("请输入你猜的数_");1
scanf("%d",&i);
if(i > random_num)
{
printf("猜大了\n");
}
else if(i < random_num)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
}
}
}
int main()
{
int i = 0;
srand((unsigned)time(NULL));
for(;;)
{
menu();
printf("是否进入游戏(1/0)?\n");
scanf("%d",&i);
if(i == 1)
{
printf("进入游戏~\n");
game();
}
else if(i == 0)
{
printf("退出游戏\n");
}
}
return 0;
}
4.goto语句
goto在某些特定的地方会发挥作用。从理论上讲没啥必要,但是我学了,我就得写一遍加深印象。
终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环。
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
...
error:
if(disaster)
//处理错误情况