博文
[置顶] 收藏:C语言出错信息中英文对照表 (2006-07-31 19:55:00)
摘要:Ambiguous operators need parentheses 不明确的运算需要用括号括起 Ambiguous symbol ’’xxx’’ 不明确的符号 Argument list syntax error 参数表语法错误 Array bounds missing 丢失数组界限符 Array size toolarge 数组尺寸太大 Bad character in paramenters 参数中有不适当的字符 Bad file name format in include directive 包含命令中文件名格式不正确 Bad ifdef directive synatax 编译预处理ifdef有语法错 Bad undef directive syntax 编译预处理undef有语法错 Bit field too large 位字段太长 Call of non-function 调用未定义的函数 Call to function with no prototype 调用函数时没有函数的说明 Cannot modify a const object 不允许修改常量对象 Case outs......
[置顶] C语言笔试轻松过—也谈二级C应试 (2006-07-31 01:47:00)
摘要:二级C语言笔试只有选择题和填空题两种题型。这两种题型的解题方法有所不同,考生在备考时要深化对基本概念和知识点的理解,并注重实践,同时要作一些针对性的练习,特别是历年真题,从中找出规律性的东西以及解题技巧。 一、选择题 这种类型的题,要求考生从四个待选答案中选择一个正确答案。考生可综合运用直选法,排除法等多种方法。但是这类题目考的知识点往往都比较多且细,容易出错,考生在做这类题时,切忌不加分析,一看就选,从而漏掉正确的答案。如2003年9月笔试第49题: 有以下程序 mai( ) { int a[3][3],p,i; p=&&a[0][0]; for (i=0;i<9;i++) p[i]=i+1; printf("%d\n",a[1][2]); } 程序运行后的输出结果是 (A)3 (B)6 (C)9 (D)2 此题主要考的知识点有:(1)数组与指针的关系;(2)数组的初始化和数组元素的引用。在C语言中,数组与指针有着非常密切的联系。任何能用数组下标完成的操作也都可以用指针来实现。语句“p=&&a[0][0];”使p指向数组中的第0号元素,即a[0][0],指针变量p中存放了数组元素a[0][0]的地址,由于数组元素在内存中是连续存储的,因此,我们就可以通过指针变量p访问数组中的任何一个元素。本题中通过“for (i=0;i<9;i++) p[i]=i+1;”语句使a[3][3]={1,2,3,4,5,6,7,8,9},所以a[1][2]=6。这里要特别注意C语言中数组的下标从0开始,不要错选a[1][2]=3。 二、填空题 填空题主要考查考生对基础知识的准确理解。对于这类型的题,考生应深刻理解题意,明确题目要求,运用相关知识做出正确回答。在历年考试中,考生这部分试题的得分直接决定考试成绩。由于这部分共20个空,计40分,有的考生能得35~40分,而有的考生却得不到10分,直接拉开了最后成绩。在判卷过程中发现考生常犯的错误有以下几个方面: 1.基础知识掌握不扎实,概念理解不准确。 如2003年9月填空第8题: main( ) {int a=1,b=3,c=5; if (c=a+b) printf ("yes\n"); else p......
[置顶] 计算机待级考试(二级) (2006-07-31 01:41:00)
摘要: c语言二级考试主要考c语言程序设计知识,除此之外还有计算机基础知识、dos基本操作、windows基本操作的内容,有些考生只注重c语言知识的学习,忽略了c语言之外内容的复习,造成不小的损失。c语言二级考试笔试试题有选择和填空两类大题。以下仅对c语言中的一些易错难懂的题进行解析。 1、设有如下的变量定义: int i =8,k ,a,b ; unsigned long w=5; double x=1,42,y=5.2; 则以下符合c语言语法的表达式是 a、a+=a-=(b=4)*(a=3) b、x%(-3); c、a=a*3=2 d、y=float(i) 答案:a 解析:赋值运算符按照“自右而左”的结合顺序,答案a的运算顺序是:先将4赋给变量b,3赋给变量a,然后计算a=a-b*a,运算后变量a的值为-8,最后计算a=a+a,此表达式最终结果为-16,c语言的表达式很简洁,但是心中必须清楚运算的顺序。模运算要求两个数必须是整型数据,故答案b是错误的。答案c是错误的原因是不能将一个常数赋给一个表达式。答案d也是错误的,应该给float加上括号才对,需要强调的是强制类型转变后变量i本身的数据类型没有改变,强制类型运算后得到一个float型的中间变量。 2、以下程序的输出结果是 a、2 0 b、3 1 c、3 2 1 d、2 1 0 main( ) { int n=4; while(n╠╠)printf("%d ",--n); } 答案:a 解析:这道题是考查考生对自增运算符以及循环语句的的掌握。n的含义是先使用变量n,使用完后再使其减1,n表示先使变量n减1后再使用n。自增运算符是c语言的重点和难点,每次考试都考。该题的运行步骤是首先判断条件表达式的真假,因为变量n的值为4大于0,所以条件表达式的值为真,判断完条件表达式之后,变量n的值变为3,然后执行循环体,要输出n的值,显然是先对n减1再输出,故输出应是2,然后再进行第二次循环,由于变量n的值大于0,故条件表达式的值为真,判断完条件表达式之后,变量n的值变为1,然后执行循环体,输出n的值为0,然后判断条件表达式n的值为假,跳出循环。 3、若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 a、*p=&a; scanf("%ld"......
[置顶] [推荐]二级C语言常见易错题(2006-07-31 01:29:00)
摘要:1. 数据溢出int a = 32767;a = a + 1; 此时a的值为 –327682. (-1)&&(-1) 值为:1非0的数,逻辑值均为1只有数0,逻辑值为03. 设a=5, b=6, c=7, d=8, m=2, n=2执行 (m = a > b) && ( n = c > b)结果:n 的值为 2解析:&&是短路(shortway)运算符,当&&左边表达式的值为0时,不再执行右边的表达式4. 1 / 2 = 0 1.0 / 2 = 0.55. 转义字符遇到’\’字符应注意转义字符问题,比如’\\’,’\ddd’就是转义字符常见考法:Q:”a\045+045\b”有几个字节? A:8个字节(分别是’a’,’\045’,’+’,’0’,’4’,’5’,’\b’,’\0’)字符串结束符如上题,”a\045+045\b”含有最后的字符串结束符’\0’,因而长度为8个字节注意:计算字符串长度时,sizeof会将’\0’计算在内,strlen()则不算Main(){char b[] = “hello, you”;b[5] = 0;printf(“%s\n”, b);} 运行结果:hello解析:b[5]=0 ;等价于 b[5] = ‘\0’;6. ++ i , i ++x = 5;y1 = x++ *......
[置顶] 软件水平考试常用算法设计方法 (2006-07-30 03:03:00)
摘要:软件水平考试常用算法设计方法
要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。
算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。
通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。
算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 一、迭代法
迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行: (1) 选一个方程的近似根,赋给变量x0; (2) 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0; (3) 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为: 【算法】迭代法求方程的根 { x0=初始近似根; do { x1=x0; x0=g(x1); /*按特定的方程计算新的近似根*/ } while ( fabs(x0-x1)>Epsilon); printf(“方程的近似根是%f\n”,x0); } 迭代算法也常用于求方程组的根,令 X=(x0,x1,…,xn-1) 设方程组为: xi=gi(X) (I=0,1,…,n-1) 则求方程组根的迭代算法可描述如下: 【算法】迭代法求方程组的根 ......
[置顶] 基础算法思想(转贴)(2006-07-30 02:17:00)
摘要:分而治之方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以: 1) 把它分成两个或多个更小的问题; 2) 分别解决每个小问题; 3) 把各小问题的解答组合起来,即可得到原问题的解答。小问题通常与原问题相似,可以递归地使用分而治之策略来解决。例2-1 [找出伪币] 给你一个装有1 6个硬币的袋子。1 6个硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这个伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。比较硬币1与硬币2的重量。假如硬币1比硬币2轻,则硬币1是伪造的;假如硬币2比硬币1轻,则硬币2是伪造的。这样就完成了任务。假如两硬币重量相等,则比较硬币3和硬币4。同样,假如有一个硬币轻一些,则寻找伪币的任务完成。假如两硬币重量相等,则继续比较硬币5和硬币6。按照这种方式,可以最多通过8次比较来判断伪币的存在并找出这一伪币。另外一种方法就是利用分而治之方法。假如把1 6硬币的例子看成一个大的问题。第一步,把这一问题分成两个小问题。随机选择8个硬币作为第一组称为A组,剩下的8个硬币作为第二组称为B组。这样,就把1 6个硬币的问题分成两个8硬币的问题来解决。第二步,判断A和B组中是否有伪币。可以利用仪器来比较A组硬币和B组硬币的重量。假如两组硬币重量相等,则可以判断伪币不存在。假如两组硬币重量不相等,则存在伪币,并且可以判断它位于较轻的那一组硬币中。最后,在第三步中,用第二步的结果得出原先1 6个硬币问题的答案。若仅仅判断硬币是否存在,则第三步非常简单。无论A组还是B组中有伪币,都可以推断这1 6个硬币中存在伪币。因此,仅仅通过一次重量的比较,就可以判断伪币是否存在。现在假设需要识别出这一伪币。把两个或三个硬币的情况作为不可再分的小问题。注意如果只有一个硬币,那么不能判断出它是否就是伪币。在一个小问题中,通过将一个硬币分别与其他两个硬币比较,最多比较两次就可以找到伪币。这样,1 6硬币的问题就被分为两个8硬币(A组和B组)的问题。通过比较这两组硬币的重量,可以判断伪币是否存在。如果没有伪币,则算法终止。否则,继续划分这两组硬币来寻找伪币。假设B是轻的那一组,因此再把它分成两组,每组有4个硬币。称其中一组为B1,另一组为B2。比较这两组,肯定有一组轻一些。如果B1......
[置顶] [转帖]C基本结构:顺序、选择、循环(2006-07-29 02:00:00)
摘要:C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句。 从程序流程的角度来看,程序可以分为三种基本结构, 即顺序 结构、分支结构、循环结构。 这三种基本结构可以组成所有的各种 复杂程序。C语言提供了多种语句来实现这些程序结构。 本章介绍 这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后 面各章的学习打下基础。 C程序的语句 C程序的执行部分是由语句组成的。 程序的功能也是由执行语 句实现的。C语句可分为以下五类: 1.表达式语句 2.函数调用语句 3.控制语句 4.复合语句 5.空语句 1.表达式语句 表达式语句由表达式加上分号“;”组成。其一般形式为: 表达式; 执行表达式语句就是计算表达式的值。例如: x=y+z; 赋值语句 y+z; 加法运算语句,但计算结果不能保留,无实际意义 i++; 自增1语句,i值增1 2.函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为: 函数名(实际参数表); 执行函数语句就是调用函数体并把实际参数赋予函数定义中的 形式参数,然后执行被调函数体中的语句,求取函数值。(在第五章 函数中再详细介绍)例如printf("C Program");调用库函数,输出字 符串。 3.控制语句 控制语句用于控制程序的流程, 以实现程序的各种结构方式。 它们由特定的语句定义符组成。C语言有九种控制语句。 可分成以 下三类: (1) 条件判断语句 if语句,switch语句 (2) 循环执行语句 do while语句,while语句,for语句 (3) 转向语句 break语句,goto语句,continue语句,return语句 4.复合语句 把多个语句用括号{}括起来组成的一个语句称复合语句。 在程 序中应把复合语句看成是单条语句,而不是多条语句,例如 { x=y+z; a=b+c; printf(“%d%d”,x,a); } 是一条复合语句。复合语句内的各条语句都必须以分号“;”结 尾,在括号“}”外不能加分号。 5.空语句 只有分号“;”组成的语句称为空语句。 空语句是什么也不执 行的语句。在程序中空语句可用来作空循环体。例如 while(getchar()!='\n') ; 本语句的功能是,只要从键盘输入的字符不是回车则重新输入。 这里的循环体为空语句。 赋值语句 赋值语句是由赋值表达式再加上分号构成的......
[置顶] [转]老程序员给年轻程序员的忠告!(2006-07-28 03:46:00)
摘要:1、好好规划自己的路,不要跟着感觉走;
根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手。
2、可以做技术的,切不可沉湎于技术;
千万不可一门心思钻营技术,给自己造成很多压力,如果你的心思全部放在上面那么注定你将成为孔乙己一类的人物,适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老,还是个工程师。
3、不要去做技术高手,只去做综合素质高手;
在企业里工作,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官,”这是普遍的、典型的工程师的迂腐之言,你想想,老板搞经营那么多年难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等等,因此务必培养自己多方面的能力,包括,管理,亲和力,公关能力等要成为最综合素质的高手则前途无量,技术以外的技能才是更重要的本事,从古到今,一律如此。
4、多交“三教九流”的朋友;
不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理者,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费的成功的概率大大降低。
5、知识涉猎不仅要专,还一定要广;
多看看其他方面的书,金融,财会,进出口,税务,法律等等为以后做一些积累的以后的用处会更大,会少交许多的学费。
6、抓住时机向技术管理或市场销售方面转变;
要想有前途就不能一直搞开发,适当时候要转变为管理和或销售的前途会更大,以前搞技术也没有白搞,以后还用得着,搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉,应该说这才是前途的真正支柱。
7、逐渐克服自己的心理弱点和性格缺陷;
多疑,敏感,犹豫不决,胆怯,多虑,这些工程师普遍存在的性格弱点必须改变,很难吗,只在床......
[置顶] [转]“过35岁不能编程”这荒谬的说法 (2006-07-28 03:45:00)
摘要:1.大部分都做的是行业管理方面的软件,从计算机技术上说很快就可以进入.2.很多公司没有管理和技术双重的提升机制,使得人们觉得做管理比做技术有前途,但是仍然有些公司客户非常认可技术人员的待遇也很好.3.再就是没有很好的产品线,使得程序员不停地处于学习各种开发工具的状态,经验反而不是很重要,岁数大了,学习当然会慢一点.KV300作者王江民初中毕业,38岁开始学习计算机,45岁只身办公司. 62岁的David Culter,80高龄的knuth都是很好的例子 程序员到了三十五岁,有以下优势:1。经验丰富;2。技术纯熟;3。为人老道;有以下劣势:1。体力不支;2。工资太高(公司可能不堪负担);3。拖家带口精力不够;4。老资格,可能太有主见,不听话不喜欢这样的老程序员的公司有以下特点:1。体力型(以知识含量低的软件为主,不注重软件质量);2。公司财政困难,或与竞争对手恶性竞争,所以不能承受给经验丰富者高工资;3。老板很独断-他说了算,手下只要有听话干活的;4。客户是关系户,软件性能质量不重要。喜欢这样的老程序员的公司有以下特点:1。智力型(软件知识含量高,注重软件质量);2。公司资金雄厚;3。在技术上较民主,管理人员依靠大量资深技术人员定夺技术设计上的方向;4。软件质量是竞争的生命。国内流行程序员到35岁不行了,可能是因为前一种软件企业较多的缘故。在微软,我身边就还有不少奔四十甚至五十的程序员。注意,他们只是程序员,不是什么干部。他们很受到管理层的敬重,也各怀绝技。当然,话又说回来了,如果到了35岁,在技术经验上与20出头的毛头小伙还没有什么区别,那就悬了。微软公认的最厉害的程序员是David Cutler,他今年62岁。他每天上班的工作就是编程。他没有队伍,不做经理,但是他在公司的职位比大部分副总裁还要高。有时某一个队伍预测一项工程要数月,他看不过,两天一个人就完成了。Windows NT 是他开始的,他现在正在做64位的工作,以前他在Digital负责VAX的编程。在网上你可以找到他的自传。他当然是例外的奇才。但是在微软有非常多35岁以上的技术人员,决不会因为年纪大就不行了。公司的制度允许“双轨”发展,不想做经理的可以继续做技术,而且对事业、待遇都没有差别。另外很多技术人员,经过多年的经验,开始成为架构师。他们依......
[置顶] (转帖)二进制、八进制、十六进制(2006-07-28 03:25:00)
摘要:二进制、八进制、十六进制
6.1 为什么需要八进制和十六进制?
6.2 二、八、十六进制数转换到十进制数
6.2.1 二进制数转换为十进制数
6.2.2 八进制数转换为十进制数
6.2.3 八进制数的表达方法
6.2.4 八进制数在转义符中的使用
6.2.5 十六进制数转换成十进制数
6.2.6 十六进制数的表达方法
6.2.7 十六进制数在转义符中的使用
6.3 十进制数转换到二、八、十六进制数
6.3.1 10进制数转换为2进制数
6.3.2 10进制数转换为8、16进制数
6.4 二、十六进制数互相转换
6.5 原码、反码、补码
6.6 通过调试查看变量的值
6.7 本章小结
这是一节“前不着村后不着店”的课。不同进制之间的转换纯粹是数学上的计算。不过,你不必担心会有么复杂,无非是乘或除的计算。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……
6.1 为什么需要八进制和十六进制?
编程中,我们常用的还是10进制……必竟C/C++是高级语言。
比如:
int a = 100,b = 99;
不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:
0000 0000 0000 0000 0110 0100
面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。
用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?
2、8、16,分别是2的1次方,3次方......
