资源描述:
《二级C语言程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
二级C语言程序设计一.计算机硬件组成原理1.中央处理器(CPU)(1).作用:数据处理a.ALU(算术逻辑处理单元):+-*/%&&II!b.控制器c.寄存器(cache)(2).技术参数a.主频:表示cpu单位时间内的运算次数(a).原则:数值越大,效能越好,价格越高
1(a).查看:我的电脑.>单右b.二级缓存:内置在CPU中,造价高昂,主要用于存储后备指令及数据,其容量大小对CPU性能影响很大.(2MB-8MB)(查看方法:CPU-Z)(1).作用:提供设备的接口,提供传输的公共信道•总线,形成一个系统平台(2).构成a.接口(a).CPU插槽(b).内存插槽
2(a).显卡插槽(b).硬盘插槽(c).PCI插槽(d).电源供电插槽(e).ps/2、VGA、USB、声音、麦克、NIC接口b.控制器:(a).北桥:控制CPU、内存、显卡(b).南桥:控制I/OC.总线(1).参数a.北桥芯片的型号b.主板的大小
3c.电容的质量d.设备的兼容性3.硬盘(HDD)(1).作用:永久性、坚固的、外部存储设备(2).参数a.容量:500GB起b.转速:(a).笔记本:5400rpm(b).台式机:7200rpm(c).转速决定数据传输速度c.缓存:16MB-64MBd.接口:SATA(串口)4.内存(1).作用:与CPU直接联
4系,负责各种软件的运行,临时存储程序和数据。(1).存储器的速度降序排序:寄存器。内存。硬盘•>外设(2).参数a.容量:2G起b.频率:1600Mhzc.版本:DDR3d.是否双通道:使用偶数根内存条插在同色插槽上,传输性能会有所提升(注意:所有内存条的参数必须相同)3.显卡(1).作用:处理图形图像信息(2).参数
5a.显存:1GBb.位宽:一次性传输的二进制数;128b>256bc.GPU的型号d.独立显卡/集成显卡e.独有技术6.显示器(1).CRT(2).LED显示器a.优点:设备轻便,功耗低,散热少.b.缺点:色彩还原度相对较弱c.参数(a).尺寸:17寸、19寸、22
6寸(a).动态对比度:100000:1(b).灰阶响应时间:4MS以下(c).可视角度:178度(d).亮点/坏点7.电源(1).台式机:300w以上(2).笔记本电池a.接外接电源时应拔下电池b.电池剩余为60%-70%时拔下8.键盘鼠标
7(1).键盘a.分类:电容键盘、机械键盘b.接口(a),ps/2(b).USB(c).无线c.注意:注意防水.(2).鼠标:注意PPI及舒适度7.光驱(1).光盘的规格a.CD-R:700MBb.DVD-R:4.5GB/9GBc.DVD-RW:亥!J录
8a.BD-R:蓝光,25GB/50GB(2).光盘的刻录a.数据集中存储在一个文件夹中b.刻录时尽量选择慢速刻录(4x)c.保持电压稳定10.移动设备(1).U盘a.作用:存储容量较小的文件.b.容量:16GBc.接口:USB3.0
9(1).移动硬盘a.容量:500GB起b.结构:2.5英寸硬盘+控制器c.注意防震d.养成使用移动设备的好习惯(a).先杀毒,后打开.(b).打开时,单击右键打开。二.程序设计的预备知识1.计算机的五大部件⑴.图:
1012).分析:a.过程:用户通过输入设备把数据存入内存中,在控制器的控制下,ALU在内存中取数并完成运算再写回内存,最后输出.b.根据冯诺依曼原理(先存储、后处理)进行程序的执行与设计c.计算机使用二进制表示数据,使用十六进制显小数据2.数制(1).作用:数在计算机中表
11示形式(1).组成:十进制、二进制、十六进制、八进制(2).表格:十进制二进制八进制十六进制DBOH000000010001112001022
12300113401004450101556011066°7011177810001089d10019Io1010A
13111011121100C131101D141110EH151111F~1000010结论:(10)n=(N)10即:N进制的幺零等于十进制的N(1).各进制的作用:
14a.十进制:人的一般计数方法。b.二进制:计算机表示数的方式c.十六进制:计算机在显示二进制时使用的方式d.八进制:进制转换的中间值或工具(1).二进制、八进制、十六进制向十进制转换a.按权展开式(a).例如1:32767(D)->D=30000+2000+700+60+7
15=3*10,+2*103+7*1()2+6*1。1+7*10°=32767(D)例如2:326(O)->D=300+20+6=3*82+2*81+6*8°=214(D)例如3101101(B)->D=100000+1000+100+1+1^23+1*22+1*2°=32+8+4+1=45(D)例如4
1647FD(H)->D=4000+700+F0+D=4^163+7n62+15^161+13*160=18429(D)b.方法2:以BoD为例76543210-1-2-3-4-5-6-7权值xxxxxxxx•xxxxxxx1286432168421.1/21/41/81/161/321/641/128其中X取值为0或1例如:11110000->
17128+64+32+16->24001011101->64+16+8+4+1->93注意:整数位最后一个二进制为1时,其十进制为奇数.11->0.5+0.25->0,75.00101->1/8+1/32->5/32.1111111->127/128(a).十进制向二、八、十六进制转换a.方法1:(a).整数:短除取余,倒排(b).小数:短乘取整,正
18排(a).例如:D->B(b).注意:十进制小数转二进制时,若出现循环则在出现第一次重复值时会进行截取操作,产生误差.b.方法2:包含预测,以D->B为例(a).例如:40(D)->B=32+8=00101000(B)133(D)->B=128+4+1=1000
190101(B)197(D)->B=128+64+4+1=11000101(B)(a).注意:若八位二进制中数据较大,则可使用255(11111111)进行相减,就可知道最终结果所缺少的二进制位.c.方法3:拆分35(D)->B=32+3=4*8+3=0100^1000+0011=0100000+0011=00100011
20(7).二、八、十六进制相互转换a.二进制向八、十六进制转换(a).原则:以小数点为中心分别向左右两侧按3位(O)、4位(H)进行划分,在把每一组分别转换成对应进制,若位数不足,则以零补上,补零原则:“左左右右”即整数位左起补零,小数位右起补零(b).例如:
2111100101(B)->O=011100101=345(0)=00010101.1100=15C(H)b.八、十六进制向二进制转换(a).原则:把每一个数值按照3位(O)、4位(H)一组进行转换(b).例如:47(O)->B
22=100111(B)3DF9(H)->B=0011110111111001(B)3.码制(1).机器码:二进制中每一位都表示数据,此编码计算机不使用,因为不能表示负数。(2).原码a.产生意义:为了表示正数及负数b.规则:在八位二进制中,最高位表示符号位,0表示正数,1表示负数,剩余低7位表示数据,则原码产生
23c.例如:5(原)=00000101(原)-5(原)=10000101(原)01111111(原)->12711111111(原)->-127d.原码范围:(a).八位机:[-127,127]11111111(b).十六位机:[-32767,32767](C).三十二位机:
24[-2147483647,2147483647](d).N位机:[-(2nl-l),2n-1-l]e.原码的缺陷(a).计算1(原)+-1(原):00000001+10000001->10000010->-2,计算正确,但结果与人的计算规则相左,所以原码在计算加减时可能有错.(b).原码区分正负零:0(原):00000000•0(原):10000000
25由于人不区分正负零,则原码在表示十进制时会少表示一个,八位机下只能表示255个(应为256个)(a).注意:原码可以直接换算十进制(b).补码a.产生原因:由于原码表示十进制时会缺少一个,且原码无法实现使用加法表示减法,则使用补码来表示计算机中的数值b.规则:Cx>=0:x(补)=x(
26原)=机器码枭进制X<0:x(补)=最高位为1,剩余位按位取反,末位加1.C例如:25(补)=00011001(补)•25(补)=25(原)=00011001=11100111(补)-1(补)=-1(原)=10000001(原)=11111111(补)(12・14)补
27=12(补)+・14(补)=00001100+11110010=11111110(补)=10000010(原)=-2(D)d.补码的范围:(a).八位机:[-128,127](b).十六位机:[-32768,32767](C).三十二位机:[-2147483648,2147483647](d).N位机:
28-211_1,2n-1-l]e.补码的特点(a).补码中计算1(补)+・1(补)结果为0正确(b).补码可以实现使用加法代替减法(c).补码不区分正负零0(补)=00000000-0(补)=00000000(d).补码表示的十进制个数不缺少,八位机下:128,127],共256个数值.(e).证明补码最小值:-1(补)=11111111(补)
29-2(补)=11111110(补)-3(补)=11111101(补)-4(补)=11111100(补)-5(补)=11111011(补)X(补)=10000000(补)X+l(补)=10000001(补)x+l(补)=127X(补)=・128=1。000000(补)(e).补码最大值加1后变为最小值,例如:127+1・>,28(八位
30机)127(补)+1=01111111+1=10000000(补)=-128例如:下列程序是否为死循环,输出结果?inti;for(i=l;i>=l;i++)■printf(H%d
31H3);分析:上例不是死循环,由于VC++6.0使用32位补码表示数值,则i自增到2147483647
32时,在加1就会得到•2147483648,此时i>=l不成立,循环退出4.内存知识(1).概念:是一个一维、线性、连续存储空间。(2).特点a.内存是按字节进行编址b.编址原则(a).从零开始编址(b).连续编址(c).使用二进制编址,十
33六进制表示C.内存空间必须先申请后使用4.垃圾数据(1).概念:内存空间是由操作系统管理,是一个公共的存储空间,若申请空间后,没有赋初始值就参与该空间中有值,是上一次后续运算,则结果未知,某个软件使用该空间的残留数据,称为垃圾数据。(2).结论:内存空间必须先申请后赋初始值在参与运算三.VC++6.0软件的使用介绍
341.C语言程序文件的类型(1).源文件:*.c(2).目标文件:*.obj(3).可执行文件:*.exe2.源文件的新建(1).文件菜单)新建。文件选项卡,C++sourcefile。在右侧输入文件名(必须以・c结尾)•>设置存储路径(2).文件夹中单右。新建文本文件。删除文件名及.txt。输入新文件名。必须以.C结尾。三次回车(3).注意:若.txt隐藏应作
35如下处理:组织。文件夹和搜索选项。查看选项卡。拖动滚动轴。去掉“隐藏已知文件类型扩展名”的对勾.2.输入代码(1).调整工作环境:a.更改字体字号:工具菜单。选项。点击右侧箭头。格式选项卡。先设置字体(仿宋),在设置字号.b.结果查看框的修改:点击标题栏。单右。属性。字体选项卡。新宋体。设置字号;点击颜色
36选项卡。文字颜色设置为黑色,背景颜色设置为白色.(1).输入代码格式的限定a.由上到下,逐行输入b.花括号独占一行c.括号一次性输入一对,中间插入内容d.使用tab键进行向右缩进e.原则:程序应写为锯齿形向右缩进格式,使用格式体现逻辑层次关系.2.编译运行(1).编译a.作用:语法检查b.快捷键:ctrl+F7
37c.出错后处理:(a).原则:必须改正语法错误,后重新编译(b).技巧:在错误提示栏中点击右侧上箭头,双击第一个错误提示,观察正文中的蓝色箭头,确定出错位置行.d.注意:语法正确不能代表程序功能正确(1).运行:a.作用:执行当前程序b.快捷键:ctrl+F5四.C语言程序设计1.常量与变量
38(1).常量a.整型常量(a).十进制格式:例如1200(b).八进制格式:以0开头后跟上八进制数字(数7)例如:0123078错误(C).十六进制格式:以0x(0X)开头,后跟十六进制数字。(0-9,A・F)例如:0x450X3AE0XCHINA
390x456(错误)字母o0X789(错误)b.浮点型(实型)(a).普通格式:例如:3.1456,-4.98(b).科学计数法格式♦格式:xey(xEy)♦例如:10e6->10*106♦要求:x与y一个都不能少;e前后不能插入空格;y只能是整数.♦例如:5e3.6错误
40.e6错误4e9错误12.e3正确1.234e04正确1.234e+4正确c.字符型(a).基本格式:4(b).内存格式:6542(c).八进制格式:,\ior,\52,跟上L3位八进制数值
41(a).十六进制格式:”41',\x2A,跟上1-2位十六进制数值(b).注意:字符型常量必须使用英文半角的单引号作为定界符.(c).转义字符字符意义ASCII
42
43回车:换行后跳到下一行首10\r回车:跳到本行首,不换行13\t水平制表(跳一个tab距离)9\b退格:光标向左移动一列8\f换页,跳到下一页开头12\\输出一个'92V输出一个单引号39V'输出一个双引号34d.字符串
44(a).格式:以双引号引起的字符集合(b).例如:”china”na\bi\,lh\bovi\be\,\\\byou\,
45n结果:i,love,you,(2).变量a.本质:是内存的一段连续存储空间b.变量的三要素(a).变量名:是“人文化”的空间首地址.(b).变量类型:内容的识
46别方式及长度(a).变量值:使用类型解释后的二进制结果C.变量定义时的命名原则:(a).格式:只能以字母、下划线、数字组成,不能以数字开头.(b).变量名不能使用系统关键字intdoublecharfloatforifelsewhiledoautobreakcontinuegotolongregisterreturnshortsizeof
47signedstaticstructswitchcaseunionvoidunsigned(C).区分大小写(d).见名知意d.注意(a).变量定义的意义:inta;在内存的剩余空间中申请一段空间命名为a,能存储一个整数,占用4Bdoubleb;在内存的剩余空间中申请一段空间命名为b,能存储一个双精度小数,占用8B(b).变量占用字节数:int4Bfloat
484Bdouble8BcharIB(a).变量必须先定义后赋值在使用(b).定义变量时,必须一次性连续定义.例如:inta=2,b=3;a=a+b;intsum;sum=a+b;错误,必须集中一次性定义inta=2,b=39sum;2.运算符与表达式(1).运算符优先级
49()高方向:左・>右++-方向:右左~*/%<<=>>=方向左->右==!=&&II=®方向右->左
50(1).算术运算符a.组成:+・*/%b.除法(/)(a),int/int->int(b).例如:1/2->0c.取余(%)(a).原贝lj:只能针对非小数使用,若a%b其符号与a同号(b。例如:5%3.5错误5%3->23%5f350%30->20
51d.算法:取出一个四位数的每一位。千位:x/1000百位:x/100%10十位:x/10%10个位:x%10后三位:x%1000例如:有2个十位数ab与cd,拆分组成后组成一个新四位数,原则如下:ab->12cd->54新数:5214intab=12,cd=54,abcd;abcd=cd/10*1000+ab%10*l00+ab/10*10+cd%10;
52printf(n%d
53f\abcd);e.数学函数(a),abs(x)取x的绝对值(b).fabs(x)取浮点型数字绝对值(b).sqrt(x)开x的平方根(c).pow(x,y)计算xy(1).关系运算符a.组成:>>=<<===!=b.关系运算符组成的关系表达式其结果为成立⑴,不成立(0)
54c.例如:3>5结果:05>X>2结果:0应改为:x>2&&x<5(1).逻辑运算符a.组成:&&II!b.逻辑运算符组成的逻辑运算表达式其结果为真(1),假(0)c.例如:5&&3结果:15&&0结果:05110结果:1
55!3结果:0!0结果:1(1).赋值运算符a.简单赋值运算符(a).组成:=(b).运算方向:由右至左(c).本质:覆盖(d).例如:inta=3;a=5;a=9;a变量存储9(e).注意:不能对常量赋值
56例如:3=6*2;错误(a).交换算法:inta=3,b=5,t;t=a;a=b;b=t;printf(n%d\t%d
57,\a9b);方法2:a=a+b;b=a-b;a=a-b;b.复合赋值运算符(a).组成:+=-=*=/=%=
58(a).例如:inta=5;a+=3;相当于:a=a+3;(b).注意:不能对常量赋值3+=4;错误可以进行连续复合运算inti=3;i+=i・=i*i;i->-12过程:先计算
59展开i=i-9;i=3-9;i=-6;在计算i+=-6;i=i+-6=-6+-6
60=-12
61(6).自增自减运算符a.++--b.自增自减步长:1C.使用原则:(a).不能对常量使用3++;错误相当于3=3+1错误(b).不能对表达式使用++(a+3);错误d.运算过程:(a).++i:置前自增,先对变量i自增1,在使用结果参与后续运算
62(a).i++:滞后自增,先使用变量i的值参与所有后续运算,最后对i自增L(b).例如:inti=3J=4,k;k=4*j++;printf(u%d.%d,%d
63”,ij,k);i->4>5k->16inti=3,j;j=(i++)+(i++)+(i++);printf(“%d,%d
64”,ij);i->6j->9inti=3J;j=(++i)+(++i)+(++i);
65i->6j->16(7).三目运算符a.关系运算符:?:b.格式:条件表达式?表达式1:表达式2c.意义:条件表达式为成立时,表达式1作为整个表达式的结果,否贝IJ,表达式2作为整个表达式的结果.d.例如:3>2?10:50结果:10e.注意:相当于if-else语句的功能
66(7).逗号运算符a.组成:,b.意义:逗号运算符优先级最低,本质是分隔表达式,其结果为最后一个表达式的结果.c例如:j=(3+4,5+9,6*7);j->42j=3+4,5+9,6*7;j->7注意:增加括号的区别.(8).类型转换a.自动转换
67(a).原则:在运算中,若参与运算的类型不一致,则会按照“短类型向长类型转换”“简单类型向复杂类型准换”,其过程不需要人为控制.(b).分析为:char->int->float->doubleb.强制类型转换(c).格式:(类型说明符)变量名表达式(d).例如:
68inti=5,j;doublet;j=2;t=(double)i/j;t->2.5(7).短路运算a.原则:1&&A->A0&&A->0IHA->11110->1OIIA->Ab.结论:
69(a).并且(&&)运算中,左侧为0时,右边表达式不在计算(b).或者(II)运算中,左侧为1时,右边表达式不再计算c例如:inti=lj=2,k;k=i-II++j;i->0j->2k->1k=-i&&++j;i->0j->2k->0
703.输入输出(1).输入a.函数:scanfb.来源:键盘c.格式:scanf(“格式类型说明符”,&变量名列表)d.例如:inta,b;scanf(“%d%d”,&a,&b);输入:3535scanf(“%d,%d”,&a,&b)
71■输入:3,5scanf(ua=%d,b=%d^&a,&b);输入:a=3,b=5(1).输出a.函数:printfb.输出目标:显示器c.格式:printf(“格式类型说明符”,变量名或表达式列表)d.格式类型说明符:描述
72变量的类型%d->int4B%f->float4B%If->double8B%c->charIB%s->字符串%o->无符号八进制%X->无符号十六进制e.注意:输出时类型说明符要与变量——对应,切输出时必须主动增加分隔符例如:inti=3J=4;
73printf(“%d%d”,ij);34printf(“%d,%d”,i,j);3,4printf(u%d
74%d”,i,j);3printf(<<%d\t%d”,ij);34f.原样照印(a).意义:非格式类型说明符会原样输出.
75(a).例如:printf(“i=%d,j=%d"3d);i=3J=4printf("hello!!”);4.流程控制(1).结构化程序设计原则:自顶向下,逐步细化.(2).组成:顺序结构、选择结构、循环结构(3).顺序结构a.原则:由上到下,逐条依次执行
76b.程序设计的一般思路:#includevoidmain(void)(定义变量初始化(类型、名称、个数)输入(scanf函数:类型、名称)处理(算法)输出(printf函数))c.例如:输入一个大写字母,转换成小写字母输出charch;scanf(n%cH,&ch);
77ch+=32;printf(Hch=%c
78H9ch);d.四舍五入8.32433->8,328.32533->8,33doubleh;scanf(n%lf\&h);h=(int)(h^l00+0.5)/100.0;printf(u%lf
79,\h);e.输入一个华氏温度,要
80求输出摄氏温度,公式为;C=5/9*(F・32).doubleC,F;scanf(n%lf\&F);C=5.0/9*(F-32);printf(H%lf
81,\C);(1).选择结构a.意义:通过判断条件进行分支执行的语句,又称为分支结构b・流程图:后
82I语句块1II语句引|语句块n|
83c.N-S图d.语法(a).标准结构if(条件表达式)
84{语句块1;)else(语句块2;(b).单if结构if(条件表达式)语句块;
85(c).嵌套结构if(条件表达式)(语句块1;)else(if(条件表达式)(语句块2;)elseif(……)
86e.注意(a),if-else语句只能控制一条执行语句,若要控制多条必须增加大花括号(b).else只与其上最近的if配对(c).if与else对应,else不能但对使用。(d).条件表达式的结果只有成立和不成立即非0和0两种结果。
87£例如:输入一个整数,判断能否被7或11整除,但不能同时整除inta;scanf(n%df\&a);if((a%7==0lla%ll==O)&&a%77!=0)printf(Hyes!
88n);elseprintf(nno!
89H);注意:上题中或者的优先级低于并且的优先级,需要增加括号.
90g.例如:输入一个百分制成绩,判断等级成绩,并输出。X>=90优秀90>x>=80良好80>x>=60合格6Q>x不合格inta;scanf(H%dH,&a);if(a>100lla<0)printf(”请输入百分
91制成绩!
92");elseif(a>=90)printfC优秀
93”);elseif(a>=80)printf(n良好
94");elseif(a>=60)printf("及格elseprintf("补考
95n);
96h.输入三个整数,输出大者.inta,b,c;scanf(n%d%d%df\&a,&b,&c);if(a>b)if(a>c)printf(nmax=%d
97'',a);elseprintf(nmax=%d
98'',c);elseif(b>c)printf(nmax=%d
99'',b);
100elseprintf(Hmax=%d
101'',c);1.switch-case结构(a).语法:switch(条件/变量)(case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式3:语句3;break;
102case常量表达式n:语句n;break;default:语句n+1;)(a).注意♦执行过程:当条件表达式与某个case后的常量表达式相等时,则执行其后语句,若都不相等则执行default后语句♦case后必须是常量或常量表达式,不同case后的值不能相同♦case与defaut的顺
103序不影响执行顺序♦case后若无break语句则会继续顺延向下执行(a).例如:使用switch-case结构改写判断百分制成绩程序inta;scanf(H%d,\&a);switch(a/10)(case10:case9:printf("优秀
104H);break;
105case8:printf(n良好
106n);break;case7:case6:printf("及格
107n);break;default:printf("补考
108*');break;)(5).循环结构a.for循环结构(a).语法:for(初始化;循环条件;步长)
109(循环语句块;(b).执行过程:(c).流程图:a.while循环(当型循环)(a).语法:初始化;while(条件)(循环体语句块;步长;)
110(a).流程图:同上a.do-while循环(直到循环)(a).语法:初始化;do循环语句块;步长;}while(条件表达式);(b).流程图:d.应用
111(a).累加和♦框架:sum=0;for(i=初始值;iv终止值;i++)(sum=sum+新项;)新项:与循环变量i有关与前后项关系有关♦例如:计算1+2+3+4+100
112和值.inti,sum=0;for(i=l;i<=100;i++)sum=sum+i;)printf(Hsum=%d
113'\sum);♦例如:1+1/2+1/3+1/4+-+1/100inti;
114doublesum=0;for(i=l;i<=100;i++)sum=sum+1.0/i;)printf(Hsum=%lf
115n9sum);结果:5.187378♦例如:计算1+1/2-1/3+1/4-1/5……+1/100inti,f=l;doublesum=l;
116for(i=2;i<=100;i++)sum=sum+1.0/i*f;f=-f;/*符号位切换*/)printf(Hsum=%lf
117n,sum)结果:1.311828♦例如:计算3/2+5/3+8/5+13/8……前20项的和值.规律:
118新的分子=旧的分子+分母新的分母=旧的分子inti;doublesum=0,a=3,b=29t;for(i=0;i<20;i++)/*i表示循环次数*/(sum=sum+a/b;t=a;/*备份旧的分子*/a=3+2;b=t;
119printf(Hsum=%lf
120n,sum);结果:32.278295♦例如:计算a+aa+aaa+aaaa•••…的和值,其中a值为2,个数6个.222222222222222222222inti9
121a=2,sum=0;for(i=0;i<6;i++)sum=sum+a;a=a*10+2;/*更新a*/)printf(Hsum=%d
122'',sum);结果:246912(b).素数判断♦概念:又称为质数,即只能被1和自己本身整除的数.♦判断三要素
123判断范围:[2,ml]判断方法:整除(%)判断次数:循环♦break语句:在循环中,若执行break,则循环立刻终止,继续执行循环外下一条语句.(跳出循环)inti,sum=O;for(i=l;i<=100;i++)sum=sum+i;if(i==50)break;
124)printf(usum=%d
125相当于:1+2+3+4+50♦continue语句:循环中,若执行continue语句,贝!J结束本次循环,立刻执行下一次循环。(加速循环)inti9sum=O;for(i=l;i<=100;i++)(
126if(i%2==0)continue;sum=sum+i;)printf(usum=%d
1279\sum);相当于:1+3+5+7……所有奇数之和♦算法1:标准算法for(i=2;i128)if(n==i)处理n;♦算法2:f=l;for(i=2;i129处理n;注意:设置f为标志位,并赋初始值,在处理过程中,条件发生变化,则更改f的值,最后只检查标志的值即可♦算法3:精简算法for(i=2;n%i;i++);/*空语
130句,分号不能省略*/if(n==i)处理n;♦算法4:在可定范围2.N中,依次把2的倍数删除,再把3的倍数删除按顺序依次删除,剩余数即为素数.(C).穷举搜索♦概念:在指定范围内寻找符合条件的♦框架:
131面也二起始值;iv终止值;i++)(if(条件)处理;♦例如1:打印水仙花数:概念:是一个三位数,各位的立方和等于其本身值.153370371407inti,gw,sw,bw;for(i=100;i<1000;i++)
132(gw=i%10;/*个位*/sw=i/10%10;/*十位*/bw=i/100;/*百位*/if(gw*gw*gw+sw*sw*sw+bw*bw*bw==i)printf(H%d
133n,i);♦例如2:打印100以内的素数.intij;for(i=2;i<100;i++)/*访问2-99*/
134for(j=2;jvi;j++)/*判断i是否为素数刃if(i%j==0)break;printf(u%d\tn3);)♦例如3:打印大于m且紧随m的k个素数,如:m=5,k=4,结果:7111317intm,k,ij,t=O;scanf(n%d%dn9&m,&k);for(i=m+l;t135开始寻找,共找k个*/for(j=2;jvi;j++)/*判断i是否为素数*/(if(i%j==O)break;)if(i==j)(printf(H%d\tH,i);t++;/*记录素数个数*/
136♦例如4:打印200以内的完数.完数:其因子之和等于原值,即:6=1+2+3,则6为完数.intij,s;for(i=6;i<200;i++)(s=0;/*因子之和清零*/for(j=l;j
137*/if(i==s)/*判断完数*/prmtf(H%d
138n4);)(d).打印图形♦例如1:打印九九乘法表intij;for(i=l;i<10;i++)/*打印1-9刃printf(H%d\tH4);printf(H
139H);
140for(i=l;i<66;i++)/*打印分割线*/printf(H-H);printf(H
141n);for(i=l;ivlO;i++)/*打印i*j的左下半三角*/(for(j=l;j<10;j++)printf(H
142n);♦打印如下图形:***rjMrjwrj»
143*x**x*•J*rj*rjwrj*rjw分析:共打印4行每行打印空格、星号、换行星号:1、3、5、7空格:3、2、1、0换行:1个打印n行:inti,j,k,n;scanf(H%dH,&n);for(i=0;i144for(k=0;kv2*i+l;k++)/*打印若干个星号*/printf(H
145H);/*打印一k个换行*/)♦打印斐波拉契数列例如:11235813……inti,al=l,a2=l;for(i=0;i<10;i++)printf(n%d,%d;\al,a2);al=al+a2;/*当前项等于
146前两项之和*/a2=al+a2;)(e).其它♦例如1:整数的逆转判断回文:intm,n,t=O;scanf(n%d,\&m);for(n=m;n>0;n/=10)/*整数逆转*/t=t^l0+n%10;if(t==m)printf「回文
147”);
148elseprintf(Hno!
149H);♦例如2:猴子偷桃问题:一天吃一半还要多吃一个,第7天吃完,问偷桃几何?第7天:0第6天:2第5天:6第4天:14第3天:30第2天:62第1天:126偷:254inti9n=O;
150for(i=0;i<7;i++)(n=(n+l)*2;)printf(H%d
151n,n);5.数组(1).产生意义:是对变量空间在数量上的扩充,适用于处理批量的数据(2).包含:一维数组(int)、字符串、二维数组(3).一维数组a.定义:
152(a).格式:类型说明符数组名[数组大小](b).例如:inta[10];/*在内存剩余空间中,申请一个数组命名为a,共10个单元,该数组占40B*/(c).类型说明符:int、char、float、double(d).数组名:数组名是一个常量,是该数组所占内存单元中第一个单元第一个字节的首地址.例如:a++;错误
153•(e).数组大小:常量或常量表达式.inta[3+5];inta[n];n=5;错误,不允许数组动态定义.b.引用:(a).格式:数组名[下标](b).下标:十进制,范围:[0,数组大小(c).例如:inta[10];a[0]=5;a[3-2]=4;a[10]=6;
154错误a[a[0]]=3;正确相当于a[5]=3;c.输入(a).定义的同时输入♦inta[5]={123,4,5};标准♦inta[]={1,2,3,4,5,6);♦inta[5]={l,2,3};不完全赋值方案,剩余补零
155♦inta[5]={0};数组清零♦inta[5];a[5]={l,2,3,4,5);错误(b).循环赋值框架:for(i=0;iv数组大小;i++)scanf(u%d?\&a[i]);d.输出:
156框架:for(i=0;iv数组大小;i++)printf(u%d\f\a[i]);e.一维数组的应用(a).数组的访问♦框架:for(i=0;iv数组大小;i++)(处理a[i];
157♦例如:计算一维数组a[10]中奇数之和与偶数之和.inta[10]39sumJs=09sum_os=0;for(i=0;i<10;i++)scanf(n%df\&a[i]);for(i=0;i<10;i++)(if(a[i]%2==0)sum_os+=a[i];elsesumjs+=a[i];)
158printf(njs=%d
159os=%d
160二sumjs?sum_os);(a).数组的逆转(逆置)♦图例:
161♦框架:i=0;上=数组大小while(i162整除的数存储到a[300]中.inta[300]JJ=0;for(i=5;i<=1000;i++)(if(i%5==0lli%9==0)a[j++]=i;)for(i=0;i163(a).排序:♦原则:有n个数,一共进行n-1次比较,每一次都是当前值与下一个值进行比较,每次都需要比较到n之前♦框架:for(i=0;i164a[j]=t;inta[5]={10,20,30,40,50};intij,t;for(i=0;i<4;i++)(for(j=i+l;j<5;j++)(
165t=a[i];a[i]=a[j];a[j]=t;for(i=0;i<5;i++)printf(n%d\t,,,a[i]);6.函数(1).产生意义:由于软件是由若干个功能模块组成,每一个模块实现一个特殊功能,且可以重复使
166用,该模块称为函数,使用函数思想编写软件,使软件效率、利用率得到提—iiWj(1).例如:#includeprintlQprintf(HrjwjjwrjwnH);print2()printf(HHowdoyoudo!
167H);voidmain(void)
168(printlQ;print2();printlQ;)执行主函数main。中内容时,会调用子函数printl与print!(1).函数分类:a.一般分类:主函数(main)、一般功能函数b.按作者分类:库函数(系统自带)、用户自定义函数
169c.按调用顺序分类:主调函数、被调函数(1).函数的产生步骤a.组成:声明、定义、调用b.顺序(a).标准顺序:声明、定义、调用(b).特殊顺序:声明、调用、定义(c).特殊顺序:定义、调用(int)(d).错误顺序:调用、定义(错误)(2).函数声明
170a.作用:向VC++编译系统进行声明函数的名称、参数等信息,以便于检错b.格式:函数首部;(1).函数定义a.作用:实现函数功能即编程b.格式:函数返回值类型函数名(形参列表)(程序段;)
171C.注意(a).函数名是一个常量,是该函数所占内存空间中的入口地址(b).函数名要求见名知思(C).函数返回值类型:该函数向主调函数返回的结果类型,若返回结果的类型与其不同,最终按函数返回值类型进行强制转换后返回(d).形参列表:接收主调
172函数传递的值,若有多个参数,其类型不能省略intfun(inta9intb)正确intfun(inta,b)(e).return语句♦作用:向主调函数返回一个结果,并结束当前子函数的执行♦格式:return变量'常量'表达式;return;结束
173当前函数的执行若:returna,b;错误(7).函数调用a.作用:使用函数功能b.格式:函数名(实参列表);
174C.形式:;例如fun(m);n=fun(m);s=s^fun(m);printf(u%d
175”,fim(m));fun();(7).例如:计算c(m,n)=ml!(根-〃)!的值#includeintfun(intx);/*函数声明*/intfun(intx)/*函数定义*/
176(intijc=l;for(i=l;i<=x;i++)(JC=JC*1;)returnjc;)voidmain(void)(intm,n,s;scanf(n%d%d,\&m9&n);s=fun(m)/(fun(n)^fun(m-n));printf(n%d
177n9s);
1787.指针(1).指针与地址的概念a.地址:内存单元的地址,是一种编号,是内存单元中每一个字节的编号.是一个常量b.指针:指针就是地址就是编号.(2).指针产生的意义a.计算机引用数据的方式(a).直接引用:通过变量名引用变量空间中的值(b).间接引用:定义一个
179特殊的变量存储另一个变量的内存空间首地址,若要引用另一个空间的值,则先使用当前特殊空间的值.(C).指针产生的意义:只是多了一种引用数据的方式.b.指针的本质:指针就是地址就是编号,是一个常量.(1).指针变量a.区别(a).指针:是常量即内存空间的首地址
180(a).指针变量:是一个特殊空间,只能存储地址,恒占4B.(b).例如:inta=3;int*p;p=&a;b.定义:(a).格式:基类型*指针变量名;(b).例如:int*p;/*在内存的剩余空间中申请了一段空间,命名为P,能存储另一整型变量的首地址,占用4B*/
181double*q;/*在内存的剩余空间中申请了一段空间,命名为q,能存储另一double变量的首地址,占用4B*/(c).注意♦基类型:常见类型,即int>double>char,表示指针变量的能力。♦首地址:指针变量存储对方空间的第一个字节的地址(编号)(4).指针变量运算符a.&:取地址运算符,即
182获取变量所占内存空间的首地址,格式:&变量名.*:指向运算符(取值
183运算符),即取出变量空间中的值,格式:*指针变量3例如:inta=3,b=5;intp=&a;q=&b;*p=5;*q=3;p=q;q=&a;(5).汪意事项
184a.&运算符后只能跟变量,不能跟常量或表达式&3错误inta=3;&(&a)错误b.*运算符在定义时表示只是一种标志,定义结束后则为取值运算符。int*p;标志*p;运算符C.先定义,在指向,后引用int*p;*p=35;错误,指向空间不明
185d.基类型必须相同(a).例如:int*p,*q;doublea;a=12.36;p=&a;*p->取值错误(b).注意:基类型表示指
186针变量运算时的取值能力e.牢记:指针变量的赋值方式只有以下三种:(a).通过&赋值例如:inta=3,*p;p=&a;(b).指针变量之间相互赋值:、例如:inta=3,*p,*q;p=&a;q=p;(c).通过标准函数赋值malloc函数calloc函数
187f.&运算符与*运算符互为逆运算例如:inta=3,*p,*q;p=&a;q=&(*p);/*q=p*/(6).指针变量的移动例如:inta[5]={l,2,3,4,5};int*p;P=a;P++;注:P++;表示p=p+l;其中1表示一个基类型距离,
188加号表示向高地址方向移动,则P++;表示向高地址方向移动一个基类型距离.此时P指向a[l];注意:指针变量相减表示指针变量所指向空间相差元素个数.指针变量相加、相乘除,无意义.(6).指针变量与一维数组的关系a.数组名的本质(a).本质:一维数组的数组名是该数组所占内存空间中第一个
189单元第一个字节的首地址(a).例如:inta[3],*p;P=a;/*p=&a[O]*/b.指针变量与数组关系:(a).例如:inta[5]={l,2,3,4,5};int*p;P=a;其中:p+0;a+0<=>&a[0];*p;*a;<=>a[0]<=>1p+1;a+1<=>&a[l];
190*(p+l);*(a+l)v=>a[l]v=>2p+4;a+4<=>&a[4];^(p+4);^(a+4)<=>a[4]<=>5结论:a[i]*(a+i)表象本质例如:inta[5]={10,20,30,40,50};printf(n%d
191n,4[a]);由于a[4]是表象,在编译时会转换成*(a+4),则根据加法交换律,*(4+a)也成立.c总结:一位数组的引用方式:例如:inta[5],*p;
192P=a;a[i]*(a+i)*(p+i)p[i](8).二维数组与指针变量的关系a.数组指针(a).格式:基类型(*指针变量名)[列值](b).例如:inta[3][4];int(*P)[4];(c).注意:此时上例中数组指针p+1,代表移动[4]即一行.
193(a).注意:♦数组指针:int(*p)[4];表示定义一个个指向二维数组的指针变量,p此时加1移动1行。♦指针数组:int*p[4];表示定义一个指针数组,即定义4个指针变量,能指向4个int变量或4个一位数组b.关系:(a).例如:inta[3][4];
194int(*p)[4];P=a;v=>*(p+i)[j]设*(p+i)为x则x[j]<=>*(x+j)v=>*(*(p+i)+j)(a).结论:表象本质a[i]U]*(*(a+i)+j)(9).指针变量与函数的关系a.形参与实参(a).个数统一,类型相同,按位置对齐(b).传递分类
195♦值传递:实参向形参传递值,形参改变,实参不变。♦地址传递:形参改变,实参一同变化b.例如:intfun(inta,intb)(intt;t=a;a=b;b=t;)voidmain(void)(
196inta=3,b=5;fun(a9b);printf(n%d,%d
197f\a,b);注释:以上为函数间值传递,子函数中变量改变,不会影响主函数中变量的值,输出还是3,5intfun(int*a,int*b)(intt;t=*a;*a=*b;*b=t;)voidmain(void)
198inta=3,b=5fun(&a,&b);printf(u%d9%d
199,\a9b);)注释:上例为地址传递,子函数中的指针变量直接操作主函数中整型变量,则会有变化,输出为5,3