第四章 模块化程序设计
库函数
是“stdio.h”“stdlib.h”等自带头文件中的函数
自定义函数
自己写的函数
一般形式:
函数类型 函数名(数据类型 参数1,数据类型 参数2)
{
函数体
}
注意:函数内不能再定义(嵌套)函数
函数的调用
函数名(实参)
- 实参类型和顺序应与形参对应
例题:求 ∑ k = 1 n 1 k \displaystyle\sum_{k=1}^n\frac{1}{k} k=1∑nk1
#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》人民邮电出版社
本资料仅可作学习用,禁止用作商业用途,转载请注明出处。
如有错误敬请指正!谢谢!