一入代码深似海,从此妹纸是路人.
前面提到过函数这个概念,今天主要带来的是一些函数对之前初阶问题的一些应用,内容如下:
(一)实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
输入9,输出9 * 9口诀表,输入12,输出12 * 12的乘法口诀表。
思考过程:9*9乘法口诀表之前已经提到过,这里要求自我指定输入行数,那么简单的for循环和scanf输入,问题搞定.
void Mul(int num){
int i = 0;
int j = 0;
for (i = 1; i <= num; i++){
for (j = 1; j <= i; j++){
printf("%2d * %2d = %2d ", j, i, i*j);//这里用到的逻辑和9*9乘法表类似,不再阐述具体过程
}
printf("\n");
}
}
int main(){
printf("请输入希望得到数字的乘法口诀表:\n");
int input = 0;
scanf("%d", &input);
Mul(input);//调用函数
system("pause");
return 0;
}
(二)使用函数实现两个数的交换。
思考过程:两个数交换的方法有很多种,这里选自简单易懂的中间值交换法,上代码:
void swap(int a_change,int b_change){//函数的定义(传进两个需要交换数字的参数)
int exchange = 0;
exchange = a_change;//交换过程的开始
a_change = b_change;
b_change = exchange;
printf("交换后的数字为:\n");
printf("%d %d\n", a_change, b_change);
}
int main(){
printf("请输入需要交换的两个数:\n");
int a = 0;
int b = 0;
scanf("%d", &a);
scanf("%d", &b);
printf("需要交换的两个数为:\n");
printf("%d %d\n", a, b);
swap(a, b);
system("pause");
return 0;
}
(三)实现一个函数判断year是不是润年。
思考过程:逻辑在之前阐述过,要熟悉函数参数的传递和定义等等
void Is_leapyear(int judege_year){
if ((((judege_year % 4) == 0) && ((judege_year % 100 != 0)) || ((judege_year % 400) == 0))){
printf("%d是闰年\n", judege_year);
}
else
printf("%d不是闰年\n", judege_year);
}
int main(){
printf("请输入需要判断的年份:\n");
int year = 0;
scanf("%d", &year);
printf("需要判断的年份是:%d\n",year);
Is_leapyear(year);
system("pause");
return 0;
}
(四) 创建一个数组,实现函数init()初始化数组、empty()清空数组、reverse()函数完成数组元素的逆置。
思考过程:这里就差不多开始我们函数的具体应用了
void menu(){//简单的菜单函数,使用switch函数选择进入相应的功能函数即可
printf("***************************\n");
printf("********1.数组初始化*******\n");
printf("********2.数组的清空*******\n");
printf("********3.数组的逆置*******\n");
printf("********4.退出本程序*******\n");
printf("***************************\n");
}
void init(int *test_arr, int len){//数组初始化
int i = 0;
for (i = 0; i < len; i++){
scanf("%d", &test_arr[i]);
}
for (i = 0; i < len; i++){
printf("%2d", test_arr[i]);
}
printf("\n");
}
void empty(int *test_arr, int len){//数组清空,赋值为0答应即可
int i = 0;
for (i = 0; i < len; i++){
test_arr[i] = 0;
}
for (i = 0; i < len; i++){
printf("%2d", test_arr[i]);
}
printf("\n");
}
void reverse(int *test_arr, int len){//逆置过程,第一个和最后一个交换,逐渐向中间靠拢
int i = 0;
int num = 0;
for (i = 0; i < len / 2; i++){
num = test_arr[len - 1 - i];//为什么还要减1呢?数组下标从0开始,要注意到这个细节.
test_arr[len - 1 - i] = test_arr[i];
test_arr[i] = num;
}
for (i = 0; i < len; i++){
printf("%2d", test_arr[i]);
}
printf("\n");
}
int main(){
int *arr;
int length = 0;//数组大小的定义,当然这里注意\0的存在
int true = 1;//为后继跳出循环作出铺垫
printf("请输入需要操作数组的大小:\n");//设置数组大小
scanf("%d", &length);
arr = (int*)malloc(length);//开辟数组所占的空间
menu();
while (true){
int choose = 0;
scanf("%d", &choose);
switch (choose)
{
case 1:
init(arr, length - 1);//因为\0的存在,所以传进去数值数组大小应该减1
break;
case 2:
empty(arr, length - 1);
break;
case 3:
reverse(arr, length - 1);
break;
case 4:
printf("退出程序\n");
true = 0;
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
}
system("pause");
return 0;
}
(五)实现一个函数,判断一个数是不是素数
思考过程:这里也是简单的函数调用,直接上代码:
void Is_prime(int test_num){
int i = 0;
int sum = 0;//跳出条件的伏笔
for (i = 2; i <= test_num-1; i++){
if (test_num % i == 0){
sum++;
}
if (sum > 0 ){
printf("这个数不是素数\n");
break;
}
if (i == test_num - 1 && sum == 0){//比test_num小的数都已经完成了遍历判断
printf("这个数是素数\n");
}
}
}
int main(){
printf("请输入一个数\n");
int input = 0;
scanf("%d", &input);
Is_prime(input);
system("pause");
return 0;
}