《程序设计技术》第六章例程

《程序设计技术》例程

《程序设计技术》第一章 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);
}

你可能感兴趣的:(#)