数据类型:
基本类型-
整型: int short long
字符型:char
实型:double float
结构类型-
数组
结构体 struct
公用型 union
枚举类型 enum
指针类型-
空类型 -
void
自定义类型-
typedef
数据类型占用字节规定:
(64位)char 1位;short 2位;int 4位;long 8位;
float 4位;double 8位;
void *(指针变量) 8位;
举例:int表示的数的范围是-负2的31次方 到 正2的31次方减一
小数
默认小数为double类型
(C99)使用float时候,需要在末尾添加f或者F
字符常量
被单引号阔上的区域
字符串常量
被双引号阔上的区域
赋值运算符
=赋值符
/=除后赋值
*=乘后赋值
%=取模后赋值
+=加后赋值
-=减后赋值
<<=左移后赋值
>>=右移后赋值
&=按位与后赋值
^=按位异或后赋值
|=按位或后赋值
自增、自减运算符求值过程
++a相当于 a = a+1;再用a执行某些操作。 —> ++a:先加加 再用
a++相当于 想用a执行某些操作,再a = a+1。 —> a++:先用再加加
同理:
--a 相当于 x = x-1; 再用a执行某些操作。 ---> --x : 先减减 再用
a-- 相当于 先用x执行某些操作 ,再 a = a-1; ---> x-- :先用 再减减
逗号运算符
用途: 连接多个表达式组成一个表达式
一般形式: 表达式1,表达式2,表达式n
返回值: 最后一个表达式的值
例子:
int a=2,b=4,c=6,x,y;
y=(x=a+b,c=a+c,b+c);
printf("y=%d,x=%d,c=%d\n",y,x,c);
关系运算符
> < >= <= == !=
用途:比较大小 (也叫比较运算符)
一般形式: 操作数1 关系运算符 操作数2
a>b
返回值:真(1) 假(0)
逻辑运算符
&&与 ||或 !非
1) 与运算(&&)
参与运算的两个量都为真时,结果才为真,否则为假。 例如:5>0 && 4>2 由于5>0为真,4>2也为真,相与的结果也为真。
口诀:同真才真
2) 或运算(||)
参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假 。例如:5>0||5>8 由于5>0为真,相或的结果也就为真。
口诀:一真就真
3) 非运算(!)
参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如: !(5>0) 的结果为假。
三目运算符
也叫三元运算符
基本格式 : (关系表达式) ? 表达式1 : 表达式2;
执行流程 : 关系表达式为 真 返回表达式1 关系表达式为假 返回表达式2
执行流程: 演示获取两个数的最大值
程序的流程控制
1、流程控制
在一个程序的执行过程中,每条语句的执行顺序对程序的结果有直接影响。
也就是说程序的执行流程对结果有直接影响。
所以我们必须要清楚每一条语句的执行流程。
更多的时候我们要通过控制语句的执行顺序来完成我们要实现的功能。
2、流程控制语句的分类:
顺序结构;
选择结构;
循环结构;
函数
函数的基本格式:
返回值类型 函数名称(数据类型 变量名1, 数据类型 变量名2,...){
函数体;return 对应类型的结果;
}
几种常见函数的定义:
1)有参数有返回值一般形式如下:
返回值类型 函数名(形式参数表列){
语句
return 返回值类型变量或常量;
}
2)有参数无返回值 一般形式如下:
void 函数名(形参列表){
语句
}
3) 无参数 无返回值 一般形式如下:
void 函数名(){
函数体
}
4)无参数 有返回值 一般形式如下:
返回值类型 函数名(){
语句
return 返回值类型变量或常量;
}
局部变量
定义:说明在函数内部的变量,也称为内部变量。
其作用域仅限于函数内, 离开该函数后再使用这种变量表达对应的意义就是非法(不能使用)的。
全局变量
定义:在函数外部的变量,也可以被函数使用。
注意:
(1)外部变量定义必须在所有的函数之外,且只能定义一次。
(2)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起
作用。(强龙不压地头蛇)
(3) 如果外部变量定义在某函数的下面,则要使用该外部变量的时候一定 要进行说明
外部变量说明的一般形式为:extern 类型说明符 变量名,变量名,...;
(4)在整个程序内,可以出现多次外部变量的说明,但是外部变量在说 明的时候 不能再赋初始值
形参
定义函数的时候 函数名后面小括号中的参数,简称形参,用来接受实际运算 数据或者数据地址。容器。
注意:
1)如果多个形参,可以用逗号分隔
2)形参的类型可以不相同
3)形式参数是什么样类型的数据,那么实际参数也必须是什么样的类型,否则会产生错误会数 据丢失。
4)形式参数出现在函数定义中,作用域是函数体 ,离开该函数则不能使用。之前讲过。
5)函数内部不可以定义与函数形参同名的变量,因为形参与函数的代码是一个代码块
6)形参定义后 并不会立即分配存储空间,在函数调用的时候才会真正的分配存储空间(参数传递的过程)
实参
实际参与操作的数据。调用函数的时候,函数名后面小括号中的参数,简称实参
实参出现在主调函数中。
形参和实参的功能是作数据的传递。从主调函数把数据捅过来, 被调函数用对应的形参去接住。
注意:
1)实参可以是常量、变量、表达式,函数等,无论实参是何种类型的量,在进行函数调用 时,它们都必须具有确定的值,以便把这些值传送给形参。
2) 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
3)形参的值在函数内部可以被修改,但是不会影响主调函数中实参的数据,
数组
把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
数组的一般形式:
以一维数组为例:
类型说明符 数组名[常量表达式];
类型说明符: 数组元素的数据类型(int ,char ,float ,double)。
数组命:数组的标识,符合命名规范 (_$aA4) 。
常量表达式:数组元素的个数,也叫数组的长度(8)。
[]:数组的维度,一个[]就是一维数组,两个[][]就是二维数组 ....
字符串
//接收一个数组和指定的字符,函数返回数组中指定字符的第一个下标,没 有则返回-1int check(char a[], char key){
//定义变量i 述数组下标, 从0 开始int i = 0 ;//循环访问数组中的每一个元素,一直到结尾 \0 //循环过程中如发现指定的字符,结束循环,并返回数组下标
while (a[i] !='\0') {
//判断是否结束循环
if (key == a[i]) {
//满足条件,结束并返回下标
return i;
}
//下标变量+1
i++; }
//没有找到, 返回 -1
return -1; }
//测试check函数 void testCheck(){
//定义一个字符串数组w 里面存放一串字符char w[]="tuiopkljhbfsg";//通过check函数查找 字符串数组w中第一个p存放的位置 int z = check(w, 'p');
// 上面结果保存在z中, 打印显示 printf("z = %d",z);
}
结构体
struct stu{
int num;
char name[20];
char sex;
float score;
};
struct stu boy1,boy2;
boy1.num = 1010;
//误区1:给数组名赋值(数组名是一个常量,不能赋值)
//boy1.name=“songzhongji”; //这是错误的
//如果写成char *name, 则 boy1.name=“abc"可以;
strcpy(boy1.name, "bbbbb");
boy1.sex = 'f';
boy1.score = 18.0f;
//误区2:给结构体变量整体赋值(可以整体赋值,但是需要强制类型转换)
//前提是char*name
//错误写法: boy1 = {10,”abc",'m',89.5};
//正确写法 boy1 =(struct stu){10,”abc",'m',89.5};
//原因: 如果不进行强制类型转换,系统无法知道{} 是给数组赋值还是给结构体赋值
1)全部初始化
定义结构体的时候直接初始化
struct stu{
int num;
char name[20];
char sex;
float score;
} av1={1012,”xzmly”,'f',30};
//注意 "xzmly"初始化赋值给了name[20]; printf("av1.name=%s",av1.name);
初始化值的类型和顺序必须与结构体定义的时候成员的类型和顺序一致
struct stu boy1={1011,"zbz",'f',23};
2)部分初始化
struct stu boy1={
.name=“weige”
};
strcpy{boy.name,”weige”} ;
结构体数组
1、结构数组概念 :
数组的元素也可以是结构类型的。因此可以构成结构型数组。
结构数组的每一个元素都是具有 相同结构类型的结构变量。
在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。
如一个班的学生档案,一个车间职工的工资表等。
2、结构数组定义
定义格式:
struct 结构名{
成员表列
}数组名[数组长度];
或者
struct 结构名 数组名[数组长度];
3、初始化
1)定义的同时进行初始化
struct stu s[2]={
{12,”sb”},
{18,”fengjie"}
};
2)先定义,后初始化,整体赋值
s[1]=(struct stu){23,"xiaoluo"};
3)先定义,后初始化
s[1].age=12;
strcpy(stu[1].name, "xxoo");
类和对象
对象
某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。可以是直接使用的。
类
人以类聚 物以群分。
具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
具有相同属性和行为事物的统称。
类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存
在。一个类可以找到多个对象。

类的构成
类(Class) 一个类由3个部分构成
类的名称:类名
类的属性:一组包含数据的属性
类的方法:允许对属性中包含的数据进行操作的方法(行为)
人的类设计,只关心3样东西:
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
行为(功能):跑(run)、打架(fight)
类的声明和实现
1、关于类的几个名词
类
.h文件为类的声明文件, 用于声明成员变量、方法。类的声明使用关键字
@interface和@end
注意:
.h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名,方法的
返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。
.m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字
@implementation和@end
方法
方法的声明和实现,都必须以+或者-开头
+表示类方法(静态方法)
-表示对象方法(动态方法)
在.h中声明的所有方法作用域都是public类型, 不能更改。
成员变量(实例变量\属性)
成员变量的常用作用域有3种。
@public全局都可以访问
@protected只能在类内部和子类中访问
@private 只能在类内部访问
2、声明一个类
coding
1)声明类使用关键字@interface
2)声明类 我们通常放到.h的头文件中
3、实现一个类
1)实现一个类 使用关键字@implementation
2)实现一个类通常放到.m的文件中
3)实现一个类 主要是对方法的具体实现
网友评论