C基础回顾4

一、函数:

函数原型:

所有的函数都应该具有原型,尤其是那些返回值不是整数的函数。

无形参的函数原型    int * func(void);

传递给函数的标量参数————传值调用

传递给函数的数组参数————传址调用

例子:返回某个int型数据在数组中的位置的函数:

 1 #include<stdio.h>
 2 int * find_int(int key, int array[], int length)
 3 {
 4     int i=0;
 5     for(i=0;i<length;i++){
 6         if(array[i])==key)
 7             return  &array[i];          // 返回的是指向该位置的指针
 8     }
 9      return null;                     //此处不要省略,更加规范
10 }

c中进行数据交换的函数以及调用:

函数:

1 void swap(int *x ,int *y)
2 {
3      int temp;
4      temp = *x;
5      *x = *y;
6      *y = temp;
7 }

函数调用:   swap(&a , &b);

ADT(抽象数据类型)和黑盒:

c通过 设计和实现抽象数据类型 可以限制函数和 数据定义的作用域

抽象数据类型的基本思想 ----模块具有功能说明----模块所执行的任务和接口说明----模块的使用

模块的用户并不需要知道模块实现的任何细节,并且除了已经定义好的那些接口以外, 用户不能一任何方式访问模块。

基本思想:限制对模块的访问是通过static关键字的合理使用实现的,他可以限制对那些并非接口的函数和数据的访问。

递归函数:

  当函数被调用时,变量的空间是创建于运行时堆栈上的。以前的函数的变量仍保留在堆栈上,被覆盖。

例子:                //接收一个整型数,转换为字符,并打印

1 #include<stdio.h>
2 void binary_to_ascii(unsigned int value)       //假设输入是4267
3 {
4     unsigned int quotient;
5     quotient = value/10;
6     if(quotient !=0)
7         binary_to_ascii(quotient);
8      putchar(value%10+‘0‘);
9 }

递归与迭代:

如斐波那契函数,递归调用将设计一些运行时开销,参数必须压在堆栈中,为局部变量分配内存空间,寄存器的值必须保存。

n<=1:1

Fibonacci(n)=   n=2:1

n>2 : Fibonacci(n-1)+ Fibonacci(n-2)

如用递归调用代价:远远不止一个冗余计算,每个递归都触发另外两个递归调用。

用迭代法实现:

 1 long fibonacci (int n)
 2 {
 3     long result;
 4     long previous_result;
 5     long next_older_result;
 6     result = previous_result = 1;
 7     while(n>2){
 8         n-=1;
 9         next_older_result = previous_result;
10         previous_result = result;
11         result = previous_result+next_older_result;
12    }
13    return result;
14 }

可变参数列表

宏 stdarg 定义与 stdarg.h 头文件   (包括 一个类型 va_list 和 三个宏 va_start  va_arg  va_end)

例子:(计算指定数量的值的平均值)

 1 #include<stdarg.h>
 2 float average(int n_values , ...)     //注意参数列表的省略号,且参数列表中至少要有一个命名参数
 3 {
 4     va_list  var_arg;          //声明va_list类型的变量与三个宏配合使用
 5     int  count;
 6     flout sum = 0;
 7
 8     va_start (var_arg,n_values);    //准备访问可变参数        var_arg 通过va_start宏 进行初始化
 9
10     for(count = 0 ; count <n_values ; count+=1)
11     {
12         sum+= va_arg(var_arg , int);         //添加取自可变参数列表的值。
13     }
14
15      va_end(var_arg) ;         //完成处理可变参数
16
17        return sum/n_values;

二、数组

时间: 2024-10-17 20:50:22

C基础回顾4的相关文章

【DAY26】JAVA 基础回顾

基础回顾 ---------------- 1.跨平台 os JVM : sandbox 1995 2.基本数据类型 byte //1 -128 ~ 127 short //2 -32768 - 32767 int //4 long //8 float //4 doule //8 char //2 boolean //1 3.引用类型 [] class interface 4.运算符 && //短路 || //短路 & // | // ^ //抑或,相同0,不同为1 >>

Linux基础回顾(2)——Linux系统分区二三事

问题来自Linux教材,答案自我整理难免会有不足之处.这是我Linux期末的总结 1. 一块硬盘上可以有几种类型的分区?各自可以有多少个?(各个分区能安装操作系统吗?) 硬盘分区有三种类型的分区:主分区,扩展分区,逻辑分区:一个硬盘最多能划分4个主分区,或者3个主分区加上一个扩展分区,扩展分区上可以划分多个逻辑分区(最多20个).能安装操作系统. 2.用户能否在安装过程中创建扩展分区呢? 分区工具在文件系统类型中没有提供扩展(extended)分区类型,即用户不能根据需要不能手工创建扩展分区.安

PHP移动互联网开发笔记(6)——MySQL数据库基础回顾

最近看了一些架构方面的资料,但是发现基础知识都不怎么牢固,接下来的一段时间,我会定期总结基础知识. 一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1字节 非常小的整数 带符号值:-128~127 无符号值:0~255 SMALLINT 2字节 较小的整数 带符号值:-32768~32767 无符号值:0~65535 MEDIUMNT 3字节 中等大小的整数 带符号值:-8388608~8388607 无符号值:0~16777215 INT 4字节 标准整数 带符号值

[C#] C# 基础回顾 - 匿名方法

C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ≥ C# 3.0 的版本中,我们会用 Lambda 表达式进行取代匿名方法,并且用 Lambda 表达式作为编写内联代码的首选方式,因为它更简洁. 匿名方法是,顾名思义,匿名方法就是没有名称的方法.匿名方法最明显的好处就是:可以降低额外另写一个方法的工作量:另外一个好处就是可以直接访问调用者的变量,

四、Android学习第四天——JAVA基础回顾(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的第四天,在程序中已经遇到了JAVA中以前不常用的一些知识点,赶紧回顾复习一下,打下基础 这里就做个简单的小结: 一.匿名内部类 匿名内部类说白了就是个没有被命名的JAVA类 在以下条件下使用匿名内部类比较适合: ①只用到该类的一个实例时 ②类在定义后被马上用到 ③类非常小(SUN推荐是在4行代码以下

spring 基础回顾 tips01

spring 属性注入时,类中必须有setter 和 getter方法. spring配置文件中: java业务类中注入DAO: private StudentDao studentDao; // 通过属性注入 public StudentDao getStudentDao() { return studentDao; } public void setStudentDao(StudentDao studentDao) { this.studentDao = studentDao; } spri

spring 基础回顾 tips02

spring注入list .set. map. properties 1.list 在xml中这样写: <property name="list"> <list> <value>Michael Huang</value> <ref bean="student"></ref> <value>110</value> </list> </property>

1、java基础回顾与加强

一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, 查找快, 增删慢 由于是数组实现, 在增和删的时候会牵扯到数组 增容, 以及拷贝元素. 所以慢.数组是可以直接按索引查找, 所以查找时较快 ---|LinkedList:   链表实现, 增删快, 查找慢由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后

基础回顾:get方法和set方法(类的继承多态)

基础回顾:get方法和set方法 定义类成员变量时,可以在@interface中定义,也可以在@implementation中定义: 在@interface中声明,成员变量的状态是受保护的,即“@protected”: 在@implementation中声明,成员变量的状态是私有的,即“@private” 在类的外面,是无法直接访问成员变量的,只有将成员变量修改为@public时,才可以外部访问. 使用@public时,访问成员变量使用“->”,如: time->hour=25; 但使用@pu

JavaScript 基础回顾——对象

JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中,对象被定义为无序属性的集合,属性可以是任何类型的值,包括其他对象或函数.函数作为属性值时称为“方法”,即对象的行为. (1)对象常用的内部属性 对象的内部属性是由JavaScript 规范定义的,由运行代码的系统来访问.对象常用的内部属性: prototype        对象        获