谭浩强第三版第3章

本文详细介绍了C++程序设计中的算法概念、流程表示、赋值操作、输入输出、顺序结构、关系逻辑、选择结构、循环语句,以及关键的控制结构如if-else、switch和循环。涵盖了数据结构、基本操作和控制流程的深入解析。
摘要由CSDN通过智能技术生成

1、基于过程的程序设计和算法

具体设计出计算机执行的每一个具体步骤,安排好执行顺序。

1.1 算法的概念

一个基于过程的程序包括:

  • 对数据的描述(数据结构)
  • 对操作的描述(算法)

即:程序=算法+数据结构
算法:处理问题的一系列的步骤。
计算机算法:数值算法、非数值算法。

1.2 算法的表示

常用的4种:

  • 自然语言(中文或英文来描述,容易产生歧义,一般不用)
  • 流程图(用图的形式,直观形象,但不方便修改,适合比较简单的程序)
  • 伪代码(介于自然语言和计算机语言,无固定规则,清晰易读,容易修改)
  • 计算机语言(也就是计算机程序)

C++的程序结构和C++语句

#include<iostream>    //预处理命令
using namespace std;   
int a=3;              //全局变量:函数之外定义
int main()            //主函数,有且只有一个
{float b;             //局部变量:函数内定义
 b=4.5;               //执行语句:赋值语句
 cout<<a<<b;          //执行语句:输出语句
 return 0;            //执行语句:返回值
}

全局变量:函数之外声明的变量,有效范围是该行开始,到本程序单位结束。
局部变量:函数内声明,有效范围是该行开始到本函数结束。
程序包括数据声明(数据类型的声明、函数和变量的定义、变量的初始化等)和数据操作(对已提供的数据进行加工)。

1、4种C++语句
(1)声明语句
C中,变量(不作为语句)的定义必须在所有程序语句之前,所以一般在函数或块的开头定义所有变量。
C++中(作为语句)可以出现在任意行,但必须在它被使用之前。
(2)执行语句
a、控制语句(9种):

  • 条件选择语句if()…else…
  • 循环语句for()…
  • 循环语句while()…
  • 循环语句do…while()
  • 结束本次循环语句continue
  • 中止执行switch或循环语句break
  • 多分支选择语句switch
  • 转向语句goto
  • 从函数返回语句return

b、函数和流对象调用语句
sort(x,y,z);
cout<<x<<endl;
c、表达式语句(最后必须加分号)
x+y;也是一个语句,但无实际意义
(3)空语句(用来做被转向点,或循环语句中的循环体)
(4)复合语句)({ }括起来的部分语句)

3、赋值操作

C++的赋值“=”可以写成a=b=c=d,表示先将d的值赋给c,再把c赋给b,最后把b赋给a.
相当于a=(b=(c=d))
赋值表达式:a=b
赋值语句:a=b;
赋值表达式可以包括在其他表达中,如:

if((a=b)>0)cout<<"a>0"<<endl;

但赋值语句不可以。

4、C++的输入与输出

头文件:#include
C语言的输入:scanf函数,输出:printf函数
C++的输入:cin>>,输出:cout<<;(通过调用数据流)
数据流是由一系列字节组成的,这些字节按进入“流”的顺序排列的。
cin:输入流对象 <<:流插入运算符(显示出来)
cout:输出流对象 >>:流提取运算符(键盘输入)

4.1 输入流与输出流的基本操作

一般格式:
cout<<表达式1<<表达式2<<…<<表达式n;
cin>>变量1>>变量2>>…>>变量n;

定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,并不是插入一个数据就马上输出,而是先把插入 的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到endl(或\n ends、flush)为止,再将所有数据一起输出,并清空缓冲区。

cout语句可以分写成若干行,只需要在结束的那行末尾加分号。

cout<<"This is "
 <<"a C++ "
 <<"program."
 <<endl;//有分号

不能一个<<输出多个输出项,下面是错误示例cout<<a,b,c;

cin输入时会自动根据变量类型从输入流中提取相应长度的字节。

char c1,c2;
int a;
float b;
cin>>c1>>c2>>a>>b;

这时候若输入1234 56.78,对应取值为1 2 34 56.78
因为c1和c2是字符,所以从输入流各取一个字节的字符,分别为1和2;然后a作为int型,读取到非数字,所以是34,后面56.78就是b了。
也可以这样子输入:1 2 34 56.78系统会把空格作为数据的分隔符,不做提取。
所以,不能用cin把空格字符或回车行符作为字符输入给字符变量。

4.2 在标准输入流与输出流中使用控制符

头文件:#inclue
(更多内容参考:https://blog.csdn.net/qq_28234213/article/details/72802661)

dec  设置整数的基数为10 
hex  设置整数的基数为16 
oct  设置整数的基数为8 
setbase(n)  设置整数的基数为n(n只能是16108之一) 
setfill(c)  设置填充字符c,c可以是字符常量或字符变量 
setprecision(n)  设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。 
setw(n)  设置字段宽度为n位。 
setiosflags(ios::fixed)  设置浮点数以固定的小数位数显示。 
setiosflags(ios::scientific)  设置浮点数以科学计数法(即指数形式)显示。 
setiosflags(ios::left)  输出数据左对齐。 
setiosflags(ios::right)  输出数据右对齐。 
setiosflags(ios::shipws)  忽略前导的空格。 
setiosflags(ios::uppercase)  在以科学计数法输出E和十六进制输出字母X时,以大写表示。 
setiosflags(ios::showpos)  输出正数时,给出“+”号。 
resetiosflags  终止已设置的输出格式状态,在括号中应指定内容。 

2.用流对象的成员控制输出格式

流成员函数  与之作用相同的控制符  作用 
precision(n)  setprecision(n)  设置实数的精度为n位。 
width(n)  setw(n)  设置字段宽度为n位。 
fill(c)  setfill(c)  设置填充字符c。 
setf( )  setiosflags( )  设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。 
ubsetf( )  resetiosflags( )  终止已设置的输出格式状态。 

cout.width(10);
cout.setf(ios::hex);`在这里插入代码片`

4.3 用getchar和putchar函数进行字符的输入和输出

1、putchar函数——向终端输出一个字符
如:putchar(c);//输出变量c的值。
可以输出转义字符,如:putchar('\n');//使当前位置移到下一行开头。
也可以是一个表达式,如:putchar(c+32);//c的值为字符A,则输出a
内容为数字时,输出数字作为ascii值对应的字符,如:putchar(66);//输出B

2、getchar函数——从终端输入一个字符
没有参数,一般是getchar()
一个getchar()语句只能接受一个字符
它可以直接作为表达式的一部分如:putchar(getchar()+32);//输入A时,就直接输出a了
还可以cout<<getchar();//输出的是字符的ASCII码,输入a时,输出的是整数97
cout<<(c=getchar());//就输出字符了。

4.4 用scanf和printf函数进行输入和输出

一般格式:
scanf(控制格式,输出表列)//输出表列的变量类型和格式都要严格要求
printf(格式控制,输出表列)

#include<iostream>
using namespace std;
int add(int x,int y); 
int main(){
	int a,b,c; 
	char m,n;
	//类型格式:int:%d   八进制:%o  十六进制:%x  字符型:%c  字符串:%s float:%f  长整型:l 
	//"*"符用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
	scanf("%d %*d %d",&a,&b);//当输入为:1   2   3时,把1赋予a,2被跳过,3赋予b。
	printf("%d %d\n",a,b);
	//用十进制整数指定输入的宽度(即字符数).	
	scanf("%4d%4d",&a,&b);//输入12345678将把1234赋予a,而把5678赋予b。
	printf("%d %d\n",a,b);
	scanf("%5d",&a);//输入12345678只把12345赋予变量a,其余部分被截去。
	printf("%d\n",a);
	//因为上面输入12345678,只截取前五位作为输入内容,那么剩下的将作为下一次输入的内容赋给变量
	scanf("%d",&a);//这里直接将上面输入多余的部分作为输入,用户没有输入操作,就已经完成该语句了 
	printf("%d\n",a);        
	return 0; 
} 

在这里插入图片描述

#include<iostream>
using namespace std;
int add(int x,int y); 
int main(){	
	int a,b,c; 
	char m,n;
	//如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
    scanf("a=%d,b=%d,c=%d",&a,&b,&c);//输入应为:a=5,b=6,c=7。
    printf("%d %d %d\n",a,b,c);	
	scanf("%c %c",&m,&n);//"%c %c"之间有空格时,输入的数据之间可以有空格间隔。
    printf("%c%c\n",m,n);
    scanf("%c%c",&m,&n);//"%c%c"中没有空格,输入M  N,结果输出只有M。而输入改为MN时则可输出MN两字符。
	printf("%c%c\n",m,n);
	return 0; 
} 

5、顺序结构(从上到下执行语句)

6、关系运算和逻辑运算

if语句,根据某个条件是否满足来执行相应的内容。

6.1关系运算和关系表达式

1、C++的关系运算符:<、>、<=、>=、==、!=
前四个优先级相等,且高于后两个。
关系运算符优先级低于算术运算符,而高于赋值运算符。
2、关系表达式:表达式 关系运算符 表达式
表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式。但表达式都应该有一个确切的值。
1为真,0为假。

6.2逻辑常量和逻辑变量

逻辑常量(布尔常量):false(0)和true(1)
逻辑变量(布尔变量)类型:bool,占一个字节
可以和数值数据进行算术运算。
当布尔变量为非0数时,输出值即为true

6.3逻辑运算和逻辑表达式

1、C++的三种逻辑运算符:

  • &&(逻辑与):一假即假
  • ||(逻辑或):一真即真
  • !(逻辑非):和原来的值相反

前两个为双目运算符(有两个运算量进行运算),逻辑非是单目运算符。
优先顺序:非>算术运算符>关系运算符>与>或>赋值运算符
(a>b)&&(x>y)相当于a>b&&x>y

逻辑运算符两侧的表达式不但可以是关系表达式或整数,也可以是任何数值类型的数据(字符、浮点型、指针型)。如:'c'&&'d'的值为1.

7选择结构和if语句

7.1if语句的形式

if(表达式)语句1
[else语句2]

主要有三种应用:
1、单分支:if(表达式)语句
2、双分支:if(表达式)语句1 else语句2
3、多分支:
if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3) 语句3

else if(表达式m)语句m
else 语句n

每个if后面都有一个括号括起来的表达式,一般是逻辑表达式或关系表达式,非真即假。
else要与离他最近的还有配对的if进行配对,不能单独使用。
执行语句有多条,要用花括号括起来,构成复合语句。
复合语句中可以定义变量,变量仅在花括号内有效。

7.2if语句的嵌套

一般形式:

 if(   )
       if(   )语句1
       else 语句2
 else
       if(     )语句3
       else语句4

为避免出错,建议使用花括号

7.3 条件运算符和条件表达式

一般形式:表达式1?表达式2:表达式3
判断表达式1的布尔值,若为真,执行表达式2,否则,执行表达式3.

if(a>b)max=a;
else max=b;
相当于
max=(a>b)?a:b;

7.4 多分支选择结构与switch语句

一般形式:
switch(表达式)
{ case 常量表达式1:语句1
case 常量表达式2:语句2

case 常量表达式n:语句n
default :语句n+1
可以进行多分支选择。

  • 表达式可以是数值类型或字符类型
  • switch表达式的值和case中常量表达式的值相匹配时,就会执行该case后的语句。
  • 每个case语句最后要加break;表示结束switch循环,不用再执行剩下 case了。
  • 如果case的常量表达式值都不能和switch的值匹配,就会执行default语句。
  • 每一个case语句表达式的值必须互不相同。
  • case语句虽然包含一个或以上的执行语句,但不需要花括号。 多个case可以公用一组执行语句。
case 'A':
case 'B':
case 'C‘“//值为’A‘’B‘’C‘时,都会输出test。
		cout<<"test"<<endll;break

7.5编写选择结构 程序

首先还是要读懂题意,问题中出现那些条件判断条件,分支多于三个,考虑switch语句。每个判断条件为真为假分别对应那些执行操作。然后就可以开始了。

8、循环结构和循环语句

8.1 用while语句构成循环

一般形式:while(表达式)语句
先判断后执行
循环体有多个执行语句,应该用花括号括起来,否则只会执行第一个执行语句。
循环体中应该有使循环趋于结束的语句,否则会陷入死循环。
无限循环:while(1){}

8.2用do-while语句构成循环

一般形式:do
语句
while(表达式);
先执行后判断,不管怎样,总会先执行一次。
最后要带分号。

8.3 用for语句构成循环

一般形式:for(循环变量赋初值;循环条件;循环变量增值)语句
适合知道确切循环次数,或者循环结束条件的循环。

  • 循环遍历赋初值可以省略,但分号不能省,如:for(;i<100;i++)
  • 若省略循环条件,默认为循环条件始终为真,无限循环
  • 循环变量增值省略了,就要在执行语句中有一条改变变量的语句,如
 for(i=1;i<=100;){
 sum=sum+i;
 i++;
 }
  • 可以只给循环条件,此时等同于while语句。如:
for(;i<=100;){
sum=sum+i;
i++;}

  • 表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要值为非0,就可以执行循环体了。
  for(i=0;(c=getchar())!='\n';i+=c);//不断输入字符,将他们的ASCII码相加,直到输入一个换行符。
  for(;(c=getchar())!='\n';)cout<<c;//不断输入字符并直接输出,直到输入一个换行符。
  //注意,从终端向计算机输入时,是在按enter后才送到缓冲区的,所以上面这一语句/
  //如果是输入Computer后再enter,那么在enter之后会输出Computer,而不是CCoommppuutteerr

8.4循环的嵌套

主要是while循环、do-while循环、for循环之间的嵌套。

8.5 提前结束循环(break语句和continue语句)

break;case语句中,跳出switch结构,继续下一个语句;
循环体中,跳出循环体,提前结束。
continue:循环语句中,结束本次循环,继续下一次循环。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书目录编辑 第一:程序设计和C语言   1.1什么是计算机程序   1.2什么是计算机语言   1.3C语言的发展及其特点   1.4最简单的C语言程序   1.4.1最简单的C语言程序举例   1.4.2C语言程序的结构   1.5运行C程序的步骤与方法   1.6程序设计的任务   习题 第2算法——程序的灵魂 2.1什么是算法 2.2简单的算法举例 2.3算法的特性   2.4怎样表示一个算法   2.4.1;用自然语言表示算法 2.4.2用流程图表示算法 2.4.3三种基本结构和改进的流程图   2.4.4用N-S流程图表示算法   2.4.5用伪代码表示算法   2.4.6用计算机语言表示算法   2.5结构化程序设计方法   习题 第3:简单的C程序设计——顺序程序设计 3.1顺序程序设计举例   3.2数据的表现形式及其运算   3.2.1常量和变量   3.2.2数据类型   3.2.3整型数据   3.2.4字符型数据   3.2.5浮点型数据   3.2.6怎样确定常量的类型   3.2.7运算符和表达式   3.3C语句   3.3.1C语句的作用和分类   3.3.2最基本的语句——赋值语句   3.4数据的输入输出   3.4.1输入输出举例   3.4.2有关数据输入输出的概念   3.4.3用printf函数输出数据   3.4.4用scanf函数输入数据   3.4.5字符数据的输入输出   习题 第4:选择结构程序设计 4.1选择结构和条件判断   4.2用if语句实现选择结构   4.2.1用if语句处理选择结构举例   4.2.2if语句的一般形式   4.3关系运算符和关系表达式   4.3.1关系运算符及其优先次序   4.3.2关系表达式   4.4逻辑运算符和逻辑表达式   4.4.1逻辑运算符及其优先次序   4.4.2逻辑表达式   4.4.3逻辑型变量   4.5条件运算符和条件表达式   4.6选择结构的嵌套   4.7用switch语句实现多分支选择结构   4.8选择结构程序综合举例   习题 第5;循环结构程序设计 5.1为什么需要循环控制 5.2用while语句实现循环   5.3用do…while语句实现循环   5.4用for 语句实现循环   5.5循环的嵌套   5.6几种循环的比较   5.7改变循环执行的状态   5.7.1用break语句提前终止循环   5.7.2用continue语句提前结束本次循环   5.7.3break语句和continue语句的区别   5.8循环程序举例   习题 第6;利用数组处理批量数据 6.1.怎样定义和引用一维数组   6.1.1怎样定义一维数组   6.1.2怎样引用一维数组元素   6.1.3一维数组的初始化   6.1.4一维数组程序举例   6.2.怎样定义和引用二维数组   6.2.1怎样定义二维数组   6.2.2怎样引用二维数组的元素   6.2.3二维数组的初始化   6.2.4二维数组程序举例   6.3.字符数组 6.3.1怎样定义字符数组   6.3.2字符数组的初始化   6.3.3怎样引用字符数组中的元素   6.3.4字符串和字符串结束标志   6.3.5字符数组的输入输出   6.3.6使用字符串处理函数   6.3.7字符数组应用举例   习题 第7:用函数实现模块化程序设计 7.1为什么要用函数   7.2怎样定义函数   7.2.1为什么要定义函数   7.2.2定义函数的方法   7.3调用函数174   7.3.1函数调用的形式   7.3.2函数调用时的数据传递   7.3.3函数调用的过程   7.3.4函数的返回值   7.4对被调用函数的声明和函数原型   7.5函数的嵌套调用   7.6函数的递归调用   7.7数组作为函数参数   7.7.1数组元素作函数实参   7.7.2数组名作函数参数   7.7.3多维数组名作函数参数   7.8局部变量和全局变量   7.8.1局部变量   7.8.2全局变量   7.9变量的存储方式和生存期   7.9.1动态存储方式与静态存储方式   7.9.2局部变量的存储类别   7.9.3全局变量的存储类别   7.9.4存储类别小结   7.10关于变量的声明和定义   7.11内部函数和外部函数   7.11.1内部函数   7.11.2外部函数   习题 第8;善于利用指针 8.1指针是什么   8.2指针变量 8.2.1使用指针变量的例子   8.2.2怎样定义指针变量   8.2.3怎样引用指针变量   8.2.4指针变量作为函数参数   8.3通过指针引用数组   8.3.1数组元素的指针   8.3.2在引用数组元素时指针的运算   8.3.3通过指针引用数组元素   8.3.4用数组名作函数参数   8.3.5通过指针引用多维数组   8.4通过指针引用字符串   8.4.1字符串的引用方式   8.4.2字符指针作函数参数   8.4.3使用字符指针变量和字符数组的比较   8.5指向函数的指针   8.5.1什么是函数指针   8.5.2用函数指针变量调用函数   8.5.3怎样定义和使用指向函数的指针变量   8.5.4用指向函数的指针作函数参数   8.6返回指针值的函数   8.7指针数组和多重指针   8.7.1什么是指针数组   8.7.2指向指针数据的指针   8.7.3指针数组作main函数的形参   8.8动态内存分配与指向它的指针变量   8.8.1什么是内存的动态分配   8.8.2怎样建立内存的动态分配   8.8.3void指针类型   8.9有关指针的小结   习题 第9;用户自己建立数据类型 9.1定义和使用结构体变量   9.1.1自己建立结构体类型   9.1.2定义结构体类型变量   9.1.3结构体变量的初始化和引用   9.2使用结构体数组   9.2.1定义结构体数组   9.2.2结构体数组的应用举例   9.3结构体指针   9.3.1指向结构体变量的指针   9.3.2指向结构体数组的指针   9.3.3用结构体变量和结构体变量的指针作函数参数   9.4用指针处理链表   9.4.1什么是链表   9.4.2建立简单的静态链表   9.4.3建立动态链表   9.4.4输出链表   9.5共用体类型   9.5.1什么是共用体类型   9.5.2引用共用体变量的方式   9.5.3共用体类型数据的特点   9.6使用枚举类型   9.7用typedef声明新类型名   习题 第10;对文件的输入输出 10.1C文件的有关基本知识   10.1.1什么是文件   10.1.2文件名   10.1.3文件的分类   10.1.4文件缓冲区   10.1.5文件类型指针   10.2打开与关闭文件   10.2.1用fopen函数打开数据文件   10.2.2用fclose函数关闭数据文件   10.3顺序读写数据文件   10.3.1怎样向文件读写字符   10.3.2怎样向文件读写一个字符串   10.3.3用格式化的方式读写文件   10.3.4用二进制方式向文件读写一组数据   10.4随机读写数据文件   10.4.1文件位置标记及其定位   10.4.2随机读写   10.5文件读写的出错检测   习题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值