博文

《彻底搞定C指针》-——第5篇:函数参数的传递(下)(2006-11-27 13:27:00)

摘要:  《彻底搞定C指针》-——第5篇:函数参数的传递(下) 白云小飞 三. 函数参数传递方式之二:地址传递
继续——地址传递的问题!
看题二的代码:
Exchg2(int *px, int *py)
{
  int tmp=*px;
  *px=*py;
  *py=tmp;
  print(“*px=%d,*py=%d\n”,*px,*py);
}
main()
{
  int a=4;
  int b=6;
      Exchg2(&a,&b);
      Print(“a=%d,b=%d\n”, a, b);
}
它的输出结果是:
  *px=6,*py=4
  a=6,b=4

    看函数的接口部分:Exchg2(int *px,int *py),请注意:参数px,py都是指针。
    再看调用处:Exchg2(&a, &b);
    它将a的地址(&a)代入到px,b的地址(&b)代入到py。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px,py。
px=&a;
py=&b;
    呵呵!我们发现,其实它与值传递并没有什么不同,只不过这里是将a,b的地址值传递给了px,py,而不是传递的a,b的内容,而(请好好地在比较比较啦)
    整个Exchg2函数调用是如下执行的:
  px=&a;   //
&nbs......

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

彻底搞定C指针6(2006-11-27 13:26:00)

摘要:《彻底搞定C指针》第6篇 指向另一指针的指针 第六篇 指向另一指针的指针 白云小飞
一. 回顾指针概念:
早在本系列第二篇中我就对指针的实质进行了阐述。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!
当我们程序如下申明变量:
short int i;
char a;
short int * pi;
程序会在内存某地址空间上为各变量开辟空间,如下图所示。
内存地址→6     7      8     9     10     11    12    13     14    15
-------------------------------------------------------------------------------------
…  |     |      |      |      |      |       |      |      |      |   
---------------------------------......

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

C语言教程  数据类型、运算符、表达式(2006-11-27 13:25:00)

摘要:



2.无论是强制转换或是自动转换,都只是为了本次运算的需要而
对变量的数据长度进行的临时性转换,而不改变数据说明时对
该变量定义的类型。main(){
float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
} f<--5.75
将float f强制转换成int f float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用, 是临时
的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)
而f的值仍为5.75。基本运算符和表达式
运算符的种类、优先级和结合性
C语言中运算符和表达式数量之多, 在高级语言中是少见的。
正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言
的主要特点之一。
C语言的运算符不仅具有不同的优先级, 而且还有一个特点,
就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅
要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便
确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其
它高级语言的运算符所没有的,因此也增加了C语言的复杂性。运算符的种类
C语言的运算符可分为以下几类:1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余
(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算符
用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等
于(>=)、小于等于(<=)和不等于(!=)六种。3.逻辑运算符
用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、
位非(~)、位异或(^)、左移(<<)、右移(>>)六种。5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-......

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

C基本结构:顺序、选择、循环(2006-11-27 13:24: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......

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

经典c程序100例(2006-11-27 13:23:00)

摘要:

[转贴,如有错误请一起探讨]

【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
      掉不满足条件的排列。
2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++)    /*以下为三重循环*/
 for(j=1;j<5;j++) 
  for (k=1;k<5;k++)
   {
    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/
    printf("%d,%d,%d\n",i,j,k);
   }
}
==============================================================
【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      
2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bo......

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

C 语言图形函数(2006-11-27 13:21:00)

摘要:C 语言图形函数  
C语言图形函数
图形函数
所有图形函数的原型均在graphics. h
中, 本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图
形窗口以及图形模式下的文本输出等函数。另外, 使用图形函数时要确保有显示
器图形驱动程序*BGI, 同时将集成开发环境Options/Linker中的Graphics lib选
为on, 只有这样才能保证正确使用图形函数。
1. 图形模式的初始化
不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器, 在不同
模式下也有不同分辨率。因此, 在屏幕作图之前, 必须根据显示器适配器种类将
显示器设置成为某种图形模式, 在未设置图形模式之前, 微机系统默认屏幕为文
本模式(80列, 25行字符模式), 此时所有图形函数均不能工作。设置屏幕为图形
模式, 可用下列图形初始化函数:
void far initgraph(int far *gdriver, int far *gmode, char *path);
其中gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所
在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见表2。
图形驱动程序由Turbo C出版商提供, 文件扩展名为.BGI。 根据不同的图形
适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序
EGAVGA.BGI。
表2. 图形驱动器、模式的符号常数及数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图形驱动器(gdriver) 图形模式(gmode)
─────────── ─────────── 色调 分辨率
符号常数 数值 符号常数 数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGA 1  CGAC0 0 C0 320*200
CGAC1 1 C1 320*200
CGAC2 2 C2 320*200
CGAC3 3 C3 320*200
CGAHI 4......

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

学习C++从入门到精通的的十本最经典书籍(2006-11-27 13:20:00)

摘要:  转自爱好者论坛 1.《C++Primer》
有“C++的百科全书”,C++程序员人手必备。对语法、语义的描述非常细致和严谨,适合有一定经验的C、C++程序员作为工具书和理论指导书使用,但由于其有一定深度,而没有进阶顺序的章节安排,所以不适合初学者做为教材使用,价格略高。
难度:★★☆
质量:★★★★★
广度:★★★★★
深度:★★★★
性价:★★★☆

2.
《C++Primer Plus》
初学C++不错的书,覆盖面较全,章节安排比较合理,由浅入深,也很容易,故因此失去了一些深度。价格比较便宜,但翻译质量略有不足。
难度:☆
质量:★★★☆
广度:★★★★
深度:★★★
性价:★★★☆

3.
《Essential C++》
lippman的一部面向初学者的作品。在他写了那么后一本primer之后,为何还要写这么薄这么浅的书呢?其实primer对于初学者来说太笨重了,而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释,可以帮助初学者对这门语言有一个大致的了解,但知识范围不很全面,不适合系统学习,读者需要一定的编程知识。
难度:★☆
质量:★★★★
广度:★★★☆
深度:★★★
性价:★★☆

4.
《Effective C++》、《More Effective C++》
C++真牛人大手笔,之以条款的形式回答了程序员在使用C++时经常提出的“因该注意些什么?”,“因该避免什么?”,“因该怎样去解决?”,“为什么?”等问题。C++程序员想要让自己的水平上更高的档次,此二书必看。价格稍贵,有一定难度,不适合初学者。
难度:★★★☆
质量:★★★★★
广度:★★★
深度:★★★★★
性价:★★

5.
《C++编程思想》
除了讲述语言之外,有一定的工程性,从设计者的角度来描述C++怎样应用在实际的项目中。语言描述的全面性欠佳,但还是有一定精度的,尤其是在一些小技巧方面。本书还引入了大量的战例,通过一个个的真实项目来引导你使用C++的思想去思考问题。翻译很差,有一定难度。
难度:★★☆
质量:★★★

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

第一章: C语言概论(2006-11-27 13:20:00)

摘要:
  C语言的发展过程

  C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。 当代最优秀的程序设计语言   早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。 C语言的特点   C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。 C语言版本   目前最流行的C语言有以下几种:
   ·Microsoft C 或称 MS C
   ·Borland Turbo C 或称 Turbo C
   ·AT&T C
  这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。 面向对象的程序设计语言   在C的基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2.0。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序......

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

c语言第二章: 数据类型运算符表达式之一(2006-11-27 13:09:00)

摘要:c语言第二章: 数据类型运算符表达式之一   C语言的数据类型

  在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面:
·数据类型
·存储类型
·作用域
  在本课中,我们只介绍数据类型说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

1.基本数据类型

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

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

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

3.指针类型

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

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

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

c语言第二章: 数据类型运算符表达式之二(2006-11-27 13:07:00)

摘要:  字符型量 字符型量包括字符常量和字符变量。

字符常量
字符常量是用单引号括起来的一个字符。例如'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);
}
此程序练习转义字符的使用
a、b、c为整数 5->a,6->b,7->c
调用printf显示程序运行结果
printf("%d\n\t%d %d\n %d %d\......

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