《程序设计技术基础》第1-5章例程

程序设计流程:
1.读题:了解掌握现实世界问题,明确输入和输出,即明确用什么数据算什么结果;
2.数据表示(Data Description):用数据表示问题;
3.设计算法(Algorithm Design):设计计算步骤或流程;
4.编写程序(Programming):根据数据描述和算法编写程序;
5.运行调试(Run,Testing & Debug):运行程序、测试程序和修改错误。

第一章
ex1-1 求n!
解法一:用宏定义实现程序通用性

/* ex1-1 求n! */

#include <stdio.h>

#define N 5

int main(void)
{
    int i, p = 1;

    for(i = 1; i <= N; i++)
        p *= i;

    printf("%d\n", p);

    return 0;
}

解法二:根据读入数据进行计算

/* ex1-1 求n! */

#include <stdio.h>

int main(void)
{
    int n, i, p = 1;

    scanf("%d", &n);
    for(i = 1; i <= n; i++)
        p *= i;

    printf("%d\n", p);

    return 0;
}

解法三:把功能封装到函数

/* ex1-1 求n! */

#include <stdio.h>

int fact(int n)
{
    int i, p = 1;
    for(i = 1; i <= n; i++)
        p *= i;
    return p;
}

int main(void)
{
    int n;

    scanf("%d", &n);

    printf("%d\n", fact(n));

    return 0;
}

ex1-3 求1-1/2+1/3-1/4+…+1/99-1/100
解法一:用宏定义实现程序通用性

/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */

#include <stdio.h>

#define N 100

int main(void)
{
    int i;
    float sum = 0, sign = 1;

    for(i = 1; i <= N; i++) {
        sum += sign * (1.0 / i);
        sign = -sign;
    }

    printf("%f\n", sum);

    return 0;
}

解法二:根据读入数据进行计算

/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */

#include <stdio.h>

int main(void)
{
    int n, i;
    float sum = 0, sign = 1;

    scanf("%d", &n);
    for(i = 1; i <= n; i++) {
        sum += sign * (1.0 / i);
        sign = -sign;
    }

    printf("%f\n", sum);

    return 0;
}

解法三:把功能封装到函数

/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */

#include <stdio.h>

float sum(int n)
{
    int i;
    float sum = 0, sign = 1;

    for(i = 1; i <= n; i++) {
        sum += sign * (1.0 / i);
        sign = -sign;
    }

    return sum;
}

int main(void)
{
    int n;

    scanf("%d", &n);

    printf("%f\n", sum(n));

    return 0;
}

ex1-4 鸡兔同笼
解法一:枚举法,同时枚举鸡和兔的数量x和y。

/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */

#include <stdio.h>


int main(void)
{
    int n, m, x, y;

    scanf("%d%d", &n, &m);

    for(x = 0; x <= n; x++)
        for(y = 0; y <= n; y++)
            if(x + y == n && 2 * x + 4 * y == m) {
                printf("%d %d\n", x, y);

                x = n;
                break;
            }

    return 0;
}

解法二:枚举法,枚举鸡的数量x,兔的数量y=n-x。

/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */

#include <stdio.h>


int main(void)
{
    int n, m, x;

    scanf("%d%d", &n, &m);

    for(x = 0; x <= n; x++)
         if(2 * x + 4 * (n - x) == m) {
                printf("%d %d\n", x, n - x);

                break;
        }

    return 0;
}

解法三:数学法,直接计算兔的数量。

/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */

#include <stdio.h>

int main(void)
{
    int n, m, y;

    scanf("%d%d", &n, &m);

    y = (m - 2 * n) / 2;

    printf("%d %d\n", n - y, y);

    return 0;
}

ex1-5 判定大于或等于3的正整数是否为素数

/* ex1-5 判定大于或等于3的正整数是否为素数 */

#include <stdio.h>
#include <math.h>

int isprime(int n)
{
    if(n % 2 == 0) return 0;

    int end = sqrt(n), i;
    for(i = 3; i <= end; i += 2)
        if(n % i == 0) return 0;

    return 1;
}

int main(void)
{
    int n;

    while(scanf("%d", &n) != EOF)
        printf(isprime(n) ? "YES\n" : "NO\n");

    return 0;
}

第4章

例4-7 分段函数
解法:把功能封装到函数

/* 例4-7 分段函数 */

#include <stdio.h>

int f(int x)
{
    if(x < 0)
        return 3 * x + 2;
    else if(x == 0)
        return 0;
    else if(0 < x && x <= 5)
        return 2 * x - 1;
    else
        return x * x + 3;
}

int main(void)
{
    int x;

    while(scanf("%d", &x) != EOF)
        printf("y=%d\n", f(x));

    return 0;
}

ex4-9 根据三角形的三条边计算三角形面积
解法:把功能封装到函数,使用数学函数进行计算

/* ex4-9 根据三角形的三条边计算三角形面积 */

#include <stdio.h>
#include <math.h>

double area(double a, double b, double c)
{
    double s = (a + b + c) / 2;

    return sqrt(s * (s - a) * (s - b) * (s - c));
}

int main(void)
{
    double a, b, c;

    while(scanf("%lf%lf%lf", &a, &b, &c) != EOF) {
        printf("area=%5.2f\n", area(a, b, c));
    }

    return 0;
}

第5章

ex5-1 计算1+2+3+…+100
解法:使用循环语句while,使用++运算符(++写在前面则先加1再使用,++写在后面则先使用再加1)

/* ex5-1 计算1+2+3+...+100 */

#include <stdio.h>

#define N 100

int main(void)
{
    int i = 1, sum = 0;

    while(i <= N)
        sum += i++;

    printf("%d\n", sum);


    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值