关于函数的参数分为实际参数和形式参数。 两个参数是不同的,分别有不同的地址。所以在调用函数时,只是把实际参数的值给了形式参数,而不是整个变量。
那么我们可以发现实际参数给形式参数传参时就可以分为两个方式: 一、传值传参 仅仅将实参的值传给形参,只能对其值进行修改返回主程序,或者直接使用不返回值。 二、传址穿参 将实际参数的地址传给形式参数,让形式参数充当指针,这样当对形式参数修改时,也相当于对其实参修改、更换。这样可以建立起函数与函数外部真正的联系
制作一个循环,输入所想要的行列数,调用九九乘法表函数,当输入为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输入所判断的数,调用判断素数函数,函数不用返回值。
主程序图
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输入两个数,将这两个数所存的变量的地址,传给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建立一个循环输入年份,传值给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操作要求:初始化,逆置,清零。
利用函数的传址穿参,可以实现对数组内的值直接操作。
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; }