郝斌老师c语言笔记.docx
- 文档编号:18512369
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:25
- 大小:22.90KB
郝斌老师c语言笔记.docx
《郝斌老师c语言笔记.docx》由会员分享,可在线阅读,更多相关《郝斌老师c语言笔记.docx(25页珍藏版)》请在冰点文库上搜索。
郝斌老师c语言笔记
int#include
intmain()
{
return0;
}
C语言关键字
Auto自动的break终止case案件charconst常量continue继续default默认do做double双
Else否则enum枚举extern额外的float浮点型for为了goto去if如果int整数long长整型
Register寄存器return返回short短的signed有符号的sizeof运算符static静止的struct结构体switch开关typedef定义类型
Unsigned无符号整数union联合void空的;无效的volatile不稳定的易失的易变的while当directive指示符fatal致命的precompiled预编译;先行编译
C语言的特点:
优点:
代码量小,速度快,功能强大。
缺点:
危险性高,开发周期长,相对于java的可移植性不强。
C语言的应用领域:
主要用于系统软件,很少应用于应用软件。
学习方法:
多上机。
C语言的函数和数学的函数没有太大的函数
第十一节课
一元二次方程求解:
首先要把abc三个系数要保存到计算机了,再求出b的平方减去4倍ac的值。
即先要确定解题思路。
#include"stdafx.h"
#include"math.h"
intmain(intargc,char*argv[])
{
inta;
intb;
intc;
floatd;
floatx1;
floatx2;
printf("请输入三个值:
\n");
scanf("%d%d%d",&a,&b,&c);
d=(b*b-4*a*c);
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("方程有两个根分别是:
x1=%fx2=%f\n",x1,x2);
}
elseif(d==0)
{
x1=(-b/(2*a));
x2=x1;
printf("方程有两个一样的跟:
x1=x2=%f\n",x1);
}
else
{
printf("方程没有实根\n");
}
return0;
}
第十四次课
计算机的一些基本知识:
1:
cpu内存条硬盘显卡主板显示器之间的关系
Cpu不能直接处理硬盘上的文件,通过双击鼠标将硬盘上的数据调用到内存条上,cpu再去处理内存条中的电影数据,处理的结果是将某些数据变成图像,通过显示器。
声音通过声卡显示出来。
主板上插上硬盘,内存条,声卡,显卡,通过主板将这些东西联系在一起。
2:
helloworld程序如何运行起来的
通过编译链接:
出现后缀式.exe的文件
感叹号的操作是由我们的软件会请求操作系统(cpu)来执行这个exe的文件
3:
什么是数据类型
把数据保存到计算机里面,即是数据的存储。
对数据进行分类,整数,实数,字符三类
基本类型数据:
整数:
整型int(4字节),
短整型shortint
(2),
长整型longint(8)。
定义完之后这个容器只能放提前定义好的数据类型。
实数(浮点数,含有小数点的数):
单精度浮点数(空间比较小,float4个字节,),
双精度浮点数(空间比较大,double8个字节,)。
字符:
单个字符(char一个字节),
字符串(一系列字符的组合,c语言没有东西可以直接存放字符串。
以后可以通过字符数组);
复合数据类型:
结构体
枚举(把基本类型拼合在一起,最重要的)
共用体
4:
什么是变量
类似一个容器,可以存放不同类型数据。
方便对数据的存储。
本质是就是内存中的一段存储空间。
例如:
3最终存放在内存中,程序运行完后就把内存释放。
5:
cpu内存条vc++6.0操作系统之间的关系
请求操作系统分配一段存储空间。
来存放变量。
6:
变量为什么必须要初始化
所谓初始化就是赋值的意思
7:
如何定义变量
数据类型变量名=要付的值
等价于
数据类型变量名;
变量名=要付的值;
Inti,j;i=j=5;等价于inti=j=5;i=5;j=5;
8:
什么是进制
9:
常量在c语言中是如何表示的
整数
十进制
十六进制:
前面加0x或0X
把进驻:
前面加0,不是字母o
浮点数
Floatx=3.2e3;
Floatx=123.45e-2
字符
单个字符用单引号,
字符串用双引号。
但是“a”代表了’a’和‘\0‘的组合
10:
常量是以什么样的二进制代码存储在我们的计算机中的
用二进制代码把数存储起来的,整数是以补码的形式,实数是以IEEE754,字符和整数的存储的形式差不多。
即字符改变成asc2码,再以补码表示成二进制。
11:
代码规范化的问题
代码规范化,有利于以后写大程序。
12:
什么是字节
就是存储数据的单位,是硬件所能访问的最小单位。
cpu只能控制字节,控制不到位。
一个字节等于八个位,
1k等1024个字节
1m等于1024k
1g等于1024m
13:
不同类型数据类型之间赋值的问题
暂不考虑
14:
什么是asc2
只能定义字符变量
Charch=‘A’;等价于charch;ch=‘A’;相当于制造出一个容器,再把’A’放进这个容器中。
如果在后面在定义Charch=‘B’是不允许的,因为不可以同时制造出两个一样的容器。
这个代码不是一个值,而是一种规定,规定不同的字符使用那个整数值去表示
它规定了一个字母对应一个整数
15:
字符本质上于整数的存储方式相同
基本的输入输出函数的用法
Printf()
功能强大,用法灵活。
将变量的内容输出到显示中
1:
printf(“字符串\n”);
2:
printf(“输出控制符”,输出参数);
3:
printf(“输出控制符1输出控制符2\换行符”,i,j);输出控制符和输出参数的个数必须一一对应。
4:
printf(“输出控制符非输出控制符”,输出参数);输出控制符包含%d%ld%c%f的
为什么需要输出控制符:
1:
01组成的代码可以表示数据也可以表示指令。
2:
如果01组成的代码表示的事数据的话那么同样的01代码以不同的格式输出就会有不同的输出结果。
3
#include
Intmain(void)
{
Inti=10:
;
Printf(“%d”,i);//d是十进制,把二进制代码以十进制输出。
X是十六进制。
%d输出控制符。
Return0:
}
标准输入输出
#include"stdafx.h"
intmain(intargc,char*argv[])
{
intx=47;
printf("%x\n",x);
printf("%X\n",x);
printf("%#X\n",x);//推荐使用
return0;
}
/*
输出结果是
——————————————————————
2f
2F
0X2F
——————————————————————
*/
return0;
}
2:
Scanf(通过键盘将数据输入到变量中)
有两种用法
用法一:
scnaf(”输入控制符“,输入参数);
功能:
将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中。
运算符
Scanf(”%d“&i);&为取地址符号
知识跳跃
数组:
1;为了方便定义大量同类型数据的存储和使用
2:
数组名是数组第一个元素的地址
3:
采用循环法赋值
例如:
inta[5]={12,11,12,321,123};
intb[5];
inti;
for(i=0;i<5;i++)
b[i]=a[j];
二维数组的的初始化
Inta[3][4]={{,23,,2,2},{32吗,232332,23,,2,},{32,,2,,,,43,}};
%-5d表示左对齐,每个字符隔五个字符。
二维数组的输出:
#include"stdafx.h"
intmain(intargc,char*argv[])
{
#include
intmain(void)
{
inta[2][3]={{12,34,45},{423,2342,24}};
inti,j;
for(i=0;i<2;++i)
{
for(j=0;j<3;++j)
{
printf("%-5d",a[i][j]);
}
printf("\n");
}
return0;
}\\二维数组的输出,利用两个for循环就可以解决。
数组其实并不真实存在内存空间中,而是线性分布的。
函数:
极其重要。
(学习c语言的第二个重点。
)
什么是面向对象的语言。
为什么需要函数:
避免了重复性的操作。
有利于程序的模块化。
把大问题分解成小问题。
通过函数来实现细小的问题,体现模块化的思想。
修改某一部分对其他部分没有太大的影响。
体现程序的健壮性。
比较两个数的大小:
#include"stdafx.h"
voidmax(inti,intj)
{
if(i>j)
printf("%d\n",i);
else
printf("%d\n",j);
}
intmain(void)//表示该函数不接收任何值。
Int表示返回值为int类型的数据。
函数前面的void表示不返回值。
不能与return连用。
{
inta,b,c,d,e,f;
a=1,b=2,c=3,d=4,e=5,f=6;
max(a,b);
max(c,d);
max(e,f);
return0;
}
什么是函数:
逻辑上:
能够完成特定功能的独立的代码块
物理上:
能够接收数据,当然也可以不接收数据能够对接收的数据进行处理,能够将数据处理的结果返回。
当然也可以不反悔。
函数是个工具,是为了解决大量类似问题而设计的,函数可以当成一个黑匣子。
只要会用,不需要知道系统如何调用。
经典指针程序:
互换两个数子:
#include
#include
voidhuhuan(inta,intb)
{
intt;
t=a;
b=t;
return;
}
intmain()
{
inta=3;
intb=5;
huhuan(a,b);
printf("a=%d,b=%d\n",a,b);
return0;//这是个经典错误,函数只改变了形参的值,没有改变实参的值。
跟主函数没有任何关系。
因此不能完成互换功能。
}
#include
#include
voidhuhuan(inta,intb)
{
}
intmain()
{
inta=3;
intb=5;
huhuan(&a,&b);
printf("a=%d,b=%d\n",a,b);
return0;
}
voidhuhuan(int*a,int*b)
{
int*t;//如果要互换,t必须定义成int*类型。
t=p;
p=q;
q=t;
}//这个程序依然不是正确的,因为只是改变了p和q的内容对实参依然没有实际的作用效果。
第三个:
可以完成
#include
#include
voidhuhuan(int*p,int*q)
intmain()
{
inta=3;
intb=5;
huhuan(&a,&b);
printf("a=%d,b=%d\n",a,b);
return0;
}
voidhuhuan(int*p,int*q)//p是int类型的变量,*p是int类型变量。
{
intt;//必须要定义成int类型,否则会出错。
t=*p;
*p=*q;
*q=t;
}
如何修改主函数的值:
*号的含义,
附注:
1、乘法
2、定义指针变量
Int*p定义了一个名字叫p的变量,int*表示p只能存放int类型数据的地址。
3、指针运算符,该运算符放在已经定义好的指针变量的前面,如果p是一个已经定义好的指针变量,则*p表示以p的内容位为地址的变量。
4、*p在定义好和未定义好的内容是不一样的。
1:
使用单个字符用单引号括起来,字符穿用双引号括起来。
intmain()
{
int*p;//等价于int*p,等价于int*p。
inti=5;
charch='A';
p=&i;//修改p和i的值互不影响。
*p表示以p的内容为地址的变量。
*p=99;
printf("i=%d",i);
return0;
}
#include
#include
voidswap_1(inti,intj)
{
intt;
t=i;
i=j;
j=t;
}
intmain()
{
inta=3;
intb=5;
swap_1(a,b);
printf("a=%d,b=%d",a,b);
return0;
}
互换两个数:
#include
#include
voidf(int*p,int*q)
{
intt;
t=*p;
*p=*q;
*q=t;
}
intmain()
{
inti=6;
intj=7;
printf("i=%d,j=%d\n",i,j);
f(&i,&j);
printf("i=%d,j=%d\n",i,j);
return0;
}
指针使函数返回一个以上的值:
通过利用*p和i等效的原理来进行
数组和指针:
数组名:
下标和指针的关系:
指针变量的运算:
以为数组名是指针常量,他存放的是一位数组第一个元素的地址。
指针和数组:
界定一个一位数组需要几个参数:
一般情况下需要两个参数,数组名和数组长度。
#include
voidf(int*p,intn)
{
inti;
for(i=0;i { printf("%p\n",*(p+i)); } } intmain() { inta[5]={ 1,2,3,4,5 }; intb[6]={ 6,78,-1,-45,12,546 }; intc[100]={ 1,99,27,33 }; f(a,5); printf("\n"); f(b,6); printf("\n"); f(c,100); printf("\n"); return0; } 通过函数把数组的数组名发给指针变量p,则有: *(p+1)=a【i】,p【i】=a【i】,*(a+i)=a【i】=*(p+i)=p【i】个可以等效替换,无任何区别。 #include voidf(int*p,intlen) { inti; for(i=0;i { *(p+i)=*(p+i)+10; p[i]=p[i]*0; p[i]=*(p+i)+10; *(p+i)=p[i]*0; printf("%d\n",p[i]); } } intmain(void) { inti; inta[6]={ 1,3,4,5,566,45 }; //printf("%d\n",a[3]); f(a,6); printf("从这里重新开始。 别闹了,孩子;\n"); //for(i=0;i<6;i++) //printf("%d\n",*(a+i)); return0; } 指针变量的运算: 指针变量不能相加,相乘和相除。 只能相减: 如果两个指针变量指向的是同一块连续空间的不同存储单元,则这两个指针变量可以相减。 表示两个指针变量相隔的个数。 #include intmain(void) { intj=5; inti=10; int*p=&i; int*q=&j; inta[5]; p=&a[1]; q=&a[4]; printf("%d\n",p-q); return0; } 一个指针变量到底占几个字节: 假设P指向char类型的变量1 假设q指向int类型的变量4 假设r指向double类型的变量8 预备知识: Sizeof(数据类型) 功能: 返回值就是该数据类型所占的字节数。 例如: sizeof(int)=4; #include intmain(void) { charch='A'; inti=99; doublex=66.6; char*p=&ch; int*q=&i; double*r=&x; printf("%d,%d,%d\n",sizeof(p),sizeof(q),sizeof(r)); return0; } 运行结果: ———————————————————— 4,4,4 请按任意键继续... ———————————————————— X变量有8个字节,用首字节的编号当成x的编号。 总结: 一个指针变量不论指向什么变量,该指针变量本身都只占四个字节。 一个变量的地址使用该变量的首字节来表示的。 专题: 动态内存分配的问题 非常非常重要。 传统数组的缺点: 1: 数组长度必须事先制定,并且只能是常指数。 长度不能是变量。 2: 传统形式定义的数组,该数组的内存程序员无法手动编程释放他。 他只能在自己所在函数运行完之后自动释放。 但是动态内存可以自由释放。 在一个函数运行期间系统为该函数中数组分配的空间就会一直存在,直到该函数运行完毕。 3: 数组的长度不能在函数运行的过程中动态的扩充和缩小。 数组的长度一旦定义,其长度就不能够改变, 4: a函数定义的数组,在a函数运行期间可以被其他函数调用,但是当a函数结束后,就不能被其他函数调用。 传统方式定义的数组不能跨函数使用。 为什么需要动态内存分配: 动态内存就像个救世主一样很好的解决了传统数组的缺陷。 (静态数组) #include #include voidf(int*q) { *q=200; printf("%d\n",*q); } intmain(void) { inti=5; int*p=(int*)malloc(4);//一共分配了8个字节 /* 1;要是用这个函数必须添加头文件 2;malloc函数只有一个形参,并且形参是整形 3;4表示请求系统为本程序分配四个字节**** 4;malloc函数会为我们分配若干字节,只能返回第一个字节的地址 5;8行分配了八个字节,p变量站四个字节,p所指向的内存也占四个字节 6;p本身所占的内存是静态分配的,p所指向的内存是动态的 7;malloc返回的是他所分配的内存的第一个字节的地址 8;(int*),是强制类型转换,是用来告诉别人这个地址所指向的数据时什么类型, */ *p=5;//*p代表的就是一个int变量,只不过*p这个整形变量的内存分配方式和第九行i变量的分配方式不同 //free(p); printf("tongzhimenhao! \n");//p本身的内存不能被释放 f(p); return0; } 动态内存分配举例-动态数组的构造: 1: malloc函数的使用: malloc是memory内存allocate分配)的缩写。 #include #include intmain() { int*p; intlen; inti; printf("输入一个数: "); scanf("%d\n",&len); p=(int*)malloc(4*len); for(i=0;i { printf("请输入Len个数: \n"); scanf("%d\n",p[i]); p[i]=p[i]+5; } for(i=0;i { printf("一位数组改为: %d\n",p[i]); } return0; } #include #include intmain() { int*p; intlen; inti; printf("shuruyigeshu: "); scanf("%d\n",&len); p=(int*)malloc(4*len); for(i=0;i { printf("请输入len个数: "); scanf("%d\n",p[i]); p[i]=p[i]+5; for(i=0;i { printf("yiweishuzugaiwei: %d\n",*(p+i)); } return0; } #include #include intmain() { inti; intlen; int*p; printf("输入一个数: "); //
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 老师 语言 笔记
![提示](https://static.bingdoc.com/images/bang_tan.gif)