大一下学期c语言课程课堂笔记(整学期)
一 细节
逗号表达式要看整个式子是否在括号里面,如果没有括号,则先算等号表达式,在算逗号表达式。
switch语句case事件中看是否有break;语句,如果没有,接着往下运行。
定义变量时,是按堆栈方式分配内存,先定义的地址大,后定义的地址小。
二 数组
数组长度必须是大于0的整数常量,不能是变量或负数;
数组整体初始化只能在定义的时候。
double n[10]={1,2,3,4,5};
之后只能单个的对数组中的元素赋值。
n[1]=2;
数组名是常量(类似于宏常量,系统不分配内存,所以无地址。),不能改变它的值,如:n++;是不对的。
&n;是整个数组的地址,&n+1;则地址增量为整个数组元素个数的地址。
数组名n就是数组变量的第一个元素的地址。n=起始地址。而n[1]则是一个变量名。中括号是下标运算,a[0]=10;[]=*();a[0]=*(a+0);
二维数组可以作为一维数组用;
二维数组定义时行数可以省,但列数不能省。
如:int b[2][5];
b[1],b[6],b[9];都是引用二维数组的元素。
字符串的头文件:<string.h>
字符串长度:第一个为‘\0’之前的有效字符个数。
字节数:存储整个字符串所需的字节数。
单引号中间必须有东西,否则是语法错误。
输出字符串用%s,只有遇到’\0’结束。
双引号引起来的字符串是一个地址。”abc”是第一个字符的地址。
Printf(“%p %p”,&”abc”[0],”abc”);
Strncpy()不一定有’\0’;
动态数组
头文件<stdlib.h>
函数malloc(size_t size);申请连续(类似于数组)内存,返回首地址。
Int * const p=(int*)malloc(5*sezeof(int));//括号里是字节数。
;//p为常量,与数组名相似。
If(p==NULL)
{exit(0);//强制终止程序。
}
free(p);//释放内存。Free函数释放内存。参数为指针。
P=NULL;//释放完成置空。
Calloc函数:calloc(size_t num,size_t size);
指针数组:数组每个元素是指针变量;
数组指针:如:int(*p)[5];p所存储的是整个数组的地址,若p+1则地址移动整个数组元素个数地址。
重点:
一维数组与指针的关系;
二维数组与指针的关系。
I 实例代码
冒泡排序优化:
flag=0;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(grad[j]>grad[j+1])
tem=grad[j];
grade[]
flag=1;
}
if(flag=0)
break;
}
三 结构体
四 拓展算法
求任意输入的数的位数:每次除10,直到为0,所得次数就是位数。
随机函数rand() ,srand()
产生随机数
要产生随机种子,使每一次的随机数都不一样。
srand=((int)time(0));产生随机种子;
magic=rand()%100+1(求1到100的随机数);
实数求模 fmod(x,5);
实数 判等 或 判非等 用fabs()函数;
五 生存周期
{
Int a=10;//局部变量。本地生存周期。
}
静态生存周期的变量初始化为0;
Static int c=19;静态变量,生存周期为整个程序运行过程。作用域为花括号体内。
全局变量的作用域由具体定义的位置和extern(全局声明时引用,可以使别的源文件引用)说明。
定义位置以下。
声明不分配内存,不能初始化;
局部变量和全局变量冲突,则局部变量优先。
局部变量默认的为auto型。
六 Typedef的用法
Typedef int RMB;给已有的变量名起外号。使变量形象化。
Typedef long Uint32;跨平台的需要。
Typedef int const * KPINT;
KPINT p1; 简化长的数据类型。
Int arr[10];
Typedef int ARR[10];//数组名直接就是别名。
ARR a1;
七 函数分类
I 程序在内存的分布区域
II 标准库函数
malloc;
calloc;
free;
III 自定义函数
八 函数指针
函数名就是函数代码区的首地址。
Void (*pf)()=fun;(fun为函数名);
九 链表
//先定义结构体变量。
typedef struct student
{
char name[10];
int score;
char ID[10];
}STU;
//在函数中创建动态链表
STU *head,*q,*p;//创建链表头指针。
head=(STU*)malloc(sizeof(STU));
q=head;
while(1)//在死循环中进行动态链表内存的申请和分配。
{
p=(STU*)malloc(sizeof(STU));
//对p进行处理。当达到某种条件时,以break;语句中断循环。
q->next=p;//将链表连接。
q=p;//q指向刚生成的这个节点。
}
十: 关于c语言库的函数运用,要参考一定的资料,熟练掌握,有助于c语言水平的提高。