明解C语言入门(第七章习题答案)

#define _CRT_SECURE_NO_WARNINGS 1

练习7-1

#include<stdio.h>
int main()
{
	printf("%u\n", (unsigned)sizeof 1);  //int型
	printf("%u\n", (unsigned)sizeof +1);
	printf("%u\n", (unsigned)sizeof -1);

	printf("%u\n", (unsigned)sizeof(unsigned)-1); //int型-1
	printf("%u\n", (unsigned)sizeof(double)-1); //double型-1
	printf("%u\n", (unsigned)sizeof((double) - 1)); //double型

	int n = 0;
	printf("%u\n", (unsigned)sizeof n + 2); //int型+2
	printf("%u\n", (unsigned)sizeof(n + 2)); //int型
	printf("%u\n", (unsigned)sizeof(n + 2.0)); //double型

	return 0;
}

练习7-2

#include<stdio.h>
int main()
{
	int a = 0;
	int n = 0;

	scanf("%d %d", &a, &n);
	printf("a = %d\n", a);

	printf("a << %d = %d\n", n, (a << n)); // a*2^n
	int i = 0;
	int b = a;
	for (i = 0; i < n; i++)
	{
		b *= 2;
	}
	printf("乘以2的指数幂的值:%d\n", b);

	printf("a >> %d = %d\n", n, (a >> n)); // a/2^n
	for (i = 0; i < n; i++)
	{
		a /= 2;
	}
	printf("除以2的指数幂的值:%d\n", a);

	return 0;
}

练习7-3

#include<stdio.h>
unsigned rrotate(unsigned x, int n)
{
	return (x >> n);
}

unsigned lrotate(unsigned x, int n)
{
	return (x << n);
}

int main()
{
	unsigned a = 0;
	int num = 0;
	printf("请输入数值:");	scanf("%u", &a);
	printf("请输入位数:");	scanf("%d", &num);

	printf("%u右移%d后的值为%u。\n", a, num, rrotate(a, num));
	printf("%u左移%d后的值为%u。\n", a, num, lrotate(a, num));

	return 0;
}

练习7-4

#include<stdio.h>
unsigned set(unsigned x, int pos)
{
	return (x | (1u << pos));
}

unsigned reset(unsigned x, int pos)
{
	return (x & ~(1u << pos));
}

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

int main()
{
	unsigned a = 0;
	int num = 0;
	printf("请输入数值:");	scanf("%u", &a);
	printf("请输入位数:");	scanf("%d", &num);

	printf("第%d位设为1后的值为%u。\n", num, set(a, num));
	printf("第%d位设为0后的值为%u。\n", num, reset(a, num));
	printf("第%d位取反后的值为%u。\n", num, inverse(a, num));

	return 0;
}

练习7-5

#include<stdio.h>
unsigned set_n(unsigned x, int pos, int n)
{
	int i = 0;
	int j = 0;

	for (i = 0; i < n; i++)
	{
		j = (j << 1) | 1;
	}
	return  (j << pos) | x;
}

unsigned reset_n(unsigned x, int pos, int n)
{
	int i = 0;
	int j = 1;

	for (i = 1; i < n; i++)
	{
		j = (j << 1) | 1;
	}
	return x & ~(j << pos);
}

unsigned inverse_n(unsigned x, int pos, int n)
{
	int i = 0;
	int j = 1;

	for (i = 1; i < n; i++)
	{
		j = (j << 1) | 1;
	}
	return  (j << pos) ^ x;
}

int main()
{
	unsigned a = 0;
	int n1,n2 = 0;
	printf("请输入数值:");	scanf("%u", &a);
	printf("请输入位数:");	scanf("%d", &n1);
	printf("请输入个数:");	scanf("%d", &n2);

	printf("第%d位到第%d位设为1后的值为%u。\n", n1, n1 + n2 - 1, set_n(a, n1, n2));
	printf("第%d位到第%d位设为0后的值为%u。\n", n1, n1 + n2 - 1, reset_n(a, n1, n2));
	printf("第%d位到第%d位取反后的值为%u。\n", n1, n1 + n2 - 1, inverse_n(a, n1, n2));

	return 0;
}

练习7-6

#include <stdio.h>
#include <limits.h>
int main()
{
	unsigned x, y = 0;
	x = 0;
	y = UINT_MAX;

	printf("x = %u\n", x);
	printf("x - 1 = %u\n", x - 1);

	printf("y = %u\n", y);
	printf("y + 1 = %u\n", y + 1);

	return 0;
}

练习7-7

#include <stdio.h>
int main() 
{
    float a;
    double b;
    long double c;

    scanf("%f", &a);
    printf("a = %f\n", a);

    scanf("%lf", &b); //注意
    printf("b = %f\n", b);

    scanf("%lf", &c);
    printf("c = %lf\n", c); //注意

    return 0;
}
练习7-8
#include <stdio.h>
int main()
{
	printf("sizeof(float)      = %u\n", (unsigned)sizeof(float)); //4
	printf("sizeof(double)     = %u\n", (unsigned)sizeof(double)); //8
	printf("sizeof(long double)= %u\n", (unsigned)sizeof(long double)); //8

	return 0;
}
练习7-9
#include <stdio.h>
#include <math.h>
int main()
{
	double x;

	printf("请输入正方形面积:");
	scanf("%lf", &x);

	printf("正方形的边长为%f\n", sqrt(x));

	return 0;
}
练习7-10
// 1
#include<stdio.h>
int main()
{
	float i;
	int j;
	//能用吗?
	/*for (i = 0.0, j = 0; i <= 1.0, j <= 100; i += 0.01, j++)
	{
		printf("x = %f\tx = %f\n", i, j / 100.0);
	}*/
	float a = 0.0;
	for (j = 0; j <= 100; j++)
	{
		i = j / 100.0;
		printf("x = %f\tx = %f\n", i, a);
		a += 0.01;
	}
	return 0;
}
// 2
#include <stdio.h>
int main()
{
    float x = -0.01;
    float y = 0;
    int i;

    for (i = 0; i <= 100; i++)
    {
        printf("x = %f\tx = %f\n", x += 0.01, (y++) / 100.0);
    }

    return 0;
}
练习7-11
#include<stdio.h>
int main()
{
	float i;
	int j;
	
	float a = 0.0;
	float sum1 = 0.0;;
	float sum2 = 0.0;;

	for (i = 0.0; i <= 1; i += 0.01)
	{
		sum1 += i;
	}
	for (j = 0; j <= 100; j ++)
	{
		sum2 += j/100.0;
	}
	printf("%f %f", sum1, sum2);

	return 0;
}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值