C语言基础习题50例(十)46-50

CuterCorley
• 阅读 1163

知足常足,终身不辱。 月圆缺,水满溢,事情到了极致一定会遭受祸患,只有懂得知足,才是富足。

习题46

宏#define命令练习。

实现思路: 宏通过#define命令定义,分为无参宏和带参宏,可以分别进行测试。这只是一种简单的字符串代换。

代码如下:

#include <stdio.h>

#define TRUE 1
#define FALSE 0
#define SQR(x) (x)*(x)

int main(){
    int num, next = TRUE;
    while(next){
        printf("Please input a number:\n");
        scanf("%d", &num);
        printf("Square = %d\n", SQR(num));
        if(num > 10){
            next = FALSE;
        }

    }

    return 0;
}

打印:

Please input a number:
1
Square = 1
Please input a number:
5
Square = 25
Please input a number:
9
Square = 81
Please input a number:
13
Square = 169

习题47

宏#define命令练习,替换一个代码块。

实现思路: 实现在代码中使用宏就像调用函数一样(当然,实际上并不是调用函数)。

代码如下:

#include<stdio.h>

#define EXCHANGE(a,b) { int t;t=a;a=b;b=t;}

int main()
{
    int x = 12;
    int y = 20;
    printf("Before Exchange:x=%d; y=%d\n",x,y);
    EXCHANGE(x,y);
    printf("After Exchange:x=%d; y=%d\n",x,y);

    return 0;
}

打印:

Before Exchange:x=12; y=20
After Exchange:x=20; y=12

习题48

宏#define命令练习,替换运算符号。

实现思路: 在进行比较运算的时候用定义的宏替换掉原来的符号。

代码如下:

#include <stdio.h>

#define GT >
#define LT <
#define EQ ==

int main()
{
    int i, j;
    printf("Please input two numbers:\n");
    scanf("%d %d", &i, &j);
    if(i GT j)
        printf("%d is greater than %d \n", i, j);
    else if(i EQ j)
        printf("%d is equal to %d \n", i, j);
    else if(i LT j)
        printf("%d is smaller than %d \n", i, j);
    else
        printf("Error\n");
    return 0;
}

打印:

Please input two numbers:
13 45
13 is smaller than 45

习题49

#if、#ifdef和#ifndef的综合应用。

实现思路: 预处理程序提供了条件编译的功能,可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。

代码如下:

#include<stdio.h>
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main(){
    int a=12, b=20;

#ifdef MAX
    printf("%d is bigger\n", MAXIMUM(a,b));
#else
    printf("%d is smaller\n", MINIMUM(a,b));
#endif

#ifndef MIN
    printf("%d is smaller\n", MINIMUM(a,b));
#else
    printf("%d is bigger\n", MAXIMUM(a,b));
#endif

#undef MAX

#ifdef MAX
    printf("%d is bigger\n", MAXIMUM(a,b));
#else
    printf("%d is smaller\n", MINIMUM(a,b));
#endif

#define MIN 1

#ifndef MIN
    printf("%d is smaller\n", MINIMUM(a,b));
#else
    printf("%d is bigger\n", MAXIMUM(a,b));
#endif

#if(MIN)
    printf("%d is smaller\n", MINIMUM(a,b));
#else
    printf("%d is bigger\n", MAXIMUM(a,b));
#endif    

    return 0;
}

打印:

20 is bigger
12 is smaller
12 is smaller
20 is bigger
20 is bigger

习题50

#include的应用练习。

实现思路: 文件包含使用尖括号表示在包含文件目录中去查找(包含目录是由用户在配置环境时设置的),而不在源文件目录去查找; 使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。

创建cp.h如下:

#define GT >
#define LT <
#define EQ ==

代码如下:

#include <stdio.h>
#include "cp.h"


int main()
{
    int i, j;
    printf("Please input two numbers:\n");
    scanf("%d %d", &i, &j);
    if(i GT j)
        printf("%d is greater than %d \n", i, j);
    else if(i EQ j)
        printf("%d is equal to %d \n", i, j);
    else if(i LT j)
        printf("%d is smaller than %d \n", i, j);
    else
        printf("Error\n");
    return 0;
}

打印:

Please input two numbers:
12 20
12 is smaller than 20

本文原文首发来自博客专栏C语言实战,由本人转发至https://www.helloworld.net/p/K2DS5af3lHmw,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/106917485查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
1个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。 language JavaScript "name": "vuecliversion2", "version": "1.0.0", "desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Stella981 Stella981
1年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解 ============================== 2016年09月02日 00:00:36 [\-牧野-](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
1年前
C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
**报错信息:** 最近打开下载的 Excel,会报如下错误。(xls 格式不受影响) ![](https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png) ![](https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c
Stella981 Stella981
1年前
Linux查看GPU信息和使用情况
1、Linux查看显卡信息: lspci | grep -i vga 2、使用nvidia GPU可以: lspci | grep -i nvidia ![](https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png) 前边的序号 "00:0f.0"是显卡的代
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述 == 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
1年前
Github标星5300+,专门为程序员开发文档开源管理系统,我粉了
![](https://oscimg.oschina.net/oscnet/a11909a041dac65b1a36b2ae8b9bcc5c432.jpg) **码农那点事儿** 关注我们,一起学习进步 ![](https://oscimg.oschina.net/oscnet/f4cce1b7389cb00baaab228e455da78d0
Stella981 Stella981
1年前
Nginx反向代理upstream模块介绍
![](https://oscimg.oschina.net/oscnet/1e67c46e-359a-4d6c-8f36-b590a372961f.gif) ![](https://oscimg.oschina.net/oscnet/819eda5e-7de5-4c23-b54b-04cfc00d3206.jpg) > 1. Nginx反
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_