#include<stdio.h>intmain(){voidprint_star();//函数的声明voidprint_message();//函数的声明print_star();print_message();print_star();return0;}voidprint_star(){printf("*****************\n");}voidprint_message(){printf("How do you do!\n");}
#include<stdio.h>intmain(){intmax(int x,int y);int a, b, c;printf("please enter 2 integer numbers:");scanf("%d,%d",&a,&b); c =max(a, b);printf("max is %d", c);return0;}intmax(int x,int y){cint z; z = x > y ? x : y;return z;}
#include<stdio.h>intmain(){intmax(float x,float y);float a, b;int c;scanf("%f,%f",&a,&b); c =max(a, b);printf("max is %d", c);return0;}intmax(float x,float y){float z; z = x > y ? x : y;return (z);}---------1.5,2.6max is 2
对被调用函数的声明和函数原型
输入两个实数,用一个函数求它们之和.
#include<stdio.h>intmain(){floatadd(float x,float y);float a, b, c;scanf("%f,%f",&a,&b); c =add(a, b);printf("sum is %d", c);return0;}floatadd(float x,float y){float z; z = x + y;return (z);}
#include<stdio.h>intmain(){intmax4(int a,int b,int c,int d);int a, b, c, d, max;printf("please enter 4 integer numbers:");scanf("%d%d%d%d",&a,&b,&c,&d); max =max4(a, b, c, d);printf("max:%d", max);return0;}intmax2(int a,int b){if (a >= b)return a;elsereturn b;}intmax4(int a,int b,int c,int d){intmax2(int,int);//函数声明int m; m =max2(a, b); m =max2(m, c); m =max2(m, d);return m;}
改进:
#include<stdio.h>intmain(){intmax4(int a,int b,int c,int d);int a, b, c, d, max;printf("please enter 4 integer numbers:");scanf("%d%d%d%d",&a,&b,&c,&d); max =max4(a, b, c, d);printf("max:%d", max);return0;}intmax2(int a,int b){return a >= b ? a : b;}intmax4(int a,int b,int c,int d){intmax2(int,int);//函数声明returnmax2(max2(max2(a, b), c), d);;}
函数的递归调用
一个递归的问题可以分为"回溯"和"递推"两个阶段.
用递归的方法求n! .
n!=1 (n=0,1)
n!=n×(n-1) (n>1)
#include<stdio.h>intmain(){intfac(int n);int n, y;printf("please enter an integer number:");scanf("%d",&n); y =fac(n);printf("%d!=%d", n,y);return0;}intfac(int n){int f;if (n <0)printf("n<0.data error!");elseif (n ==0|| n ==1) f =1;else f =fac(n -1)* n;return f;}
#include<stdio.h>intmain(){intmax(int x,int y);int a[10], i, m, n;printf("please enter 10 integer numbers:");for (i =0; i <10; i++) {scanf("%d",&a[i]); }printf("\n");for (i =1, n =0, m = a[0]; i <10; i++) {if (max(m, a[i])> m) { m =max(m, a[i]); n = i; } }printf("the large number is %d\nit is the %dth number.", m, n +1);return0;}intmax(int x,int y){return x > y ? x : y;}
一维数组名作函数参数
有一个一维数组score,内放10个学生成绩,求平均成绩.
#include<stdio.h>intmain(){floataverage(float array[10]);float score[10], aver;int i;printf("input 10 scores:\n");for (i =0; i <10; i++)scanf("%f",&score[i]);printf("\n"); aver =average(score);printf("average score is %5.2f\n", aver);return0;}floataverage(float array[10]){int i;float aver, sum = array[0];for (i =1; i <10; i++) sum = sum + array[i]; aver = sum /10;return aver;}
形参数组可以不指定大小,在定义数组时在数组名后加上空括号,如
floataverage(float array[])
有两个班级,分别有35名和39名学生,调用一个average函数,分别求两个班的学生的平均成绩.
#include<stdio.h>intmain(){floataverage(float array[],int n);float score1[5] = {89,99.5,99,45,78};float score2[10] = {85.5,10.5,87.5,78.5,67.5,90.5,99.5,87.5,88,78.5};//用数组名作实参printf("The average of class A is %6.2f\n", average(score1,5));printf("The average of class B is %6.2f\n", average(score2,10));return0;}floataverage(float array[],int n){int i;float aver, sum = array[0];for (i =1; i < n; i++) sum = sum + array[i]; aver = sum / n;return (aver);}
使用选择法对10个整数从小到大排序
#include<stdio.h>intmain(){voidsort(int array[],int n);int a[10], i;printf("please enter array:");for (i =0; i <10; i++) {scanf("%d",&a[i]); }sort(a,10);printf("the sorted array:");for (i =0; i <10; i++) {printf("%d", a[i]); }printf("/n");return0;}voidsort(int array[],int n){int i, j, k, t;for (i =0; i < n -1; i++) { k = i;for (j = i +1; j < n; j++) {if (array[j] < array[k]) k = j; t = array[k]; array[k] = array[i]; array[i] = t; } }}
多维数组名作函数参数
可以使用多维函数数组名作为函数的实参和形参.
形参数组和实参数组都是由相同类型和大小的一维数组组成的.C语言编译系统不检查第一维的大小.
有一个3×4的矩阵,求所有元素的最大值.
#include<stdio.h>intmain(){intmax_value(int array[][4]);int a[3][4] = {{1,3,5,7}, {2,4,6,8}, {15,17,34,12}};printf("max value is %d", max_value(a));}intmax_value(int array[][4]){int max, i, j; max = array[0][0];for (i =0; i <3; ++i) {for (j =0; j <4; ++j) {if (array[i][j] > max) max = array[i][j]; } }return max;}
#include<stdio.h>intmain(){intf(int);int a =2, i;for (i =0; i <3; i++)printf("%d\n", f(a));return0;}intf(int a){ auto int b =0;static c =3; b = b +1; c = c +1;return (a + b + c);}--------789
#include<stdio.h>intmain(){intfac(int);int i;for (i =1; i <=5; ++i) {printf("%d!=%d\n", i, fac(i)); }return0;}intfac(int n){staticint f =1;//f保留了上次函数调用结束的值 f = f * n;return (f);}
#include<stdio.h>intmain(){intmax();int i;externint A, B, C;printf("please enter three integer numbers:");scanf("%d%d%d",&A,&B,&C);printf("max is %d\n", max());return0;}int A, B, C;intmax(){int m; m = A > B ? A : B;if (C > m)m = C;return m;}
将外部变量的作用域扩展到其他文件
给定b的值,输入a和m,求a*b和$a^m$的值
#include<stdio.h>//file1.cint A;intmain(){intpower(int);int b =3, c, d, m;printf("please enter the number a and its power m:\n");scanf("%d,%d",&A,&m); c = A * b;printf("%d*%d=%d\n", A, b, c); d =power(m);printf("%d**%d=%d\n", A, m, d);return0;}//file2.cextern A;intpower(int n){int i, y =1;for (i =1; i <= n; i++) y *= A;return y;}