#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;
}