深圳龙华建设工程交易中心网站,西部数码网站管理助手错误,关键词优化是什么,郑州彩票网站开发目录
一.分支语句
1.if语句
2.悬空else问题
3.switch语句
default子句
二.循环语句
1.while循环
whle循环流程图#xff1a;
break与continue
2.for循环
2.2for与while循环
2.3关于for循环的一道笔试题
3.do while 循环
三.猜数字游戏实现
四.goto语句
补充
…目录
一.分支语句
1.if语句
2.悬空else问题
3.switch语句
default子句
二.循环语句
1.while循环
whle循环流程图
break与continue
2.for循环
2.2for与while循环
2.3关于for循环的一道笔试题
3.do while 循环
三.猜数字游戏实现
四.goto语句
补充
scanf与getchar
最后 一.分支语句
1.if语句
作为c语言最常见的判断语句几乎有关判断的场景都要用到if来实现
用if表达式中表达式为真非0执行为假0就停止执行。
2.悬空else问题
#include stdio.h
int main()
{int a 0;int b 2;if(a 1)if(b 2)printf(hehe\n);elseprintf(haha\n);return 0;
} 执行该代码时预期想打印haha,发现什么都没有打印,为什么
因为else与它最近的if匹配第一个if判断为假跳过下面的语句直接到return 0第二个if与else可以说是捆绑在一起
修改: #include stdio.h
int main()
{int a 0;int b 2;if(a 1){if(b 2){printf(hehe\n);}}else{printf(haha\n);} return 0;
}
适当的使用{}可以使代码的逻辑更加清楚,写代码风格很重要
3.switch语句
swich语句常用于多分支的情况比如要输出今天是星期几如果用if来写一堆的else if不方便这时swich就派上用场了
用switch语句写出今天的日期
#include stdio.h
int main()
{int day 0;switch(day){case 1printf(星期一\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;}return 0;
}
但有时多个分支的需求时一样的如想要知道今天时周末还是工作日
#include stdio.h
//switch代码演示
int main()
{int day 0;switch(day){case 1case 2:case 3:case 4:case 5:printf(weekday\n);break;case 6:case 7:printf(weekend\n);break;}return 0;
}
default子句
如果表达的值与所有的case标签的值都不匹配怎么办 其实也没什么结构就是所有的语句都被跳过而已。 程序并不会终止也不会报错因为这种情况在C中并不认为是个错误。 但是如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢 你可以在语句列表中增加一条default子句case都不匹配时就跳到default子句执行使得switch更加完整 补充:case与default子句在switch里的顺序没有固定也就是说它们可以出现在任何位置 二.循环语句
1.while循环
在生活中如果一件事情要做多次光用if行不通C语言给我们提供了while语句
whle循环流程图 break与continue
break作用与swich类似它通常是在while中当某种条件达到时跳出while循环。所以while中的break是用于永久终止循环的
continue作用:它的翻译是:继续。但别被它的翻译带乱了它是在程序执行到它时跳过在while中continue下面的语句在进行循环。慎用容易使得while死循环
2.for循环
我们已经知道了while循环但是我们为什么还要一个for循环呢
2.2for与while循环
用循环打印十个hehe
int i 0;
//实现相同的功能使用while
i1;//初始化部分
while(i10)//判断部分
{printf(hehe\n);i i1;//调整部分
}
//实现相同的功能使用while
for(i1; i10; i)
{printf(hehe\n);
}从代码上可以看出相对于while,for在修改调整判断条件时更加有条理性更不容易出错。在我们以后的学习里for循环相对与while用的更多尤其是在控制变量等相关问题上更容易控制 continue与break在for循环语句的功能是一样的这里就不展开说明。
2.3关于for循环的一道笔试题
//请问循环要循环多少次
#include stdio.h
int main()
{int i 0;int k 0;for(i 0,k0; k0; i,k)k;return 0;
} 答案是0次k在初始化是0判断条件里已经符合所以不进入for循环里面 3.do while 循环
循环至少执行一次使用的场景有限不经常使用。
三.猜数字游戏实现 学习了各种C语言的基本语句。现在开动你聪明的大脑用C语言来简单实现一个猜数字代码吧 下面是实现的代码 #includestdlib.h
#includetime.h
#includestdio.h
void menu()
{printf(*******************\n);printf(**1.Play**2.Exit***\n);printf(*******************\n);
}
void game()
{int n 5;int warld rand()%1001;//生成0到100的随机数//printf(%d\n, warld);int input 0;printf(您有五次机会猜数字\n);while (n){printf(输入数字);scanf(%d, input);if (warld input){printf(猜大了\n);}else if (warld input){printf(猜小了\n);}else{printf(恭喜猜对了\n);break;}n--;}if (n 0){printf(五次机会已用完挑战失败\n);}
}
int main()
{int input 0;srand((unsigned int)time(NULL));//时间戳实现每时每刻的随机数变化do{menu();printf(输入您的选择);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(非法请重新输入);break;}} while (input);return 0;
} 相信聪明的你一定是写出来了怎么样在实现出来的那一刻是不是很有成就感 四.goto语句
从理论上 goto语句是没有必要的实践中没有goto语句也可以很容易的写出代码。用while循环代替 但是某些场合下goto语句还是用得着的最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。 例如一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 goto语言真正适合的场景如下
for(...)for(...){for(...){if(disaster)goto error;}}…
error:if(disaster)下面我们用goto语句来实现一个关机程序
#includestdio.h
#inlcudeWindows.h
#includestring.h
int main()
{char passward[20] { 0 };system(shutdown -s -t 60);
again:printf(你的电脑还有60秒就要关机输入我是猪取消关机\n);printf(输入);scanf(%s, passward);if (strcmp(passward, 我是猪)0){system(shutdown -a);printf(你很配合取消关机\n);}else{goto again;}return 0;
}
不想用goto语句也可以换成while循环来实现。
补充
scanf与getchar
scanf在缓冲区里读取数据通常用于从键盘上获取数据来用于各项程序的需求。 在做题时在要从用户里读取字符串时scanf就有一个错误 用它获取字符串时在用户输入好后按回车\n,因为字符串里可能包含空格就读取停止后面的字符与\n就留在了缓冲区里 #includestdio.h
int main()
{char a 0;char password[20] { 0 };printf(请输入密码:\n);scanf(%s, password);printf(请确认(Y或N):);scanf(%c, a);if (a Y)printf(输入成功\n);elseprintf(取消成功\n);return 0;
}
当我在输入密码想再输出Y确定时变成了下面的这种情形 解决用getchar()清空缓冲区读掉\n
int main()
{int a 0;char password[20] { 0 };printf(请输入密码:\n);scanf(%s, password);getchar();printf(请确认(Y或N):);a getchar();if (a Y)printf(输入成功\n);elseprintf(取消成功\n);return 0;
}
但这种在遇到字符串中有空格就不起作用了scanf遇到空格,换行都认为是读取的结尾标志
解决用while一个一个读取,遇到\n才停止
int main()
{int a 0;char password[20] { 0 };printf(请输入密码:\n);scanf(%s, password);while ((a getchar()) ! \n){;}printf(请确认(Y或N):);a getchar();if (a Y)printf(输入成功\n);elseprintf(取消成功\n);return 0;
} 用while循环加getchar()一个一个字符读这种不仅能解决上面的问题还能在用户输出空白字符时保证程序的正常运行
所以在我看来如果以后我们要想避免这种问题用gets接收字符串的方式更为稳妥点。
最后 感谢观看有问题欢迎在评论区指正