省流:
(如果能回答出这些问题本文对你几乎无用)
1.程序结构分为几类?
2.if语句怎么用?单分支,双分支,多分支会不会?
3.三目运算符怎么理解?
4.switch语句怎么用?
5.while,do while ,for会不会用?
6.如何用rand函数生成随机数?
(如果你已经学过有了基础或者太懒不想思考这些问题可以只看彩色(非黑色)的部分,而黑色的都是基础知识中的,emmm,基础知识)
(另外,在我眼中,红橙黄绿青蓝紫代表重要级,红最重要)
一、简单介绍程序结构:
分为顺序结构、分支结构和循环结构;
二、分支结构之if
1.单分支:
(1)用法:若条件成立(即条件中表达式返回值为1),则执行代码1,否则不执行;
if(条件)
{
代码1
}
2.双分支:
(1)用法:在单分支的基础上加个else分支即可,若条件成立,则执行代码1,否则执行代码2;
if(条件)
{
代码1
}
else
{
代码2
}
3.多分支:
(1)用法:在双分支的基础上,在if和else中间多加几个else if分支即可,从上到下,当出现某个条件为真的时候,就执行对应的代码,剩余的不看,也即直接跳过,执行整个分支结构后的代码。
(2)辨析:其实单分支和双分支都可以视为特殊情况的多分支,分别为只有一个if(单分支)、只有if和else(双分支)的“多分支”;
if(条件1)
{代码1}
else if(条件2)
{代码2}
else if(条件3)
{代码3}
......
else
{代码n}
三、三目运算符:
1.格式:表达式1 ?表达式2 : 表达式3
表达式2和表达式3可以是变量或者数值
2.解释:可以这么理解:从左向右看,表达式1成立吗?若成立,那么整个表达式的结果为表达式2的结果,如果不成立,那么整个表达式的结果为表达式3的结果;
3.实例:int k = (3>2 ? 1 : 0); 则因为3>2成立,所以三目运算符表达式的结果是1,而这整个式子的意思是把三目运算符表达式的结果赋给k,所以k就等于1;
四、switch语句:
1.格式:
switch(整型表达式) //整型表达式即为返回值为整数的表达式
{
case 常量整型表达式1:
代码块1;
break;
case 常量整型表达式2:
代码块2;
break;
......
default:
代码块n;
}
2.说明:
(1)此处常量整型表达式为编译时即为常量的表达式,比如普通数值常量或者宏常量或者字符常量也行;
(2)执行过程:从上到下看,如果某一个常量整型表达式==switch后的整型表达式的值,那么就会从那一个对应的代码块开始往下一直执行(包括后面所有case的代码块),直到碰到break或者反花括号(});所以每一个case要一个break保证若条件成立则只执行对应的一个代码块;
(3)补充说明:default可有可无,有default的时候,若前面没有常量整型表达式和switch后的整型表达式的值相等,那么就会执行default的代码块,由于已经是最后一个代码块了,所以不用break啦;
(4)switch的优点为:结构清晰,执行效率高;缺点为只能判断整型或字符型这种可以表示为整数的东西;
(5)其实类似于多分支,是吧是吧是吧?
五、循环结构之while语句:
1.格式与解释:当代码执行过程中遇到while的时候,不断进行“判断条件,成立则执行代码1,不成立则跳过循环”的操作;
while(条件)
{
代码1
}
2.除了上述的不满足条件时跳出循环,还可以在循环体代码中写break语句(常搭配if语句使用),当执行到break的时候,就会跳出循环(break语句之后会讲一点点);
六、do while 语句:
1.格式与解释:当代码执行过程中遇到do while语句的时候,会先执行一次代码2,然后再不断进行“判断条件,成立则执行代码1,不成立则跳过循环”的过程;
do
{
代码2
}while(条件);
2.除了上述的不满足条件时跳出循环,还可以在循环体代码中写break语句(常搭配if语句使用),当执行到break的时候,就会跳出循环(break语句之后会讲一点点);
七、for循环
1.格式与解释:当遇到for循环时,会不断执行“①判断循环条件,②条件为真则执行代码3并进行循环中某些变量的变化,不为真则跳过循环”的过程;
for(计数器初始值;循环条件;循环中某些变量的变化)
{
代码3
}
2.除了上述的不满足条件时跳出循环,还可以在循环体代码中写break语句(常搭配if语句使用),当执行到break的时候,就会跳出循环(break语句之后会讲一点点);
3.循环变化一般是使得计数器+1,条件往往也与计数器有关;
八、循环补充说明:
1.就像if里可以嵌套if,循环里也可以嵌套循环;
2.循环跳转语句:
(1)break:遇到这玩意就会跳出当前循环,例如此处如果巴拉巴拉成立,则会遇到break,就会跳出内层循环进而执行代码4;
for(int i = 0; i < 5 ; i++)
{
代码1
for(int j = 0 ; j < 5 ; j++)
{
代码1
if(巴拉巴拉)
{
break;
}
代码2
}
代码4
}
(2)continue:遇到这玩意会跳过当次循环,直接到i++或j++那个变量变化阶段,进而到判断条件环节,如:此时如果巴拉巴拉为真,则会遇到continue,则会直接跳过代码2,到j++,然后继续判断条件j<5是否成立;
for(int i = 0; i < 5 ; i++)
{
代码1
for(int j = 0 ; j < 5 ; j++)
{
代码1
if(巴拉巴拉)
{
continue;
}
代码2
}
代码4
}
(3)goto:
①要用goto首先要设置一个标签,用一个名(命名规则同标识符)加冒号设置,此后遇到goto 标识符则跳转到标签行往下执行;
②由于这玩意不太常用,举个例子如下,此时当巴拉巴拉成立的时候,会执行goto语句,则又会回到标签sign处,从sign行开始执行,进而再次执行代码2,再次判断巴拉巴拉是否成立;
③标签也可以在goto语句的后面;
代码1
sign:
代码2
if(巴拉巴拉)
{
goto sign;
}
......
九、随机数的生成:
0.需要先引入头文件:#include <cstdlib> // 包含了 rand() 和 srand()
#include <ctime> // 包含了 time()
1.rand函数:
(1)基础用法:rand()%m,用于生成一个闭区间0到m-1之间的数;
(2)修改随机数范围的方法:例如想生成50到99之间的随机数,则可以这样int q = (rand()%50) + 50;原本是0到49,加了50就变成50到99啦!
(3)注意:使用rand函数要先用srand函数设置种子(关于种子,之后有一点解释),否则rand函数每次生成的随机数都可能相同;
2.srand函数:
(1)用法:srand(无符号整数);
(2)解释:这里的无符号整数称为种子,基于不同的“种子”生成的随机数才会不同,同一个种子生成的随机数是一样的,也就是说放进去的数值决定了生成的数。所以,我们应该使得每次放进去的东西都要不同,这就需要用到time函数;
3.time函数:
(1)用法:time(参数),参数是一个指向time_t类型(之后会说一点点)的指针或者是NULL(空指针,不指向任何变量);
备注:指针是一类专门存储别的变量的地址的变量
(2)说明:
①当参数为NULL的时候,该函数仅仅返回当前时间(相对于1970年的某个时刻,秒为单位),这也是随机数生成中常用的;
②当参数不是NULL的时候,该函数不仅返回当前时间,还把当前时间赋值给参数指向的那个time_t类型的变量里;
③现阶段如果不理解可以理解为,参数位置需要放一个这样的东西:&变量(time_t类型),这样就能够把当前时间赋值给这个变量哦;
4.time_t类型:
解释:这种类型的变量是专门用来存储当前时间(相对于1970年的某个时刻,秒为单位)的一种变量;
免责声明:有问题或者觉得我没讲清楚的可以讨论,或者自个儿想办法弄明白,嘻嘻,总之别骂我