C和指针 第七章 函数

C和指针 第七章 函数

函数声明

char *strcpy(char*, char*);//同样合法,但是没有表明变量含义
char *strcpy(char *destination, char *source);

函数参数

C语言的所有参数均以“传值调用”方式传递
传值调用:拷贝实参值,修改拷贝值,不用担心会修改实参
传址调用:实参为数组名,传值(数组地址)指针,修改数组实参

传递给函数的标量参数是传值调用
传递给函数的数组参数在行为上就像他们是通过传址调用一样

传值调用:偶校验(int中1个数为偶数返回1)

#include<iostream>
int parity(int value);
int n;
int main() {
	using namespace std;
	int value, cst;
	cout << "请输入一个int值:";
	cin >> value;
	cst = value;
	cout << cst << "的奇偶校验位:" << parity(value) << endl;
	cout << cst << "中含有1的个数:" << n << endl;

}
int parity(int value) {
	int bits_n = sizeof(value) * 8;
	int flag;
	int count = 0;//定义count为0的个数
	if (value == 0)//以0(0x00000000)为极限
		count = bits_n;
	else if (value > 0) {
		while (value != 0) {
			count += value & 1;//查1
			value >>= 1;
		}
		count = bits_n - count;
	}
	else if (value == -1)//以-1(0xffffffff)为极限
		count = 0;
	else
		while (value != -1) {
			count += !(value & 1);//查0
			value >>= 1;
		}
	count = bits_n - count;
	n = count;
	flag = count % 2;
	return flag;
}
符号数左移右移while极限值
正数补0补0(符号位)0(0x00000000)
负数补0补1(符号位)-1(0xffffffff)

传址调用:整数交换

#include<iostream>
void exchange(int *a, int *b);
int main() {
	using namespace std;
	int a, b;
	cout << "请输入a值:";
	cin >> a;
	cout << "请输入b值:";
	cin >> b;
	cout << "执行交换函数后" << endl;
	exchange(&a, &b);
	cout << "a: " << a << endl;
	cout << "b: " << b << endl;
}
void exchange(int *a, int *b) {
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

递归

将二进制整数转换为字符

#include<iostream>
void int2char(unsigned int a);
int main() {
	using namespace std;
	unsigned int num;
	cout << "请输入一个无符号数:";
	cin >> num;
	cout << "无符号数转化为字符输出:" << endl;
	int2char(num);
}
void int2char(unsigned int a) {
	using namespace std;
	char ch;
	int b = a / 10;
	if (b != 0)
		int2char(b);
	ch= a % 10 + '0';
	cout<< ch <<" ";
}```
### 计算阶乘
```javascript
#include<iostream>
long factorial(int num);
int main() {
	using namespace std;
	int num;
	long result;
	cout << "请输入一个int值:";
	cin >> num;
	cout << num << "!= " << factorial(num) << endl;
}
long factorial(int num) {
	if (num <= 0)
		return 1;
	else
		return num * factorial(num - 1);
}

斐波那契数列

#include<iostream>
long fibon(int n);
int main() {
	using namespace std;
	int n;
	cout << "请输入元素在斐波那契数列中的位置:";
	cin >> n;
	cout << "第" << n << "位Fibonacci数为:" << fibon(n) << endl;
}
long fibon(int n) {
	if (n <= 2)
		return 1;
	else
		return fibon(n - 1) + fibon(n - 2);
}

可变参数列表

stdarg=standard(标准)+arguments(参数)

#include<stdarg.h>

可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏va_start、va_arg、va_end

int average(int num,...);
操作Value
va_list var声明可变参数列表的第一个参数var
va_start(var,num)初始化var值为num后第一个实参值
va_arg(var,int)调用var值,指出(可变参数列表中)其后参数类型int,var更新
va_end(var)可变参数列表参数使用完毕,结束变量var
#include<iostream>
#include<stdarg.h>
float average(int num, ...);
int main() {
	using namespace std;
	int a[7] = { 0,1,2,3,4,5,6 };
	cout << average(3, a[1], a[2], a[3]) << endl;
	cout << average(2, a[1], a[2]) << endl;

}
float average(int num, ...) {
	float sum = 0;
	int count;
	va_list val;
	va_start(val, num);
	for(count=0;count<num;count+=1)
		sum += va_arg(val, int);
	va_end(val);
	return sum/ num;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值