目录
1. switch语句的补充:
1.1在switch语句中的default语句:
如果我们输入的值不是我们定义的case的值的时候,我们就使用default语句:
int main() {
int i = 0;
scanf("%d", &i);
switch (i) {
case 1:
printf("h");
case 2:
printf("hh");
case 3:
printf("hhh");
default:
printf("hhhh");
}
return 0;
}
此时我们输入的5,但是我们的case语句中并没有case5,所以他就执行了我们的default语句.
1.2在switch语句中的break语句:
如果有break,把么就会跳出当前的case语句.如果没有break语句,就执行下一条case语句.
int main() {
int i = 1;
int j = 1;
switch (i) {
case 1:
i++;
case 2:
j++;
}
printf("i= %d j= %d", i, j);
return 0;
}
上面是没有用break语句的代码.我们来看看结果:
int main() {
int i = 1;
int j = 1;
switch (i) {
case 1:
i++;
break;
case 2:
j++;
}
printf("i= %d j= %d", i, j);
return 0;
}
当我们使用break语句时:
此时我们发现j的值没有加一,i的值加一了,说明使用break语句之后,程序在遇到break之后就结束了switch,没有进行后面的case.
下面有个例子给大家分析:
int main() {
int n = 1;
int m = 2;
switch (n) {
case 1:
m++;//m=3
case 2:
n++;//n=2
//case 1 case 2没有break语句终止,所以会执行后面的语句
case 3:
switch (n) {//n=2
case 1:
n++;
case 2:
m++; n++;//m=4,n=3;
break;
}
case 4:
m++;//m=5
break;
default:
break;
}
printf("m= %d n= %d", m, n);//m=5,n=3;
return 0;
}
如果上面的switch语句你能够看得懂,并且可以完全理解,那么你的switch语句就可以了.
2.:循环语句:
循环语句有哪些?:while循环 for循环 do while循环.
2.1 while循环语句:
语句的格式:while(条件判断语句){循环体}.如果条件为真 就进入循环体.
int main() {
int i = 1;
while (i) {
printf("hh\n");
}
return 0;
}
我们在while循环的条件判断语句中给他的条件是i=1,所以他是一个真的条件,所以就会执行我们的循环体;
下面我们来简单的用一下我们的while循环打印一下我们的1-9;
//打印数字1-9;
int main() {
int i = 1;
while (i<10) {
printf("%d ",i);
i++;
}
return 0;
}
while循环中:有两个关键字:break 和 continue;
break:
int main() {
int i = 1;
while (i<10) {
if (i == 5)
break;
printf("%d ",i);
i++;
}
return 0;
}
当我们使用了break时,就终止了我们的循环,break后面的代码就不会执行.
continue:
int main() {
int i = 1;
while (i<10) {
if (i == 5)
continue;
printf("%d ",i);
i++;
}
return 0;
}
此时我们使用了continue时,程序并没有停止而是出现了死循环.那么我们的continue就是跳过continue后面的代码直接判断是否可以执行下一次循环,我们上面的代码就是在i=5的时候,continue跳过了后面的代码,直接去判断我们的循环条件是否成立,成立就继续进行我们的代码,但是此时是不执行continue后面的代码的.所以我们的程序出现了死循环(此时我们的n是4,条件判断为真)
int main() {
int i = 1;
while (i<10) {
i++;
if (i == 5)
continue;
printf("%d ",i);
}
return 0;
}
当我们的代码修改以后按照上面的代码进行写的时候,就不会出现死循环的结果,因为我们的i++在循环中仍然运行.我们来看一下结果:
在这给大家讲一下一个C语言中的一个函数.getchar (获取字符 ASCII码值)和 putchar (输出一个字符)
int main() {
int ch = getchar();//获取一个字符:从键盘中获取
printf("%c\n", ch);
putchar(ch);
return 0;
}
为什么我们定义的ch是一个int型,不是一个char型?因为它所获取的是这个字符的ASCII码值,所以就是需要int型.putchar就是输出这个字符的ASCII值的数值所代表的是字符.
c语言中的EOF(end of file)字符结束.
int main() {
int ch = 0;
while ((ch = getchar())!=EOF) {//表示我们获取的是一个字符的话就是真值进去循环
putchar(ch);
}
return 0;
}
以上代码进去以后就是一个循环,我们输入一个字符他就会打印一个字符,那么我们发现此时是一个死循环,程序没有办法停止.那么我们只需要输入CTRL+z,就会输入一个EOF,程序就会停止.
在这给大家举个例子让大家更加好的理解
//判断密码是否正确
int main() {
char password [20] = { 0 };//定义一个密码是一个字符数组
printf("请输入密码\n");
scanf("%s", password);//输入一个字符
printf("请判断密码是否正确->(Y/N)\n");
int ret = getchar();//获取判断的字符
if (ret == 'Y') {
printf("YES\n");
}
else {
printf("NO");
}
return 0;
}
为什么我输入以后还没有判断,他就输出了?
那么怎么解决这个问题呢:
那么这就是我们很好的一个解决方案.代码如下:
//判断密码是否正确
int main() {
char password [20] = { 0 };//定义一个密码是一个字符数组
printf("请输入密码\n");
scanf("%s", password);//输入一个字符
printf("请判断密码是否正确->(Y/N)\n");
//getchar();//让他把\n拿走,那么后面的getchar就获取的是我们判断密码的Y\N.
int flag = 0;
while ((flag=getchar())!='\n') {
getchar();
}
int ret = getchar();//获取判断的字符
if (ret == 'Y') {
printf("YES\n");
}
else {
printf("NO");
}
return 0;
}
下面一个代码只打印我们的数字字符:
int main() {
char ch = '\0';
while ((ch = getchar()) != EOF) {
if (ch < '0' || ch > '9') {//ASCII码值是字母
continue;//如果是字母就跳过
}
putchar(ch);//只打印数字
}
return 0;
}
2.2:for循环
for循环的语法:
表达式1:初始化部分,用来初始化变量
表达式2:条件判断部分,用来判断循环终止
表达式3:调整部分,用来调整循环
我们来打印1~10,分别使用for循环和while循环
//打印1~10
//首先while循环
int main() {
int i = 1;
while(i <= 10) {
printf("%d ", i);
i++;
}
return 0;
}
//for循环
int main() {
int i = 1;
for (i = 1; i <= 10; i++) {
printf("%d ", i);
}
return 0;
}
在这我么看到两个循环的本质是一样的,都有三条语句,只不过他们的语法不同.
在for循环中也存在break和continue
int main() {
int i = 1;
for (i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
}
return 0;
}
int main() {
int i = 1;
for (i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
printf("%d ", i);
}
return 0;
}
在这为什么使用了continue之后,程序只是跳过了5,而不是死循环呢?在我们的while循环中出现死循环,为什么for循环没有出现呢?
强调:在for循环中,建议不要在循环体中更改循环变量;
提醒:在for循环中,条件判断,前闭后开(这是一个比较合理的公用的一个规则)注意灵活使用
for循环几种情况:1.循环中的判断条件省略
int main() {
for (;;) {
printf("hehehe\n");
}
return 0;
}
此时我们运行时发现,出现了死循环;
上面的代码只是为了给大家强调,在我们的for循环中,三条语句不要省略,防止出错。
2.3:do while 循环
用do while循环打印1~10;
int main() {
int i = 1;
do {
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
do while 循环中也有break和continue。
int main() {
int i = 0;
do {
if (i == 5)
break;
printf("%d ", i);
i++;
}
while (i < 10);
return 0;
}
此时跳过5,只打印了0,1,2,3,4;
int main() {
int i = 0;
do {
if (i == 5)
continue;
printf("%d ", i);
i++;
}
while (i < 10);
return 0;
}
此时出现死循环,continue跳过后面的循环体,所以i=5,在while循环中一直为真。
例题:计算1!+2!+3!+。。。。+10!
int main() {
int n = 0;
int i = 1;
int sum = 0;
int ret = 1;
int T = 0;
scanf("%d", &T);//输入T=10;就是10 1到10的阶乘的和
for (n = 1; n <= T;n++) {
for (i = 1; i <= n; i++) {
ret = ret * i;
}
sum = sum + ret;
}
printf("%d", sum);
return 0;
}
那么上面的代码我们使用了两层for循环,比较麻烦,那我们进行简化:
int main() {
int n = 0;
int sum = 0;
int ret = 1;
int T = 0;
scanf("%d", &T);//计算的阶乘的数字
for (n = 1; n <= T; n++) {
ret = ret * n;
sum = sum + ret;
}
printf("%d", sum);
return 0;
}
在某个数组中查找某个具体的数字:
int main() {
int k = 0;
scanf("%d", &k);
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++) {
if (arr[i] == k) {
printf("找到了第 %d 个元素\n", i);
break;
}
if (i == sz) {//判断i的值有没有到数组的最后一个元素的下角标
printf("找不到\n");
}
}
return 0;
}
折半查找元素角标位置:
int main() {
int k = 0;
scanf("%d", &k);
int arr[] = { 1,2,3,4,5,6,7,8,9};
int left = 0;//做下标
int sz = sizeof(arr) / sizeof(arr[0]);
int right = sz - 1;//右下标
int mid =left + (right - left ) / 2;//中间角标
while (left <= right) {
if (arr[mid] < k) {
left = mid + 1;
}
else if (arr[mid] > k) {
right = mid - 1;
}
else {
printf("第 %d 个元素是",mid);
break;
}
}
if (left > right) {
printf("找不到元素");
}
return 0;
}
猜字谜游戏;
void menu() {//菜单方法
printf("*************************\n");
printf("********* 1.play ********\n");
printf("********* 2.exit ********\n");
printf("*************************\n");
}
void game() {
int guess = 0;
srand((unsigned int)time(NULL));//利用时间戳生成一个随机数
int ret = rand()%100+1;//生成随机数,对100取余再加1范围就是1-100
printf("请猜数字");
scanf("%d", &guess);
while (1) {
if (guess < ret) {
printf("猜小了\n");
}
else if (guess > ret) {
printf("猜大了\n");
}
else {
printf("恭喜你猜对了\n");
break;
}
}
}
int main() {
//打印菜单
int input = 0;
srand((unsigned int)time(NULL));//利用时间戳生成一个随机数
do {
menu();
printf("请输入选择的模式");
scanf("%d", &input);
switch(input){
case1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("没有该选项请重新选择\n");
break;
}
} while (input);
return 0;
}
如果说上面的代码,你都可以理解,并且你能够在不看我的代码的情况下敲出代码,就说明你的逻辑思维和循环和条件语句已经可以了。
那么我们本次的分享到此就结束了,期待我们的下次见面。