-
函数
-
函数的基本概念
----函数是把代码中功能相似并且独立的代码单独封装成一个独立的整体
- 函数的优点
提高代码的简洁性,提高开发效率,提高代码的重要性,有利于程序的维护。 - 函数的分类
系统函数:由c系统提供的函数,体用系统函数时,只需要把其对应的函数头文件包含进来即可。 - 数学函数(math.h)
平方根函数(sqrt)
次幂函数(pow(数字,次方))
小写转大写字母toupper(char);
大写转小写字母tolower(char);
unistd
4.自定义函数
----有返回值的函数:函数调用结束后,会返回一个值给主函数;
----无返回值的函数:函数调用结束后,无返回值,一般定义为void类型;
----有参数函数:参数可以有任意个。
-
函数的基本定义(函数名表示函数入口地址)
- 无参数函数
DataType FunctionName()
{
//函数体
//可执行语句
}
//注:函数的括号不能省略!
- 有参数函数
DataType FunctionName(参数列表)
{
//函数体
}
//注:参数列表可以有多个,参数的类型可以任意(相对)!
- 函数的声明,函数的定义以及函数的调用
----函数的声明:DataType FunctionName(参数列表);
注:声明时参数列表一定要和定义时的参数列表一致!!放在函数被调用之前的任意位置。
----函数的调用:FunctionName(value);(value:数值)
注:函数调用实参的值类型,一定要和函数定义时形参列表一致;
----实参:实际参数,即具体的数值
----形参:形
----函数的返回值
DataType FunctionName(参数列表)
{
//函数体
}
DataType:决定了函数的返回值类型。
- 关键字
----全局变量(在函数体外定义的变量,其作用域在定义之后才可以使用),局部变量(在口号里面的变量,函数结束后,局部变量会自动消亡。因此不同函数中可以使用相同的变量名)
----若全局变量和局部变量重名,则全局变量对局部变量不可见!
auto:动态局部变量。(可以省略的,声明周期仅限于该变量的函数中)
void main()
{
auto int a;
}
static:声明静态变量(只会初始化一次),static修饰函数时,则此函数只能作用于本文件中使用。(声明周期为程序运行期间,记住static可以修饰3个!即全局变量丶局部变量和函数)重点!
extern:外部声明变量,修饰函数( extern int test();)。
extern int sum;//告诉编译器已在外部文件中已经声明,而且不能重新赋值
register:寄存器变量,变量直接存放在cpu寄存器中,cup的寄存器个数有限,不能定义很多寄存器变量。优点 运算速度快。
const:常量,不可更改其值。(只读变量)
conts int num=5;//int conts num=5;两种写法是一样的
conts int *p;//指针的值不可改
int const *p1;//指针的值不可改
int *connts p2;//指针的地址不可更改
const int *conts p3;//指针的地址和值都不可更改
-
指针函数
#include
void swap (int a,int b)
{
int temp=a;
a=b;
b=temp;
return;
}
int main()
{
int a=0;
int b=0;
printf("input a,b:");
scanf("%d,%d",&a,&b);
printf("before:%d,%d\n",a,b);
swap(a,b);
printf("before:%d,%d\n",a,b);
}
----指针函数(int test()):返回的是一个地址;返回一个局部地址是不允许的,没有意义的。
----函数指针(int (p)()=test;):
#include
void main()
{
int (*p)()=test;//指针的类型int (*)()
(*p)();//p(); 函数指针的调用两种方式
}
-
作业
#include
int MAX(int a,int b)
{
int MAX;
MAX=a>b?a:b;
return MAX;
}
void main()
{
int a,b;
printf("请输入要比较的两个数(a,b):");
scanf("%d,%d",&a,&b);
printf("最大的数为:%d.\n",MAX(a,b));
}
#include
int *pointer(int *p)
{
*p=6;
return p;
}
void main()
{
int a=1;
int *p=&a;
printf("a的值为%d,a的地址为%p.\n",*pointer(&a),pointer(&a));
}
#include
int N[100][2];
void sort(int n)
{
int i,j,temp;
for(i=0;iN[j+1][0])
{
temp=N[j][0];
N[j][0]=N[j+1][0];
N[j+1][0]=temp;
}
else continue;
}
}
int randmo(int a[])
{
int i,j=0,n=-1,x;
for(i=0;i<100;i++)
{
if(a[i]!=-1)
{
n++;
N[n][0]=a[i];
}
else continue;
for(j=i;j<100;j++)
{
if(N[n][0]==a[j])
{
a[j]=-1;
N[n][1]++;
}
}
}
sort(n);
return n;
}
void main()
{
int a[100],i,n;
srand(time(NULL));
for(i=0;i<100;i++)
a[i]=rand()%100;
n=randmo(a);
printf("%d\n",n+1);
for(i=0;i<=n;i++)
printf("随机数%2d出现了%2d次。\n",N[i][0],N[i][1]);
for(i=0;i<100;i++)
printf("%d\n",a[i]);
}