C语言学习笔记(五)模块化程序设计

第四章 模块化程序设计

库函数

是“stdio.h”“stdlib.h”等自带头文件中的函数

自定义函数

自己写的函数

一般形式:

函数类型 函数名(数据类型 参数1,数据类型 参数2)
{
函数体
}

注意:函数内不能再定义(嵌套)函数

函数的调用

函数名(实参)

  • 实参类型和顺序应与形参对应

例题:求 ∑ k = 1 n 1 k \displaystyle\sum_{k=1}^n\frac{1}{k} k=1nk1

#include<stdio.h>
#include<stdlib.h>
float sum(float n)
{
    float s=0;
    for(float i=1;i<=n;++i)
    {
        s=s+1/i;
    }
    return s;
}
int main()
{
    float n;
    printf("please input n:");
    scanf("%f",&n);
    printf("%f",sum(n));
    return 0;
}

swap函数

void swap(int a,int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

上述函数并不能改变输入函数的两个变量的值,因为函数中的参数是在内存中新开辟的区域,操作函数中的变量并不能映射到函数外的两个变量。

void swap(int* a,int* b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

上述代码是对地址进行交换,所以能够改变实参

void swap(int &a,int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

这种方法是建立一个a-m,b-n的映射,a即是m,b即是n,也可以交换两个变量的值

有返回值的函数 return语句

return后的变量类型必须与函数类型相同

例题:开方
方法一:二分法

#include<stdio.h>
#include<stdlib.h>
double sqr(double n)
{
	double low,high;
	low=0;high=n;
	while(1)
	{
		if((low+high)*(low+high)/4<n) low=(low+high)/2;
		if((low+high)*(low+high)/4>n) high=(low+high)/2;
		if(high-low<1e-8) break;
	}
	return high;
}
int main()
{
	double n;
	scanf("%lf",&n);
	printf("%lf",sqr(n));
	return 0;
}

方法二:迭代法

#include<stdio.h>
#include<stdlib.h>
double sqr(double x)
{
	double xn=1,x0;
	while(1)
	{
		x0=xn;
		xn=(x0+x/x0)/2;
		if(fabs(xn-x0)<1e-8) break;
	}
	return xn;
} 
int main()
{
	double a;
	scanf("%lf",&a);
	printf("%lf",sqr(a));
	return 0; 
}

文件包含

#include"basic.h"

由此可见,可以预处理自己写的文件而不一定是库文件

宏定义

#include<stdio.h>
#define P printf
#define D "%d\n"
void main()
{
    int n=0;
    P(D,n);
    return 0;
}

注:宏名可以嵌套,可以层层替换

#define n1 0x01
#define one n1

宏可以带参数

#define SSSV(s1) s1=n1*n1;

##第四章完##
整理人:newenergy_freshman
整理时间:2021/6/2
基础部分参考:《C语言程序设计与应用》人民邮电出版社
拓展部分参考:《C Primer Plus》人民邮电出版社
本资料仅可作学习用,禁止用作商业用途,转载请注明出处。
如有错误敬请指正!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值