一、算法的概念
(二)算法的表示
1、自然语言
2、流程图
3、伪代码
4、用计算机语言表示算法
二、C++的程序结构和C++语句
1、每一个程序单位由以下3个部分组成:
(1)预处理指令
如#include指令和#define指令
(2)全局声明
在函数外对数据类型、函数以及变量的声明和定义
(3)函数
包括函数首部和函数体,在函数体中可以包含声明语句和执行语句
2、C++语句可以分为以下4种:
(1)声明语句
在C++中,对变量(以及其他对象)的定义被认为是一条语句,并且可以出现在函数中的任何行,既可以放在其他程序语句可以出现的地方,也可放在函数之外。
(2)执行语句
1)控制语句
- if()~else~
- for()~
- while()~
- do~while()
- continue
- break
- switch
- goto
- return
括号()表示其中包括一个判断条件,~表示内嵌的语句。
2)函数和流对象调用语句
sort(x,y,z);
cout<<x<<endl;
3)表达式语句
由一个表达式加一个分号构成一个语句。最典型的是由赋值表达式构成一个赋值语句。
i=i+1 //是一个赋值表达式,末尾没有分号
i=i+1; //是一个赋值语句,末尾有分号
任何表达式的最后加一个分号都可以成为一个语句,一个语句必须在最后出现分号,分号是语句中不可缺少的一部分。
(3)空语句
下面是一个空语句:
;
有时用来做转向点,或循环语句中的循环体。
(4)复合语句
可以用{ }把一些语句括起来成为复合语句。如下面是一个复合语句
{ z=x+y;
if(z>100) z=z-100;
cout<<z;}
三、C++的输入与输出
(一)在标准输入流与输出流中使用控制符
如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。
(二)用getchar和putchar函数进行字符的输入和输出
1、putchar函数
作用是向终端输出一个字符。例如 putchar(c);
putchar(10)中的10是换行符的ASCII码,putchar(10)输出一个换行符,作用与putchar('\n')相同。
2、getchar函数
1)作用是从终端输入一个字符。
2)getchar函数没有参数,其一般形式为 getchar(), 函数的值就是从输入设备得到的字符。
3)注意,getchar()只能接收一个字符,getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。
int main()
{
char c;
c = getchar();
putchar(c+ 32);putchar('\n');
return 0;
}
等价于:
int main()
{
char c;
cout << (c = getchar() + 32);
return 0;
}
等价于:
int main()
{
char c;
putchar(getchar() + 32);putchar('\n');
return 0;
}
四、编写顺序结构的程序
以上关系可以表示如下:
用关系运算符将两个表达式连接起来的式子,称关系表达式。
关系表达式的一般形式可以表示为: 表达式 关系运算符 表达式
其中表达式可以是 算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式。
算术表达式的值:是一个数值;
赋值表达式的值:赋予变量的值;
关系表达式的值:是一个逻辑值,即“真”或“假”。例如,关系表达式“5==3"的值为”假“,”5>=0“的值为”真“。
在C和C++中都用数值1代表“真”,用0代表“假”。如:
d=a>b----------------d为1
f=a>b>c-------------f为0(先执行“a>b"得值为1,再执行关系运算”1>c",得值0,赋给f)
五、(一)逻辑常量和逻辑变量
逻辑性数据可以与数值型数据进行算术运算,若a已定义为int型,其初值为0,逻辑型变量flag的值为true,如果有以下语句:
a=a+flag+true;-----------------------------执行后a为2
如果将一个非零的整数赋给逻辑性变量,则按“真”处理。
如: flag=123;
cout<<flag--------------------------输出数值为1
(二)逻辑运算和逻辑表达式
C++提供3种逻辑运算符:
- && 逻辑与
- ||逻辑或
- !逻辑非
&&和||是双目运算符,它要求两侧各有一个运算量;
!是一目运算符,只要求在一侧有一个运算量;
一个逻辑量,其值是0就认为是“假”,如果其值是非0就认为是“真”。
如:a=4,b=5,!a||b的值为1.
六、选择结构和if语句
(一)if语句的形式
1、if语句的一般形式为:
if(表达式)语句1
[else语句2]
(1)if(表达式)语句
例如: if(x>y)cout<<x<<endl;
(2)if(表达式)语句1 else语句2
例如: if(x>y)cout<<x;
else cout<<y;
(3)if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
else 语句n
(二)if语句的嵌套
(三)、条件运算符和条件表达式
条件运算符要求有3个操作对象,称为三目运算符,是C++中唯一的一个三目运算符。
条件表达式的一般形式为:
表达式1?表达式2:表达式3
条件运算符的执行顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为0,则求解表达式3,表达式3的值就是整个条件表达式的值。
(四)多分支选择结构与switch语句
switch语句是分支选择语句,用来实现多分支选择结构。
它的一般形式如下:
switch(表达式)
{case常量表达式1:语句1
case常量表达式2:语句2
...
case常量表达式n:语句n
default : 语句n+1
}
说明:
(1)switch后面括号内的“表达式”,可以是数值类型(包括字符类型)数据
(2)当switch表达式的值与某一case子句的常量表达式值相匹配时,就执行case子句中的内嵌语句。若所有都不匹配,就执行default子句的内嵌语句。
(3)每一case表达式的值必须互不相同,否则会发生互相矛盾现象
(4)各个case和default的出现次序不影响执行结果。例如,可以先出现“default:..."再出现”case'D':...",然后是“case'A':..."。
(5)执行完一个case子句后,使流程跳出switch结构,即终止switch语句的执行,可以用break语句来达到此目的。
(6)多个case可以共用一组执行语句。例如:
...
case'A':
case'B':
case'C':cout<<">60\n";break;
...
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
float score;
char grade;
cout << "enter your score:";
cin >> score;
while (score > 100 || score < 0) {
cout << "error!";
}
switch (int(score/10)){
case 10:
case 9:grade = 'A';break;
case 8:grade = 'B';break;
case 7:grade = 'C';break;
case 6:grade = 'D';break;
default:grade = 'E';
}
cout << "grade is" << grade<<endl;
}
(五)编写选择结构的程序
编写一个程序判断是否是闰年(闰年的条件是符合下面二者之一:1、能被4整除,但不能被100整除2、能被100整除,又能被400整除)
#include"pch.h"
#include <iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int year;
bool leap;
cin >> year;
if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))leap = true;
else leap = false;
if (leap)
cout << year << "is";
else
cout << year << "is not";
cout << " a leap year";
return 0;
}
七、循环结构和循环语句
(一)用while语句构成循环
while语句的一般形式:
while(表达式)语句
作用:当指定条件为真(表达式为非0)时,执行while语句中的内嵌语句(即循环体)。
特点:先判断表达式,后执行语句。
注意:(1)循环体如果包含一个以上语句,应该用花括号括起来以复合语句形式出现
(2)在循环体中应有使循环趋向于结束的语句。
(二)用do-while语句构成循环
do-while的一般形式:
do
语句
while(表达式);
执行过程:先执行一次指定的语句(即循环体),然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复直到表达式的值等于0为止,此时循环结束。
(三)用for语句构成循环
一般格式:
for(循环变量赋初值;循环条件;循环变量增量)语句
其中"语句"就是循环体,可以是一个简单的语句,也可以是一个用{}包起来的复合语句。
说明:
(1)for语句的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值,注意其后的分号不能省略。
(2)如果表达式2省略,即不判断循环条件,循环将无终止地进行下去,也就是认为表达式2始终为真。
(3)表达式3也可以省略,但此时程序设计者应另外保证循环能正常结束。
例如:for(i=1;i<=100;)
{sum=sum+i;
i++;}
(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。
例如:
for(;i<=100;)
{sum=sum+i;
i++;}
相当于
while(i<=100)
{sum=sum+i;
i++;}
(四)循环的嵌套
下面六种为合法形式:
(五)提前结束循环(break语句和continue语句)
1、break
在switch结构中,break语句可以跳出并继续执行switch语句下面的一个语句。
在循环体中,其作用为使流程从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
2、continue
作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
3、continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
(六)编写循环结构的程序
课后题:系统如何判断一个量的“真”和“假”?
逻辑表达式:数值1代表“真”,数值0代表“假”;
逻辑量:数值0代表“假”,非0代表"真"