c,,程序设计个人总结_第1页
c,,程序设计个人总结_第2页
c,,程序设计个人总结_第3页
c,,程序设计个人总结_第4页
c,,程序设计个人总结_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 / 33 c,程序设计个人总结 通过上个学期的 C 语言学习之后,这学期我开始了 C 语言的实训。这次实训一共有 12道题,可以说这 12道题要运用学过的所有 C语言知识。刚开始的两天,由于长时间没有接触这科,所以编程的时候有一些困难,通过课下的复习我逐渐开始适应编程的节奏。这一周的编程我对于之前不怎么熟悉的语句逐渐熟悉了,通过不断的调试过程,我改正了编程的一些毛病,对于之后的实训有很大的帮助。 我认为学习 c语言不能停留在学习它的语法规则,而是利用学到的知识编写 c 语言程序,解决实际问题。即把 c 语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握 c语言、自己编写的程序是否能够正确地解题。 通过上机实验来验证自己编制的程序是否正确,恐怕是大 多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去 掩盖 程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行2 / 33 时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对 c语言的理解和程序开发能力。 第一章 本章小结 1. 计算机是由程序控制的,要使计算机按照人们的意图工作,必须用计算机语言编写程序。 2. 机器语言和汇编语言依赖于具体计算机,属低级语言,难学难用,无通用性。高级语言 接近人类自然语言和数学语言,容易学习和推广,不依赖于具体计算机,通用性强。 3. C语言是目前世界上使用最广泛的一种计算机语言,语言简洁紧凑,使用方便灵活,功 能很强,既有高级语言的优点,又具有低级语言的功能,即可用于编写系统软件,又可用于编写应用软件。掌握 C语言程序设计是程序设计人员的一项基本功。 4. 一个 C 语言程序是由一个或多个函数构成的,必须有一3 / 33 个 main函数。程序由 main函数 开始执行。在函数体内可以包括若干个语句,语句以分号结束。一行内可以写多个语句,一个语句可以分写为多行。 5. 上机 运行一个 C 程序必须经过 4 个步骤:编辑,编译,连接,执行。要熟练掌握上机技 巧。 6. 用 C 语言编写好程序后,可以用不同的 C 编译系统对它进行编译。目前所用的编译系统 多采用 集成环境:把编辑,编译,连接和执行等步骤在一个集成环境中完成。 7. 目前所用的 C+集成环境功能强,使用方便。由于 C+和C 兼容,可以用 C+集成环境 对 C 程序进行编译,连接和运行。 第二章 本章小结 4 / 33 1. 在 C 语言中,数据都是属于一定的类型的。不同类型的数据在计算机中所占的空间大小 和存储方式是不同的。整数以其二进制数形式存储,字符型数据以其对应的 ASCII代码形式存储,实数以指数形式存储。 2. 要区别类型和变量,类型名和变量名。如: int a=3; int 是类型名, a 是变量名。类型相当于模板,它只是一种抽象的规定,不占存储空间,不能在其中存放数据,如写成int=3 ; 是错误的。变量是根据类型所规定的原则建 立的实体,它占存储空间,可以在其中存放数据,写成 a=3;是正确的 3. 在程序中,数据的表现形式有常量和变量。常量有字面常量和符号常量两种形式,符号 常量和变量不同,它不占存储空间,不能对它指定存储类型,不能被赋值,它只是一个字符串,用来代替一个已知的常量。 5 / 33 4. 标识符用来标识一个对象。变量 名必须符合 C标识符的命名规则,不要使用系统已有定义的关键字和系统预定义的标识符。变量名要尽量 见名知意 。 5. ANSIC 标准没有具体规定各类数据在内存 中所占的字节数,由各 C编译系统自行决定。 常见的有两种: Turbo C 等, short: 2 字节, int:2 字节,long:4 字节; Visual 是, float 为 4 字节, double 为 8 字节。可以用运算符 sizsof 或 sizsof 测出所用 C系统给各类数据分配的字节数。 6. 要区别字符和字 符串。 a 是一个字符, a 是一个字符串,它包括 a 和 0 两个字符,一 个字符型变量只能存放 1 个字符。 7. 使用 +和 -是 C 的一个特色,可以使程序清晰,简练,但用得不适当, 6 / 33 也会产生副作用。一般只使用最简单的形式,如 i+,p-。防止出现二义性,为方便于理解和减少出错,需要时可以加括号。 8. 在算术表达式中,允许不同类型的数值数据和字符数据进行混合运算。 C 语言编译系统 把 float 型数据都处理为 double 型。两个不同类型数据进行算术 运算时,占字节少的数据先转换为字节多的数据类型,然后进行运算,得出的结果是字节多的数据类型。 第三章 1.为了编写程序,必须首先设想好解决问题的方法和步骤,这就是算法。处理任何 问题都需要有算法。作为程序设计的初学者,应当了解什么是算法,知道构造算法的思路,会使用现成的算法,并且会设计相对简单的算法,为今后进一步学习和进行程序开发打下基础。 2.构思好算法,还需要用合适的,规范的方式来表示。常用的表示算法的方法有:自然语言,传统流程图,结构化流程7 / 33 图, PAD 图,伪代码等。它们各有优缺点。专业工作者习惯用伪代码,书写自由,修改方便。在教学中多用流程图,形象直观,容易掌握。本 书主要采用 N-S流程图。有了流程图,可以方便地转换为程序,也便于读者阅读和检查程序。 3.一个具有良好结构的程序由三种基本结构组成。这三种基本结构是:顺序结构,选择结构循环结构。由这三种结构组成的程序结构合理,思路清晰,容易理解,便于维护。这样的程序称为结构化程序。 语言中的语句的作 用是使计算机执行特定的操作,所以称为执行语句。程序中对变量的定义是为了对变量指定类型,并据此分配存储空间,这是在程序编译时处理的,在程序运行时不产生相应的操作,它们不是 C 语句。 5.表达式加一个分号就成为一个 C 语句。赋值表达式加一个分号就成为赋值语句。 C 程序中的计算功能主要是由赋值语句来实现的。 6.在赋值时要注意赋值号两侧的数据类型是否一致。如果都是数值型数据可以进行赋值。这种情况称为赋值兼容。但若两侧的数据的具体的类型不一致,在赋值时要进行类型转8 / 33 换。将赋值号右侧的数据转换成赋值号左侧的变量的类型,然后再赋值,但可能发生数据失真。 7.在 C语言中,数据的输入输出主要是通过调用 scanf函数和 printf 函数实现的。 Scanf 和 printf 不是 C 语言标准中规定的语句,而是 C 编译系统的函数库中提供的标准函数。读者要熟练掌握 scanf函数和 printf 函数的应用。 8.熟悉几个名词 格式控制: scanf 函数和 printf函数中双撇号中的部分。 格式声明:由 %和格式字符组成,如 %d,%c,% 格式字符:用来指定各种输出格式,如 d,c,f,e,g 等。 附加格式字符:对格式字符的作用作补充说明,如 %3d, %,%-中有下划线的字符。 9. 赋值语句和输入输出语句是顺序程序结构中最基本的语句,它们不产生流程的跳转。 9 / 33 10. 读者要学会编写简单的程序,并上机调试。 第五章 1.循环结构是用 来处理需要重复处理的操作的。循环结构是结构化程序设计的基本结构之一。熟练掌握循环结构的概念及使用,是程序设计的最基本的要求。 2.要构成一个有效的循环,应当指定两个条件:需要重复执行的操作,即循环体;循环结束的条件。 3.在 C 语言中可以用来实现循环结构的有三种语句: while语句, do。 while 语句和 for 语句。它们是可以互相代替的。其中以 for循环用得最广泛,最灵活。应当掌握这三种语句的特点和应用技巧,尤其是注意循环结束条件的确定,它很容易出错。例如例中循环继续的条件是 i 100,常常有人把 while 语句中的循环继续的条件错写成 i 4.如果循环体有多余一个的语句,应当用大括号把循环体的多个语句括起来,形成符合语句,否则系统认为循环体只有一个简单的语句。 语句和 continue 语句用来改变循环状态。 Continue 语句和10 / 33 break语句的区别是: continue语句只结束本次循环,而不是终止整个循环的执行;而 break 语句则是结束整个循 环过程,不再判断执行循环的条件是否成立。 6.循环可以嵌套。所谓嵌套,是指在一个循环体中包含另一个完整的循环结构。 3 种循环结构语句可以互相嵌套,即任一个循环语句可以成为任一种循环的循环体的一部分。 7.有关循环的算法很丰富,学习了循环之后,可以写出复杂和有趣的程序,大大拓宽编程的题材,提高编程的水平。读者最好多看程序,多做练习,掌握各种解题的算法。 1. 编译器选择 8 级优化时,可能会出现错误。刚写好的程序,建议先用 0级优化看能否正 常运行,再用更高的优化等级进行优化。 2. a、写中断程序一定要用 using 语句指定寄存器组。第 1、2、 3组都可 以,不能是 0,否 则可能会 main 函数冲突。从一个中断程序中调用函数必须11 / 33 和中断使用相同的寄存器组。建议把原本中断函数需要调用的函数直接写在中断函数里,无须调用。 b、 51 单片机的中断有两个优先级。一个中断不会打断另一个相同优先级的中断。这样相同级别中断可以使用同一个组。比如:低优先级 的中断函数都用 using 1,高优先级的中断都用 using 2 。这样不会冲突。 3. C 语言无符号数容易犯的错误。若定义成有符号数 char,则不会陷入死循环。 main() unsigned char i; for (i = 2; i=0; i-) printf(%d,i); 12 / 33 4. C51忌讳使用绝对定位 _at_,因为只要定义变量和变量的作用域,编译器就会把一个固 定地址给这个变量,无须人工将其绝对定位,这样可能引发其他问题。 5. bit与 sbit的区别: bit定义的位标量的地址是随机的,而 sbit定义的位标量的地址是确 定的。 bit 只能访问芯片内部 RAM 中的可寻址位 20H-2FH,而 sbit 可以访问芯片内部 RAM 中的可寻址位和特殊功能寄存器中的可寻址位。注意不能直接在程序里用 P1 等位变量,需要经过 sbit 定义才可以使用。 例如: bit tem ; 13 / 33 sbit led=P1 ; tem 的地址是随机分配的,而 led 的地址则固定为 。 sbit变量后面需要跟等号 =。 6. 为了避免由于使用参数宏而带来意外的错误,需要注意以下几点: 宏的参数必须带括号,例如 #define CIRCLE_SQUARE *(R)*(R) 对所使用的参数宏进行简单地展开检查; 使用简单表达式、对参数加括号、避免节外生枝的使用方式; 在参数宏定义时,对于运算顺序通过括号进行明确的限定,只要遵循以上几点,就 可以避免大多数应用场合的意外错误。 手把手教你写程序 14 / 33 内容:从最简单的程序入手,手把手教你写程序,让同学们拿到一个复杂的程序或者任务,能快速找到切入点,写出程序,再在此基础上优化程序。当拿到一个单片机任务时,不要急于动手写程序,先仔细分析它的以下几个点: 1、它要单片机整体实现什么功能 2、功能细分,先干什么,再干什么,最后干什么 3、画初步流程图, 4、 模块之间的分析:一个模块到另一个模块之间,怎么变换,怎么连接 5、单个模块分析:每个模块要做什么 6、所有模块结合连接,细化所有流程图 7、分析单个模块每步要用到的方法或 者指令 8、总流程图定型 15 / 33 9、纸上写程序,对照流程图分析其可行性,若不可行则返回 10、上机调试,加注释 11、从小到大,一个功能一个功能地调试; 以上十一步,缺一不可 切记:流程图的确定很重要,需反复修改 大忌:拿到任务,不 仔细分析就写程序。即使是小程序,我们也要养成良好的编程习惯,不要一味的追求结果。写小程序可能比别人快,若是大程序,一旦出现思维混乱,或者出现程序调试不出结果,那么你花在调试上的时间,要比别人的多。 !磨刀不误砍柴工 ! 程序的优化:属于后期工作,只有调试出来后,才去优化,如果一开始优化和写程序同时进行,一是加重你的思考量,二是出现问题无从下手。无疑增加了写程序的难度。对于一个初学者,写一个程序,本身头脑就处于紧张的状态,思考的问题就很多,如果此时把优化程序也考虑进去,你脑袋 的负荷无疑加16 / 33 重,若你头脑精明,你可以把优化的地方,先在纸上记下来,等到调试结果正常,再把你想到的,优化的地方加进去。 7、如果在中断程序中改变了多字节类型的变量,那么中断程序以外的程序中要使用该多字节类型变量的话,读写前要关中断,读写后再开中断。否则会导致偶尔读写错误。 举一反三: 其他的数据类型也可能有这种影响。例如:长整型、浮点型。 例如: unsigned int ms_counter; void T0() /定时器程序每 100毫秒中断一次,程序略 if (ms_counter void main(void) 17 / 33 /初始化定时器程序每 100毫秒中断一次,程序略 unsigned char tt; ms_counter=0; tt=0;/用 tt控制只响一次 while(1) if (ms_counter if (tt=0) tt=1; 18 / 33 Sound_on(); else Sound_off(); /其他程序 19 / 33 8、 sbit 变量不能使用 extern 关键字,使其在 不同的文件中被使用,如要在和文件中使用同一个变量 led0,有以下下两种办法: 1.在各种文件中重复定义变量,如在中定义 sbit led0=P1 ;同样在中定义 sbit led0=P1 ;这样, led0 就变成了全局变量,可以在两个文件中使用。 2.将 sbit led0=P1 定义到头文 件中,均在和中包含这个头文件。 9、在多文件的程序中声明外部变量 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量 Num,不能分别在两个文件中各自定义一个外部变量 Num,否则在进行程序的连接时会出现 重复定义 的 错误。正确的做法是:在任一个文件中定义外部变量 Num,而在另一个文件中用 extern 对 Num 作 外部变量声明 。即extern Num;注意若 Num 为 uchar 类型,应当写为 extern uchar Num ,否则会当为 int,而导致出错。 当使用 static 声明变量和函数时,需要在定义变量和函数20 / 33 的基础上加上此关键字,而不能单独使用。例如: static int a; /定义性声明,需要时,直接使用变量 a即可 a = 0x01; static int funA(int a, int b); /声明,且 static 不起作用 int funA(int a ,int b) /定义,即使 funA 有 static 关键字修饰,但由于 static不能单独使用, /故 funA 仍为外部函数。 extern 对变量进行声明时,如没有初始化,则为引用性声明,不含定义,如需使用此变量,需要进行定义。例如: 21 / 33 extern int a; /引用性声明,不含定义 extern int a = 0x01; /定义性声明,需要时,直接使用变量 a即可 int a; /定义 extern 对函数进行声明时,如没有函数体 ,则为引用性声明,不含定义。 extern int funB(int a ,int b); /引用性声明,不含定义,且 extern声明可以省略 extern int funC(int a, int b) /定义性声明 22 / 33 10、一般的,要尽量减少中断服务程序的内容和长度。因为在主程序中可以还需要随时响应其他的中断或事件。如果一个中断服务程序过程,很可能会影响到主程序对外部信号的检测和响应。通常,在中断程序中只是改变一些变量或标志位,在主程序中再根据变量或标志位的值进行判断,处理相应的事件。 11、在 A/D和 D/A 转换电路中,电源电压和基准电压的稳定性,对转换的精度影响很大。另外, A/D 和 D/A 转换电路中要特别注意 地线的正确连接,否则转换结果将是不正确的,干扰影响将很严重。 12、根据 C语言标准,左移 运算要求操作数至少是 int,如果不满 int,自动转换成 int。因此 uchar a=0x01; a 实际运算,并不是 8 位数左移 8 位,而是 int 型左移 8位。 13、在中断里调用其他函数,且要进行参数传递时,必须保证被调用函数所使用的寄存器组与中断函数一样,否则会产生不正确的结果。为了保证被调用的函数与中断函数使用的寄存器一致,可对被调用函数使用 using ,不过此函数只能23 / 33 被中断函数调用。 14、函数不使用 using 时,所使用寄存器组保持与此函数被调用前相同,不对 RS0和 RS1的值进行修改;当使用了 using 关键字后,此函数所使用的寄存器组与 using所定义的一样。 15、当指定中断程序的工作寄存器组时,保护工作寄存器的工作就可以被省略。使用关键 字 using 后跟一个 0 到 3 的数对应着 4 组工作寄存器当指定工作寄存器组的时候默 认的工作寄 存器组就不会被推入堆栈这将节省 32 个处理周期,因为入栈和出栈都需要 2 个处理周期。为中断程序指定工作寄存器组的缺点是所有被中断调用的过程都必须使用 同一个寄存器组否则参数传递会发生错误。 16、如何使用 pdata 类型的变量?当要使用到 pdata 类型的变量,如下: void main(void) 24 / 33 uchar pdata a; a=0x01; 则需要进行如下设置,否则 pdata 的变量 a则会无效。 a、 修改的内容。默认时, PPAGEENALBE 为 0,表示不允许pdata类型的 变量,须将其值改 为 1; PPAGE 表示 pdata 类型的变量存储在哪一页, 01H表示存放在外部存储器的第 1 页,地址范围 100H 至 1FFH,此时 P2经处理后的值为 0x01;此项设置需和 BL51 连接器的设置一致。 b、 修改 BL51连接器。根据中 PPAGE所设置的值来填写 Pdata的值,如下 图。图中 Pdata的值可以填写 100H 至 1FFH 中任意一个,表示 pdata 类型的变量从所填 25 / 33 写的值开始存储。例如,当 Pdata 填写的值为 108H 时,表示 pdata 类型的变量从 108H 开始存储,因此,存储范围变为了 108H 至 1FFH。 另外,存储模式 Compact的作用是将没有指定存储类型的变量定义为 pdata类型,对 uchar pdata a;变量的定义没有影响,但对 uchar a;则有影响。 17、 XBYTE 的用法。 XBYTE 存在于 #include 头文件中。 XBYTE0x000F=data; / 此语句表示将 data 写到外部RAM中的 0x000F data=XBYTE0x000F / 此语句表示读取外部 RAM 中0x000F的数据 以 下 语 句 与 上 面 的 语 句 等 效 : #define EX_RAM XBYTE0x000F /将 EX_RAM定义为外部 RAM的地址 0x000F EX_RAM=data; / 此语句表示将 data 写到外部 RAM 中的0x000F 26 / 33 data=EX_RAM / 此语句表示读取外部 RAM中 0x000F的数据 18、如何在 keil中用汇编实现 51中没有的指令 部分 MCU 与 8051兼容,但会增加 8051中没有的指令,如华邦的 W77E58和 N79E352等芯片,具有 8051中没有的指令 DEC DPTR。如何才 Keil 中实现此指令呢? 方法 1: 在需要执行该指令的地方放置相应的机器码 MAIN: MOV DPTR,#02H DB 0A5H ;由于从数据手册上得知, DEC DPTR 的机器码为0A5H,故此处相当于执行 了 DEC DPTR 指令。 AJMP $ 27 / 33 END C 程序的基本结构 基本字符集 ?C词汇 ?表达式 ?C语句 ?C函数 谁的存储地址? 指针的实质,是一个存储有其它变量首地址的变量。是一个unsigned long 类型数据。 定义指针时声明的数据类型是其存放地址的变量的数据类型,即其所指向对象的数据类型。 指针变量名 指针变量值 存储地址 3 运算符:要注意:优先级,操作数个数,运算规则,结合性,运算结果 优先级:单目 双目 三目 赋值 逗号 ? 位运算 ? 逻辑运算 逻辑运算的短路运算 ? 条件运算符唯一的 3目运算符 28 / 33 ? 赋值运算 ? 逗号运算 ? 控制语句 如何编写循环结构程序: ? 找出循环的初值、终值、循环增量、循环体这四大因子。 ? 多重循环结构中,一定要注意外层找共性,内层找特性。 while与 for循环同 do.while 循环的区别:表达式不成立的情况下, dowhile 循环至少执行循环一次。 ? 函数调用语句: 调用方式:函数语句、函数表达式、函数参数。 调用方法:嵌套调用 递归调用 29 / 33 ? 库函数 头文件名: 标准 I/O 输入:键盘 scanf (, 地址表列 ) 格式符: d,i x,X o u c s e,E f printf (, 输出表列 ) 格式符: d,i x,X o u c s e,E f g % 格式控制序列 1. 格式说明符 : 由 %接格式字符组成 输出:显示器 附加格式符: h l m * 字符输入函数 c=getchar ( ); 附加格式符: m .n - + 0 # l 30 / 33 字符输出函数 putchar; 2. 普通字符 : 原样输入 /输出 头文件名: 头文件名: ? 用户自定义函数 常 用函数: fabs 求绝对值 sqrt 开根号 sin cos tan 常用函数: strlen、 strcpy、 strcmp、 strcat、 strupr、 strlwr、gets、 puts C 语言程序设计心得体会 在这为期半个月的时间内 ,通过我们小组各成员之间的相互讨论和合作,我们完成了学生信息管理系统的程序设计,更值得高兴的是我们的程序得到了大家的喜爱,在每次的简报中都得到了较好的成绩。 虽然在上个学期中,我们已经学习了 C 语言程序设计这31 / 33 门课,但是我所学的知识最多也就是在做作业的时候才会用到,平时没有什么练习的机会,这次的课程设计是我第一次通过自己构思,和同学讨论并且不断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论