c编程多年的学习思考

2024-04-20

c编程多年的学习思考(精选10篇)

篇1:c编程多年的学习思考

很多朋友都在学习单片机或是想学单片机,但在看了一些资料后,要么感到不知道学的什么,要么找不到下一步的学习方法,这都很正常,因为单片机的学习是一项综全性知识的结果。那么怎样学习单片机,怎么样学好单片机是我们关心的,通过我本人的学习过程,我总结了几条,是单片机学习都要具备的几个条件:

1.首先要明确一点,你是爱好单片机编程的,通过写出各种各样的程序,你可以从中得到快乐和成就感,这一点非常重要,如果你是因为学好单片机可以走上更好的工作岗位得到更好的报酬,那也可以,必竞有个动力所以可以驱使你好好的学。

2.要具备能吃苦的精神,学习单片机初期是十分枯燥无味的(在你能写出自已的程序前这一段时间),你会被状态控制字、中断地址、中断优先级等等问题所困惑,可能有些问题要好多天,查了很多资料,想的头疼后你才能彻底想明白。没有吃苦的精神是不行的。所以这一点也很重要。

3.要具备一些数字电路和模拟电路知识,这些虽然看起来和单片机关系不大,实际上哪个单片机没有外围电路,没有这些知识你学会单片机编程后,能力也会被大大的限制。

4.虽然现在工作中用单片机编程都用的C语言编程,因为C语言有代码编写程序速度快,逻辑比较清晰,可维护性强。但是汇编语言对初学者来说也十分重要,这有助于你了解单片机内部运行机制,对单片机的执行过程更加了解。听朋友这么说过,当一个工程师做单片机程序从汇编转到C时,他的水平就提高了,但当他从C又转回汇编时那么他就成精了。

5.要边学边练习,光看书还是不行的,要把你在学习过程中的编程思路在单片机上跑起来,你才会更能找到编写单片机程序的感觉。如果不把自已的编程思路在单片机上运行起来,那么后面你就不知道自已的想法是对是错,感觉无法继续下去。如果经济条件允许一块开发板还是必须的,理论和动手相经结合,你的单片机水平会提高的很快。

6.多想多练,做一些实际的项目,你可以根据你现有的开发板硬件条件,做出一些你感觉比较有意思的项目,实际动手做过项目和看过别人的项目还是有差别的。自已做过项目以后在工作或求职中就没有那么被动,也会有信心一点。

祝个位学习单片机的朋友早日提高!以上是个人见解有不同意见请提出来供广大单片机爱好参考。

创易电子搜集,全部资料来源于互联网开源资料,如有侵权,请及时与楼主联系立刻纠正。

篇2:c编程多年的学习思考

1、在底层驱动函数前加static标识符的作用:

a:加了static后表示该函数失去了全局可见性,只在该函数所在的文件作用域内可见 b:当函数声明为static以后,编译器在该目标编译单元内只含有该函数的入口地址,没有函数名,其它编译单元便不能通过该函数名来调用该函数,这也是对1的解析与说明

2、底层驱动的封装模板

通常将存储类,显示类,AD-DA类的外设驱动函数封装为以下几个函数: Void Open(void);

此函数用于开启外设,通常函数体中包涵IO和外设的初始化 Void Close(void)此函数用于关闭外设,特别是一些在休眠下功耗很大的外设,可用mos管控制其Vcc的通断,以此达到降低系统功耗的目的

Void Read(unsigned int address,unsigned char *data[],unsigned int count)

此函数用于读取数据,参数分别为:address,地址,*data[],存放数据的数组,count,要读取的字节数

Void Write(unsigned int address,unsigned char *data[],unsigned int count)此函数用于写数据,参数功能与读函数中相似。

Void control(unsigned char cmd,unsigned char data)此函数用于控制外设的工作状态,如休眠,低功耗等等

3、命名规则

A、宏定义全部用大写

如:#define OLED_CS PBout(12)B、驱动函数名称大小写,并且动词放置在末尾如

static long _OLED_Close(void)C、结构体的名称,结构体名大写,变量名小写,“驱动”的首字母大写

如:struct OLED_DEVICE oledDevice;

4、关于外设的数据手册

篇3:浅析C语言编程的学习策略

关键词:C语言,编程,学习策略

1 C语言产生的背景

计算机程序设计语言经历了从机器语言、汇编语言到高级语言的发展过程,机器语言是最原始的代码语言,可以直接识别,也是第一代的计算机语言,随着社会化发展变化,后来用汇编语言中的助记符代替操作码来编写程序,但由于汇编语言自身特点也存在局限性,根据社会发展需求于是产生了C语言,C程序是经过编译后可以直接执行的面向过程的高级语言。

C语言是在BCPL语言的基础上发展起来的。70年代初,美国贝尔实验室根据工作需要研发出BCPL语言,后来在1973年,贝尔实验室在BCPL语言的基础上研发出了C语言程序,后来经过多次改版本,到了80年代初,美国国家标准化协会根据C语言的发展变化,制定了新的C语言标准,一直沿用到现今,为大多数编程者所遵循。

2 C语言的特点及优势

C语言是国际上广泛流行的计算机高级语言,现如今被越来越多的计算机编程人士所使用,它不仅可以用来编写软件代码,还可以用接近自然语言方式描述问题,同时兼顾高低级语言的优点,主要体现如下方面:

1)C语言简便,结构严谨、操作灵活。

2)C语言的运算符较多且表达式类型丰富,编写程序节约时间,工作效率高。

3)模块化程序设计方法,可以把一个大问题按层次分解成多个小问题的设计思想,使编程更加灵活,算法设计自由度大。

4)C语言生成目标代码可操作性强,程序执行效率高。

5)C程序图形功能较强,程序可移植性好。

由于C语言这些特点及优势,使它成为计算机编程者必学的程序设计语言。

3 C语言编程中常见的现象

第一,大一新生刚入校门,心理比较放松,大学的学习生活还未适应,就要开设程序设计语言课程,对于他们来说不知从何学起,心里没底。上机实践课时,C语言编程语法较严格,出现错误就不能运行出结果,导致学生在学习过程中慢慢失去信心和成就感,学习兴趣和热情不高。

第二,C语言的算法和结构有点复杂,理论的东西很难记住,听起来感觉很枯燥无味,不容易理解。

第三,课时安排不够合理,致使教师在每节课讲授内容必须保证进度,这样就给学生无形中增加了压力。特别是在刚开始学习时,学生兴趣都非常高,对程序设计课比较好奇感兴趣,但在后来的学习过程中,面对每节课大量的枯燥代码和编程理论及语法规则的限制,慢慢跟得有些吃力,往往是前面的内容还没有消化完,后面又开始新的内容,时间长了就会让学生产生消极心理,产生厌烦情绪,另外学习方法不对,也会导致学生缺少学习兴趣。

4 C语言编程的学习策略

4.1 熟悉程序开发环境

C语言程序编写一般经过程序编辑、程序编译、程序连接到程序运行结果检测这几个步骤来实现,建议在Visual C++编程平台(也可选择其他平台)进行实验,好快速掌握C语言编程环境,熟悉程序代码的调试过程,为接下来的学习编程操作打下良好的基础。

4.2 掌握C语言语法规则,养成良好的编程习惯

学习C语言基础就是要学习它的语法规则,学习某种语句或命令。首先要了解它的规则是什么,作用是什么,怎么实现等,这样可以为后面的学习打下坚固的堡垒作用。比如什么是常量、函数定义的格式及其意义是什么,使用什么样的语句去运用它,这样想明白了编起程序来才能得心用应手。那么在编程中除了要掌握好语法规则外,还应培养较好的编程习惯,这样可以提高工作效率,减少代码出错的机会。

4.3 精通算法技巧

学习编程就是要学习它的思维方法,画流程图就是在构建写程序思路的过程。当画好一个流程图时编程思想也就出来了,再结合掌握的语法规则,在计算机环境下调试就可以出来了。程序=数据结构+算法,算法就是解题思路与步骤,掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。计算机语言是表达方式,算法和数据结构才是灵魂。算法可以用自然语言或流程图来表示,在使用流程图时,应掌握一些流程符号,即用一些图框来表示各种操作,直观形象,易于理解,从而达到根据算法流程图来完成程序的输写。

4.4 掌握四种结构

C语言学习中掌握四种结构即顺序结构、选择结构、循环结构和模块化程序结构非常关键,因为这种这四种结构决定了C语言代码的执行过程,相当于是算法的流程体现,它们彼此可以互相嵌套。C语言对数据的处理是通过“语句”的执行来实现的,一条语句完成一项操作(或功能),一个为实现特定目的的程序应包含若干条语句。

在实际编写代码过程中,常常将前三种结构相互嵌套调用,以此设计出相应的算法来解决工作中遇到的问题。如果是设计大型项目的话,编写出的程序往往需要完成的功能较多,数据结构较复杂,长篇符的代码并不利用管理和维护,为了解决这种状况,如果采用C模块化程序设计思路就方便较多。

C模块化程序设计采用自顶向下逐步求精的设计结构,将一个大问题按层次分解成多个小问题的设计思路。一般由主控函数和子函数组成,即指将一个很大的代码段划分为一系列功能独立的小代码段部分,每个代码段完成一个指定的功能,那么将这些代码段合在一起就是一个完整的功能模块。其中每个代码段实质就是一个具体的独立子函数,函数与函数间可以相互调用,但不能相互嵌套,通过主控函数可以调用子函数(子函数不能调用主控函数)可以将各个函数模块聚合为一个整体完成相应的功能。因而,定义函数、定义函数名(函数名表示功能)、函数调用和返回值等就很关键和重要,初学的人要通过不断地上机实践才能掌握编程的流程和精髓。

4.5 熟知函数定义

函数就是完成相对独立功能的程序段,它具有独立性,代码适中,分析问题层次清楚等特性。函数由函数说明和函数体两部分构成,函数说明包括函数值类型、函数名、参数类型及参数说明;函数说明之后的花括号“{}”部分为函数体,里面由C语句构成。函数调用时,实参与形参应保持个数、次序及类型的一致性,以确保实参与形参之间数据的正确传递,为提高编程效率打下良好的奠定基础。

4.6 具备数学知识

编程是人把要表达的思想,通过计算机语言表达出来所以最重要的就是数学逻辑思维。在C语言学习过程中,较好的逻辑思维可以比较容易学习C语言编程分析,选择更简捷的运算流程,C的核心语法并不要求很高的数学知识,高中阶段接触到的概念性的知识就足以应付。因而,数学知识对学习C语言重要性还是比较大。

4.7 会调用C语言库函数

库函数就是把函数放到库里,是别人把一些常用到的函数编完放到一个文件里,供程序员使用,程序员用的时候把它所在的文件名用#include<>指令加到里面就可以了(尖括号内填写文件名),例如#include<stdio.h>。在编程时候需要调用库函数.

4.8 指针在C语言中的灵活运用

指针是C语言的一种数据类型,是指向变量和对象的地址,是C语言学习的重点内容。指针的用途非常广泛,假设想通过函数改变一个变量的值,就得用指针而不能用值传递,特别是对象的数据量非常大,往往编程人员就会用指针来做形参,只需要传递一个地址就可以,大大提高了工作效率。另外,指针变量可以访问内存地址,也可以访问数组和字符串,使编写的C程序代码更简洁,效率高。指针的学习在C语言中是关键的内容,也是学好C的精髓所在,为了高质量地完成程序的编写,就需要掌握指针在C语言中的灵活运用,那就要能通过上机反复地调试代码,从实践中总结问题,完成指针的学习。

4.9 读代码和程序

C语言编程不只是理论性的知识,它还要求上机动手操作能力更强一些。每次C语言课的学习,只有通过上机输入大量代码的练习,才能发现错误代码段,分析解决存在的问题,不断总结经验,巩固课堂上老师所讲的内容。C语言编程不是单纯靠理论记忆就能学好的,它需要大量的上机实验来巩固,才能加深知识的消化理解,开拓编程思维,提高解决问题的能力,培养良好的编程态度。

读程序和分析他人写的代码也是学习C语言较好的途径,仔细研读程序时,注意分析别人是如何运用编程技巧的,研究它的实现方法和程序设计技巧,提高自己的程序设计能力,直到每一行都理解了,然后找几个题目编写,自己试图写出程序,反复实践,这样就能从错误中分析代码出错的原因,进行调试正确的代码段,不断积累经验,反反复复直到搞懂为止。时间久了,慢慢就对程序的掌握有一个比较清晰的过程。

4.1 0 借助网络资源

C语言的学习在课堂上的知识还是有限的,如果想获取更多的知识,可以借助网络平台来完成资料的补充。一方面可以在教学网站上得到相关的学习内容;另一方面可以登录相关论坛或C语言专题微信群参与讨论,获取学习经验,探讨编程技巧,这样对于学习者来说都非常便利。

5 结束语

C语言是计算机编程语言中应用最流行的一种高级语言,在C语言学习过程中,本文针对C语言特点、出现的现象和学习策略进行了分析,只要学习者认真领会C语言功能的强大,具备持之以恒的学习韧劲,一定会在实际学习中取得优异的结果。同时,C语言作为高校公共基础课,学习好它不但能提高自己的编程能力,还对整个计算机语言的学习起到奠基作用,为社会培养综合型人才更好的服务。

参考文献

[1]储欣.C语言编程技巧在C语言学习中的应用[J],信息与电脑,2015(9):28.

篇4:c编程多年的学习思考

关键词:C语言;编程技巧;应用

中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01

C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。

一、C语言与C语言的优势

当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。

二、C语言学习难度大的原因

因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。

三、C语言编程技巧的应用

1、用空间换时间

例如对字符串进行赋值,方法有以下几种:

(1)基础方法:

#define LEN 32

Char string I[LEN];

memset(string 1,0,LEN);

ctrcpy(string 1,“this is a example”) ;

(2)方法2:

const char string2[LEN]=“this is a example”;

char*cp;

cp=string2;

从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。

2、位运算掌握

在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。

3、C语言特有函数掌握

很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。

但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。

C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。

参考文献:

[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.

[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.

篇5:c编程多年的学习思考

分类: C语言学习心得体会 2010-08-08 19:33 63人阅读 评论(1)收藏 举报

转载请注明出处:http://blog.csdn.net/ecorefeng

在编程过程中会遇到各种各样的错误与警告,这里我对编程过程中经常遇到的细节或者说常出错的地方进行了简单的总结,希望对正在编程的“童鞋”有所帮助:

C语言编程提示的总结:

1:使用 #include 指令避免重复声明

2:使用 #define 指令给常量值取名

3:在 #include 文件中放置函数原型

4:在使用下标前先检查它们的值

5:在 while 或 if 表达式中蕴含赋值操作

6:如何编写一个空循环体

7:始终要进行检查,确保数组不越界

8:良好的程序风格和文档将使程序容易阅读和维护

9:为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要在字符上执行算术运算

10:用它们在使用时最自然的形式来表示字面值

11:不要把整型值和枚举值混在一起使用

12:不要依赖隐式声明

13:在定义类型的新名字时,使用 typedef 而不是 #define

14:用 const 声明其值不会修改的变量

15:使用名字常量而不是字面值常量

16:不要在嵌套的代码块之间使用相同的变量名

17:在一个没有循环体的循环中,用一个分号表示空语句,并让它独占一行

18: for 循环的可读行比 while 循环强,因为它把用于控制循环的表达式收集起来放在一个地方

19:在每个 switch 语句中都使用 default 子句

20:使用符号赋值符可以使用程序更容易维护

21:使用条件操作符代替 if 语句以简化表达式

22:使用逗号操作符来消除多余的代码

23:不要混用整型和布尔型值

24:一个值应该只具一种意思

25:如果指针并不指向任何有意义的东西,使它非法地指向了数组第 1 个元素的前面的内存位置

26:在函数原型中使用参数名,可以给使用该函数的用户提供更多的信息

27:抽象数据类型可以减少程序对模块实现细节的依赖,从而提高程序的可靠性

28:当递归定义清晰地优点可以补偿它的效率开销时,就可以使用这个工具

29:一开始就编写良好的代码显然比依赖编译器来修正劣质代码更好

30:源代码的可读性机会总是比程序的运行时效率更为重要

31:只要有可能,函数的指针参都应该声明为 const

32:在有些环境中,使用 register 关键字提高程序的运行时效率

33:在多维数组的初始值列表中使用完整的多层花括号能提高可读性

34:不要试图自己编写功能相同的函数来取代库函数

35:使用字符分类和转换函数可以提高函数的移植性

36:把结构标签声明和结构的 typedef 声明放在头文件中,当源文件需要这些声明时可以通过 #include 指令把它们包含进来

37::结构成员的最佳排列形式并不一定就是考虑边界对齐而浪费空间最少的那种排列形式

38:把位段成员显示地声明为 signed in 或 unsigned 类型

39:位段是不可移植的40:位段时源代码中位的操作表达得更为清楚

41:动态内存分配有助于消除程序内部存在的限制

42:使用 sizeof 计算数据类型的长度,提高程序的可移植性

43:消除特殊情况使代码更容易维护

44:通过锻炼语句消除 if 语句中的重复语句

45:不要仅仅根据代码的大小评估它的质量

46:如果并非必要,避免使用多层间接访问

47: cdecl 程序可以帮助你分析复杂的声明

48:把 void* 强制转换为其他类型的指针时必须小心

49:使用转移表时,应始终验证下标的有效性

50:破坏性的命令行参数处理方式使你以后无法再进行处理

51:不寻常的代码始终应该加上一条注释,描述它的目的和原理

52:避免用 #define 指令定义可以用函数实现的很长序列的代码

53:在那些对表达式求值的宏中,每个宏参数出现的地方都应该加上括号,并且在整个宏定义的两边也加上括号

54:避免使用 #define 宏创建一种新语言

55:采用命名约定,使程序员很容易看出某个标识符是否为 #define 宏

56:只要合适就应该使用文件包含,不比担心它的额外开销

57:头文件只应该包含一组函数和(或)数据的声明

58:把不同集合的声明分离到不同的头文件中可以改善信息隐藏

59:嵌套的 #include 文件使我们很难判断源文件之间的依赖关系

60:在可能出现错误的场合,检查并报告错误

61:操纵文本行而无需顾及它们的外部标识形式,这个能力有助于提高程序的可移植性

62:使用 scanf 限定提高可移植性

63:当你打印长整数时,即使你所使用的机器并不需要,坚持使用 1 修改符可以提高可移植性

64:滥用 setjmp 和 longjmp 可能导致晦涩难懂的代码

65:对信号进行处理将导致程序的可移植性变差

66:使用断言可以简化程序的调试

67:避免使用具有副作用的函数可以使程序更容易理解

68:一个模块的接口应该避免暴漏它的细节

69:将数据类型参数化,是它更容易修改

70:只有模块对外公布的接口才应该是公用的71:使用断言来防止非法操作

72:几个不同的实现使用同一个通用接口是模块具有更强的可互换性

73:复用现存的代码而不是对它进行改写

74:迭代比尾部递归效率更高

75使用 stdarg 实现可变参数列表

76:改进算法比优化代码更有效率

77:使用某种环境特有的技巧会导致程序不可移植

篇6:C编程笔试题

1、头文件中的 ifndef/define/endif 干什么用?

2、#include 和 #include “filename.h” 有什么区别?

3、const 有什么用途?(请至少说明两种)

4、在C 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?

5、请简述以下两个for循环的优缺点

// 第一个

for (i=0; i

{

if (condition)

DoSomething;

else

DoOtherthing;

}

// 第二个

if (condition)

{

for (i=0; i

DoSomething;

}

else

{

for (i=0; i

DoOtherthing;

}

优点:

缺点:

优点:

篇7:考查C程序员的基本编程技能

考试成绩能反映出考生的编程质量以及对C /C的理解程度,

但不能反映考生的智力和软件开发能力。

笔试时间90分钟。请考生认真答题,切勿轻视。

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。

(10分)

提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。

例如 int 变量 n 与“零值”比较的 if 语句为:

if ( n == 0 )

if ( n != 0 )

以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句:

请写出 float x 与“零值”比较的 if 语句:

请写出 char *p 与“零值”比较的 if 语句:

二、以下为Windows NT下的32位C 程序,请计算sizeof的值(10分)

char str[] = “Hello” ;

char *p = str ;int

n = 10;

请计算

sizeof (str ) =

sizeof ( p ) =

sizeof ( n ) =

void Func ( char str[100])

{请计算 sizeof( str ) = }

void *p = malloc( 100 );

请计算sizeof ( p ) =

三、简答题(25分)

1、头文件中的 ifndef/define/endif 干什么用?

2、#include 和

#include “filename.h” 有什么区别?

3、const 有什么用途?(请至少说明两种)

4、在C 程序中调用被 C编译器编译后的函数,

为什么要加 extern “C”声明?

5、请简述以下两个for循环的优缺点

// 第一个for (i=0; i{if (condition)

DoSomething;

else

DoOtherthing();}

优点:缺点:

// 第二个if (condition)

{for (i=0; i DoSomething();}

else{

for (i=0; i优点:缺点:

四、有关内存的思考题(20分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;GetMemory(str);

strcpy(str, “hello world”);

printf(str);

}请问运行Test函数会有什么样的结果?答:

char *GetMemory(void)

{

char p[] = “hello world”;

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

请问运行Test函数会有什么样的结果?答:

Void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(

strcpy(str, “hello”);

printf(str);

}

请问运行Test函数会有什么样的结果?答:

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

请问运行Test函数会有什么样的结果?答:

五、编写strcpy函数(10分)

已知strcpy函数的.原型是

char *strcpy(char *strDest, const char *strSrc);

其中strDest是目的字符串,strSrc是源字符串,

(1)不调用C /C的字符串库函数,请编写函数 strcpy

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?

篇8:c编程多年的学习思考

1 C语言

1.1 C语言特点

C语言在计算机语言编程中应用最流行、最广泛, 在学习中应对C语言有一点了解, 在使用过程中, C语言具有以下的特点: (1) C语言比较紧凑、操作灵活、操作方便, 没有非常严格的语法限制, 比较自由的书写程序过程, C语言有效结合了低级语言的实用性及高级语言的结构性, 功能非常强大。 (2) C语言应用范围广泛。C语言是学习其他语言程序的基础, 可植性比较强, 在多种操作系统中, 皆适用C语言, 可以灵活使用运算符, 实现编程的高效性。 (3) C语言的语法中数据结构多种多样, 简单复杂皆有, 图形处理能力甚强。 (4) C语言可以使用数据和代码分割, 具有结构式的语言特点, 程序层次清晰, 便于维护、使用及调式进行。C语言能够对物理地址进行直接访问以及各种操作。因此, C语言是学生学习计算机课程并不可少的一门知识, 但要学好C语言, 盲目的学习是不对的。

1.2 C语言的产生背景

1970年美国的Ken Thompson, 以BCPL语言作为基础, 然后设计出简单且接近硬件的B语言, 但是B语言功能比较有限, 过于简单。1972年~1973年, 美国D·M在B语言基础之上设计出C语言, C语言的出现给程序的编写带来不少便利, 而且编写程序比较自由, 吸引许多软件使用它。C语言语法里的运算和程序非常丰富, 编写程序的运算方法很多, 拥有可以实现一些高级程序都无法实现的功能, 且C语言用起来比较灵活, 在运算各种数据结构时, 不管事简单还是复杂, 都可以简单实现。C语言不仅在运算和程序编写上更加便利, 且可以直接访问地址, 并进行操作, 较快较容易的对程序进行编译以及控制。

2 学习

虽然许多学生选择计算机专业, 努力学习C语言, 但是学生仍然很难对C语言产生兴趣。C语言是计算机专业学习的基础课程, 且功能强大, 用途广泛。随着经济迅速发展, 第三产业越发越重要, 计算机相关的产业所占比重越来越大, C语言功能强大, 在计算机中越来越受到重视。

针对C语言的学习, 仅仅是课堂的理论传授远远不够, C语言理论比较丰富, 集合众多语言特点, 通过直接的感官方式教授给学生, 学生难以完全理解。如果教师能够把内容通过直观的方式展示出来, 比如让学生上机操作, 让理论与实践相结合, 提高学生对C语言的学习兴趣。

C语言中包含比较复杂的结构和算法, 许多学生难以理解, 只能简单的记忆, 但是学习效果比较低, 且学生觉得枯燥, 没有较高的学习兴趣, 在学生学习理论的同时, 应该多上机操作, 更加容易的掌握C语言的规律和方法。教师要注意自己的教学方法, 不能简单的进行实践教学与理论教学, 要关注学生, 加强学生与教师的沟通, 帮助学生理解课堂课外的C语言相关知识, 在教授知识之外, 教师要突出C语言在计算机学习中的重要性, 让学生更容易、深入的理解及分析C语言, 增加学习兴趣。

3 C语言编程的技巧

学生觉得C语言抽象、难以理解, 归根结底是没有找到学习的技巧, 对于刚入门者说, 学习C语言比较吃力, 学习任何一项技能都需要一个过程, 关键在于掌握其精髓, 掌握其中精髓再学习这门课程就容易许多。对于C语言, 编程技巧非常重要。 (1) 指针的掌握。掌握指针是C语言中比较重要的技巧, 指针虽有消耗内存的缺点, 但指针在运算中速度加快, 编程语句也更加容易, 指针的耗内存虽大, 但对整个编程而言却是微不足道。学生在学习指针这一章节时, 需加强学习能力, 除学习课堂知识之外, 可以多在网上查询资料, 进行补充, 掌握好指针这一技巧。 (2) 掌握数学知识。在学习计算机过程中, 数学知识的重要性不容小觑, 能够解决C语言运算中的许多问题, IT界有一句话叫“数学是计算机之母”, 可见数学对计算机的重要性。在C语言学习中, 逻辑思维较好的同学可以较容易的学习C语言, 进行编程前会分析, 选择更加简单的运算方法, 因此, 数学知识对学习C语言起很大作用。 (3) 掌握位运算。位运算的使用可以方便简洁代码, 提高运算效率, 较快解决问题。在计算机程序中, 位是最小数据单位, 是所有操作和运算的基础单位, 位运算是所有操作的基础运算程序。当然具体问题需要具体分析, 提高学生兴趣和编程效率, 让C语言的应用更加广泛最为重要。

4 结语

在学习C语言的过程中, 学生应准确了解C语言的特点, 学习并掌握C语言的编程技巧, 提高学生的学习兴趣, 学习更加具有目的性, 提高C语言的学习效率以及学习质量。培养学生的编程能力, 能够更好的服务社会。

摘要:随着时代的发展, 信息技术发展迅速, 计算机人才被社会所大量需求。因此大学中大都设立计算机专业, 为社会培养所需人才, C语言是计算机专业的重要课程之一, 是大一课程学习中比较基础的一门课程, C语言功能强大, 对于学生以后专业基础起到很大的作用, 但是学生学习效果并不是很好, 即使努力学习也没有得到预期的效果。笔者对C语言编程技巧在C语言学习进行研究, 并且提出解决措施。

关键词:C语言,学习编程,语言特点

参考文献

篇9:c编程多年的学习思考

【关键词】C语言;编程技巧;学习技巧;教学效果

前言:我国高校已经普遍开展C语言的学习,对培养知识经济时代下高素质、复合型人才起到了重要的推动作用。然而在实践过程中却发现,学生学习C语言的动力不足、掌握及运用能力较低,为C语言进一步发展蒙上了一层阴影。所以本文首先对C语言学习过程中的难点进行分析,随后探讨C语言编程技巧的应用内容,以为学生学习及课堂教学效果的提升提供帮助。

一、当前C语言学习难点

(一)函数的定义和应用

由于C语言是一门较为高级的计算机汇编语言,在学习过程中包含了大量的函数,而相应函数如何定义和使用成为当前学生学习的难点之所在。众所周知,C语言编程过程中往往会通过汇编语言来将函数功能在相应代码中实现[1]。然而,在实际运用及学习过程中经常会出现函数嵌套的事情发生,而产生该现象的原因则是在C语言编程过程中已經定义了一个函数,但是操作者并没有注意到此种情况,当使用不同定义的函数时,系统就会提示不能在函数体内定义函数。所以在C语言学习过程中关于函数的定于和使用是困扰学生的主要问题。

(二)编写程序的工整严谨性

运用C语言编写程序是当前知识经济时代下较为常用的程序编写方式,需要操作人员具有较强的逻辑思维能力以及编写水平,并且耐心要足够良好。编写程序主要是通过计算机检验来实现相应的功能,在编写过程中每一个细节问题都需要处理到位。一旦某个环节某个字母没有正确书写,那么将会导致编写的整段程序无法运行,降低了程序编写效率。而编程工整性和严谨性是考验每一个学生学习效果及能力的重要指标。但是对于当前大多数学生来说,编写程序仍然是一个难点问题,出错几率始终居高不下,导致学生在经过了很长时间学习后依然无法掌握正确的编写技巧,继而丧失了继续学习的兴趣和信心。所以C语言学习过程如何运用编程技巧来提高编写程序的工整严谨性成为当前亟待解决的问题。

二、C语言编程技巧在C语言学习中的应用

(一)指针技巧的掌握与运用

C语言编程技巧中指针是一个较为特殊的变量,在其中存储着大量的数值,可以被称作是内存地址之一。指针技巧可以通过分解来将各部分内容展现在学生面前,以促使学生明确指针的使用。当前C语言学习中指针由指针类型、指针指向类型、指针值、指针自身所占内存区所组成。指针类型是C语言学习及编程中最为常见的知识点,学生可以通过去除指针声明语句中所包含的指针名字来判断该指针类型,如:int*ptr、char*ptr,将指针名字ptr去掉后剩下的int*、char*即为指针类型。学生通过该技巧的使用可以在短时间内明确所有C语言指针的类型,为其应用提供了便利条件。指针指向类型相较于指针类型稍稍复杂一些,上例中去掉*后剩下的int、char等即为指针指向类型。所以指针技巧的掌握与运用主要在于学习者的耐心及细心程度,加强其主观重视程度后,学习C语言将会更加得心应手。

(二)C语言特有函数技巧的掌握于应用

C语言编程中函数的应用是实现特定功能的基础与前提,学生往往在函数的定义及使用过程中出现不同程度的问题,造成其学习效果不佳。因此,在C语言课堂教学中教师可以在函数定义所包含的名字、参数名称、类型以及函数返回值类型逐步分解并一一明确其各组成部分的功能,并且将独立的函数存储在编译系统数据库中,使用时输入#include指令即可将想要使用的头文件放入本文件中,使得C语言特有函数能够在短时间内被学生掌握及利用[2]。随着计算机技术快速发展,C语言特有函数的编写已经可以通过程序化步骤来实现,在方便了使用的同时,也降低了学生学习难度,使得C语言教学效果得到大幅提升。

(三)算法技巧的掌握与应用

算法是程序编写工作的重要组成部分,也是学习过程中花费时间较长的环节。为了能够提高学生学习效率,教师需要在课堂教学中将常用流程符号普及给学生,并且利用流程图来讲算法的应用逐一分解,向学生直观展示算法的应用。当前还可以利用自然语言来表示算法,同时与流程图讲解相结合,使得具备一定数学知识的学习者能够熟练掌握算法技巧,并运用在具体的程序编写工作中。C语言是建立在数学思想基础上的应用学科,数学思维在算法技巧掌握及应用中起到了重要的辅助所用。所以,在通过系统展示及分步讲解基础上拓展数学思维去寻找C语言程序编写规律,可以为其血气起到事半功倍的效果。

(四)位运算技巧的熟练掌握与应用

C语言之所以独立于其他计算机语言,就在于位运算使用。位运算是一种以二进制为对象、进行各种程序、数据、结果运算的一种基本算法。特别是在计算机文件中其应用更为频繁,掌握了位运算技巧,就相当于掌握了打开宝藏大门的钥匙。比如:数独时需要使用大量Hash表来统计九宫格里已经存在那些数据,如果在一个九宫格之中已经存在数字2和5,那么采用位运算后该九宫格可以使用数字18来表示;如果某一行或某一个九宫格为运算状态为511,则代表了该九宫格空间已满。要想改变其状态,只需要对其进行位操作,而省去了将数据重新转换成为二进制修改之后在转回来的步骤,使得整个C语言学习效率得到大幅提升[3]。

结论:综上所述,本文通过对当前C语言学习难点的分析得出了困扰学生的主要问题在于函数的定义及使用和编写程序的工整严谨性。并以此为依据提出了C语言编程技巧中指针、特有函数、算法、位运算等技巧熟练掌握是提高C语言学习效率的关键。希望通过本文的分析能够为我国高校改进C语言教学提供帮助,以促使C语言知识正迁移。

参考文献:

[1]段煅.C语言编程技巧在C语言学习中的应用[J].电脑编程技巧与维护,2010,12(20):150-151.

[2]余勍,王捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,25(07):108.

篇10:c编程多年的学习思考

emulator -console

* 将文件写入到模拟器的userdata.img文件中

adb push

*将一个目录拷贝到模拟器中,包括子目录

adb push

* 将一个目录从模拟器中拷出来

adb pull

* 使得模拟器可以运行arm代码.

使用GNU/ARM Linux编译器编译你的应用程序就可以了

* 在模拟器里面运行shell,需要先运行模拟器

adb shell

*运行模拟器中的一个控制台程序

adb shell

*连接模拟器的控制台

telnet localhost 5554/6/8

运行C程序

参考文献

Native C “Hello World” working in emulator

groups.google.com/group/a ... wse_thread/threa...

Native C Applications for Android

benno.id.au/blog//11/13/android-native-apps

步骤

* 下载GNU/ARM编译工具

www.codesourcery.com/gnu_toolchains/arm/download.html

* 编写c/c++代码.

* 使用GNU/ARM Linux 工具创建一个应用程序,不使用动态链接库

ex. arm-none-linux-gnueabi-g++.exe -static -o hello HelloAndroid.cpp

* 启动模拟器

$SDK_ROOT/tools/emulator.exe

* 在命令行窗口运行 abd将编译好的hello程序放入模拟器的磁盘

adb push hello /system/sbin/hello

* 让hello文件变成可执行程序,不要使用 chmod ugo+x

adb shell chmod 777 /system/sbin/hello

* 运行hello程序

adb shell

cd /system/sbin/

hello

EXAMPLE HELLO WORLD CODE

//

// HelloAndroid.cpp

//

//

#include

using std::cin;

using std::cout;

using std::endl;

class MyName

{

public:

void getname( void );

void sayhello( void );

private:

char name[ 255 ];

};

void MyName::getname( void )

{

cout << “What is your name? ”;

cin >> name;

}

void MyName::sayhello( void )

{

cout << “Welcome ” << name << “ to the world of Android” << endl;

}

MyName name;

int main( int argc, char *argv[] )

{

name.getname();

name.sayhello();

return 0;

}

Android编译本地C++程序方法

在Android平台上程序以Java形式运行在Dalvik模拟器上,但Android作为一个Linux内核系统完全可以执行Navtive C++程序,主要的步骤如下:

1.下载ARM C++交叉编译器www.codesourcery.com/gnu_toolchains/arm/portal/subscription3057

2.编写本地C++代码,如Hello Wolrd,可以使用标准库STL,

android C编程技巧 及 C/C++开发测试

编译的命令行如下

arm-none-linux-gnueabi-g++.exe -static -oandroid123 android123.cpp

首先运行arm-none-linux-gnueabi-g++.exe程序-static 参数代表静态库,-o为输出名称android123,最后的android123.cpp为源代码。

3.运行模拟器,用cmd在sdkTools目录夏之星 adb pushandroid123 /system/sbin/android123

4.设置访问权限,通过Linux的Shell,在cmd下设置所有用户完全控制权限adb shell chmod 777 /system/sbin/android123

5.执行这个android123程序,输入adb shell cd /system/sbin/android123即可

在android平台上测试C/C++程序及库

int main( int argc, char *argv[] )

{

name.getname();

name.sayhello();

return 0;

android平台上带有标准C库,我们可以写个C程序来试试看能不能在上面运行。。。

首先下载并安装交叉编译工具GNU/ARM Linux gcc:

www.codesourcery.com/gnu_toolchains/arm/download.html

安装时 直接解压就行了,要设置好PATH环境变量。

简单的C代码:

test.c

#include

int main()

{

int i,j;

for(i=0;i<=10;i++)

{

for(j=0;j<=i;j++)

printf(”*”);

printf(”n”);

}

return 0;

}

用刚下载的交叉编译工具编译源代码:

# arm-none-linux-gnueabi-gcc test.c -o test -static

-static选项在这里是必须的,不然android平台就不运行此程序。

这也说明了此平台上的C/C++库是不能被C/C++程序动态连接的 。

进入tools目录,用adb工具下载到android平台,放到/data/data目录。

# ./adb push test /data/data

进入/data/data目录运行程序。

# cd /data/data

# ./test

*

**

***

****

*****

******

*******

********

*********

**********

***********

ok,It’s done !

C++程序一样的方法,只不过编译器换成:arm-none-linux-gnueabi-g++

附C++示例代码:

//

// HelloAndroid.cpp

//

//

#include

using std::cin;

using std::cout;

上一篇:地震后的反思下一篇:班庄镇中心小学预防H1N1流感知识宣传