C语言编程培训笔记.docx
- 文档编号:6430082
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:34
- 大小:37.38KB
C语言编程培训笔记.docx
《C语言编程培训笔记.docx》由会员分享,可在线阅读,更多相关《C语言编程培训笔记.docx(34页珍藏版)》请在冰豆网上搜索。
C语言编程培训笔记
2013.4.28
不理解程序运算过程,gcca.c-E即可
whoami命令可以知道当前使用的帐号。
文件系统中可以使用路径描述某个文件或文件夹的位置。
绝对路径从文件系统的开始文件夹描述路径,例如/home/tarena
把所有绝对路径都是以/做开头的
相对路径是从某一个文件夹开始描述另外一个文件夹的位置。
.代表当前文件。
..代表当前目录的父目录。
tarena代表当前目录中叫tarena的子目录。
pwd命令可以返回当前目录的绝对路径。
clear命令可以把屏幕上的所有内容清除掉。
ls命令可以察看制定目录里的内容,使用方法如下
ls<目录路径>
如果要察看当前目录的内容可以省略路径。
ls命令支持-a,-l选项可以显示每个文件或目录的详细信息。
-a选项和-l选项可以合成-al。
cd命令可以把任何一个目录调整成当前目录。
方法:
cd<目录路径>。
~代表home目录。
可以一次创建多个目录,如:
mkdirday01day02day03。
创建day04目录,再在day04下创建note和code,mkdir-pday04/note。
rmdir目录表示删除一个空目录;rm-rf目录,表示删除一个非空目录。
touchabc.txt创建一个文件,或修改一个文件的时间。
rmabc.txt删除一个文件。
cpabc.txt(已存在)def.txt(未存在)把前面路径复制到后面路径保存。
mvabc.txt(存在)def.txt(不存在)把前面文件剪切到后文件保存。
tarzcvfday03.tar.gz(新生成的压缩文件)day03(需要压缩的目录)。
tarzxvfday03.tar.gz(待解压文件)。
包含其他命令的文件叫做脚本文件。
echoabcdef>abc.txt把abcdef命令写入abc.txt中,catabc.txt可察看,echoxyz>abc.txt原内容被xyz取代,echoabcdef>>abc.txt在abc.txt文件末尾追加新内容。
echomkdirday03/codeday03/note>create.sh,echomkdirday04/codeday04/note>>create.sh。
ls-lcreate.shcatcreate.sh察看脚本文件create.sh内的内容。
脚本文件制作完成后需要添加执行属性,使用chmod命令,方法如下:
chmod<属性值>文件路径。
ln创建链接文件,如:
lncreate.sh(已存在)abc.sh(新路径),为硬链接,即跟原文件无关,即使删除原文件,新文件也可以工作。
ln-screate.shabc.sh为软链接,和原文件有关,依赖于原文件。
ps显示终端窗口中正在运行多少程序,每个进程都有一个进程ID。
kill命令可以强制终止一个程序运行,可以使用-9选项强行终止。
sudo命令可以使用最高权限执行某些命令。
2013.5.2
cat命令察看大文件时只能看到最后面的内容。
headMakefile察看文件Makefile前10行内容。
head-3Makefile察看文件Makefile前3行内容,以此类推。
只显示文件Makefile的最后一点,tailMakefile效率高,tail-3Makefile只显示最后3行。
察看文件所有内容,moreMakefile,分页显示,一次只显示一屏内容,按空格键下翻,q键退出。
查找文件find文件夹路径(从此文件夹开始查找,只查找此文件夹内)-name(根据文件名字查找)note.txt(查找所有叫note.txt的文件)。
findStandardC-namenote.txt。
-name按名字查找;-perm根据文件属性查找。
基于文件内容查找:
grepTell(要查找内容)Makefile(在此文件中查找)在Makefile文件查找有Tell的行。
通配符:
要删除day11day12day13……则执行命令rm-rfday1?
?
代表一个字符;删掉day11day12dax13,执行命令rm-rfda?
1?
;
删除dax1abday11,执行命令rm-rfda?
1*,*代表个数不确定的字符;
删除day12day13day14,留着day11day15,执行命令rm-rfday1[2-4],[]代表某个范围内的单一字符。
echoabc>打印机名字把字母abc打印在纸上。
>>追加
使用>符号可以实现输出重定向效果,会把原有内容清楚。
>>会把心内容追加在原有内容后面。
使用<符号可以实现输入重定向效果。
管道:
把多个命令连结起来,前一个命令的标准输出作为后一个标准命令的输入。
如:
ls-l|grepday01回车,只显示包含day01的内容,|表示管道。
pwd;ls命令之间用;隔开,一次可以按顺序执行多个命令。
一个命令分行:
如ls\
-a\
l回车,则执行。
Linux的shell命令结束。
vi的使用
windows下的vi工具是gVIM。
vimtutor打开vi教程。
:
q!
不保存退出,q表示退出,!
表示不保存。
:
wq和:
x一样,都是保存退出,:
w保存不退出,:
w!
强制保存不退出。
正常模式下删除:
x键删除一个光标字符。
正常模式进入插入模式要按i键,按ESC键回到正常模式。
删除一个单词,把光标移到单词首字母,dw即可,同时删除单词后一空格。
d$删除从光标到行尾的内容。
de删除当前单词,不删除单词后的空格。
3dw删除3个单词。
删除一行,并把内容放到剪切版上去:
dd,和当前光标位置无关。
可以3dd。
撤销命令,u撤销一次,U全部撤销。
撤销掉撤销命令,Ctrl+r。
粘贴:
p(paste简写)。
复制:
yy。
替换命令:
r键。
察看任意一行的内容:
输入行号+G。
转到最后一行:
G。
查找单词error:
/error回车,下一个n键,上一个N;?
error回车,上一个n键,下一个N。
/查找为顺序查找,?
为逆序查找。
查找配对括号:
把光标放在一个括号上+%。
单词全文替换:
:
%s/thee(旧单词)/the(新单词)/g。
替换477至500之间的单词:
:
447,500s/thee/the/g。
替换一个:
:
s/thee/the。
:
wabc.txt保存内容到abc.txt文件中。
:
rdef.txt读出内容插入到def.txt文件中。
o在当前光标下插入一个空行,O则上。
a在光标后插入内容,A在行尾插入内容。
调整设置vi:
:
setic(忽略大小写);:
setnoic(取消);
cd~(私有目录)回车,vi.vimrc回车,在此设置各种set命令,每次启动vi时都会执行
编程风格设置:
setnu显示行号
sethls
setcindent缩进
setsmartindent
settabstop=4一个Tab跳4个字符
setshiftwidth=4
vi结束
大括号用来对于句进行分组,可以嵌套。
C语言程序从main()第一条语句开始执行,最后一条语句结束。
函数代表一组数据处理过程,不同函数通过名称进行区分。
函数可以把某个数字记录在返回值中。
C语言中数字是分组的,int代表整数分组。
2013.5.3
return本质立刻终止函数执行,返回值为副作用。
C语言中使用标示符区分不同的内容。
标示符需要符和以下规定:
1.必须使用字母,下划线开头
2.后面的可以是字母,数字或下划线
3.区分大小写。
4.不能使用关键字作为表示符。
5.原则上标示符的长度没有限制.
C语言书写规范:
1.一行只包含一条语句(过长语句可以分散在多行里)
2.层次不同的语句使用缩进区分开。
3.适当使用空格,可读性好。
4.可以使用空行分割不同的语句组,代码单元更清晰。
5.采用驼峰方式(UserName)或下划线的方式(user_name)书写标示符。
#include"01homework.h",#开头表示预处理指令,把两个文件合并,把一个.h文件合并到当前.c文件中。
双引号表示从.c所在的目录开始查找01homework.h文件。
#include<01homework>,尖括号表示从系统中公共目录开始查找01homework.h文件。
//单行注释
/*……*/多行注释,如作者、日期、功能、版本等。
C语言程序的开发步骤:
1.使用vi编修源文程序文件
2.使用gcc工具对源程序文件进行编译处理
3.使用命令./a.out执行得到的文件
编译处理过程:
1.预处理,完成所有预处理指令的处理
2.编译,把预处理后的程序翻译成计算机能认识的格式
3.链接,把各个语句段落链接起来
Windows下的编译器是MinGw。
gcc命令选项介绍:
1.-E只对源程序预处理,默认不生成文件
2.-c只完成预处理和编译工作,不连接生成xx.o文件,称为目标文件
3.-o指定执行文件的名称如gccsnake.c-oabc,生成可执行文件abc。
4.-S做预处理和汇编(不编译和链接),默认生成xx.s文件,是汇编文件。
-std=c89/-std=c99指定编译所采用的规范版本,/前为89版,/后为99版。
gcc-chello-ohello可以生成叫hello的可执行文件。
高级语言——>汇编语言——>机器语言
预处理:
同意语法,全部变成C语言语法
|
汇编:
高级语言(纯C)——>汇编语言
|
编译:
汇编语言——>机器语言
|
连接:
把全部相关的机器语言串联起来,生成可执行的文件(文件)。
%g显示小数,最后无效的0不显示,有别于%f。
%lf和%lg区别同上。
数据和占位符类型不匹配,输出大都不正确、乱码。
%3d3表示输出结果共占3个位置,有效数字靠右;
%03d输出为00n,0取代空格;
%-3d输出有效数字靠左;
%7.2f输出有效数字靠右,总共占7个位置,2个小数位。
交换:
i=i+j;
j=i-j;
i=i-j;
变量初始化的意义是清楚掉变量原来被系统任意赋给的值。
计算机内部使用地址数据管理变量。
假设有一个叫shu_zi的变量,则&shu_zi可以表示这个变量的地址,在变量地址前边加上*可以表示对应的变量。
如:
printf("%d\n",shu_zi);和printf("%d\n",*(&shu_zi));功能相同。
2013.5.6day04
用0代替空格:
printf("%02d\n");
显示引号:
printf("\"\n");
显示\:
printf("\\\n");
显示%:
printf("%%\n");
\r:
把输出位置调整到行开头,\r之前的内容的前面部分或全部被覆盖。
字符类型由256个不同的字符构成,用char表示。
unsignedchar叫做无符号字符性类型,范围0——255
char变量只占一个字节
sizeof计算变量或数据占多少字节,用法:
sizeof(zi_fu);sizeof语句只计算表达式大小,但是表达式中的修改都不会保留。
计算机内部分组的主要依据就是数据所占的空间大小。
计算机内存以字节为单位进行管理,每个变量都由一个或多个相邻的字节组成。
ASCII码:
A——65,a——97,0——48.后期编码兼容ASCII码。
ISO8859——拉丁语系(欧洲);GBK——东亚语系;UTF——全球化编码(最流行)。
转义字符
\n——换行
\r——回车(到本行行首)
\t——跳一个制表位
short叫做短整数类型(-30000——30000),2个字节。
unsignedshort叫做无符号短整型(0——65535)
以上都占2个数据类型相邻的字节,故表示较大。
long叫长整数类型,unsignedlong叫做无符号长整数类型,占4个字节。
longlongint8个字节。
int叫做整数类型,unsignedint叫做无符号整数类型,其大小不确定,在此计算机上占4个字节。
float叫做单精度浮点数,占连续的4个字节,不太精确。
double叫做双精度浮点型,占8个字节,精确。
系统默认浮点型是double。
short和char混合都要转成int。
使用一组0或1表示数字的方法叫做二进制,计算机内部所有数字都是使用二进制。
一个字节占8个格子(二进制位)。
-13的二进制:
13=00001101,则-13的二进制为13的二进制按位取反+1.
即负数的二进制为其正数的二进制按位取反再加1。
负数的二进制表示方法叫做补码,正数的二进制表示方法叫做原码也叫补码。
负数的二进制也可以通过按位求反加1的办法计算出相反的正数的二进制。
二进制数最左边为符号位,是0,则为正;是1,则为负。
10000000=-128最小数,依次类推。
把二进制从右向左,3个一组用0到7之间的数替换,成为八进制,如
1001010101110110二进制分组
112566八进制数。
:
n1,n2con3表示将n1到n2
C99中,除法结果更靠近0,取余的结果和%前的数符号保持一致。
2013.5.7
操作符可以把多个独立的操作连结起来。
++--(最好单独成句)
i=1;s=i+++++i=2+2=4.先算++i是2,再算i++是2,再算+是2+2是4.
==!
=><&&||>=<=
||,&&都有短路特性,有时不计算后面的表达式。
!
——>非、反
数学运算符高于逻辑运算符
&按位与,00000011&
00000101
__________________
=00000001
可以把某个补码中特定的位置清0,速度非常快,&1保留,&0清0。
&1<=>%2.
|按位或,和1或,可以把某个补码中特定的位置置1,|0不变,|1置1.
^按位抑或,00000011^
00000101
__________
=00000110
把特定位取反:
和0抑或^0,不变;和1抑或^1,取反。
~按位取反。
%p显示数据地址
(补码)<<(n)左移,(补码)>>(n)右移,不带位移动。
若要数据没丢失,则左移后数为原数的2的n次方倍。
强制数据类型转换:
(int)(7/2)。
右移操作特殊:
无符号数据右移,补0;有符号数据右移,左补符号位。
~(1<<31)最大数。
7>>34——>int是32位,移动超过一轮,故34先对32取余,然后再移动。
shu_zi1=shu_zi>=0?
(前面表达式为真的情况下成立的数):
(为假时的数);
隐式类型转换:
把占地小的数据转换成占地大的数据,若大小一样,则把有符号数据转换成无符号数据。
判断闰年:
if(!
(year%4)&&(year%100)||!
(year%400))
2013.5.7
函数内部加return,则后面代码不执行。
编程解方程,有n个未知数,需用n-1个for循环。
for语句是分组执行的,如:
for(1;2;3){
4
}
执行顺序:
[1,2][4,3,2][4,3,2]………………
#include
gcc-lmcode.c。
2013.5.8
循环嵌套可以解决复杂问题,外层循环通常把大问题分解成几个小问题,内层循环负责解决每个小问题。
for(i=0;i<=3;i++,i++)。
for(inti=0;i<3;i++),C99中可以,编译时加-std=C99,循环玩后inti无效,i恢复。
循环次数不确定时用while语句。
for(i=0;i<9;i++);,仅完成循环,就结束。
for(;;),死循环,ctrl+c结束。
通常用break语句非正常结束。
while
(1),死循环。
循环次数或结束条件已知,用for;否则,用while。
空语句循环和死循环。
三重以上嵌套循环执行效率低,故,for循环最好两次以下嵌套。
for(;;)//10000次
for(;;)//10000次
总执行次数10000*10000.
双重循环,内层公式:
j 条件: i和j都是从0开始,i和j都用++做步进。 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————— 数组是由多个同类型的变量构成的。 intarr[];,数组长度自定。 intarr[3]={1},则arr[0]=1,arr[1]=0,arr[2]=0. 任何可以使用变量的地方都可以使用数组arr[0]。 数组初始化: (1)intarr[3]={0,0,0};最安全,数据个数与数组下标一致。 初始化只执行一次。 (2)intarr[3]={0};从某一位开始后面全是0. (3)intarr[]={0,0,0};全部的0都必须写上。 编译时数组名称被直接替换成数组中第一个变量的地址。 数组名称不可以被赋值,因为在编译时它被一个数值替换掉。 程序运行中使用方法基本类似的变量才可以考虑合并到数组中。 数组名称,跟数组名称取地址相同,也是直接替换成数组中第一个变量的地址。 只能当数字使用,不可被赋值。 代表数组中第一个数字arr[0]的地址。 区别: 数组名称和数组名称取地址,地址数据不按数学计算, arr+1,1是有单位的,代表一个变量的大小,在此=4(因为一个int为4个字节),移到arr[1]。 &arr+1,1是一个(整个)数组的大小,较大,刚移到数组之外。 arr+3得到arr[3]的地址。 *(arr+3)就是变量arr[3]。 在循环中,arr[loop]和*(arr+loop)效果一样。 后一种方法更方便。 sizeof(arr),对数组名称计算,可以得到整个数组的字节大小。 sizeof(arr)/sizeof(arr[0]),为数组长度。 变长数组: intnum; scanf("%d",&num); intarr[num]; 变长数组不能初始化。 助教讲解: 1.常见错误 1、隐式声明与内建函数不兼容——>缺少头文件。 2、游离的……——>中英文符号的问题(空格)。 3、在第n行缺少分号——>n-1行缺少分号。 4、段错误——>访问了非法的地址,如scanf缺少了&符号。 5、atendofinput——>少一个括号,括号不匹配。 2.输出一个整数的二进制: 1、除2取余法; 2、拆分法(2的n次方); 3、和0x80000000按位与,重复32次; 4、与0比较,确定符号位,重复32次 2013.5.10 C语言中使用函数对大量语句进行分组。 函数编写方法如下: 返回值类型函数名称(形参列表) { 语句 } 不同的函数通过函数名称区分 返回值是一个变量,可以用来记录函数执行过程中产生的一个新数据。 形参就是一组变量,函数开始执行时被临时创建出来并使用制定数据(实参)进行初始化。 大括号前面的部分可以独立存在,叫做函数声明。 大括号整体叫做函数体。 return不仅可以对返回值赋值,还可以立刻结束本函数执行。 无返回值函数用void. fflush(stdout) 这条语句可以把输出缓冲区里的内容立刻显示在屏幕上。 形参和实参是完全不同的,实参用来对形参初始化。 函数结束后形参自动消失。 主函数最好放在最后。 主函数放前面: intadd();//隐式函数声明,不靠普,计算机完成.括号内不写,表示接受任意类型参数,若写void,表示不接收。 intadd(intvalue,intvalue1);//显式函数声明,必须写,形参名字(如value)可以不写。 程序员完成 intmain() { ………… ………… } 形式参数可以实现双向数据传递,调用——>被调用: 输入参数;相反: 输出参数。 exit(0);终止整个程序的执行,和位置无关,头文件要加#include 使用数组做形参,不是临时创建,而是直接使用主函数提供的数组作为形参。 实参和形参是同一个数组,函数中修改了数组的内容,调用函数可以看成数组的变化。 普通变量做形参是值传递,数组是传递变量(同一变量)。 数组形参中变量的个数(数组长度)不可算。 故,使用数组做形参,需再设一形参num,表示数组长度或大小。 调用时格式: neg(arr,num); 递归函数在执行过程中还会再次调用自己,编写过程中一定要有分支,一支调用本函数,一支不调用本函数。 用循环方法解决问题的思路叫做递推,用递归函数解决问题的思路叫做递归。 递归最好不要初始化,递归多用在游戏中,尤其人工智能。 rand函数,产生一个随机数。 srand函数——>设置随机种子,生成随机数,通过rand函数返回。 time函数——>用来获取1970-1-1年0: 0: 0到当前时间的秒数,当参数为0时,得到的秒数通过返回值返回。 生成一个随机数: intdata=time(0); srand(data);设置随机种子 intresult=rand();得到随机数。 用%求余法固定随机数到一定范围。 如: rand()%4。 1.项目名称: 时光飞逝 happynewyear! 2.项目描述: 根据用户输入的年月日时分秒,计算出下一秒并输出。 3.项目分析: 3.1保存用户的输入: 定义六个变量接受用户的输入,intyear,month,day,hour,minute,seconds; 3.2计算下一秒,seconds++; 4.项目架构: C语言项目中——>函数是主题。 4.1主要模块: 4.1.1接受用户的输入 4.1.2计算 每个月的天数不一定相同 闰年和平年中12月的天数不一样 当秒数满60,分数满60等等 4.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 培训 笔记