200704
c语言基于过程,做什么怎么做具体设计出计算机执行的每一个步骤安排执行顺序
一个基于过程的程序应包括: 1)对数据的描述(数据结构) 2)对操作的描述(算法) 程序=数据结构+算法 数据结构:在程序中要指定数据的类型和数据的组织形式。 算法:处理问题的一系列步骤。算法必须具体地指出在执行时每一步应当怎样做。
1.自然语言 2.流程图 3.伪代码 4.计算机语言表示算法即计算机程序
每一个程序单位由以下3个部分组成: 1)预处理指令。如#include 2)全局变量。 3)函数。 c++程序中最小的单位是语句,分为以下4种: 1)声明语句 2)执行语句 1.控制语句:如if else 2.函数和流对象调用语句 3.表达式语句:如 i=i+1; 3)空语句 4)复合语句:可以用{ }把一些语句括起来成为复合语句
1)c++中的赋值号“=”是一个运算符。如:a=b=c=d合法 2)赋值表达式可以包括在其他表达式中。如:if((a=b)>0)合法
cin>>变量1>>变量2; cout<<表达式1<<表达式2; 输入输出流控制符
dec–设置数值的基数为10
hex–设置数值的基数为16
oct–设置数值的基数为8
setfill©–设置填充字符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:skipws)–忽略前导空格
setiosflags(ios:uppercase)–数据以十六进制输出时字母大写
setiosflags(ios:lowercase)–数据以十六进制输出时字母小写
setiosflags(ios:showpos)–输出正数时加“+”
getchar函数和putchar函数 c语言的scanf(格式控制,输出表列)和printf(格式控制,输出表列)
运算优先级问题 1)>,>=,<,<=优先级大于==,!= 2)算数运算符>关系运算符>赋值运算符 3)关系表达式的值是一个逻辑值,真为1,假为0
c++增加了逻辑型数据。bool,它的值是true和false之一。 在储存布尔值时ture和false仍用1和0来储存。
逻辑运算符: 1)&& 逻辑与 2)|| 逻辑或 3)! 逻辑非 优先级 1)逻辑运算符内 !>&&>|| 2)!>算数运算符>关系运算符>&&和||>赋值运算符 例: 判断闰年:1.能被4整除,但不能被100整除 2.能被100整除,又能被400整除
(year%4 == 0 && year%100 !=0)|| year % 400 == 01)if(表达式)语句
if(x>y) cout<<x<<endl;2)if (表达式) 语句1 else 语句2
if(x>y) cout<<x; else cout<<y;if(表达式1) 语句1 else if(表达式2)语句2 else if(表达式3) 语句3
表达式1?表达式2:表达式3 例如:max=(a>b)?a:b 条件运算符的执行顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值为整个条件表达式的值
while(){} do{}while() for(){}
一个函数就是一个功能
函数不能嵌套定义
从用户使用的角度看,函数有两种: 1)系统函数,即库函数 2)用户自己定义的函数 从函数的形式看 1)无参函数:调用函数时不必给出参数。可以带回或不带回函数值,但一般以不带回函数值的居多。 2)有参函数:在调用函数时,要给出参数。同样可以带回函数值供主调函数使用,也可以不带回。
类型名 函数名([void]) {声明部分 执行语句} 例如:void printstar(void){ }
类型名 函数名(形式参数表列) {声明部分 执行语句} 例如: int max(int x,int y) {int z; z=x>y?x:y; return(z); }
形式参数:定义函数时函数名后面括号中的变量 实际参数:调用函数时函数名后面括号中的变量 1)形参不占用内存中的存储单元,只有发生函数调用时,形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。 2)实参可以是常量、变量或表达式,如max(3,a+b),但要求a和b有确定的值,以便在调用函数时将实参的值赋给形参。 3)实参和形参的类型应相同或者赋值兼容。以形参类型为主。 4)值传递只由实参传给形参而不能由形参传给实参。因此在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
1)函数的返回值是通过return语句获得的,它将被调用函数中的一个确定值待会主调函数。 2)如需要从被调函数中待会值则必须有return语句,如不需要则可以不要return语句。 3)一个函数可以有一个以上的return语句。 4)return语句后的括号可以要也可以不要 5)return语句后面的值可以是一个表达式,这样可以使函数体更加简短。例如:
int max(int x,int y){return(x>y?x:y);}6)函数返回值的类型应该与定义函数时指定的函数类型一致。如果不一致,则以函数类型为准,即函数类型决定返回值类型。对于数值型数据,可以自动进行类型转换。
函数名([实参表列]) 如果时无参函数,则实参表列可以没有,但圆括号不能省略。
1)函数语句。例如:printstar(); 2)函数表达式。例如:c=2*max(a,b); 3)函数参数。例如:m=max(a,sqrt(b));
1)被调用的函数必须时已经存在的函数。 2)如果使用库函数,还应该在本文件开头用#include指令将有关头文件“包含”到本文件中来。例如:#include 3)函数声明:如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)在同一个程序单位中,且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作函数声明。
函数声明: 在函数声明中可以不写形参名,只写形参类型
float add(float,float);也可以带形参名
float add(float a,float b);但编译系统并不会检查形参名,因此形参名是什么都无所谓。 4)对函数的外部声明:函数声明的位置可以在调用函数所在的函数中,也可以在函数之外。如果函数的声明被放在函数的外部,在所有函数定义之前,则在各个主调函数中不必对所调用的函数再做声明。
char letter(char,char); //对函数的外部声明,作用域是整个文件 int mian(){ } char letter(char c1,char c2){} //定义letter函数如果一个函数被多个函数调用,用这种方式比较好,不必在每个主调函数中声明。
c++不能嵌套定义函数,但可以嵌套调用函数。
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。 包含递归调用的函数称为递归函数 例:
#include<iostream> using namespace std; int age(int); int main() {cout<<age(5)<<endl; return 0; } int age(int n) {int c; if(n==1) c=10; else c=age(n-1)+2; return c; } #include<iostream> using namespace std; int main() {int n; long y; cout<<"please input an integer"; cin>>n; y=fac(n); cout<<"n!="<<y<<endl; return 0; } long fac(int n) {long f; if(n<0){ cout<<"n<0,data error!"<<endl; f=-1;} else if(n==0||n==1) f=1; else f=fac(n-1)*n; return f; }定义一维数组的一般形式: 类型名 数组名[常量表达式]
数组元素的表达形式为 数组名[下标] 下标可以是整形常量或整形表达式 a[0]=a[5]+a[7]-a[2*3]
(1)在定义数组时对全部数组元素赋初值
int a[10] = {0,1,2,3,4,5,6,7,8,9};(2)可以只给一部分元素赋值
int a[10]={0,1,2,3,4};表示只给前面5个元素赋值,后5个元素值默认为0 (3)在对全部数组元素赋初值时,可以不指定长度
int a[5]={1,2,3,4,5}; int a[ ]={1,2,3,4,5};在第二种写法中,花括号中有5个数,系统就会据此自动定义a数组的长度为5。但若被定义的数组长度与提供初值的个数不相同,则数组长度不能省略。
定义二维数组的一般形式为 类型名 数组名[常量表达式] [常量表达式]
float a[3][4];定义a为3*4(三行四列)的单精度数组
一般形式 数组名[下标] [下标]
(1)按行给二维数组全部元素赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11}};比较直观的赋值方法 (2)可以将所有数据写在一个花括号内,按数组排列的顺序对全部元素赋初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};数据多时不如第一种方式直观 (3)可以对部分元素赋初值
int a[3][4]={{1},{2},{3}}它的作用是对各行第一个元素赋初值,其余元素值自动置为0. 也可以对各行中的某一元素赋初值:
int a[3][4]={{1},{0,6},{0,0,11}}当然也可以只对某几行元素赋值 (4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
初始化时可以一次定义各个位置的字符
char c[10]={'I',' ','a','m',',',' ','h','a','p','p','y'};赋值时不能像定义初始化一样一次性赋值
char a[3]; c[0]='a'; c[1]='b'; c[2]='c';