#include<stdio.h>
int main()
{
int max(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);
return 0;
}
int max(int x, int y)
{c
int z;
z = x > y ? x : y;
return z;
}
#include<stdio.h>
int main()
{
int max(float x, float y);
float a, b;
int c;
scanf("%f,%f", &a, &b);
c = max(a, b);
printf("max is %d", c);
return 0;
}
int max(float x, float y)
{
float z;
z = x > y ? x : y;
return (z);
}
---------
1.5,2.6
max is 2
对被调用函数的声明和函数原型
输入两个实数,用一个函数求它们之和.
#include<stdio.h>
int main()
{
float add(float x, float y);
float a, b, c;
scanf("%f,%f", &a, &b);
c = add(a, b);
printf("sum is %d", c);
return 0;
}
float add(float x, float y)
{
float z;
z = x + y;
return (z);
}
#include<stdio.h>
int main()
{
int max4(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);
return 0;
}
int max2(int a, int b)
{
if (a >= b)
return a;
else
return b;
}
int max4(int a, int b, int c, int d)
{
int max2(int, int);//函数声明
int m;
m = max2(a, b);
m = max2(m, c);
m = max2(m, d);
return m;
}
改进:
#include<stdio.h>
int main()
{
int max4(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);
return 0;
}
int max2(int a, int b)
{
return a >= b ? a : b;
}
int max4(int a, int b, int c, int d)
{
int max2(int, int);//函数声明
return max2(max2(max2(a, b), c), d);;
}
函数的递归调用
一个递归的问题可以分为"回溯"和"递推"两个阶段.
用递归的方法求n! .
n!=1 (n=0,1)
n!=n×(n-1) (n>1)
#include<stdio.h>
int main()
{
int fac(int n);
int n, y;
printf("please enter an integer number:");
scanf("%d", &n);
y = fac(n);
printf("%d!=%d", n,y);
return 0;
}
int fac(int n)
{
int f;
if (n < 0)
printf("n<0.data error!");
else if (n == 0 || n == 1)
f = 1;
else f = fac(n - 1) * n;
return f;
}
汉诺塔问题
#include<stdio.h>
int main()
{
void hanoi(int n, char one, char two, char three);
int m;
printf("input the number of diskes:");
scanf("%d", &m);
hanoi(m, 'A', 'B', 'C');
return 0;
}
void hanoi(int n, char one, char two, char three)
{
//将n个盘从one座借助two座移动到three座
void move(char x, char y);
if (n == 1)
move(one, three);
else
{
hanoi(n - 1, one, three, two);
move(one, three);
hanoi(n - 1, two, one, three);
}
}
void move(char x, char y)
{
printf("%c --> %c\n", x, y);
}
#include<stdio.h>
int main()
{
int max(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);
return 0;
}
int max(int x, int y)
{
return x > y ? x : y;
}
一维数组名作函数参数
有一个一维数组score,内放10个学生成绩,求平均成绩.
#include<stdio.h>
int main()
{
float average(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);
return 0;
}
float average(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;
}
形参数组可以不指定大小,在定义数组时在数组名后加上空括号,如
float average(float array[])
有两个班级,分别有35名和39名学生,调用一个average函数,分别求两个班的学生的平均成绩.
#include<stdio.h>
int main()
{
float average(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));
return 0;
}
float average(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>
int main()
{
void sort(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");
return 0;
}
void sort(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>
int main()
{
int max_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));
}
int max_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>
int main()
{
int f(int);
int a = 2, i;
for (i = 0; i < 3; i++)
printf("%d\n", f(a));
return 0;
}
int f(int a)
{
auto int b = 0;
static c = 3;
b = b + 1;
c = c + 1;
return (a + b + c);
}
--------
7
8
9
#include<stdio.h>
int main()
{
int fac(int);
int i;
for (i = 1; i <= 5; ++i)
{
printf("%d!=%d\n", i, fac(i));
}
return 0;
}
int fac(int n)
{
static int f = 1;//f保留了上次函数调用结束的值
f = f * n;
return (f);
}
#include<stdio.h>
int main()
{
int max();
int i;
extern int A, B, C;
printf("please enter three integer numbers:");
scanf("%d %d %d", &A, &B, &C);
printf("max is %d\n", max());
return 0;
}
int A, B, C;
int max()
{
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.c
int A;
int main()
{
int power(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);
return 0;
}
//file2.c
extern A;
int power(int n)
{
int i, y = 1;
for (i = 1; i <= n; i++)
y *= A;
return y;
}