《程序设计技术》例程
《程序设计技术》第一章 C语言与程序设计(例程)
《程序设计技术》第二章 C语言基础知识(例程)
《程序设计技术》第三章 程序控制结构(例程)
《程序设计技术》第四章 数组和字符串(例程)
《程序设计技术》第五章 指针(例程)
《程序设计技术》第六章 函数(例程)
《程序设计技术》第七章 用户自定义类型(例程)
《程序设计技术》第八章 文件(例程)
《程序设计技术》第九章 编译预处理(例程)
《程序设计技术》第六章 函数
例6-1:
/* 例6-1 计算m中取n的组合数量 */
#include
int fac(int); /*对fac()函数声明*/
int con(int, int); /*对con()函数声明*/
int main(void)
{
int m,n;
printf("Input m,n\n");
scanf("%d,%d",&m,&n);
printf("%d\n",con(m,n));/*调用con()函数,求组合数*/
return 0;
}
/*定义函数con(),求组合数*/
int con(int m,int n)
{
return fac(m) / (fac(n) * fac(m-n));/*调用fac()函数计算并返回组合数*/
}
/*定义函数fac(),求阶乘 */
int fac(int n)
{
int t=1,i;
for(i=1; i<=n; i++)
t *= i;
return t; /*返回阶乘*/
}
例6-2:
/* 例6-2 使用函数求和 */
#include
int sum(int x, int y)
{
/*
int z;
z = x + y;
return z;
*/
return x+y;
}
int main(void)
{
int a, b, c;
scanf("%d,%d",&a,&b);
c = sum(a, b);
printf("sum is %d\n",c);
return 0;
}
例6-3:
/* 例6-3 分析以下程序运行结果(给自己找麻烦) */
#include
int mult(int x, int y)
{
return x * y;
}
int main(void)
{
int i=50, m;
m = mult(i, ++i);
printf("%d\n", m);
return 0;
}
例6-4:
/* 例6-4 字符与整数类型,整数与字符转换(使用函数toupper()是最佳选择) */
#include
#include
char trans(char a) /*trans()函数形参为字符型*/
{
// char c;
// if(a>65)
// c=a-32;
// else
// c=a+32;
// return c;
return islower(a)?a-32:a+32; /*大小写字符转换*/
}
int main(void)
{
int x,y;
printf("please input a integer:\n");
scanf("%d",&x);
y = trans(x); /*调用trans()函数,实参为整型*/
printf("the result is %c\n", y);
return 0;
}```
例6-5:
```cpp
/* 例6-5 编写前n个正整数之和的函数 */
#include
int main(void)
{
int sum(int n);
int n;
printf("input number\n");
scanf("%d",&n);
printf("n=%d sum=%d\n", n, sum(n));
return 0;
}
int sum(int n)
{
int i, sum=0;
for(i=1; i<=n; i++)
sum += i;
return sum;
}
例6-6:
/* 例6-6 形参与实参的变化 */
#include
int f(int x, int y)
{
x = x + 18;
y = y + 26;
printf("x=%d,y=%d\n", x, y);
return x + y;
}
int main(void)
{
int a=2, b=4,c;
c = f(a, b);
printf("a=%d,b=%d,c=%d\n", a, b, c);
return 0;
}
例6-7:
/* 例6-7 变量值交换函数 */
#include
void swap(int *, int *);
void swap2(int, int);
int main(void)
{
int x=2, y=3;
printf("before swap2 x=%d y=%d\n", x, y);
swap2(x, y);
printf("after swap2 x=%d y=%d\n", x, y);
swap(&x, &y);
printf("after swap x=%d y=%d\n", x, y);
return 0;
}
void swap(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
void swap2(int a, int b)
{
int t = a;
a = b;
b = t;
}
例6-10:
/* 例6-10 交换值函数 */
#include
void swap(int *, int *);
int main(void)
{
int a = 5, b = 10;
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
void swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
例6-32:
/* 例6-32 求菲波那契(Fibonacci)数列的第n项(递归) */
#include
int fib(int);
int main(void)
{
int i;
for(i=0; i<=20; i++)
printf("%2d %d\n", i, fib(i));
return 0;
}
int fib(int n)
{
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
例6-32A:
/* 例6-32A 求菲波那契(Fibonacci)数列的第n项(递归与递推) */
#include
int fib(int n)
{
return (n == 1 || n == 2) ? 1 : fib(n - 2) + fib(n - 1);
}
int fib2(int n)
{
if(n == 1 || n == 2)
return 1;
else {
int f1 = 1, f2 = 2, temp, i;
for(i=3; i<n; i++) {
temp = f1 + f2;
f1 = f2;
f2 = temp;
}
return f2;
}
}
int main(void)
{
int i;
for(i=1; i<=20; i++)
printf("%2d %6d %6d\n", i, fib(i), fib2(i));
return 0;
}
例6-34(多文件,条件编译, main.c, fib.c):
/* 例6-34 统计菲波那契数列计算函数的调用次数 */
#include
#define N 10
extern int fib(int);
extern int count2;
/*#define DEBUG*/
int main(void)
{
int i;
for(i=1; i<=N; i++) {
count2 = 0;
int fibv = fib(i);
#ifdef DEBUG
printf("count2=%d ", count2);
#endif
printf("%d %d\n", i, fibv);
}
return 0;
}
int count2;
int fib(int n)
{
count2++;
if(n==1 || n == 2)
return 1;
else
return fib(n-2) + fib(n-1);
}
/*
int fib(int n)
{
if(n==1 || n == 2)
return 1;
else {
int count = 2;
int f1=1, f2=1;
for(;;) {
count2++;
int temp = f1 + f2;
f1 = f2;
f2 = temp;
if(++count == n)
return f2;
}
}
}
*/
例6-5(extern变量,main.c, f.c):
/* 例6-35 extern变量 */
#include
int a=100, b=200;
void f(void);
int main(void)
{
a = 10;
b = 20;
int c = scanf("%d,%d", &a, &b);
printf("%d\n", c);
f();
return 0;
}
#include
extern int a, b;
void f(void)
{
printf("a,b=%d %d\n",a, b);
}