C语言学习二

一、C算法

1.概念:是为解决一个具体问题而采取的确定、有限、有序、可执行的操作步骤。(计算机能够执行的算法)

2.分类:( 1 )数值算法,主要用于解决数值求解问题。

( 2 )非数值算法,主要用于解决需要用逻辑推理才能解决的问题。(如搜索、分类等问题)

3.衡量基本特性

( 1 )有穷性。算法包含的操作步骤应是有限的,每一步都应在合理的时间内完成。

( 2 )确定性。算法的每个步骤都应是确定的,不允许有歧义。

( 3 )有效性。有效执行,得到确定结果。

( 4 )允许没有输入或者有多个输入。

( 5 )必须有一个或多个输出

补充:数据结构+算法=程序

一个程序应由两部分组成:( 1 )数据结构( Data Structure )是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。( 2 )算法是对操作或行为(即操作步骤)的描述。算法代表着用系统的方法描述解决问题的策略。不同的算法可能用不同的时间、空间或效率来完成同样的任务。

4、算法的描述方法

(1)自然语言描述:用自然语言( Natural Language )描述算法时,可使用汉语、英语和数学符号等。(适用于算法较为简单的情况)

(2)流程图描述:流程图( Flow Chart )是描述程序的控制流程和指令执行情况的有向图,它是程序的一比较直观的表示形式。

(3) NS结构化流程图描述:NS结构化流程图是由美国学者I.Nassi和B .Schneiderman于1973年提出的。最重要的特点就是完全取消了流程线,迫使算法只能从上到下顺序执行。(适合于结构化程序的设计)

传统流程图中常用的符号(左)

188dcbeea6544007bc4989a75fb15122.jpg

                      NS流程图比对(右)

 (4)伪码描述伪码(Pseudocode)是指介于自然语言和计算机语言之间的一种代码,它的最大优点是,与计算机语言比较接近,易于转换为计算机程序。书写无固定格式和规范,比较灵活。

注意:在学习程序设计时应养成“先画程序流程图、然后再编写代码”的好习惯。

二、C函数

1.定义:函数是一种用来编译C语言的工具(构成程序的基本模块)

e6f372552cee4614b21674e5139950fe.jpg

2c4e772fa7d84896ac7db2fb94003dcf.jpg 

2.类型:(1)标准库函数:数学函数、绝对值函数、平方根函数和幂函数等‌

①数学函数‌:包括各种数学计算,如绝对值、平方根等,包含在math.h头文件中。

②绝对值函数‌:包括abs()和fabs(),分别用于求整型和浮点型的绝对值,包含在stdlib.h头文件中。

③平方根函数和幂函数‌:包括sqrt()和幂运算函数,用于计算平方根和幂运算,包含在math.h头文件中。

④其他常用函数‌:如随机数函数、字符串转换函数等,包含在stdlib.h、ctype.h等头文件中‌。

(2)自定义函数(自行编写):主要包括函数名、参数列表和函数体三部分

①函数名:是函数的唯一标识,用于说明函数的功能。

命名规则与变量的命名相同,建议单词及其组合。为了区分,通常变量名用小写字母开头,函数名则用大写字母开头。

例:Windows风格时为“动词”或者“动词+名词”(动宾词组)的形式,如函数名GetMax等。

②函数体:必须用一对花括号{}包围,花括号为定界符。

内部变量:在函数体内部定义的变量只能在函数体内访问

形式参数Parameter:函数头部参数表里的变量也是内部变量,即只能在函数体内访问。

③形参表:是函数的入口。

练习一求n的阶乘

61be4649525442168033ee993226b3d0.jpg

f5acca955af1430189755883302af955.jpg 

 3.向函数传递值和从函数返回值

(1)举例通常main( )函数调用函数Fact ( )时,必须提供一个称为实际参数( Argument,简称实参)的表达式给被调用的函数

(2)定义:①调用其他函数的函数简称为主调函数②被调用的函数简称为被调函数

(3)类型:赋值调用,引用调用,递归调用,嵌套调用。

①赋值调用中函数的形参是数值变量,函数调用时把参数的值复制到函数的形式参数中。(不影响主调函数)

②引用调用中函数的形参是指针,函数调用时是把参数的地址复制给形式参数。(影响)

③递归调用是程序调用自身的编程技巧

递归函数包括:( 1 )由其自身定义的与原始问题类似的更小规模的子问题,它使递归过程持续进行,称为1一般情况( General Case );( 2 )递归调用的最简形式,它是一个能够用来结束递归调用过程的条件,通常称为基线情况( Base Case )。

练习二 n的阶乘(递归调用)

16462ecbc07c4d258d5d0f3932b44a67.jpg

7692550079564a21b6d4d29cc2577e22.jpg 

 ④嵌套调用即在被调函数中又调用了其他函数的调用形式

4.函数设计基本原则

( 1 )函数的规模要小,尽量控制在50行代码以内。

( 2 )函数的功能要单一。

( 3 )每个函数只有一个入口和一个出口。

( 4 )在函数接口中清楚地定义函数的行为,包括入口参数、出口参数、返回状态、异常处理等,让调用者清楚函数所能进行的操作以及操作是否成功,应尽可能多地考虑一些可能出错的情况。定义好函数接口以后,轻易不要改动。

( 5 )在函数的入口处,对参数的有效性进行检查。

( 6 )在执行某些敏感性操作(如执行除法、开方、取对数、赋值、函数参数传递等)之前,应检查操作数及其类型的合法性,以避免发生除零、数据溢出、类型转换,类型不匹配等因思维不缜密而引起的错误。

( 7 )不能认为调用一个函数总会成功,要考虑到如果调用失败,应该如何处理。

( 8 )对于与屏幕显示无关的函数,通常通过返回值来报告错误,因此调用函数时要校验函数的返回值,以判断函数调用是否成功。对于与展幕显示有关的函数,函数要负责相应的错误处理。错误处理代码一般放在函数末尾,对于某些错误,还要设计专门的错误处理函数。

( 9 )由于并非所有的编译器都能捕获实参与形参举型不匹配的错误,所以程序设计人员在函数调用时应确保函数的实参类型与形参类型相匹配。在程序开头进行函数原型声明,并将函数参数的类型书写完整(没有参数时用void声明),有助于编译器进行类型匹配检查。

( 10 )当函数需要返回值时,应确保函数中的所有控制分支都有返回值。函数没有返回值时应用void声明。

三、C循环控制结构

1.循环控制结构与循环语句

①若需重复处理的次数是已知的,则称为计数控制的循环( Counter Controlled Loop )

②若重复处理的次数是未知的,是由给定条件控制的,称为条件控制的循环( Condition Controlled Loop )。

2.循环结构通常有两种类型:( 1 )当型循环结构(如图6-1所示),表示当条件P成立(为真)时,反复执行A操作,直到条件P不成立(为假)时结束循环。

 

3a4cd818fbe74365b4eecab702606070.jpg 

( 2 )直到型循环结构(如图6-2所示),表示先执行A操作,再判断条件P是否成立(为真),若条件P成立(为真),则反复执行A操作,直到条件P不成立(为假)时结束循环。

3.C语言提供for、while、do-while三种循环语句( Loop Statement )来实现循环结构。

(1)while语句(当型)

1a28ca2e1a1541379ae39ae7dcd6423c.jpg

 ①计算循环控制表达式的值;

②如果循环控制表达式的值为真,那么就执行循环体中的语句,并返回步骤①;③如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句。

(2)do-while语句(直到型)

a8e9b3baf53b4edd85cd52ac231c3c25.jpg

 ①执行循环体中的语句;

②计算循环控制表达式的值;

③如果循环控制表达式的值为真,那么返回步骤①;

④如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句。

(3)for语句(当型)

f0b08117a5ef4c77b5dd7d3f9e943c0c.jpg

注意,for语句中三个表达式之间的分隔符是分号,有且仅有两个分号,既不能多,也不能少。 

8bd5e55b06d34c75a087dfecc3fc3bae.jpg

 

 练习三计算并输出1+2+3+…+n的值(对前面的练习)

 

b2f64317cbfe45d980287bc1d20e1659.jpg

 a2459247c78a4ce58cd6524b68219080.jpg

601434ce55bf4f9385baf9d191239c00.jpg 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值