C语言程序设计基础概念

C语言程序设计基础概念,第1张

C语言程序设计基础概念

C语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用C语言,其原因是C语言有优于其他语言的一系列特点。下面是我搜集的C语言程序设计基础概念,希望大家认真复习!

1.1 C语言的特点

C语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用C语言,其原因是C语言有优于其他语言的一系列特点。下面是C语言的主要特点:

(1)语言简洁、紧凑,并且使用方便、灵活

(2)运算符丰富

(3)数据结构丰富

(4)具有结构化的控制语句

(5)语法限制不太严格,使程序设计比较自由

(6)C语言允许用户直接访问物理地址,能进行位(bit) *** 作,可以直接对硬件进行 *** 作。

1.2 源程序的书写规则

C语言的书写规则。C语言书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。C程序没有行号,每个语句和数据定义的.最后必须有一个分号。C语言中分号是语句中不可少的,即使是程序中的最后一个语句也应该包含分号。C语言中的注释可以用〃/*〃用〃*/〃结束,注释可以在任何允许插入空格符地方插入。C语言中注释不允许嵌套,注释可以用西文,也可以用中文。

1.3 C语言的风格

由于C语言对语法限制不太严格,为了保证程序的准确性和可读性,建议在书写程序采用阶梯缩进格式。也就是按如下格式书写C语言程序:

**********

*****()

{

**********

********

{

******

……

}

*********

}

概括起来,C语言程序具有如下的风格:

①C语言程序的函数具体模块结构风格,使得程序整体结构清晰、层次清楚,为模块化程序设计提供了强有力的支持。

②C语言的源程序的扩展名都是.C。

③C语言中的注释格式为:

/*注释内容*/

/与*之间不允许有空格,注释部分允许出现在程序中的任何位置。

④C语言中的所有语句都必须以分号“”结束。

4.3 函数的调用与参数

如果一个函数要使用参数,它就必须定义接受参数值的变量。

4.3.1 形式参数与实际参数

函数定义时填入的参数我们称之为形式参数,简称形参,它们同函数内部的局部变量作用相同。形参的定义是在函数名之后和函数开始的花括号之前。

调用时填入的参数,我们称之为实际参数,简称实参。

必须确认所定义的形参与调用函数的实际参数类型一致,同时还要保证在调用时形参与实参的个数出现的次序也要一一对应。如果不一致,将产生意料不到的结果。与许多其它高级语言不同,(是健壮的,它总要做一些甚至你不希望的事情,几乎没有运行时错误检查,完全没有范围检测。作为程序员,必须小心行事以保证不发生错误,安全运行。

4.3.2 赋值调用与引用调用

一般说来,有两种方法可以把参数传递给函数。第一种叫做“赋值调用”(call by value),这种方法是把参数的值复制到函数的形式参数中。这样,函数中的形式参数的任何变化不会影响到调用时所使用的变量。

把参数传递给函数的第二种方法是“引用调用”(call by reference)。这种方法是把参数的地址复制给形式参数,在函数中,这个地址用来访问调用中所使用的实际参数。这意味着,形式参数的变化会影响调用时所使用的那个变量(详细内容请参见后续章节)。

除少数情况外,C语言使用赋值调用来传递参数。这意味着,一般不能改变调用时所用变量的值。请看例4 - 9。

[例4 - 9]

main ( )

{

int t =10;

printf("%d %d ",sqr(t),t)/* sqr(t)是函数调用,t是实参* /

}

int sqr(x) /* 函数定义,x是形式参数* /

int x;

{

x = x * x

return (x)

}

在这个例子里,传递给函数sqr( )的参数值是复制给形式参数x的,当赋值语句x = x * x执行时,仅修改局部变量x。用于调用sqr( )的变量t,仍然保持着值10。

执行程序:

100 10

切记,传给函数的只是参数值的复制品。所有发生在函数内部的变化均无法影响调用时使用的变量。

4.4 递归

C语言函数可以自我调用。如果函数内部一个语句调用了函数自己,则称这个函数是“递归”。递归是以自身定义的过程。也可称为“循环定义”。

递归的例子很多。例如定义整数的递归方法是用数字1,2,3,4,5,6,7,8,9加上或减去一个整数。例如,数字1 5是7 + 8;数字2 1是9 + 1 2; 数字1 2是9 + 3。

一种可递归的计算机语言,它的函数能够自己调用自己。一个简单的例子就是计算整数阶乘的函数factor( )数N的阶乘是1到N之间所有数字的乘积。例如3的阶乘是1×2×3,即是6。

factor( )和其等效函数fact( )如例4 - 1 0所示。

[例4 - 1 0 ]

factor(n) /* 递归调用方法* /

int n;

{

int answer

if (n==1)

return (1)

answer=factor(n-1) * n; /* 函数自身调用* /

return(answer)

}

[例4 - 11 ]

fact(n) /* 非递归方法* /

int n

{

int t,a n s w e r

answer = 1

for (t=1t <= nt ++)

answer = answer * t

return(answer)

}

非递归函数fact( )的执行应该是易于理解的。它应用一个从1开始到指定数值结束的循环。

在循环中,用“变化”的乘积依次去乘每个数。

factor( )的递归执行比fact( )稍复杂。当用参数1调用factor( )时,函数返回1;除此之外的其它值调用将返回factor(n-1) * n这个乘积。为了求出这个表达式的值,用( n - 1)调用factor( )一直到n等于1,调用开始返回。

计算2的阶乘时对factor( )的首次调用引起了以参数1对factor( )的第二次调用。这次调用返回1,然后被2乘(n的初始值),答案是2(把printf( )语句插入到factor ( )中,察看各级调用及其中间答案,是很有趣的)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11431210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存