函数是什么?
数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义:
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任 务,而且相较于其他代 码,具备相对的独立性。 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
1. 库函数 2.自定义函数
1)库函数
为什么会有库函数?
a. 我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果 打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格式打印到屏幕上 (printf)。
b. 在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
c. 在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。
为了支持可 移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。
关于库函数的具体使用,大家可以在www.cplusplus.com上查询各个库函数的使用方法
2)自定义函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数。 但是不一样的是这些都是我们自己来设计。这给程 序员一个很大的发挥空间。
组成:
ret_type fun_name(para1, * )
{
statement; //语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参
1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。
2.使用函数实现两个数的交换。
3.实现一个函数判断year是不是润年。
4.
创建一个数组,
实现函数init()初始化数组、
实现empty()清空数组、
实现reverse()函数完成数组元素的逆置。
要求:自己设计函数的参数,返回值。
5.实现一个函数,判断一个数是不是素数。
这几道题其实在前面的博客中有的已经写过,不过可能用的不是函数的方法,今天用函数的方法再打一遍
1.实现一个函数,打印乘法口诀表
#define _CRT_SECURE_NO_WARNINGS
#include
#include
void Display(int h)
{
int temp = 0; //用来存储i*j的临时变量;
for (int i= 1; i <= h; ++i)
{
for (int j = 1; j <= i; ++j)
{
temp = i * j;
printf("%d*%d=%-5d", i, j, temp);
}
printf("\n");
}
}
int main()
{
printf("乘法口诀表,输入你想打印的行数:");
int h = 0; //定义自己想打印的行数;
scanf("%d", &h);
Display(h);
system("pause");
return 0;
}
2.使用函数实现两个数的交换。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
void swap(int a, int b)
{
a ^= b;
b ^= a;
a ^= b;
printf("交换后 a = %d,b = %d\n", a, b);
}
int main()
{
int m = 0, n = 0;
printf("请输入两个数a和b来交换他们的值:\n");
scanf("%d %d", &m, &n);
printf("交换前 a = %d,b = %d\n", m, n);
swap(m, n);
system("pause");
return 0;
}
3.实现一个函数判断year是不是润年。
这道题重要的就是闰年的定义,我相信很多人还不知道闰年的定义,关于这个,请点击这里查看闰年定义.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
void count(int a)
{
if ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0))
{
printf("%d is a leap year\n", a);
}
else
{
printf("%d is not a leap year\n",a);
}
}
int main()
{
printf("输入一个年份来判断它是不是闰年:");
int year;
scanf("%d", &year);
count(year);
system("pause");
return 0;
}
4.
创建一个数组,
实现函数init()初始化数组、
实现empty()清空数组、
实现reverse()函数完成数组元素的逆置。
要求:自己设计函数的参数,返回值。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int menu()
{
printf("************************************\n");
printf("************1.初始化数组************\n");
printf("************2.清空数组**************\n");
printf("************3.数组逆置**************\n");
printf("************0.退出程序**************\n");
printf("************************************\n");
int choice = 0;
printf("\nplease input your choice:");
scanf("%d", &choice);
return choice;
}
void init(int *arr) //初始化数组
{
printf("\n");
printf("初始化数组(输入十个整数):\n");
for (int i = 0; i < 10; ++i)
{
scanf("%d", arr + i);
}
printf("数组为:\n");
for (int i = 0; i < 10; ++i)
{
printf("%d ", arr[i]);
}
printf("\n\n");
}
void empty(int *arr) //清空数组
{
printf("\n");
printf("数组清零:\n");
for (int i = 0; i < 10; ++i)
{
arr[i] = 0;
}
for (int i = 0; i < 10; ++i)
{
printf("%d ", arr[i]);
}
printf("\n\n");
}
void reverse(int *arr) //数组逆置
{
printf("\n");
printf("数组逆置:\n");
//用对折的方法让数组进行逆置
for (int i = 0; i < 5; ++i)
{
arr[i] ^= arr[9 - i];
arr[9 - i] ^= arr[i];
arr[i] ^= arr[9 - i];
}
for (int i = 0; i < 10; ++i)
{
printf("%d ", arr[i]);
}
printf("\n\n");
}
int main()
{
int arr[10]; //定义一个包含十个整数的整形数组
while (1)
{
int choice = menu();
if (choice == 1)
{
init(arr);
}
else if (choice == 2)
{
empty(arr);
}
else if (choice == 3)
{
reverse(arr);
}
else if (choice == 0)
{
printf("\ngood bye!\n");
break;
}
else
{
printf("您的输入有误,请重新输入:");
}
}
system("pause");
return 0;
}
5.实现一个函数,判断一个数是不是素数。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
void count(int a)
{
int i;
for (i = 2; i <= sqrt(a); ++i)
{
if (a % i == 0)
{
break;
}
}
if (i > sqrt(a))
{
printf("%d is a prime ", a);
}
else
{
printf("%d is not a prime", a);
}
}
int main()
{
int num = 0;
printf("please input a number:");
scanf("%d", &num);
count(num);
system("pause");
return 0;
}