C/C++学习笔记(一)变量、过程化语句结构、函数
来源:互联网 发布:淘宝正品美国代购 编辑:程序博客网 时间:2024/05/22 04:35
变量
数据类型
C/C++中的基本数据类型如下图所示,其中所占用空间会随着不同的硬件平台而有所改变,但是基本也是可以说明一些问题的了。
C/C++中的基本数据类型和java中的定义有所不同,java中的基本数据类型有也有四类但只有八种,如下所示,当然不同的硬件屏台也是有可能有不同的最大最小值的:
第一种是布尔型
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
第二种是整形
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
第三种是浮点型
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
第四种是字符型
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
变量和常量
基本类型的变量定义C/C++和java是基本相同的,语法格式:变量数据类型 变量名1[,变量名2......];例如
int a;int b,c;int d=0;int e=1,g=3;
另外与变量相对应的是常量,在java中常量是由final定义,而在C/c++中是由const定义,常量一旦定义赋值就不能改变,语法格式:const 常量数据类型 常量名=数值常量;
const double PI=3.1415926;
其中数值常量也是常量,例如int a=2;表达式中2就是数值常量。
至于变量和常量的数学运算(加+,减-,乘*,除/,取余%)、关系运算、逻辑运算、赋值运算、++、--等等一些个运算就不必多说了,基础的基础。
过程化语句结构
结构化语句的语法C/C++和java基本一致,会其一就会其二。
1、条件语句
if(){
}
if(){
}else{
}
if(){
}else if(){
}else{
}
有一个三目运算符不得不说‘?’,称为条件操作符,语法格式:
(条件表达式)?(条件为真时的表达式):(条件为假时的表达式);
例如a>=b?a:b;意思是如果a>=b成立则返回a,否则返回b
2、switch
语法格式:
switch(表达式){
case 常量表达式:{
语句块
break;
}
default{
break;
}
}
注意:1、任一两个case后的常量不能相等
2、如果case中没有break;则运行完当前case,就会继续运行下一case,指导遇到break;或者整个switch全部结束
3、default写在中间跟写在最后的效果一致
switch的数据类型
Java
1. byte、char、short、int四种基本类型以及它们的包装类(需要Java5.0/1.5以上版本支持)都可以用于switch语句。
2. long、float、double、boolean四种基本类型以及它们的包装类(在Java所有版本中)都不能用于switch语句。
3. enum类型,即枚举类型可以用于switch语句,但是要在Java5.0(1.5)版本以上才支持。
4. 所有类型的对象(包括String类,但在Java5.0/1.5以上版本中,该项要排除byte、char、short、int四种基本类型对应的包装类)都不能用于switch语句。
C++
1. char、short、int、long、bool五种基本类型都可以用于switch语句。
2. float、double都不能用于switch语句。
3. enum类型,即枚举类型可以用于switch语句。
4. 所有类型的对象都不能用于switch语句。
3、当循环while
while(条件){
语句块;
}
只要条件语句返回的是真值,则while循环就会开始新的一轮的语句块的执行,一直到条件语句返回假,或者遇到break语句。
do
语句块;
while(条件);
与上一种循环形式步同,do....while循环首先执行语句块,然后再判断,所以此形式的最大特点是至少会执行一次语句块。
4、for循环
for(int i=0;i<10;i++){
cout<<i<<endl;
}
for循环的特点是能够比较明确的知道循环几次。
for循环的执行过程:
int i=0;
判断i<10;的真假
如果为真则cout<<i<<endl;
执行i++;
以此循环
以上是所有编程语言都应该具备的过程化语句,因为过程化语句是程序的骨骼,有了它们基本上可以解决世界上所有的逻辑问题。
函数
习惯上java中把函数称为方法,函数其实就是实现某项功能的方法,其目的就是要解决某个指定的问题。
我们在#include摸个头文件的时候其实已经把头文件里的函数包含进来了。比如math.h文件就包含了
void sin(double a);计算正弦值
void cos(double a);计算余弦值
void tan(double a);计算正切值
void sqrt(double a);计算平方根值
void abs(double a);计算绝对值
创建自己的函数
首先必须告诉计算器自己编写了一个函数,其实就是函数的声明(declaration)
其次需要告诉计算器这几个函数式干什么的以及时怎么工作的,也就是函数的定义(definition)
函数的声明、定义、调用、return、重载等都在下面的代买中做了说明:
#include "stdafx.h"#include <iostream>using namespace std;//函数声明void test(void);//无参数 无返回值int mabs(int a);//函数名相同,但参数的数量,类型,排序不尽相同的现象叫做函数的重载float mabs(float a);//a被称为形参double mabs(double a);void preValue(int n=100);//函数声明中定义默认的形参int _tmain(int argc, _TCHAR* argv[]){//不管main函数在哪里定义,程序都从它开始,而且他有且只有一个,所以没有必要声明原型了//ANSIC标准推荐main函数返回int型,以此来告知系统程序运行的结果,返回0表示正常结束,否则一场结束 test(); int n=5; preValue();//默认传给形参的实参为100 preValue(n);//非默认时传递的实参为n的值5 getchar(); return 0;}//函数定义(实现)void test(void){ int a1=5,a2=-5;//同一函数内部的变量名不同 float b1=2.5f,b2=-2.5; double c1=3e-3,c2=-0.3e2; cout<<"a1="<<mabs(a1)<<"---"<<"a2="<<mabs(a2)<<endl;//mabs(a)的返回值被用来输出到控制台,其实这就是嵌套调用 cout<<"b1="<<mabs(b1)<<"---"<<"b2="<<mabs(b2)<<endl; cout<<"c1="<<mabs(c1)<<"---"<<"c2="<<mabs(c2)<<endl; return;//不带参数的return表示结束函数}int mabs(int a){//不同的函数可以有同名的变量名 cout<<"in="<<a<<"---"<<endl; return (a>=0?a:-a);//return表示结束函数,同时将后面表达式的值作为函数的返回值返回}float mabs(float a){ cout<<"in="<<a<<"---"<<endl; return (a>=0?a:-a);}double mabs(double a){ cout<<"in="<<a<<"---"<<endl; return (a>=0?a:-a);}void preValue(int n){ cout<<n<<endl;}
上面代码中提到了函数的重载和预置默认参数,对于预置默认参数有以下规则:
另外,重载和预置默认参数容易产生混淆:
int fct(int a);int fct(int a,int b=2);int fct(int a,int b=3,int c=5);
上面三个函数式合法的,却是不合理的,主要是在调用的时候fct(1);可以同时匹配三个函数,由于电脑无法确定到底执行那一个函数,所以会导致错误。
所以同时使用重载和预置默认参数容易产生混淆,一定注意。
引用
函数是将实参的值赋给了形参,在函数中改变的是形参的值,而原来的实参是不变的。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;void change(int a);void change(int a){a++;}int _tmain(int argc, _TCHAR* argv[]){int a=5;cout<<a<<endl;change(a);cout<<a<<endl;getchar();return 0;}
上面代码的两次输出都是5,所以没有改变原来的实参的值。但是如果修改代买,在参数列表里用&符号引用实参后,再运行,输出的第一次是5,第二次为6
void change(int &a);void change(int &a){a++;}
这就是传说中的引用,语法格式:变量数据类型 &引用名=已声明的变量名(被引用者);
对引用的操作如同对被引用变量的操作。
int c=6;int &d=c;
上面的代码引用时d,被引用是c,这时c++;和b++;的效果一样,运算后所指向的数值也一样。
至于函数的实参和形参之间的关系,非常复杂,还牵扯到指针,以后会给出分析的。
java和C++在实参和形参之间的关系上也有不同之处,以后也会一并给出分析,到那时候你会明白为什么C++要比java难学了。
递归
函数可以嵌套调用,也可以递归调用,嵌套是调用其它的函数,递归是自己调用自己。嵌套调用前面的实例中已有说明,现在主要探讨一下递归:
int ftn(int n);int ftn(int n){if(n==1){return 1;}else{return 2*ftn(n-1)+3;}}
上面函数其实就是实现了数列的递推公式:f(n)=2*f(n-1)+3;
- C/C++学习笔记(一)变量、过程化语句结构、函数
- C语言学习笔记(一)变量声明的规则
- 【笔记-C语言】 语句结构
- C/C学习笔记/结构
- C语言学习笔记 之 结构体指针变量
- c#,php,java,pascal(delphi)学习过程比较:一,变量
- C程序设计语言(K&R)学习笔记--3.函数、作用域、内部变量与外部变量
- C++&C学习笔记(一)(基础)
- c 学习笔记 (一)
- C学习笔记(一)
- C ++ 学习笔记(一)
- C学习笔记(一)
- c++primer学习笔记(6.0)语句
- C++Primer学习笔记(6)语句
- Objective-C学习笔记五:选择结构一
- c学习笔记(一)
- 【C++】学习笔记一
- 【C++】学习笔记三十四——函数和结构
- 与客户沟通注意的问题
- 静态代码块和ArrayList的威力
- struts下载
- iframe submit小技巧
- No module named ssl
- C/C++学习笔记(一)变量、过程化语句结构、函数
- 为什么 会出现 输入字母 无限循环的情况呢?
- thrift 轻松实现多语言跨服务器通信
- firefox使用之UC脚本
- Android 2.1 源码结构分析
- Android Service学习之AIDL, Parcelable和远程服务
- cocos2d-x 卡牌翻牌效果的实现
- ffmpeg裁剪合并视频
- myeclipse6.0注册码