第一节:基本数据类型和数
没有习题
第二节:整型和字符型
练习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;
}