资源描述
第一章习题
1.4
原码:对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。
补码:正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。
反码:对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。
1.5 和:10101010
差:00010000
1.6 和 01073
差 -0337
1.7 和 0x1AABA
差 -0x5320
1.8
(251)10=(11111011)2=(373)8=(FB)16
1.10
在16位机中,[157]补= 0000000010011101
[-153]补= 1111111101100111
157-153=157+(-153)
= (0000000010011101) 2+(1111111101100111) 2=(0000000000000100) 2=(4) 10
1.14
算法设计:用变量s存储累加和,k表示计数
描述为:
(1)定义变量s,k。
(2)s清零,k赋初值1。
(3)判断k<101?如果是,顺序执行(4);否则转步骤(5);
(4)k加到累加和变量s中,k加1;转步骤(3)。
(5)输出累加和s。
(6)结束。
开始
结束
int s=0,k=1;
k<101?
s=s+k;
k=k+1;
输出s
N
Y
1.16
第二章习题
2.2
(1) x, ++, +, y
(2)-, 0xabL
(3)2.89e+12L
(4)”String+\” FOO\””
(5)x, *, *, 2
(6)”X??/”
(7)a, ?, b
(8)x, --, +=, y
(9)intx, =, +, 10
(10)”String”, “FOO”
2.3
不是表识符的如下:
4th 首字母为数字 sizeof关键字
x*y *不是字母、数字、下划线
temp-2 -不是字母、数字、下划线
isn’t ’不是字母、数字、下划线
enum 关键字
2.4
合法常数:
.12 0.L 1.E-5 3.F 浮点型常量
2L 33333 0377UL 0x9cfU 整型常量
“a” “” 字符串常量
‘\45’ ‘\0’ ‘\a’ 字符常量
非法常数:
‘‘’必须用转义序列
0x1ag 十六进制没有g
E20 没有尾数部分
‘\18’ 要用八进制数
‘\0xa’ 格式错误,可以是’\xa’
“3’4”” 需要转义序列
‘”’ 需要转义序列
2.5
(1)int a, b=5;
(2)double h;
(3)int x=2.3; 0.3 会被截取。
(4)const long y=1; 必须赋初值
(5)float a= 2.5*g; g 没有定义。
(6) int a=b=2; 在 turbo C 中编译出错:未定义的符号’b’在main函数中。
2.6
(1)4
(2)0
(3)1
(4)6
(5)8
(6)0
(7)3.00
(8)1
(9)108
(10)0
2.7 答案不确定
(1)a==b==c c未定义
(2)正确
(3)正确
(4)正确
(5)a*++-b 表达式缺值
(6)a||b^i ^运算的操作数必须是整型,而i不是
(7)i*j%a %运算的操作数必须是整型,而a不是
(8)正确
(9)正确
(10)int(a+b) 应该改成(int)(a+b)
2.9
(1)0
(2)-2
(3)65535
(4)5
(5)60
(6)113
(7)-2
(8)-1
(9)65532
(10)3
2.10
unsigned long encrypt(unsigned long x)
{
unsigned long x0,x1,x2,x3,x4,x5,x6,x7;
x0=(x & 0x0000000F) << 8;
x1=(x & 0x000000F0);
x2=(x & 0x00000F00) << 8;
x3=(x & 0x0000F000);
x4=(x & 0x000F0000) << 8;
x5=(x & 0x00F00000);
x6=(x & 0x0F000000) >> 24;
x7=(x & 0xF0000000);
return(x0|x1|x2|x3|x4|x5|x6|x7);
}
2.11
#include<stdio.h>
void main()
{
unsigned long in;
unsigned long a,b,c,d;
scanf("%ld",&in);
//in=1563;
a=(in&0xff000000)>>24;
b=(in&0x00ff0000)>>16;
c=(in&0x0000ff00)>>8;
d=in&0x000000ff;
printf("%d.%d.%d.%d",a,b,c,d);
}
2.15
((k >>8)& 0xFF00) | ((p & 0x00FF)<<8)
2.16
max=a>b?a>c?a:c:b>c?b:c;
max=a > b ? ((a > c) ? a : c):((b > c) ? b : c);
2.17
X=y>>n
2.18
(c>=’0’ && c<=’9’)? c – ‘0’ : c
2.19
(a % 3 == 0) && (a % 10 == 5) ? a : 0;
第三章习题
3.1 函数原型是指对函数的名称、返回值类型、参数的数目和参数类型的说明。其规定了调用该函数的语法格式,即调用形式。
putchar函数的原型为:int putchar(int c);
puts函数的原型为: int puts(const char *s);
printf函数的原型为:int printf(const char *format,…);
getchar函数的原型为:int getchar_r(void);
gets函数的原型为:char * gets_r(char *s);
scanf函数的原型为: int scanf(const char *format,…);
3.2 不同点:① puts为非格式输出函数,printf为格式输出函数;
② puts函数的参数类型和数目一定(一个字符串),printf函数的参数类型和数目不固定;
③ puts函数输出后会自动换行,printf函数没有这一功能。
相同点:①二者都向标准设备输出;
②二者返回值类型都为int。
3.3 x1=-1,177777,ffff,65535
x2=-3,177775,fffd,65533
y1=123.456703, 123.457,123.457,123.457 (注意对齐)
y2=123.449997,1.23450e+02,123.45
x1(%4d)= -1
3.4 ⑴%c;⑵%c;⑶%f;⑷%f;⑸%lu;⑹%d;⑺%d;⑻%d;⑼%f;⑽%Lf
3.5 ⑴错误,运行提示为divide error
⑵正确,结果为b
⑶正确,结果为 *
⑷正确
⑸正确,但无法正常从结果中退出
⑹正确
⑺正确,结果为82,63
⑻编译错误,提示 cannot modify a const object
⑼正确
⑽正确
3.6 -6.70000
-6
177601
123
-2 0
3.8
#include<stdio.h>
void main()
{
char c;
c= getchar_r();
if((c>='0'&&c<='9')||(c>='A'&&c<='F')||(c>='a'&&c<='f'))
{
if((c>='0'&&c<='9'))
{
printf("%d\n",c-'0');
}
else if((c>='A'&&c<='F'))
{
printf("%d\n",c-'A'+10);
}
else
printf("%d\n",c-'a'+10);
}
else
putchar(c);
}
3.9
#include<stdio.h>
void main()
{
short num,high,low;
printf("Please input a short number:\n");
scanf("%hd",&num);
low = 0x00ff & num;
high = 0x00ff & (num >> 8);
printf("The high byte is:%c\n", high);
printf("The low byte is:%c\n", low);
}
3.10
#include "stdafx.h"
int main(int argc, char* argv[])
{
unsigned short int x;
unsigned short int high,low;
printf("input a integer:\n");
scanf("%d",&x);
high = (x>>12)&0x000f;
low = (x<<12)&0xf000;
x= x&0x0ff0;
x=x|high|low;
printf("%d\n",x);
return 0;
}
3.11
#include<stdio.h>
void main()
{
unsigned short int x,m,n;
unsigned short int result;
scanf("%hu%hu%hu",&x,&m,&n);
result=(x>>(m-n+1))<<(15-n+1);
printf("%hu\n",result);
}
3.12
#include<stdio.h>
void main()
{
float f,c;
scanf("%f",&f);
c=(5*(f-32))/9;
printf("%.0f(F)=%.2f(C)\n",f,c);
}
或者
#include<stdio.h>
void main()
{
int f;
float c;
scanf("%d",&f);
c=(5*(f-32))/9;
printf("%d(F)=%.2f(C)\n",f,c);
}
3.13
#include <stdio.h>
#define PI (3.1415926)
int main(int argc, char* argv[])
{
double r, h;
double s, v;
printf("Please input the r and h.");
scanf("%lf,%lf", &r, &h);
s = 2 * PI * r * h + 2 * PI * r * r;
v = PI * r * r * h;
printf("s is %lf, v is %lf", s, v);
return 0;
}
3.14
#include "stdafx.h"
int main(int argc, char* argv[])
{
char a[4] = "编";
printf("机内码:%x%x\t\n",a[0]&0xff,a[1]&0xff);
printf("区位码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x2020-0x8080);
printf("国际码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x8080);
return 0;
}
第四章习题
4.1
#include <stdio.h>
void main(void)
{
float a,b,c;
printf("Please enter the score of A:\n");
scanf("%f",&a);
printf("Please enter the score of B:\n");
scanf("%f",&b);
printf("Please enter the score of C:\n");
scanf("%f",&c);
if((a-b)*(a-c)<0)
printf("A gets the score %.1f",a);
if((b-a)*(b-c)<0)
printf("B gets the score %.1f",b);
if((c-a)*(c-b)<0)
printf("C gets the score %.1f",c);
}
4.3
#include <stdio.h>
int mdays(int y,int m)
{
if (m==2) return (y%4==0 && (y%100==0 || y%400==0))?29:28;
else if (m==4 || m==6 || m==9 || m==11) return 30;
else return 31;
}
main()
{
int y,m,d,days;
printf("Enter year:");
scanf("%d",&y);
printf("Enter month:");
scanf("%d",&m);
printf("Enter day:");
scanf("%d",&d);
days=d;
while(m>1){days+=mdays(y,m-1);m--;}
printf("%d\n",days);
}
4.4 if方法:
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
float x = 0;
printf("input the salary\n");
scanf("%f",&x);
if(x<0)
printf("wrong\n");
else if(x>0 && x<1000)
printf("0\n");
else if(x<2000)
printf("%f\n",x*0.05);
else if(x<3000)
printf("%f\n",x*0.1);
else if(x<4000)
printf("%f\n",x*0.15);
else if(x<5000)
printf("%f\n",x*0.2);
else
printf("%f\n",x*0.25);
return 0;
}
Case方法:
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
float x ;
printf("input the salary\n");
scanf("%f",&x);
int xCase = 0;
xCase = (int)(x/1000.0);
switch(xCase)
{
case 0:
printf("0\n");
break;
case 1:
printf("%f\n",x*0.05);
break;
case 2:
printf("%f\n",x*0.1);
break;
case 3:
printf("%f\n",x*0.15);
break;
case 4:
printf("%f\n",x*0.2);
break;
default:
printf("%f\n",x*0.25);
}
return 0;
}
4.7
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
char *sa;
char c;
int i = 0,j = 0,k = 0;
do
{
c= getchar_r();
sa[i++] = c;
}while(c != '\r');
for(i=0;sa[i+1];i++)
{
for(j = i+1;sa[j];j++)
{
if( sa[i]==sa[j] && sa[j] ==' ')
{
for(k=j;sa[k];k++)
sa[k] = sa[k+1];
j--;
}
}
}
for(k=0;sa[k];k++)
printf("%2c",sa[k]);
return 0;
}
4.10
#include <stdio.h>
#define EPS 1e-5
void main()
{
int s=1;
float n=1.0,t=1.0,pi=0;
while(1.0/n>=EPS)
{
pi=pi+t;
n=n+2;
s=s*(-1);
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
4.11
#include<stdio.h>
int main()
{
int a,b,num1,num2,temp;
printf("Input a & b:");
scanf("%d%d",&num1,&num2);
if(num1>num2)
{
temp=num1; num1=num2; num2=temp;
}
a=num1; b=num2;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
printf("The GCD of %d and %d is: %d\n",num1,num2,a);
printf("The LCM of them is: %d\n",num1*num2/a);
}
4.13
#include "stdafx.h"
#include <stdio.h>
int Primes(int x);//判断素数函数
int main(int argc, char* argv[])
{
int i,j;
int num;
for(num = 4;num<=100;num++)
{
if(num%2 == 0)
{
for(i=1;i<num;i++)
{
for(j=1;j<num;j++)
{
if(num == i+j)
{
if(Primes(i) && Primes(j))
{
printf("%d=%d+%d\n",num,i,j);
}
}
}
}
}
}
return 0;
}
int Primes(int x)
{
int i ;
int n = 0;
for(i = 1;i<=x;i++)
{
if(x%i==0)
n++;
}
if(n==2)
return 1;
else
return 0;
}
4.17
#include<stdio.h>
void main(void)
{
int c,i;
for(i=1,c=32;c<=126;++i,++c)
{
printf("%3d%-5c",c,c);
if(!(i%8))
printf("\n");
}
}
4.18
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
int x;
int i,n,sum;
printf("input 10 numbers\n");
for(i = 0,n = 0,sum = 0;i<10;i++)
{
scanf("%d",&x);
if(x >0)
{
sum+=x;
n++;
}
}
if(n)
printf("numbers = %d,average = %f\n",n,1.0*sum/n);
return 0;
}
第五章习题
5.5
Extern和static存储类型的区别:
Static型外部变量和extern型外部变量的唯一区别是作用域的限制。静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。Extern型外部变量的作用域可以扩大到整个程序的所有文件。
Static和auto存储类型的区别:
静态局部变量和自动变量有根本性的区别。由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量的值在退出块时都丢失了。如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。
5.6
不能。
在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。
5.7 6,12
5.10
#include <stdio.h>
double sum_fac(int n)
{
double s=0;
int i;
double fac=1.0;
for(i=1;i<=n;i++)
{
fac*=1.0/i;
s+=fac;
}
return s;
}
void main(void)
{
int n;
printf("Please enter the integer n:");
scanf("%d",&n);
printf("the sum is %lf\n",sum_fac(n));
}
5.17
#include <stdio.h>
void reverse()
{
char ch= getchar_r();
if(ch!='\n')
{
reverse();
putchar(ch);
}
}
int main()
{
reverse();
printf("\n");
return 0;
}
第六章习题
6.1
(1)正确
(2)错误,不需要加“;”
(3)错误,“ident”与“(”之间不能有空格
(4)错误,宏名不能是关键字“void”
(5)错误,将x*y改成((x)*(y))
6.4
将会导致变量blue的重复定义
6.5
(1)#define NO 0
(2)#include “common.h”
(3)#line 3000
(4)#undef TRUE
#define TRUE 1
(5)#if TRUE !=0
#define FALSE 0
#else
#define FALSE 1
#endif
(6)#ifndef SIZE
assert(0);
#else
assert(SIZE<10&&SIZE>1);
#endif
(7)#define SQUARE_VOLUME(x) (x)*(x)*(x)
6.10
#include <stdio.h>
#define pi 3.1415926
#define BALL_VOLUME(r) ((4/3)*pi*(r)*(r)*(r))
int main()
{
int r;
float v[11];
for(r=1;r<11;r++)
{
v[r]=float(BALL_VOLUME(r));
printf("r=%2d v=%.2f\n",r,v[r]);
}
return 0;
}
第七章习题
7.9
#include<stdio.h>
#include<graphics.h>
#define g 10
void main()
{
char *buffer;
int gdriver=DETECT,gmode,i,size;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
setbkcolor(BLUE);
setcolor(RED);
setlinestyle(0,0,1);
setfillstyle(1,5);
circle(200,250,RED);
size=imagesize(200,250,200,300);
buffer=malloc(size);
getimage_r(200,250,200,300,buffer);
for(i=0;i<=10;i++)
putimage(200,250+g*i*i/2,buffer,COPY_PUT);
getch_r();
closegraph();
}
7.11
#include<stdio.h>
#define RAND_MAX 32767
#define RAND 100
int RandomInteger(int low,int high)
{
int k;
double d;
d=(double)rand()/((double)RAND_MAX+1);
k=(int)(d*(high-low+1));
return(low+k);
}
void main()
{
long i;
int n=0;
int szWord[RAND];
char a[]="heads";
char b[]="tails";
srand(time(0));
for(i=0;i<RAND;i++)
{
szWord[i]=RandomInteger(0,1);
if(szWord[i]==1)
{
printf("\n%s",a);
n++;
}
else
{
printf("\n%s",b);
n=0;
}
if(n==3)
{
printf("\nIt took %ld flips to get heads 3 consecutives times",i+1);
break;
}
}
}
7.16
char *MonthName(int month);
int MonthDays(int month,int year);
int FirstDayOfMonth(int month,int year);
int IsLeapYear(int year);
enum weak{SUNDAY ,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};
#include “caltools.h”
char *MonthName(int month)
{
Switch(month)
{
Case 1: return(“January”);
Case 2: return(“February”);
Case 3: return(“March”);
Case 4: return(“April”);
Case 5: return(“May”);
Case 6: return(“June”);
Case 7: return(“July”);
C
展开阅读全文