函数的定义与应用

    xiaoxiao2022-07-15  157

    待到秋来九月八,我花开后百花杀

    函数的两个关键点函数的参数函数的调用 1.利用函数,按用户要求行列打印乘法口诀表思路流程图程序代码 2.利用函数,判断一个数是不是素数。思路流程图程序代码 3.利用函数,实现两个数的交换。思路流程图程序代码 4.利用函数,判断某年是否是闰年思路流程图程序代码 5.利用函数对数组进行三操作思路程序代码

    函数的两个关键点

    函数的参数

    关于函数的参数分为实际参数和形式参数。 两个参数是不同的,分别有不同的地址。所以在调用函数时,只是把实际参数的值给了形式参数,而不是整个变量。

    函数的调用

    那么我们可以发现实际参数给形式参数传参时就可以分为两个方式: 一、传值传参 仅仅将实参的值传给形参,只能对其值进行修改返回主程序,或者直接使用不返回值。 二、传址穿参 将实际参数的地址传给形式参数,让形式参数充当指针,这样当对形式参数修改时,也相当于对其实参修改、更换。这样可以建立起函数与函数外部真正的联系

    1.利用函数,按用户要求行列打印乘法口诀表

    思路

    制作一个循环,输入所想要的行列数,调用九九乘法表函数,当输入为0时,break跳出循环。

    流程图

    主程序图

    Created with Raphaël 2.2.0 start 输入行列 n 函数mul(n) 0==n ? END yes no

    函数mul()流程图

    Created with Raphaël 2.2.0 int i, j i<=n ? j<=i ? 输出 i * j j++ 换行 i++ end yes no yes no

    程序代码

    //An highlighted blockvar foo = 'bar' #include <stdio.h> #pragma warning (disable:4996) void mul(int m) { int i, j; for (i = 1; i <= m; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=- ", i, j, i*j); } printf("\n"); } } int main() { int n; while (1) { printf("You want _*_ ?\n"); printf("Enter 0 to exit.\n"); scanf("%d", &n); mul(n); if (0 == n) { printf("Bye bye!\n"); break; } } system("pause"); return 0; }

    2.利用函数,判断一个数是不是素数。

    思路

    输入所判断的数,调用判断素数函数,函数不用返回值。

    流程图

    主程序图

    Created with Raphaël 2.2.0 start Enter n 函数prime(n)

    函数prime()流程图

    Created with Raphaël 2.2.0 int k, j=2 k=√n j<k ? 0==m%j ? 不是素数 break END j++ j>=k ? 是素数 yes no yes no yes

    程序代码

    //An highlighted blockvar foo = 'bar' #include<stdio.h> #include<windows.h> #pragma warning(disable:4996) void prime(int m) { int k, j; k = (int)sqrt((double)m); for (j = 2; j < k; j++) { if (0 == m % j) printf("Not a prime number!Please try again...\n"); break; } if (j >= k) printf("%d is a prime number\n", m); } int main() { int n; printf("Please Enter a number:\n"); scanf("%d", &n); prime(n); system("pause"); return 0; }

    3.利用函数,实现两个数的交换。

    思路

    输入两个数,将这两个数所存的变量的地址,传给Exch()函数,Exch()通过指针将两个实参数值进行交换,输出交换后的值。

    流程图

    主程序图

    Created with Raphaël 2.2.0 start Enter a,b 函数Exch(&a,&b) 输出交换后a,b

    函数Exch()流程图

    Created with Raphaël 2.2.0 int *i,*j temp=0 temp = *j *j = *i; *i = temp END

    程序代码

    //An highlighted blockvar foo= 'bar' #include<stdio.h> #include<windows.h> #pragma warning (disable:4996) int Exch(int *i, int *j) { int temp = 0; temp = *j; *j = *i; *i = temp; } int main() { int a, b; printf("Please input numbers:\n"); scanf("%d %d", &a, &b); Exch(&a, &b); printf("After exchang:%d %d\n", a, b); system("pause"); return 0; }

    4.利用函数,判断某年是否是闰年

    思路

    建立一个循环输入年份,传值给Year()函数进行判断,如果是闰年则返回值0,如果不是闰年,则用户可以继续输入,当主函数判断返回值为0时结束循环。

    流程图

    主程序图

    Created with Raphaël 2.2.0 start Enter x t=Year(x) 0==t ? break yes no

    函数year()流程图

    Created with Raphaël 2.2.0 y % 4 == 0 ? y % 100 != 0 ? 或 y % 400 == 0 ? 是闰年 retrun 0 不是闰年 yes no

    程序代码

    //An highlighted blockvar foo = 'bar' #include<stdio.h> #include<windows.h> #pragma warning(disable:4996) int Year(int y) { if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { printf("%d is a leap year!\n", y); return 0; } else { printf("Not a leap year!Please try again...\n"); } } int main() { int x, t; printf("Please Enter a year :\n"); while (1) { scanf("%d", &x); t = Year(x); if (0 == t) { break; } } system("pause"); return 0; }

    5.利用函数对数组进行三操作

    操作要求:初始化,逆置,清零。

    思路

    利用函数的传址穿参,可以实现对数组内的值直接操作。

    程序代码

    init()初始化数组 empty()清空数组 reverse()函数完成数组元素的逆置

    //An highlighted blockvar foo = 'bar #include<stdio.h> #include<windows.h> #pragma warning (disable:4996) void init(int *b[10]) { int i = 0; for (; i < 10; i++) { *(b+i) = i; } } void empty(int *c[10]) { int j = 0; for (; j < 10; j++) { *(c + j) = 0; } } void reverse(int *d[10]) { int tmp; for (int i = 0; i < 9 / 2; i++) { tmp = d[i]; d[i] = d[9 - i]; d[9 - i] = tmp; } } int main() { int a[10]; init(&a); int k = 0; for (; k < 10; k++) { printf("%-3d", a[k]); } printf("\n"); reverse(&a); for (k = 0; k < 10; k++) { printf("%-3d", a[k]); } printf("\n"); empty(&a); for (k = 0; k < 10; k++) { printf("%-3d", a[k]); } printf("\n"); system("pause"); return 0; }
    最新回复(0)