博文

C语言初学者入门讲座 第六讲 分支结构(1)(2007-05-03 10:57:00)

摘要:C语言初学者入门讲座 第六讲 分支结构(1)   关系运算符和表达式

  在程序中经常需要比较两个量的大小关系, 以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 在C语言中有以下关系运算符:

  < 小于
  <= 小于或等于
  > 大于
  >= 大于或等于
  == 等于
  != 不等于

  关系运算符都是双目运算符,其结合性均为左结合。 关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。

  关系表达式

  关系表达式的一般形式为: 表达式 关系运算符 表达式 例如:a+b>c-d,x>3/2,'a'+1<c,-i-5*j==k+1;都是合法的关系表达式。由于表达式也可以又是关系表达式。 因此也允许出现嵌套的情况,例如:a>(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。

  如: 5>0的值为“真”,即为1。(a=3)>(b=5)由于3>5不成立,故其值为假,即为0。

void main(){
 char c='k';
 int i=1,j=2,k=3;
 float x=3e+5,y=0.85;
 printf("%d,%d/n",'a'+5<c,-i-2*j>=k+1);
 printf("%d,%d/n",1<j<5,x-5.25<=x+y);
 printf("%d,%d/n",i+j+k==-2*j,k==j==i+5);
}
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d/n",'a'+5<c,-i-2*j>=k+1);
printf("%d,%d/n",1<j<5,x-5.25<=x+y);
printf("%d,%d/n",i+j+k==-2*j,k==j......

阅读全文(1369) | 评论:0

C语言初学者入门讲座 第五讲 输入输出(1)(2007-05-03 10:56:00)

摘要:C语言初学者入门讲座 第五讲 输入输出(1)  
  数据输出语句

  本小节介绍的是向标准输出设备显示器输出数据的语句。在C语言中,所有的数据输入/输出都是由库函数完成的。 因此都是函数语句。本小节先介绍printf函数和putchar函数。printf函数printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式, 把指定的数据显示到显示器屏幕上。在前面的例题中我们已多次使用过这个函数。

  一、printf函数调用的一般形式

  printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。printf函数调用的一般形式为: printf(“格式控制字符串”,输出表列)其中格式控制字符串用于指定输出格式。 格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如“%d”表示按十进制整型输出,“%ld”表示按十进制长整型输出,“%c”表示按字符型输出等。后面将专门给予讨论。

  非格式字符串在输出时原样照印,在显示中起提示作用。 输出表列中给出了各个输出项, 要求格式字符串和各输出项在数量和类型上应该一一对应。

void main()
{
int a=88,b=89;
printf("%d %d/n",a,b);
printf("%d,%d/n",a,b);
printf("%c,%c/n",a,b);
printf("a=%d,b=%d",a,b);
}
a<--8,b<--89

printf("%d %d/n",a,b);
printf("%d,%d/n",a,b);
printf("%c,%c/n",a,b);
printf("a=%d,b=%d",a,b);

  本例中四次输出了a,b的值,但由于格式控制串不同,输出的结果也不相同。第四行的输出语句格式控制串中,两格式串%d 之间加了一个空格(非格式字符),所以输出的a......

阅读全文(1461) | 评论:0

C语言初学者入门讲座 第四讲 运算符和表达式(2007-05-03 10:55:00)

摘要:C语言初学者入门讲座 第四讲 运算符和表达式   运算符的种类、优先级和结合性

  C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。

  C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。

  运算符的种类C语言的运算符可分为以下几类:

  1.算术运算符

  用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

  2.关系运算符

  用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

  3.逻辑运算符

  用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

  4.位操作运算符

  参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

  5.赋值运算符

  用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

  6.条件运算符

  这是一个三目运算符,用于条件求值(?:)。

  7.逗号运算符

  用于把若干表达式组合成一个表达式(,)。

  8.指针运算符

  用于取内容(*)和取地址(&)二种运算。

  9.求字节数运算符

  用于计算数据类型所占的字节数(sizeof)。

  10.特殊运算符

  有括号(),......

阅读全文(1507) | 评论:0

C语言初学者入门讲座 第三讲 基础语句(2007-05-03 10:54:00)

摘要: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);

阅读全文(1395) | 评论:0

C语言初学者入门讲座 第二讲 数据类型(3)(2007-05-03 10:52:00)

摘要:C语言初学者入门讲座 第二讲 数据类型(3)   基本运算符和表达式

  运算符的种类、优先级和结合性

  C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。

  C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。

  运算符的种类C语言的运算符可分为以下几类:

  1.算术运算符

  用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

  2.关系运算符

  用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

  3.逻辑运算符

  用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

  4.位操作运算符

  参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

  5.赋值运算符

  用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

  6.条件运算符

  这是一个三目运算符,用于条件求值(?:)。

  7.逗号运算符

  用于把若干表达式组合成一个表达式(,)。

  8.指针运算符

  用于取内容(*)和取地址(&)二种运算。

  9.求字节数运算符

  用于计算数据类型所占的字节数(sizeof)。

  10.特殊......

阅读全文(1471) | 评论:0

C语言初学者入门讲座 第二讲 数据类型(2)(2007-05-03 10:51:00)

摘要:C语言初学者入门讲座 第二讲 数据类型(2)   字符型量

  字符型量包括字符常量和字符变量。

  字符常量

  字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。在C语言中,字符常量有以下特点:

  1.字符常量只能用单引号括起来,不能用双引号或其它括号。

  2.字符常量只能是单个字符,不能是字符串。

  3.字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符常量,不能参与运算。

  转义字符

  转义字符是一种特殊的字符常量。转义字符以反斜线"/"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“/n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。

  常用的转义字符及其含义

转义字符 转义字符的意义
/n   回车换行
/t 横向跳到下一制表位置
/v  竖向跳格
/b 退格
/r  回车
/f  走纸换页
// 反斜线符"/"
/'  单引号符
/a  鸣铃
/ddd  1~3位八进制数所代表的字符
/xhh 1~2位十六进制数所代表的字符
 
  广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的/ddd和/xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如/101表示字?quot;A" ,/102表示字母"B",/134表示反斜线,/XOA表示换行等。转义字符的使用。

void main()
{
 int a,b,c;
 a=5; b=6; c=7;
 printf("%d/n/t%d %d/n %d %d/t/b%d/n",a,b,c,a,b,c);
}

  ......

阅读全文(1502) | 评论:0

C语言初学者入门讲座 第二讲 数据类型(1)(2007-05-03 10:50:00)

摘要:C语言初学者入门讲座 第二讲 数据类型(1)   我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面:

  ·数据类型
  ·存储类型
  ·作用域

  在本讲中,我们只介绍数据类型说明。其它说明在以后陆续介绍。所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

  1.基本数据类型

  基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。

  2.构造数据类型构造数据类型

  是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:

  ·数组类型
  ·结构类型
  ·联合类型

  3.指针类型

  指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(int a,int b);其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数 sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。在本讲中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各讲中陆续介绍。

  对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变......

阅读全文(1492) | 评论:0

结构图的基本原则(2007-05-01 16:15:00)

摘要:结构图的基本原则 -----结构图中的每一个矩形表示程序员编写的函数,不包含标准C/C++函数 -----矩形的名称是传达函数的作用的智能名称;它是函数编码中使用的名称 -----函数图只包含函数流程.不表明代码 -----相同函数用交叉的平行线画出阴影,或是在矩形的右下角绘出阴影来表示 -----当相同的调用出现在程序中时,在结构图中显示它们,如果它们包含子函数调用,只  要     显示一次完整的结构 -----数据流和标记是可选的.在使用时,应当给它们命名 -----输入流和标记在垂直线的左边显示;输入流和标记在右边显示  ......

阅读全文(2695) | 评论:0

比尔·盖茨11条名言(2007-04-22 19:34:00)

摘要:1.生活是不公平的,你要去适应它。   2.这个世界并不会在意你的自尊,而是要求你在自我感觉良好之前先有所成就。   3.刚从学校走出来时你不可能一个月挣6万美元,更不会成为哪家公司的副总裁,还拥有一部汽车,直到你将这些都挣到手的那一天。   4.如果你认为学校里的老师过于严厉,那么等你有了老   板再回头想一想。   5.卖汉堡包并不会有损于你的尊严。你的祖父母对卖汉堡包有着不同的理解,他们称之为“机遇”。   6.如果你陷入困境,那不是你父母的过错,不要将你理应承担的责任转嫁给他人,而要学着从中吸取教训。   7.在你出生之前,你的父母并不像现在这样乏味。他们变成今天这个样子是因为这些年来一直在为你付账单、给你洗衣服。所以,在对父母喋喋不休之前,还是先去打扫一下你自己的屋子吧。   8.你所在的学校也许已经不再分优等生和劣等生,但生活却并不如此。某些学校已经没有了“不及格”的概念,学校会不断地给你机会让你进步,然而现实生活完全不是这样。   9.走出学校后的生活不像在学校一样有学期之分,也没有暑假之说。没有几位老板乐于帮你发现自我,你必须依靠自己去完成。   10.电视中的许多场景决不是真实的生活。在现实生活中,人们必须埋头做自己的工作,而非像电视里演的那样天天泡在咖啡馆里。   11.善待你所厌恶的人,因为说不定哪一天你就会为这样的一个人工作。......

阅读全文(1998) | 评论:0

C/C++编程新手错误语录(2007-04-21 17:41:00)

摘要: 1.引言

  还记得当年学数学、英语都有个窍门,那就是搞个错题集。经常复习一下这个错题集,就可以避免下次犯同样的错误。而几乎所有的程序员都是从犯错误开始的,我们也很有必要总结一下编程新手的常见错误,本文的目的在于此。文中所列出的都是笔者在项目开发中接触到的新手真实的言谈,笔者学学文革腔调,姑且称之为“错误语录”。

  2.语录   (1)“我的程序都是对的,可结果不对”

  想想你的周围,是不是也有人说这样的话?如果你也曾经说过,那就此打住,不要再说这句话,因为这句话只会显示说话者的无知。既然程序都是对的,那为什么结果不对?

  (2)“程序=算法+数据结构”

  如果刚刚学完C语言,我们说这样的话,完全可以理解,而且可以说是正确的。但是如果你是一位即将从事C/C++编程的程序员,那么很遗憾,这个说法只能判错,殊不知,世界上还有另一种说法:

  程序 = 对象 + 消息

  “程序=算法+数据结构”只对面向过程的语言(C)成立,而对面向对象的语言(C++),则只能表述为“程序=对象+消息”。传统的过程式编程语言以过程为中心以算法为驱动,面向对象的编程语言则以对象为中心以消息为驱动。这里的消息是广义的,对象A调用了对象B的成员函数,可看作对象A给B发消息。

  (3)“程序编出来,运行正确就行了”

  运行正确的程序并不一定是好程序,程序员时刻要牢记的一条就是自己写的程序不仅是给自己看的,要让别人也能轻易地看懂。很遗憾,许多的编程新手不能清晰地驾驭软件的结构,对头文件和实现文件的概念含糊不清,写出来的程序可读性很差。

  C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现文件组成,对头文件和实现文件的正确使用方法是:

  规则1 头文件(.h)中是对于该模块接口的声明,接口包括该模块提供给其它模块调用的外部函数及外部全局变量,对这些变量和函数都需在.h中文件中冠以extern关键字声明;

  规则2 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

  规则3 永远不要在.......

阅读全文(1658) | 评论:0