明解C语言第七章习题

简介: 明解C语言第七章习题

第一节:基本数据类型和数

没有习题

第二节:整型和字符型

练习7-1

#include <stdio.h>
int main() 
{
    int n;
    printf("%d\t%d\t%d\n", sizeof 1,sizeof(unsigned)-1,sizeof n+2 ); 
    //此行显示结果为 4 3 6 因为1的字节就是为4,而-1的字节也是4再减去-1所以显示为3,最后是n+2为6                                                                  
    printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));
    //此行显示结果是 4 7 4 因为1的字节是4,double的字节长是8 -1是7,把(n+2)括起来之后使其为一个值,所以是4;
    printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0)  );
    //此行结果是 4 8 8 因为1的字节是4,把double-1都括起来之后,就是double类型字节为8,同理最后也是8
}

练习7-2

左移:

#include <stdio.h>
#include<math.h>
int main() 
{
    unsigned int a;
    int x;
    int i;
    int b;
    printf("请输入初始值:" );
    scanf("%d", &a);
    b = a;
    printf("左移多少位:");
    scanf("%d", &x);
    number <<= x;
    printf("左移后的值:%d",a);
    putchar('\n');
    for (i = 0; i < x; i++) 
    {
        b *= 2;
    }
    printf("乘以2的指数幂的值:%d", b);
}

右移:

#include <stdio.h>
#include<math.h>
int main() 
{
    unsigned int a;
    int x;
    int i;
    int b;
    
    printf("请输入初始值:" );
    scanf("%d", &a);
    b = a;
    printf("右移多少位:");
    scanf("%d", &x);
    a >>= x;
    printf("右移后的值:%d",a);
    putchar('\n');
    for (i = 0; i < x; i++) 
    {
        b /= 2;
    }
    printf("除以2的指数幂的值:%d", b);
}

练习7-3

右移:

#include <stdio.h>
#include<math.h>
unsigned rrotate(unsigned x,int n)
{
    x >>=n;
    return x;
}
int main() 
{
    unsigned int a;
    int x;
    printf("请输入初始值:");
    scanf("%d", &a);
    printf("右移多少位:");
    scanf("%d", &x);
    printf("右移后的值:%d", rrotate(a, x));
}

左移:

#include <stdio.h>
#include<math.h>
unsigned lrotate(unsigned x,int n){
    x <<=n;
    return x;
}
int main() {
    unsigned int a;
    int x;
    printf("请输入初始值:");
    scanf("%d", &a);
    printf("左移多少位:");
    scanf("%d", &x);
    printf("左移后的值:%d", lrotate(a, x));
}

练习7-4

将第pos位设置为1:

unsigned set(unsigned x, int pos)
{
    unsigned mask = (1u << pos);
    x = (mask | x);
    return x;
}

将第pos位设置为0:

unsigned reset(unsigned x, int pos) 
{
    unsigned mask = 1u;
    if (x & (1u<<pos))
        return (x ^ (1u << pos));
    else
        return x;
}

将第pos位取反:

unsigned inverse(unsigned x, int pos) 
{
    unsigned mask = 1u << pos;
    x = (x ^ mask);
    return x;
}

练习7-5

一个位段都设置为1

unsigned set_n(unsigned x, int pos, int n) 
{
    int i;
    for (i = 0; i < n - pos; i++) 
    {
        unsigned mask = (1u << (pos + i));
        x = (mask | x);
    }
    return x;
}

一个位段都设置为0

unsigned reset_n(unsigned x, int pos, int n) 
{
    unsigned mask = 1u;
    int i;
    for (i = 0; i < n-pos; i++) 
    {
        if (x & (1u<<pos+i))
            x= (x ^ (1u << pos+i));    
    }
    return x;
}

一个位段都取反

unsigned inverse_n(unsigned x, int pos, int n) {
    int i;
    unsigned mask = 1u;
    for (i = 0; i < n - pos; i++) {
        x = (x ^ (mask << pos + i));
    }
    return x;
}

练习7-6

显示unsigned类型的值最大值,同时验证最大值+1是0

#include <stdio.h>
int main() 
{
    unsigned a = 0;
    while (++a > 0);
        printf("%u", a - 1);
        putchar('\n');
        printf("%u", a);
}

第三节:浮点型

练习7-7

#include <stdio.h>

int main() 
{
    float a;
    double b;
    long double c;

    scanf("%f",&a);
    printf("a=%f", a);
    putchar('\n');
    scanf("%lf", &b);
    printf("b=%f", b);
    putchar('\n');
    scanf("%lf", &c);
    printf("c=%f", c);

}

练习7-8

#include <stdio.h>
int main() 
{
    float a;
    double b;
    long double c;
    printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c));
}

练习7-9

#include <stdio.h>
#include<math.h>
int main() 
{
    double m;
    double x;
    printf("正方形的面积是:");
    scanf("%lf", &m);
    printf("边长是:%.2f", sqrt(m));
}

练习7-10

#include <stdio.h>
int main()
{
    float x;
    int i;
    float m = 0.0;
    for (i = 0; i <= 100; i++) 
    {
        x = i / 100.0;
        printf("x=%f x=%f\n",m,x);
        m += 0.01;
    }
    return 0;
}

练习7-11

#include <stdio.h>
int main(void)
{
    float x;
    int i;
    float m = 0.0;
    float sum1 = 0;
    float sum2 = 0;
    for (i = 0; i <= 100; i++) 
    {
        x = i / 100.0;
        printf("x=%f x=%f\n",m,x);
        m += 0.01;
        sum1 += m;
        sum2 += x;
    }
    printf("%f,%f", sum1, sum2);
    return 0;
}
相关文章
TU^
|
5月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
28 1
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
78 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
5月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
39 1
TU^
|
5月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
27 1
TU^
|
5月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
27 1
TU^
|
5月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
17 1
TU^
|
5月前
|
C语言
C语言习题~day39
C语言习题~day39
TU^
20 0
C语言习题~day39
|
5月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
40 0
TU^
|
5月前
|
存储 C语言
C语言习题~day38
C语言习题~day38
TU^
25 0
TU^
|
5月前
|
C语言
C语言习题~day37
C语言习题~day37
TU^
20 0