2021-10-03 C100题

本文是2021年10月3日的C语言考研复习资料,涵盖C语言100题中的前五题。内容包括宏#define命令、条件编译#if、按位运算符(与、或、异或)等知识点,通过实例代码进行解析和思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言100题

考研初试C语言复习 时间:2021.10.3


前言


提示:以下是本篇文章正文内容,下面案例可供参考

第一题、

1.题目描述

宏#define命令练习。

2.代码

第一个:

#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
    int num;
    int again = 1;
    printf("如果值小于 50 程序将终止。\n");
    while (again)
    {
        printf("\n请输入数字:");
        scanf("%d", &num);
        printf("该数字的平方为 %d \n", SQ(num));
        if (num >= 50)
            again = TRUE;
        else
            again = FALSE;
    }
    return 0;
}

第二个:

#include<stdio.h>
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行里
int main()
{
    int x=10;
    int y=20;
    printf("x=%d; y=%d\n",x,y);
    exchange(x,y);
    printf("x=%d; y=%d\n",x,y);
    return 0;
}

第3个:

#define LAG >
#define SMA <
#define EQ ==
#include <stdio.h>
int main()
{
    int i,j;
    printf("请输入两个数字:\n");
    scanf("%d %d",&i,&j);
    if(i LAG j)
        printf("%d 大于 %d \n",i,j);
    else if(i EQ j)
        printf("%d 等于 %d \n",i,j);
    else if(i SMA j)
        printf("%d 小于 %d \n",i,j);
    else
        printf("没有值。\n");
    return 0;
}

题目思考:简单的#define运用,包括定义变量和定义函数及定义符号

第二题、

1.题目描述

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

2.代码

#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=10,b=20;
#ifdef MAX
    printf("更大的数字是 %d\n",MAXIMUM(a,b));
#else
    printf("更小的数字是 %d\n",MINIMUM(a,b));
#endif
#ifndef MIN
    printf("更小的数字是 %d\n",MINIMUM(a,b));
#else
    printf("更大的数字是 %d\n",MAXIMUM(a,b));
#endif
#undef MAX
#ifdef MAX
    printf("更大的数字是 %d\n",MAXIMUM(a,b));
#else
    printf("更小的数字是 %d\n",MINIMUM(a,b));
#endif
#define MIN
#ifndef MIN
    printf("更小的数字是 %d\n",MINIMUM(a,b));
#else
    printf("更大的数字是 %d\n",MAXIMUM(a,b));
#endif
    return 0;
}

题目思考:
同时#define还可以进行头文件的创造和输入输出,同上

第三题、

1.题目描述

学习使用按位与 &
学习使用按位或 |
学习使用按位异或 ^

2.代码

#include <stdio.h>
//0&0 = 0;0&1 = 0; 1&0 = 0;1&1 = 1
int main()
{
    int a, b;
    a = 077;//a为8进制,转换为2进制是111111
    //3转换为2进制是011
    b = a & 3;
    /*
    *    1111111
    *  & 0000011
    *  = 0000011 =3 (10进制)
    */
    printf("a & b(decimal) 为 %d \n", b);
    b &= 7;//7转换为2进制是0111
    printf("a & b(decimal) 为 %d \n", b);




    b = a | 3;//0|0=0; 0|1=1; 1|0=1; 1|1=1 
    printf("b 的值为 %d \n", b);
    b |= 7;
    printf("b 的值为 %d \n", b);



    b = a ^ 3;//0^0=0; 0^1=1; 1^0=1; 1^1=0
    printf("b 的值为 %d \n", b);
    b ^= 7;
    printf("b 的值为 %d \n", b);
    return 0;
}

题目思考:
学习使用按位与 &: 先转换为2进制,在对齐按照公式: 0&0 = 0;0&1 = 0; 1&0 = 0;1&1 = 1。后面在转换为其他进制.
学习使用按位或 | :同上,0|0=0; 0|1=1; 1|0=1; 1|1=1
学习使用按位异或 ^ : 同上,0^0=0; 0^1=1; 1^0=1; 1^1=0

第四题、

1.题目描述

取一个整数 a 从右端开始的 4~7 位。(练习按位运算符的题目)

2.代码

#include <stdio.h>
int main() {
    unsigned a, b, c, d;
    printf("请输入整数:\n");
    scanf("%o", &a);
    b = a >> 4;
    c = ~(~0 << 4);
    d = b & c;
    printf("%o\n%o\n", a, d);
    return 0;
}

题目思考:
(1)先使 a 右移 4 位。

(2)设置一个低 4 位全为 1,其余全为 0 的数,可用(0<<4)

(3)将上面二者进行 & 运算。

第五题、

1.题目描述

2.代码

#include <stdio.h>
int main()
{
    int a, b;
    a = 234;
    b = ~a;
    printf("a 的按位取反值为(十进制) %d \n", b);
    a = ~a;
    printf("a 的按位取反值为(十六进制) %x \n", a);
    return 0;
}

题目思考: 反转了捏

总结

:补国庆的前期没写的 ,终于写了一半,做完这个继续leetcode.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值