C语言 学习记要.docx
《C语言 学习记要.docx》由会员分享,可在线阅读,更多相关《C语言 学习记要.docx(19页珍藏版)》请在冰豆网上搜索。
C语言学习记要
C学习记要
C语言基础
1.C程序的基本概念:
.c-.obj.exe
2.C程序设计的步骤:
分析算法代码测试后续操作
3.算法:
就是对问题求解的步骤进行描述(程序流程图、伪代码、N-S流程图)
算法的基本特点:
有穷性、可行性、确定性、输入与输出。
例:
输入两个数,求其最大数。
输入两个数X和Y
Ifx>y
输出X;
否则输出Y;
结束
4.结构化的程序设计:
顺序、选择、循环、函数(模块)
5.一个基本的C语言程序:
#include/*stdreaminput&output.head*/
main()
{
intx,y;/*定义了两个整型数X和Y;*/
/*x=x+y;*/
;
scanf(“%d%d”,&x,&y);/*从键盘上输入两个整型数放入X和Y中;*/
if(x>y)/*判断两个数的大小*/
printf(“Themaxnumberis%d\n”,x);
else
printf(“Themaxnumberis%d\n”,y);
}
C语言的基本元素:
标识符、运算符、分隔符、其它特殊符号。
C语言的基本结构:
编译预处理部分、外部数据和类型定义、功能执行部分。
编译预处理:
在程序执行之前就预先操作的部分(用#打头的部分);
外部数据和类型定义:
全局变量和用户类型。
功能执行部分:
函数部分(主函数、系统函数、用户自定义函数)
C语言的语法单位:
语句、命令行、控制结构
语句的分类:
定义和说明语句、函数调用语句、功能语句(表达式语句)、注释语句、空语句、复合语句(除注释语句外其它语句都必须以;作为结束标志,并且;是属于语句,不是分隔符);
控制结构:
if-else、switch-case、for、while、break、continue、goto、exit、do-while
C标识符:
标识一个对象(给一个对象起的名字)
关键字:
系统保留字(由系统定义具有某些特殊意义的)35个;
预定义标识符:
大部分是系统定义的函数名;300个左右。
用户自定义标识符:
由用户自定义的一个长度不超过32/255个字符的;不能于关键字重复;区分大小写;有意义的;只能由字母、数字和下划线组成并且起始字符不能是数字。
运算符:
优先级、结合性。
算术运算符:
-(取负)*/%(取余mod)+-
关系运算符:
>>=<<===!
=
逻辑运算符:
!
(not)&&(and)||(or)运算时对于非零值做真处理。
赋值运算符:
=*=/=+=-=%=
运算符的左边必须是一个变量;左值(变量在赋值号的左边,代表的是变量的地址),右值(变量出现在赋值号的右边,代表的是变量的内容)。
运算的方向是右结合性;
当运算符两边的类型不一致时,使用赋值兼容规则:
Charshortintintlongfloatdouble
特殊运算符:
++--,*&().->[]?
:
++,--:
这种运算符有两种使用位置,
前缀:
运算符放在运算量的前面;
先把运算量的值增1,再取表达式的值参与运算。
后缀:
运算符放在运算量的后面;
先取表达式的值参与运算,再把运算量的值增1;
,:
逗号运算符,用逗号把多个表达式组成一个整体,逗号表达式的值用最后一个表达去描述。
位运算:
~|&<<>>^
运算量:
可以操作的变量、常量、表达式等。
表达式:
由运算量和运算符所构成一个有值的式子。
常量:
常数
文本常量:
整型、实型、字符型、字符串型。
整型常量:
十进制、八进制、十六进制三种表达方式。
十进制:
0~919023190x13
八进制:
0~701+07=010(前导符)0233*8^0+2*8^1=19
十六进制:
0~9a,b,c,d,e,f0x1+0x9=0xa0x1+0xf=0x10
对于N进制十进制:
XmXm-1Xm-2…..X1X0=Xm*N^m+Xm-1*N^(m-1)+….+X1*N^1+X0*N^0
整型常量在机器存储以补码的形式存储。
二进制原码、反码、补码;
最高位用来表示符号位,0表示正数,1表示负数;
对于正数原码=反码=补码;
对于负数反码是在原码的基础保持符号位不变,其它位取反;补码是在反码的基础上加1所的;
实型常量:
小数方式、科学计数法两种表达方式。
小数方式:
2.5.52.
科学计数法方式:
314.15E-2
符号常量:
ConstfloatPi=3.141593;
变量:
是用来描述一个可变化的量,使用前要定义;
因为两点:
定义之后可以明确变量的类型;可以知道变量的存储空间大小;
定义格式:
[存储类型] 数据类型 变量名[=初值];
变量名称:
是一个合法的标识符即可;
变量类型:
数据类型(char,int,long,float,double)
变量内容:
变量中的值(如不赋初值则为随机值);
变量地址:
变量在内存所占空间的编号。
数据类型:
char:
字符型,1B 0~255
int:
整型数 2B(4B) -32768~32767-215~215-1
long:
长整型 4B -231~231-1
float:
浮点数 4B -1038~1038有效位为6位
double:
双精度的定数 8B-10308~1030814位
C语言的输入与输出
输入与输出的机制:
借助函数来实现。
#include输入与输出头文件stdreaminput&output.head
输出函数:
格式:
printf(格式字符串[,输出列表];
功能:
把输出列表中对应项以格式字符串对应格式输出到屏幕上;
格式字符串:
用一对双引号括起来的一串字符;
包括两种字符:
普通字符、格式字符;
格式字符是以%打头的后面跟着如下一些的字符:
dioxegfspc%
格式项是用来对输出项进行格式化输出的;
场宽控制符:
总宽度和小数位宽度,小数位宽度始终起作用,总宽度可以自动突破。
左对齐:
-,如果有左对齐符号和前导符号,则左对齐起作用。
前导符0:
0。
让输出在右对齐的时候左边不够的地方用0去填充;
进制前导符:
#,让以八进制、十六进制格式输出的数据前自动带前导。
注意点:
1)格式项的个数应与输出项的个数一致;
2)格式项所描述的类型也应与输出项一一对应。
3)输出函数具有输出和计算的双重功能。
4)printf函数中计算的顺序是自右至左的。
5)函数具有返回值,是输出在屏
6)幕上的字符的个数。
输入函数:
Scanf:
Scanf(格式控制字符串,地址列表);
格式字符串:
同输出函数,用%打头,后接格式字符(d,c,f,s)组成一个格式项;
地址列表:
因为输入的数据要存放起来才可以使用,所以必须用地址值来描述具体应该存放的位置。
&(取地址运算);
也可以控制输入项的场宽。
但是不能控制小数位宽度。
注意点:
1)格式项的个数和类型要与对应的输入项一致。
2)输入项必须是地址值,用&来取对应变量的地址;
3)在输入多个值时要注意每个值之间的分隔符;
4)函数有返回值,是正确获得输入项的个数;
5)输入函数可以跳`w;
例1:
从键盘上输入两个整型数,把它们交换后输出;Swap
分析:
1)定义两个整型变量;
2)利用函数输入两个整型值;
3)把两个数相互交换;
4)把交换后的两个数输出;
代码:
#include
main()
{
intx,y;
scanf("%d%d",&x,&y);
intt;
t=x;
x=y;
y=t;
printf("交换前:
x=%d,y=%d\n",x,y);
x=x+y;
y=x-y;
x=x-y;
printf("交换后:
x=%d,y=%d\n",x,y);}
选择结构
1)使用的运算符一般就是关系和逻辑运算符;
1.逻辑运算符的运算规则:
!
,&&,||
&&:
当第一个运算量值为假时,第二个不用去计算。
||:
当第一个运算量值为真时,第二个不用去计算。
2.关系运算符中尽量不要对实型数进行等于比较;
2) if–else结构
1.完整格式:
if条件
真语句
[else
假语句]
2.嵌套的结构:
在某个子句内又出现IF结构。
在嵌套的IF结构中注意Else的配对问题。
3.条件表达式的结果一般是个逻辑值,若不是逻辑时也只需计算出值然后按照非0为真,0为假的原则即可。
3)条件运算符:
条件?
表达式1:
表达式2,
运算规则:
首先判断条件是否成立,若成立则取表达式1的值做为结果;否则取表达式2的值做为结果;结合性为右结合性。
4)多分支选择结构(switch-case)
格式:
switch(条件)
{
case情况1;语句1;[break;]
case情况2;语句2;[break;]
……
case情况n;语句n;[break;]
default:
语句n+1;
}
注意点:
条件应是整型值;当所有情况都不成立才去执行default部分;应在每个功能语句后加break结构让switch真正分支执行。
第五章
循环结构
1)while循环(当型循环)
格式:
while(条件)
循环体;[break;][continue;]
例2:
从键盘上输入若干个正整数,求其最大数。
输入以-1做为结束!
Main()
{intx,max;
scanf(“%d”,&x);max=0;//过滤非有效数据;只输入一个结束标志数时。
while(x!
=-1)
{
if(maxscanf(“%d”,&x);
}
if(max>0)
printf(“max=%d\n”,max);
}
2)For 循环
格式:
for(初值表达式;条件表达式;循环控制变量改变)
循环体[break;][continue]
执行过程:
首先计算表达式1的值,接着去判断表达式2是否成立,若成立则转去执行循环体,若不成立就退出循环。
循环体执行完以后转去执行表达式3,接着继续判断表达式2是否成立一直到不成立退出循环。
3)do_while循环
格式:
do
循环体
[break;][continue]
while(条件表达式);
例3:
求两个整数的最大公约数;GCD(m,n) 辗转相除法。
算法:
1.首先把M除以N的余数放入T中;
2.判断T是否为0,若T为0则N为两个数的最大公约数;
3.若T不为0;把N的值放入M中,把T的值放入N中;再拿M除以N余数放入T中;
4.回到第二步去判断。
一直到T为0时结束,N中存放的就是两者最大公约数。
#include“stdio.h”
main()
{
intm,n,t,x,y;
scanf(“%d%d”,&m,&n);
x=