1.什么是数据类型
基本类型数据
整数
整型 int 4
短整型 short int 2
长整型 long int 8
浮点数
单精度浮点数 float 4
双精度浮点数 doblue 8
字符
char 1
复合型类型数据
结构体
枚举
共用体
2.什么是变量
变量的本质就是内存中的一段存储空间
3.变量为什么必须初始化
所谓初始化就是赋值的意思
4.如何定义变量
数据类型 变量名=要附的值
5.进制
十进制就是逢十进一
二进制就是逢二进一
6. 常量在c语言中如何表示的
整数:
十进制:传统的写法
十六进制:前面加OX或Ox
八进制:前面加0(注意是数字零而不是字母o)
浮点型:
传统的写法
float x=3.2;
科学计数法
float x=3.2e3; //x的值为3200
float x=123.45e–2;//x的值为1.2345
字符
单个字符用单引号括起来
字符串用双引号括起来
"A" 正确,因为"A"代表了‘A' '\0'组合
7.常量以什么样的二进制代码存储在计算器中
整数是以补码的形式转化为二进制代码存储在计算器中
实数是以IEEE754标准转化为二进制代码存储在计算器中
字符与整数的存储方式相同
8.代码规范化
9.什么是字节
字节就是存储数据的单位,并且是硬件上所能访问的最小单位
一个字节=8位
1K=1024字节
1M=1024K
1G=1024M
10.不同类型数据之间的相互赋值的问题
暂不考虑
11.什么是ASCII
ASCII不是一个值 ,而是一个规定,
ASCII规定了不同的字符是使用哪个整数值去表示
12.字符的存储(字符本质存储是与整数存储方式相同)
浮点数不能准确存储
例子:
float i=99.9;
printf("'%f\n',i); //最终输出值为99.900002
基本的输入和输出函数用法
printf()四种用法:
1.printf(“字符串”);
2.printf(“输出控制符”,输出参数);
3. printf(“输出控制符1 输出控制符2,,,,”,输出参数1,输出参数2,,,,)
输出控制符必须和输出参数一一对应
4.printf(“输出控制符1 非输出控制符”,输出参数)
输出控制符有: %d int
%id long int
%c char
%f float
%if dobule
(%x = %#x =%X) int , long int , short int
%o int ,long int ,short int
%s 字符串
scanf()两种用法:
用法 1. scanf(“输入控制符”,输入参数);
功能:将键盘输入的字符转化为输入控制符所规定格式的数据,然后以存入以输入参数的值为地址的变量中
用法 2.scanf(“非输入控制符 输入控制符”,输入参数)
功能:将键盘输入的字符转化为输入控制符所规定格式的数据,然后以存入以输入参数的值为地址的变量。 将非输入控制符必须原样输入
如何使用scanf编写出高质量代码
(1).使用scanf之前最好加个printf来提示用户以什么样的方式输入
(2).scanf中尽量不要使用非输入控制符,尤其不要使用\n
运算符
(1) 算术运算符:
*(乘) /(除) +(加) -(减) %(取余数)
(2) 关系运算符 :
< > <= >= !=(不等于) ==(等于)
(3) 逻辑运算符:
&&(并且) II(或) !(非)
: !真 是假
!假 是真
&& ( 有假则假 )
真&&真 真
真&&假 假
假&&真 假
假&&假 假
II(有真则真)
真II真 真
真II假 真
假II真 真
假II假 假
c语言对真假的处理
非零为真 零为假
真用1表示 假用0表示
&&左边表达式为假 ,右边表达式肯定不执行
II左边表达式为真时 ,右边表达式肯定不执行
(4) 赋值运算符:
= += *= /= -=
例如:a+=3相当于a=a+3
a*=3相当于a=a*3
(5)条件运算符
格式:表达式1?表达式2:表达式3
执行过程中先求解表达式1的值,当值为真时,表达式2的值就是整个条件表达式的值;否则表达式3的值就是整个条件表达式的值。
优先关系: 算数 > 关系 > 逻辑 > 赋值
自增,自减,三目运算符,逗号运算符
1. 自增【或者自减】
分类:
前自增 ++i
后自增 i++
前自增和后自增的异同
相同:最终都使i的值加一
不同:
前自增整体表达式的值是i加一后的值
后自增整体表达式的值是i加一前的值
2.三目运算符
A?B:C
等价于 if(A)
B;
else
C;
3.逗号表达式
格式(A,B,C,D)
功能:从左向右执行
最终表达式的值是最后一项的值
流程控制
1.什么是流程控制
程序代码实行的顺序
2.流程控制的分类
顺序
选择
定义 :某些代码有可能执行 ,有可能不执行,有选择的执行某些代码。
分类:
if:
1. if最简单的用法:
格式: if(表达式)
语句
功能:
如果表达式为真,执行语句;如果表达式为假,不执行语句
2. if的范围问题
1. if(表达式)
语句A
语句B
解释:if默认只控制语句A的执行或不执行,
if无法控制语句B的执行或不执行。 或者说:语句B 一定会执行
2.if(表达式)
{
语句A
语句B
}
此时if可以控制语句A和语句B
由此可见:if只能控制一个语句的执行或不执行,如果想控制多个的 执行和不执行就用{ }括起来
3.if..... else......的用法
4.if....else if.....else.....的用法 if()
A;
else if()
B;
else ()
C;
5.c语言对真假的处理 :非零是真,零就是假
真用1表示,假用0表示
6.if举例 求分数的等级
7.if的常见问题分析
switch: 格式:
switch(表达式)
{
case常量表达式1:语句1;
break;
case 常量表达式2:语句2;
break;
default:语句 n+1;
}
循环
定义:
某些代码会被重复执行
分类:
for:
1.格式:
for(1;2;3)
语句A;
2.执行的流程
单个for循环的使用
多个for循环的嵌套使用
for(1,;2;3)
for(4;5;6)
语句A;
语句B;
(1-2(成立)-4-5(成立)-A-6-5(不成立)-3-2(不成立)-B
3.取值范围
4.举例:
while
1.执行顺序
格式: while(表达式)
语句;
2.与for的比较:for和while可以相互转化
例如: for(1;2;3)
A;
等价于:
1;
while(2)
{
A;
3;
}
while和for可以相互转化,但for的逻辑性更强,更不容易出错,应多使用for
do......while
格式:
do
{
.........
}while(表达式);
do、、、while 并不等价于for也不等价于while
主要用于人机交互
break和continue
break如果用于循环是用来终止循环的
break如果用于switch就用来终止switch
break不能直接用于if,除非if用于循环内部的一个子句
在多层循环中,break只能终止离它最近的循环
在多层switch嵌套中,break只能终止离它最近的switch语句
continue
用于跳过本次循环余下的语句,转去判断是否需要执行下次循环
例子:
1.
for(1;2;3)
{ A;
B;
continue;//如果执行该语句则执行完该语句后,会执行语句3,C和D都会被跳过,C和D都不会执行
C;
D;
}
2.
while(表达式)
{ A;
B;
continue;//如果执行该语句则执行完该语句后,会执行表达式,C和D都会被跳过,C和D都不会执行
C;
D;
}
数组
1. 为什么需要数组
为了解决大量同类型的存储和使用问题
为了模拟现实世界
2. 数组的分类
一维数组
怎样定义一维数组
为n个变量连续分配存储空间
所有的变量数据类型必须相同
所有变量所占的字节大小必须相等
例子: int a[5];
有关一维数组的操作
初始化:
完全初始化
int a【5】={1,2,3,4,5};
不完全初始化,未被初始化的元素自动为零
int a【5】={1,2,3};
不初始化,所有元素是垃圾值
int a【5】;
清零
int a【5】={0};
错误写法:
int a【5】;
a【5】={1,2,3,4,5} //错误
只有在定义数组的同时才可以赋值,其他情况下整体赋值都是错误的
int a【5】={1,2,3,4,5};
int a【5】=100; //错误 因为没有a【5】这个元素,最大值为4
int a【5】={1,2,3,4,5};
int b【5】;
如果要把a数组中的数全部复制给b数组
错误写法:b=a;//错误
正确的写法:for(i=0;i<5;i++)
b【i】=a【i】;
二维数组
int a【3】【4】;
总共12个元素,可以当做三行四列看待,这12各元素的名字依次为;
a【0】【0】;a【0】【1】;a【0】【2】;a【0】【3】;
a【1】【0】;a【1】【1】;a【1】【2】;a【1】【3】;
a【2】【0】;a【2】【1】;a【2】【2】;a【2】【3】;
a【i】【j】;表示第i+1行第j+1列的元素
int a【m】【n】;该二维数组右下角位置的元素只能是a【m-1】【n-1】
初始化
int a【3】【4】={1,2,3,4,5,6,7,8,9,10,11,12};
int a【3】【4】={
{1,2,3,4}
{5,6,7,8}
{9,10,11,12}
};
操作:
输出二维数组内容:
int a【3】【4】={
{1,2,3,4}
{5,6,7,8}
{9,10,11,12}
};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(“%d”,a【i】【j】);
printf(“\n”);
}
多维数组
是否存在多维数组
不存在
因为内存是线性一维的
n维数组可以当做每个元素是n-1维数组的一维数组
比如:
int a【3】【4】;
该数组是含3个元素一维数组
只不过每个元素都可以再分成4个小元素
int a【3】【4】【5】;
该数组是含3个元素一维数组
只不过每个元素都是4行5列的二维数组
函数
》为什么需要函数
避免了重复性操作
有利于程序的模块化
》什么叫函数
逻辑上:能够完成特定功能的独立的代码块
物理上:能够接受数据(也可以不接受数据)
能够对接收的数据进行处理
能够将数据处理的结果返回(当然也可以不返回任何值)可以当做一个黑匣子
总结:函数是个工具,它是为了解决大量类似问题而设计的函数
》如何去定义函数
函数的返回值 函数的名字(函数的形参列表)
{
函数的执行体
}
1. 函数的定义本质是详细描述函数之所以能实现某个特定功能的具体方法
2.return表达式;的含义
1> 终止被调函数,向主调函数返回表达式的值
2> 如果表达式为空,则只终止函数,不向被调函数返回任何值
3> break是用来终止switch语句和循环语句的,return是用来终止函数的。
例子:
a.void f()
{
return;//return只用来终止函数,不向被调函数返回任何值
}
b. int f()
{
return 10;//第一:终止函数,第二:向主调函数返回10
}
3.函数返回的类型也称为函数的类型,因为如果 函数名前的返回值类型和函数执行体中的return表达式中:表 达式的类型不同的话,则最终函数的返回值类型,以函数名前的返回值类型为准
例子:
int f()
{
return 10.5;//因为函数的返回值类型是int,所以最终int返回的是10而不是10.5
}
》函数的分类
有参函数和无参函数
有返回值和无函数值
库函数和用户自定义函数
普通函数和自定义(main函数)
一个程序必须有且只有一个主函数
主函数可以调用普通函数 普通函数不能调用主函数
普通函数可以相互调用
主函数是程序的入口,也是程序的出口
注意的问题
函数调用和函数定义的顺序
如果函数调用写在了函数定义的前面,则必须加函数前置声明
》 函数前置声明:
1. 告诉编译器即将出现的若干个字母代表的是一个函数
2.告诉编译器即将出现的若干个字母所代表的函数的形参和返回值的具体情况
3.函数声明是一个语句,末尾必须加分号
4.对库函数的声明是通过 #include<库函数所在的文件的名字.h> 来实现
形参和实参
个数相同 位置一一对应 数据类型必须相互兼容
如何在软件开发中合理的设计来解决实际问题
》常用的系统函数