谭浩强《C程序设计》书后习题 第九章

最近要复习一下C和C++的基础知识,于是计划把之前学过的谭浩强的《C程序设计》和《C++程序设计》习题重新做一遍。

编译环境为:操作系统32位Win7,编译工具VC++6.0

第八章:预处理命令

9.1)定义一个带参数的宏,实现两参数的值互换

#include<stdio.h>

#define Swap(x,y) int temp = x; x = y; y = temp;

void main()
{
    int x, y;
    scanf("%d%d", &x, &y);

    printf("交换前:");
    printf("x=%d;y=%d\n", x, y);
    
    Swap(x,y);

    printf("交换后:");
    printf("x=%d;y=%d\n", x, y);
}

9.2)输入两个整数,求它们相除的余数

#include<stdio.h>

#define Mod(x,y) x % y

void main()
{
    int x, y;
    scanf("%d%d", &x, &y);

    //printf中用连续的两个百分号输出一个百分号
    printf("x=%d;y=%d;x%%y=%d\n", x, y, Mod(x,y));
}

9.3)定义一个带参数的宏,通过海伦公式计算三角形面积

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

#define p(a,b,c) (a+b+c)/2.0
#define area(a,b,c) sqrt(p(a,b,c)*(p(a,b,c)-a)*(p(a,b,c)-b)*(p(a,b,c)-c))

void main()
{
    double a, b, c;
    scanf("%lf%lf%lf", &a, &b, &c);
    printf("三边边长:%lf %lf %lf\n", a, b, c);
    printf("面积:%lf\n", area(a,b,c));
}

9.4)定义宏LEAP_YEAR(year),判断某年year是否为闰年

#include<stdio.h>

#define LEAP_YEAR(year) (year%400)?((year%100)?((year%4)?0:1):0):1

void main()
{
    int year;
    scanf("%d", &year);
    if(LEAP_YEAR(year))
    {
        printf("year %d is a leap year\n", year);
    }
    else
    {
        printf("year %d is a not leap year\n", year);
    }
}

9.6)设计实数输出格式,实数用 %6.2f 格式输出

#include<stdio.h>

#define _N_ "\n"
#define _F_ "%6.2f"
#define _F1_ _F_ _N_
#define _F2_ _F_ _F_ _N_
#define _F3_ _F_ _F_ _F_ _N_

void main()
{
    float x = 1, y = 2, z = 3;

    printf(_F1_, x);
    printf(_F2_, x, y);
    printf(_F3_, x, y, z);
}

9.7)设计所需的各种输出格式,放到format.h中

format.h中代码

#define NL "\n"

#define D "%d"
#define D2 "%d %d"
#define D3 "%d %d %d"
#define D4 "%d %d %d %d"
#define D5 "%d %d %d %d %d"

#define O "%o"
#define X "%x"
#define U "%u"
#define C "%c"
#define S "%s"

#define F "%f"
#define F2 "%f %f"
#define F3 "%f %f %f"
#define F4 "%f %f %f %f"
#define F5 "%f %f %f %f %f"

#define E "%e"
#define G "%g"

#define LF "%lf"
#define LF2 "%lf %lf"
#define LF3 "%lf %lf %lf"
#define LF4 "%lf %lf %lf %lf"
#define LF5 "%lf %lf %lf %lf %lf"

程序代码

#include<stdio.h>

#include"format.h"

void main()
{
    int x = 1, y = 2, z = 3;
    printf("输出3个整数");
    printf(D3 NL, x, y, z);

    float a = 1.0, b = 2.0, c = 3.0, d = 4.0;
    printf("输出4个浮点数");
    printf(F4 NL, a, b, c,d);
}

9.8)分别用函数和带参数的宏,从3个数中找出最大的数

#include<stdio.h>

//通过宏比较大小
#define max1(x,y,z) x>y?(x>z?x:z):(y>z?y:z)

//通过函数比较大小
int max2(int x, int y, int z)
{
    return x > y ? (x > z ? x : z) : (y > z ? y : z);
}

void main()
{
    int a = 3, b = 4, c = 5;
    printf("max:%d\n", max1(a,b,c));
    printf("max:%d\n", max2(a,b,c));
}

9.10)输入一段字符串。使用条件编译,如果之前定义的宏CHANGE为1,则将字符串中所有英文字母顺序后移一位,如果是z则变成a;如果之前定义的宏CHANGE为0,则输出原字符串

#include<stdio.h>

#define CHANGE 1

void main()
{
    char s[100];
    gets(s);
    
#if CHANGE

    int counter = 0;
    while(s[counter] != '\0')
    {
        if(s[counter] == 'z')
        {
            s[counter] = 'a';
        }
        else if(s[counter] == 'Z')
        {
            s[counter] = 'A';
        }
        else if((s[counter] >= 'a' && s[counter] < 'z') ||
            (s[counter] >= 'A' && s[counter] < 'Z'))
        {
            s[counter]++;
        }
        counter++;
    }
    printf("加密后字符串为:%s\n", s);

#else
    
    printf("输入的字符串为:%s\n", s);

#endif

}

END

转载于:https://my.oschina.net/Tsybius2014/blog/308384

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值