
第二周 第一讲Ch2 数据描述(数据存储)
重点:掌握不同场景下使用什么样的数据类型和使用方法技巧;
拓展: ①任意输入一个字母,输出它的大写或者小写?
②输入任意字符,判断它是大写字母还是小写字母,还是数字?
1. 字符数据的存储范围: char 内存分配1字节
有符号的:-27——27-1
无符号的:0——28-1
在C语言中字符型数据,都需要使用单引号将字符括起来,都需要定界符。
Char sex=‘F’;
Char sex=‘FFFF’; 只能输出一个F;
2.浮点型数据 float (double) 分配4字节 %f %m.nf %0.2f
类似整型变量,但是有小数部分,可以使用科学计数法计数。
科学计数法的规则:M.N e 整数
3.1415e10 =3.1415*1010
3.1415e-8 =3.1415*10-8
3.1415 e1.5
3.变量空间的位置
变量都有三要素: 自己的名称name 它存储个值value 以及它在内存中都自己的物理地址 address
1. 指针数据类型【指针就是物理地址 】
(1)指针的概念:一种用于存储内存中的物理地址的存储空间就是指针。
(2)指针变量:用于存储某个变量的内存地址的变量。
可以理解为指针变量也是一种变量,只是它与前面的数据类型不同,它只能存地址。
(3)指针变量的申请: 数据基类型 *指针变量名称;
Int max=99;
Int *pmax=&max;
Pmax=99;
(4)取指针运算:*指针变量,表达意思是求指针变量所指向变量空间中存储的值。
Pmax=? // max的物理地址
*pmax=?//max变量的值 99
Ex2:从键盘上输入任意两个整数,交换两个整数后输出。
/*变量版本*/
#include<stdio.h>
void swap(int x,int y);
int main()
{
int x1=0,x2=0;
printf("x1=");
scanf("%d",&x1);
printf("x2=");
scanf("%d",&x2);
printf("交换前:\nx1=%d,x2=%d\n",x1,x2);
swap(x1,x2);
printf("主程序:\nx1=%d,x2=%d\n",x1,x2);
return 0;
}
void swap(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf("子函数交换后:\nx1=%d,x2=%d\n",x,y);
}
/*指针版*/
#include<stdio.h>
void swap(int x,int y);
int main()
{
int x1=0,x2=0;
printf("x1=");
scanf("%d",&x1);
printf("x2=");
scanf("%d",&x2);
printf("交换前:\nx1=%d,x2=%d\n",x1,x2);
swap(&x1,&x2);
printf("主程序:\nx1=%d,x2=%d\n",x1,x2);
return 0;
}
void swap(int x,int y)
{
int tmp;
tmp=*x;
x=y;
*y=tmp;
printf("子函数交换后:\nx1=%d,x2=%d\n",*x,*y);
}
(5)在C语言中为什么使用指针,指针有哪些好处,并举例说明?
(6)指针和其它数据类型的区别?
①相同:指针也是一种数据类型,跟int char float等都是一种数据类型;
②不同点:指针只能存储物理地址,其它数据类型存储的是具体的数据值;
(7)指针变量和其它变量的区别?
指针变量也是一种变量,它存储的是它指向的那个变量的物理地址;
其它变量存储的就是对应类型的数据值。
2. 字符型指针 ,浮点型指针
与整型指针类似。
Char sex=’f’;
char *ps=&sex;
Ex:指针运算
#include<stdio.h>
int main()
{
int num=101;
int *pn=#
char ch='A';
char *pc=&ch;
printf("pn-value=%x\n",pn);//22fe..
printf("num-add=%x\n",&num);//==
printf("*pn-value=%d\n",*pn);//101
printf("num-value=%d\n",num);
num=num+3;
pn=pn+7;//111
pn=pn+20;
printf("*pc=%c\n",*pc);
ch=ch+2;
pc=pc+33;
printf("ch=%c",ch);
return 0;
}
6.空指针及多级指针
(1)没有初值的指针,建议赋值为NULL;
Int num=99;
Int *pn=NULL;
(2)指向指针的指针就是二级指针,多次指向的就是多级指针。
Int num=99;
Int * pm=#
Int * *pmm=NULL;
7.指针总结:指针使用的时候的三种情况:
① 定义指针 数据类型 *指针变量名称
Int num=99;
Int * pm=NULL;
Pm=&num;
① 指针本身
Pm是谁? Pm就是num在内存中的物理地址;
② 取指针(*运算)
pm=? pm表示的是pm所指向的变量num里面存储的值。
--------------单个数据的存储-----------------------------
题目升级:
从键盘上任意输入三个数,求总分,求平均分,并输出?
从键盘上任意输入10个20个30个…100个….1000个数据,求总分,求平均分?
相同数据类型 多个
现在你学习的数据存储结构只能解决单一的数据存储,当有批量数据的时候如果来解决存储的问题?
8.批量存储数据——数组
(1).整型数组
①当有多个数据都是相同数据类型特征存储,这个时候就可以考虑采用批量存储。
数组:
②数组定义:数据类型 数组名称[数组大小];
Ex: int ar [10]={1,2,3,4,5,6,7,8,9,10,};
有效存储区间:Ar[0]——ar[n-1] 40字节
Int ar[1];
Int a;
③数组的访问方法:
(一)采用数组下标访问;
(二)采用指针访问数组;
④数组的赋值方法:
(一)一种直接赋值:集成赋值及引用下标赋值;
(二)一种从键盘读入:Scanf读入。
新知识,循环结构
For(初始条件;循环边界;循环控制)
{
循环体;
}
EX:从键盘上读入十个数,并逆序输出?
输出奇数或者输出偶数?