3.2 写出下面程序的运行结果:
#include <stdio.h>
int main(void)
{
unsigned int x1 = 65535;
int x2 = -3;
float y1 = 123.4567, y2 = 123.4500;
printf("x1=%d,%o,%x,%u\n", x1,x1,x1,x1);
printf("x2=%d,%o,%x,%u\n", x2,x2,x2,x2);
printf("y1=%10f,%10.3f,%.3f,%-10.3f\n", y1,y1,y1,y1);
printf("y2=%f,%e,%g\n", y2,y2,y2);
printf("x1(%%4d)=%4d", x1);
return 0;
}
16位环境(题意默认为16位环境):
x1=-1,177777,ffff,65535
x2=-3,177775,fffd,65533
y1=123.456700, 123.457,123.457,123.457
y2=123.450000,1.23450e+02,123.45
x1(%4d)=-1
32位环境:
x1=65535,177777,ffff,65535
x2=-3,37777777775,fffffffd,4294967293
y1=123.456700, 123.457,123.457,123.457
y2=123.450000,1.23450e+02,123.45
x1(%4d)=65535
3.3 填入代码如下:
(1) %c
(2) %c
(3) %f
(4) %f
(5) %lu
(6) %hd
(7) %d
(8) %ld
(9) %f
(10) %Lf
3.4 根据变量说明指出下面的语句哪些是正确的,哪些是错误的。
printf输出格式16char c='A';
int i1=1;
const int i2=-1;
long i3=3;
unsigned i4=0;
float x1=1;
double x2=3;
long double x3=1000;
printf("%d",(17/15)%i4+c); //ERROR:除数为零 /* (1) */
putchar(c-'A'+'a'+1); /* (2) */
printf("%*c",i2&0xf,'*'); /* (3) */
printf("x2=%f,x3=%lf\n",x2,x3); /* (4) *///ERROR:输出long double类型的浮点数用%Lf
printf("%lf\n",getchar()!=EOF?x1*3.14 : x3); /*(5)*///ERROR:表达式值类型为long double,应用%Lf输出
scanf("%u%f",&i4,&x2); /*(6)*///ERROR:x2类型为double,格式字符串中语句应为%lf
printf("%x,%lo\n",c<<++i4|1/2,i3+'0'); /* (7) */
putchar(i2=getchar());/* (8) *///ERROR:cannot modify a const object
printf("%ld,%f\n",c+i1*i4,(x2,x1,i2,c)); /*(9)*//ERROR:第一个参数应用%u输出,第二个参数char类型用%f输出结果有误
scanf("%*c%lf",&x2); /*(10)*/
3.5 编写一个程序,从终端输入一个字符,如果该字符时十六进制数字,则输出它对应的整数,否则输出它的字符码。
#include <stdio.h>
int main()
{
char c;
c = getchar();
if( c>='0' && c<='9' )
{
printf("%d\n", c-'0');
}
else if(c>='A' && c<='F')
{
printf("%d\n", c-'A'+10);
}
else if(c>='a' && c<='f')
{
printf("%d\n", c-'a'+10);
}
else
printf("%d\n", c);
return 0;
}
3.6 从终端输入一个短整数,以字符形式输出该短整数的高字节和低字节。
#include<stdio.h>
#define N 0x00FF
int main(void)
{
short c;
char high, low;
scanf("%hd", &c);
high = (unsigned short)c>>8;
low = c&N;
printf("%c,%c\n", high, low);
return 0;
}
3.7 输入无符号短整数k,输出将k的高4位和低4位交换后的结果。
#include<stdio.h>
#define N 0x0FF0
int main(void)
{
unsigned short k;
scanf("%hu", &k);
printf("%hu\n", (k&N) | (k>>12&0x000F) | (k<<12));
return 0;
}
3.8 编写一个程序,输入无符号短整数x, m, n(0<=m<=15, 1<=n<=m+1),取出x从第m位开始向右的n位(m对二进制位从右向左编号为0~15),并使其向左端(第15位)靠齐,输出处理后的结果。
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned short x, m, n, temp = 0xFFFF;
printf("Please input x(unsigned short), m(0~15), n(1~m+1)\n");
scanf("%hu %hu %hu", &x, &m, &n);
//x = (x & temp>>15-m & temp<<m+1-n)<<15-m;
x=x<<15-m & temp<<16-n;
printf("%x", x);
return 0;
}
3.9 输入一个华氏温度F,将它转换成摄氏温度C后输出。转换公式为C=5/9(F-32)。要求按如下格式输出结果:假定输入的华氏温度为100,则输出为(保留两位小数):
100(F)=37.78(C)
#include<stdio.h>
int main(void)
{
float c, f;
scanf("%f", &f);
c = 5.0/9*(f-32);
printf("%.0f(F)=%.2f(C)\n", f, c);
return 0;
}
3.10 输入圆柱体的底面半径r和高h,计算并输出圆柱体的表面积和体积。
#include<stdio.h>
#define PI 3.1415926
int main(void)
{
float r, h, s, v;
scanf("%f%f", &r, &h);
s = 2*PI*r*h + 2*PI*r*r;
v = PI*r*r*h;
printf("%.6f(S),%.6f(V)\n", s, v);
return 0;
}
3.11 编程序以十六进制形式输出汉字“编”的区位码、国标码和机内码。
#include<stdio.h>
int main(void)
{
unsigned short c='编', d;
char * r = &c;
d=(*(r+1))&0x00FF | (*r)<<8;
printf("%hx(Q),%hx(G),%hx(J)\n", d-0xA0A0, d-0x8080, d);
return 0;
}
#include<stdio.h>
int main(void)
{
unsigned short d;
char * r = "中";
d=(*r)&0x00FF | (*(r+1))<<8;
printf("%hx(Q),%hx(G),%hx(J)\n", d-0xA0A0, d-0x8080, d);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论