c笔记.docx
- 文档编号:15262934
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:92
- 大小:72.91KB
c笔记.docx
《c笔记.docx》由会员分享,可在线阅读,更多相关《c笔记.docx(92页珍藏版)》请在冰点文库上搜索。
c笔记
第1章计算机与程序设计概述
1、操作系统:
控制用户和计算机硬件交互,并管理计算机资源分配的软件
2、使用命令行界面的操作系统:
显示一个称为提示符的简短信息,该提示符表示已准备好接收输入,然后用户就可用键盘键入命令
使用图形用户界面的操作系统:
为用户提供了一个具有图标和菜单的系统
3、编译器:
将高级语言翻译成机器语言的软件,输入为源文件(高级语言代码),输出为目标文件(二进制代码)
连接器:
(将预制函数和目标函数结合)结合目标文件,并解决交叉引用,以产生可执行机器语言程序的软件,输入目标文件和其它函数文件,输出可执行二进制文件
IDE(集成开发环境):
结合字处理器、编译器、连接器、加载器和差错工具的软件包
注意:
在使用IDE时,应确保在程序运行前的每一次修改之后都将源文件存盘、
第2章C概述
1、一般C程序包含两部分:
预处理指令和主函数
预处理指令:
是C预处理器提供指令的命令,其中预处理器的工作就是在C程序编译前修改程序文本(#include#define),
库:
可以被程序访问的一些使用函数和符号的集合(#include<标准头文件>指令使程序可以访问库,它使预处理器在编译前将标准头文件中的定义插入到程序中;#define名字值,只有那些从不改变的数值才可以用其命名,在程序执行中不可以改变常量宏)
例:
#include
常量宏:
在程序编译前由特定常量值代替的名称
Main函数:
{声明+可执行语句}
声明:
程序的一部分,告知编译器程序所使用的存储单元名称,所存储信息类型
可执行语句:
被转换为机器语言指令,并由计算机执行的程序行
例:
逗号表示列表项分开,分号在语句行结束时出现
#include
int
main(void)
{
printf("Helloworld\n");
return(0);
}
注:
void表明主函数不从操作系统接收数据,return将控制从主函数交还给操作系统
2、保留字:
C语言中有特殊含义的单词,都用小写表示
标准标识符:
拥有特殊含义的单词(printf,scanf),但程序员可以重新定义(但不建议重新定义)
用户定义标示符(略)
注意:
(1)、编译器区分大小写,C中所有保留字和所有标准库函数名称都只有使用小写字母,而通常常量宏名所有字母都使用大写字母
(2)、为用户定义的标示符选择一个有意义的名称,如果一个标识符有两个或多个单词组成,那么在单词之间加下划线符号(-),提高标识符的可读性,尽量用短的区别明显的标识符
例:
工资salary
dollar_per_hour
3变量声明
例:
doublex,y,z;
(1)数据类型int,double,char
(2)double中科学计数法1.23×105与123000.0相等,在C语言中记为1.23e5或1.23E5
例:
合法的double型常量:
3.141590.00512345.015.0e-04(值为0.0015)2.345e21.15e-3
12e+5
非法的:
150.12345e15e-0.312.5e.334,500,99(不允许出现逗号)
4、printf函数:
函数名+函数参数
函数名括号内函数参数
printf(“Thatequals%fkilometers.\n”,kms);
引号内格式字符串输出列表
用kms代替占位符%f,输出结果为:
Thatequals16.09000kilometers.
5、占位符:
在格式字符串中以%开始的符号,用于表明显示输出值的位置。
占位符
变量类型
函数使用
%c
char
printf/scanf
%d
int
printf/scanf
%f
double
printf
%lf
double
scanf
%s字符串
%%显示百分号本身
%E/%e用科学表示格式的浮点数
注意:
double型变量在printf的格式字符串中使用%f占位符,而在scanf的格式字符串中使用%lf占位符(可想象为输入严格长浮点来记)
占位符:
格式字符串可以拥有多份占位符。
如果调用printf的输出列表有多个变量,那么格式字符串将包含同样多数目的占位符。
C以从左到右的顺序对变量和占位符进行匹配
例:
letter_1,letter_2,letter_3是char型变量,age是int型,printf调用
printf(“Hi%c%c%c-yourageis%d\n”)
6、换行符转义序列:
\n,在给事字符串中用于终止一个输出行,格式字符串中有多少个\n就换几次行,\non可直接连接后面的单词,C会自动区分
提示符:
用于指示输入何种数据及何种输入格式的信息
7、scanf函数调用语法:
scanf(格式字符串,输入列表);
scanf(“%c%d”,&first_initial,&age);
注意书写一定要正确scanf(“%c%d”,&first_initial,&age);占位符处不要多出空格等……会很麻烦。
说明:
格式字符串是由占位符加引号构成的字符串,一个占位符对应“输入列表”中的一个变量。
在输入列表中每一个int,double,或char型变量前都有一个&符号,表示取当前变量地址。
逗号用于分隔变量名称。
占位符的顺序必须与输入变量中变量的顺序一致。
scanf对待%c和%d、%f占位符不同,其在扫描数值是首先跳过输入的任何空白和回车。
相反在扫描字符时,不跳过任何东西,除非%c占位符前有空白。
如果输入的多了,多的那本分字符将会出现在下一个scanf扫描结果内
scanf一般形式存储没有位数要求时,左对齐,当所存为字符串时可扩展存储单元,有位数要求时存储一般形式为右对齐,特殊要求是可以%-3f这样用负数表示左对齐,当以scanf(“%5d”,&a)这种形式出现时,严格存储5位整数
charstr[10];scanf(“%s”,str)超过str长度时可扩展
8、return(0)将控制程序交还给操作系统。
0表值主函数的执行结果,改制表明执行程序没有错误
9、编译器会忽略字和符号之间的多余空格,在逗号之后,以及在像*、-和=这样的运算符的前面和后面,应该插入一个空格,还可以缩进主函数体并在程序段之间插入空行。
10、程序注释
语法:
/*注释文本*/
示例:
/*Thisisaone-lineorpartial-linecomment*/
/*
*Thisisamultiple-linecommentinwhichthestars
*notimmediatelyprecededorfollowedbyslashes
*havenospecialsyntacticsignificane,butsimply
*helpthecommenttostandoutasablock.This
*styleisoftenusedtodocumentthepurposeofa
*program.
*/
(1)每个程序都应一个标题节开始,其中包含了一些注释来说明:
·编程者的姓名
·当前版本形成的日期
·程序功能的简单描述
如果程序是课程作业,那么还应该列出班级号和教师姓名
/*
*Programmer:
WilliamBellDatecompleted:
May9,2003
*Instructor:
JanetSmithClass:
COS61
*
*Calulatesanddisplaytheareaandcircumferenceofa
*circle
*/
11、算术表达式
(1)如果/%运算符的两个操作数分别为正负整数,那么结果将根据C语言是的不同而不同,应避免在其中使用负整数
(2)强制类型转换:
将希望的类型写在表达式前的圆括号内,两个典型用法——当计算平均值时,要避免使用整数除法
例:
average=(double)total_score/(double)num_students;
通过加0.5,并把结果转换为int型,可以四舍五入一个double型值
例:
rounded_x=(int)(x+0.5);
(3)求表达式规则
a.圆括号
b.运算符优先级
一元+、-(!
、&)
二元*、/、%
二元+、-
(<、<=、>、>=
==、!
=
&&
||
=)
c.结合规则。
一元从右向左,二元从左向右
例:
a×-(b+c)
(4)测试也要讲究技巧:
例:
超市硬币处理机利用能产生整数美元至而没有零钱的硬币组合来运行该程。
然后分别在美分的位置上加上减去1.
12*、在程序输出中格式化数值
(1)格式化int型值
域宽:
显示一个数值所需的列数,只需要在占位符%号和字母间加上一个数值来指定域宽,负号包含在显示的数位数目中
例:
printf(“Results:
%3dmeters=%4dft.%2in.\n”,meters,feet,inches);
-234%5d空-234-234%2d-234
如果域宽大于要显示的数字则前面添加空格来补足,如果小于要显示的数字,C自动扩展该域宽。
(2)格式化double型值
%n.mf其中n是表示整个域宽的数,m是希望的小数位的数目。
小数点也占据一位,整数位可以自动扩展,但小数位固定执行四舍五入。
例:
3.14159%3.2f输出为3.14
一般不设置域宽
13、计算机有批处理模式和交互模式
(1)批处理模式:
程序从预先准备好的数据文件中得到数据的一种程序运行模式
交互模式:
用户键入数据
(2)程序控制输入输出文本
例:
/*Convertsdistancesfrommilestokilometers.*/
#include
#defineKMS_PER_MILE1.609/*conversionconstant*/
int
main(void)
{
doublemiles,/*distanceinmiles*/
kms;/*equivalentdistanceinkilometers*/
FILE*inp,/*指向输入文件的指针*/
*outp;/*指向输出文件的指针*/
/*Opentheinputandoutputfiles.*/
inp=fopen("C:
\\Users\\lijiangning\\Desktop\\distance.txt","r");/*r、w表示读写*/
/*如:
"C:
\\TC\\TEST.DAT"注意:
如果将路径写成"C:
\TC\TEST.DAT"是不正确的,这一点要特别注意。
两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录*/
outp=fopen("C:
\\Users\\lijiangning\\Desktop\\distout.txt","w");
/*Getandechothedistanceinmiles.*/
fscanf(inp,"%lf",&miles);
fprintf(outp,"Thedistanceinmilesis%.2f.\n",miles);
/*Convertthedistanceinkilometers.*/
kms=KMS_PER_MILE*miles;
/*Displaythedistanceinkilometers.*/
fprintf(outp,"Thatequals%.2fkilometers.\n",kms);
/*Closefiles.*/
fclose(inp);
fclose(outp);
return(0);
}
操作一个具体文件的程序必须首先声明一个文件指针变量,用于存储允许访问文件的必要信息。
文件指针变量类型为FILE*。
操作系统必须在允许访问文件之前准备好一个输入或输出文件
inp=fopen("C:
\\Users\\lijiangning\\Desktop\\distance.txt","r");输入源
outp=fopen("C:
\\Users\\lijiangning\\Desktop\\distout.txt","w");输出
1fopen函数用来打开一个文件
其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);
其中,“文件指针名”必须是被说明为FILE类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和操作要求。
用文件的方式共有12种,下面给出了它们的符号和意义。
文件使用方式意义
“rt”只读打开一个文本文件,只允许读数据
“wt”只写打开或建立一个文本文件,只允许写数据
“at”追加打开一个文本文件,并在文件末尾写数据
“rb”只读打开一个二进制文件,只允许读数据
“wb”只写打开或建立一个二进制文件,只允许写数据
“ab”追加打开一个二进制文件,并在文件末尾写数据
“rt+”读写打开一个文本文件,允许读和写
“wt+”读写打开或建立一个文本文件,允许读写
“at+”读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”读写打开一个二进制文件,允许读和写
“wb+”读写打开或建立一个二进制文件,允许读和写
“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据
2fscanf和fprintf是函数scanf和printf的文件版
fscanf(指针参数,格式字符串,输入列表)与scanf主要区别在于多一个指针参数
fscanf(inp,%lf,&miles);
3如果一个程序不再使用它的输入和输出文件,它会通过带有文件指针的函数fclose来关闭这些文件
fclose(inp);
14、常见编程错误
(1)语法错误:
在程序编译过程中检测到的违反C语法规则的错误,例:
Identifier”**”isnotdeclaredwiththisscope
invalidoperandofaddress-ofoperator无效的操作数的取地址操作符(某个变量没有定义)
Semicolonaddedattheendoftheprevioussourceline(某段少分号)
Unexpectedend-of-fileencounterdinacomment
“}”insertedbeforeend-of-file(结尾少处花括号,可能与前面花括号不对应或注释有关)
(2)运行时错误:
试图执行非法操作,在程序执行过程中被检测到。
诸如可能出现分子为0等
(3)未检测到的错误
该错误不阻止C程序完成运行,但是它们会导致不正确的结果,因此程序需要预测和检验
如:
混合字符输入%c与%d等区别,将空格或回车存入了char型变量内
另一个错误调用scanf时丢掉了&,scanf不知道去哪里找first、seconf,不能将用户输入的数值存储在其中,程序将使用任何原先就在名为first和second的内存位置上的无意义数值,以此来完成运行。
(4)逻辑错误:
由不正确的算法导致的错误
第3章函数的自顶向下设计
1、函数调用参数可以是变量也可以是变量表达式
常用数学库函数
abs(x)
ceil(x)
floor(x)返回不大于x的最大整数
cos(x)————(弧度)doubledouble
sin(x)/tan(x)略
sqrt(x)——平方根doubledouble
exp(x)ex指数
pow(x,y)xy若x是负数,y必须是整数
fabs(x)绝对值double
log(x)自然对数log10(x)x以10为底的对数
2、无参无返回值函数,不能传递信息,只能用来显示程序的多行输出,可用作对用户的指令。
如:
画图函数
函数原型在所有#include或#define之后,在主函数之前声明,函数定义在主函数之后
函数定义函数首部类似于函数原型,但不用分号结束。
工业上使用将函数类型放在另一行的风格,使得函数定义在很长的源文件中容易查找。
如:
void
draw_circle(void)
任何在可选的“局部声明”中声明的标识符只在程序执行期间有效,并且只能在该函数内部引用。
注:
双反斜杠\\在格式字符串中表示反斜杠。
这个规则是的C能够区分准义字符和反斜杠
3.带输入参数的函数
形参:
在函数定义中表示对应实参的标识符。
实参:
函数调用时括号中使用的表达式,它的值被传入函数,并和函数相应形参关联
函数原型ftypefname(形参声明表);
函数接口注释:
例:
/*
*Findthecubeofthisargument首先介绍函数的作用
*Pre:
nisdefined前置条件
*/
前置条件:
函数调用前为真的条件
后置条件:
函数执行后为真的条件
函数定义ftypefname(形参声明表)
{
局部变量声明
可执行语句
}
例:
/*
注意:
(1)实参必须是一个可以赋给对应性惨的数据类型,而且不会有信息丢失。
(2)每当执行函数调用语句时,系统就会为该函数分配内存作为数据存储空间(如形参和局部变量)。
当函数终止时函数数据区就丢失了。
(3)子程序想要访问主函数变量只能通过作为实参传递
(4)注意函数使用的数值范围,如sqrt、log参数是负的,出错
第4章选择结构:
if语句和switch语句
1、指令三种结构:
顺序、循环、选择
关系运算符:
>、<、>=、<=(书写顺序按读的顺序)、==、!
=
逻辑运算符:
&&、||、!
(补或非)
短路求值:
只要表达式能够确定就停止对表达式求值
ASCII码中0——48,A——65,a——97
2、
(1)if(条件)
语句;写语句时要缩进两个字母
else
语句;
或if(条件)
{
条件真时的任务
}
else(条件)
{
条件为假时的任务
}
注:
测试程序用多个决策,使每个分支都能运行
在主函数和子函数使用相同的标识符,避免使用不同的名称表示同一信息带来混淆。
使用常量宏定义易于维护
(2)if嵌套:
需要注意多想决策中的条件的顺序
if(x>0)
num_pos+=1;
elseif(x<0)
num_neg+=1;
else
num_zero+=1;
elseif同行,所有的else都对齐,并且每一个相关语句缩进,增强可读性,此外采用具有多现象决策形式也可以增强可读性。
例:
/*
*Computethetaxduebasedonataxtable.
*Pre:
salaryisdefined.
*Post:
Returnthetaxduefor0.0<=salary<=150,000.00;
*return-1.0ifsalaryisoutsidethetablerange
*/
double
comp_tax(doublesalary)
{
doubletax;/*定义部分单列出来*/
if(salray<0.0)/*函数主体部分单列出来前后空格*/
tax=-1.0;
elseif(salary<15000.00)/*firstrange*/
tax=0.15*salary;
elseif(salary<30000.00)/*sencondrange*/
tax=(salary-15000.00)*0.18+2250.00;
elseif(salary<50000.00)/*thirdrange*/
tax=(salary-50000.00)*0.27+11000.00;
else
tax=-0.1;/*考虑特殊情况*/
return(tax);/*返回值部分单列出来*/
}
else一般只与最近的if配套
3、switch语句:
语句体包含在一对花括号内的单个复合语句,其每一个选项不放在花括号内,而是用break结束每个选项。
(1)switch(表达式)表达式的值是int或者char型,但不可以是double型或字符串类型,同样case的值也只能是int或char型
(2)语法:
switch(条件表达式){
标签1:
/*case:
的形式
语句1;
break;
标签2:
标签3:
语句2;
break;
……
default:
/*default遇到后面的花括号结尾
语句;
}
说明:
①控制表达式被求值并和“标签集合”中的每一个case标签比较直到找到匹配的标签。
当找到匹配时该case标签之后的语句被执行直到遇到break语句!
然后switch语句的其余部分被跳过。
没有break语句程序执行将贯穿,一般在break语句之后用一个空行来强调!
②case标签后的“语句”可以是一条或多条C语句,因此不用花括号将多条语句构成一个复合语句。
如果没有case标签与之匹配,整个switch语句被跳过,除非他包含了default标签,default语句在没有其他case语句与之匹配的情况下执行,一般程序均应考虑标签集合之外的情况,所以要有default项。
例:
#include
int
main(void){
charcla;
printf("Pleaseentertheclassoftheshipbythefirstletter\n");
scanf("%c",&cla);
switch(cla){
case'B':
case'b':
printf("Battleship\n");
break;
case'C':
case'c':
printf("Cruiser\n");
break;
case'D':
case'd':
printf("Destoryer\n");
break;
case'F':
case'f':
printf("Frigate\n");
break;
default:
printf("Unknowshipclass%c/n",cla);
}
return(0);
}
第5章重复和循环语句
1、三种循环语句:
while、for、do-while
种类
何时使用
C实现结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔记