当前位置:首页 » 编程软件 » 程序设计语言编译原理答案

程序设计语言编译原理答案

发布时间: 2022-10-05 11:37:11

A. c语言程序设计教程答案~有追加悬赏100分!

1 【C语言】《C语言程序设计教程(第二版)》习题答案

说 明
1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理
工大学出版社出版的,绿皮。

2 第1章 程序设计基础知识
一、单项选择题(第23页)
1-4.CBBC 5-8.DACA

二、填空题(第24页)
1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分

三、应用题(第24页)
2.源程序:
main()
{int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
printf("cock hen chick\n");
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=33;k++)
if (i+j+k*3==100&&i*5+j*3+k==100)
printf(" %d %d %d\n",i,j,k*3);}
执行结果:
cock hen chick
4 18 78
8 11 81
12 4 84
3.现计算斐波那契数列的前20项。
递推法 源程序:
main()
{long a,b;int i;
a=b=1;
for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/
{printf("%8ld%8ld",a,b);
a=a+b;b=b+a;}}
递归法 源程序:
main()
{int i;
for(i=0;i<=19;i++)
printf("%8d",fib(i));}
fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2));}
执行结果:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
4.源程序:
#include "math.h";
main()
{double x,x0,deltax;
x=1.5;
do {x0=pow(x+1,1./3);
deltax=fabs(x0-x);
x=x0;
}while(deltax>1e-12);
printf("%.10f\n",x);}
执行结果:
1.3247179572
5.源程序略。(分子、分母均构成斐波那契数列)
结果是32.66026079864
6.源程序:
main()
{int a,b,c,m;
printf("Please input a,b and c:");
scanf("%d %d %d",&a,&b,&c);
if(a<b){m=a;a=b;b=m;}
if(a<c){m=a;a=c;c=m;}
if(b<c){m=b;b=c;c=m;}
printf("%d %d %d\n",a,b,c);}
执行结果:
Please input a,b and c:123 456 789
789 456 123
7.源程序:
main()
{int a;
scanf("%d",&a);
printf(a%21==0?"Yes":"No");}
执行结果:
42
Yes

3 第2章 C语言概述
一、单项选择题(第34页)
1-4.BDCB 5-8.AABC

二、填空题(第35页)
1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6. .OBJ 7.库函数 8.文本

三、应用题(第36页)
5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。
8.源程序:
main()
{int a,b,c;
scanf("%d %d",&a,&b);
c=a;a=b;b=c;
printf("%d %d",a,b);}
执行结果:
12 34
34 12

4 第3章 数据类型与运算规则
一、单项选择题(第75页)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB

二、填空题(第77页)
1.补码 2.±(10^-308~10^308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89

三、应用题(第78页)
1.10 9
2.执行结果:
11
0
0
12
1

5 第4章 顺序结构程序设计
一、单项选择题(第90页)
1-5.DCDAD 6-10.BACBB

二、填空题(第91页)
1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)

三、编程题(第92页)
1.仿照教材第27页例2-1。
2.源程序:
main()
{int h,m;
scanf("%d:%d",&h,&m);
printf("%d\n",h*60+m);}
执行结果:
9:23
563
3.源程序:
main()
{int a[]={-10,0,15,34},i;
for(i=0;i<=3;i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);}
执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
main()
{double pi=3.14159265358979,r=5;
printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r);}
执行结果:
r=5 A=31.4159265359 S=49.3480220054
5.源程序:
#include "math.h";
main()
{double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{double s=(a+b+c)/2;
printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));}
else printf("Data error!");}
执行结果:
4 5 6
SS=9.9215674165
6.源程序:
main()
{int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56;
printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f);}
7.源程序:
main()
{int a,b,c,m;
scanf("%d %d %d",&a,&b,&c);
m=a;a=b;b=c;c=m;
printf("%d %d %d\n",a,b,c);}
执行结果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.);
执行结果:
6 7 9
average of 6,7 and 9 is 7.33
9.不能。修改后的源程序如下:
main()
{int a,b,c,x,y;
scanf("%d %d %d",&a,&b,&c);
x=a*b;y=x*c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("x=%d,y=%d\n",x,y);}

6 第5章 选择结构程序设计
一、单项选择题(第113页)
1-4.DCBB 5-8.DABD

二、填空题(第115页)
1.非0 0 2.k==0
3.if (abs(x)>4) printf("%d",x);else printf("error!");
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x);
5.k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。)
6. 8! Right!11 7.$$$a=0 8.a=2,b=1

三、编程题(第116页)
1.有错。正确的程序如下:
main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("min=%d\n",a>b?b>c?c:b:a>c?c:a);}
2.源程序:
main()
{unsigned long a;
scanf("%ld",&a);
for(;a;printf("%d",a%10),a/=10);}
执行结果:
12345
54321
3.(1)源程序:
main()
{int x,y;
scanf("%d",&x);
if (x>-5&&x<0)y=x;
if (x>=0&&x<5)y=x-1;
if (x>=5&&x<10)y=x+1;
printf("%d\n",y);}
(2)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1;
else y=x-1; else y=x;
printf("%d\n",y);}
(3)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>=5)y=x+1;
else if(x>=0)y=x-1;
else if(x>-5)y=x;
printf("%d\n",y);}
(4)源程序:
main()
{int x,y;
scanf("%d",&x);
switch(x/5)
{case -1:if(x!=-5)y=x;break;
case 0:y=x-1;break;
case 1:y=x+1;}
printf("%d\n",y);}
4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。
现给出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procere TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)]);
end;
procere TForm1.FormCreate(Sender: TObject);
begin
Edit2.Text:=datetostr(now);
button1click(form1)
end;
C++ Builder源程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天";
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit2->Text=DateToStr(Now());
Button1Click(Form1);
}
执行结果:(运行于Windows下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg

5.源程序:
main()
{unsigned a,b,c;
printf("请输入三个整数:");
scanf("%d %d %d",&a,&b,&c);
if(a&&b&&c&&a==b&&a==c)printf("构成等边三角形\n");
else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf("构成等腰三角形\n");
else printf("构成一般三角形\n");
else printf("不能构成三角形\n");}
执行结果:
请输入三个整数:5 6 5
构成等腰三角形
6.源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<20)y=1;
else switch(x/60)
{case 0:y=x/10;break;
default:y=6;}
printf("x=%d,y=%d\n",x,y);}
7.源程序:
main()
{unsigned m;float n;
scanf("%d",&m);
if(m<100)n=0;
else if(m>600)n=0.06;
else n=(m/100+0.5)/100;
printf("%d %.2f %.2f\n",m,m*(1-n),m*n);}
执行结果:
450
450 429.75 20.25
8. 2171天(起始日期和终止日期均算在内)
本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
9.源程序:
#include "math.h";
main()
{unsigned long i;
scanf("%ld",&i);
printf("%ld %d\n",i%10,(int)log10(i)+1);}
执行结果:
99887
7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0;
scanf("%ld",&i);
for(;i;){j[m++]=(i+2)%10;i/=10;}
for(;m;m--)i=i*10+j[m-1];
printf("%ld\n",i);}
执行结果:
6987
8109
(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)

7 第6章 循环结构程序设计
一、单项选择题(第142页)
1-4.BCCB 5-8.CBCA

二、填空题(第143页)
1.原题可能有误。如无误,是死循环 2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x<amin

三、编程题(第145页)
1. 源程序:
main()
{int i=1,sum=i;
while(i<101){sum+=i=-i-2;sum+=i=-i+2;}
printf("%d\n",sum);}
执行结果:
51
2.源程序:
main()
{double p=0,n=0,f;int i;
for(i=1;i<=10;i++)
{scanf("%lf",&f);
if (f>0)p+=f; else n+=f;}
printf("%lf %lf %lf\n",p,n,p+n);}
3.源程序:
main()
{unsigned a;
scanf("%ld",&a);
for (;a;printf("%d,",a%10),a/=10);
printf("\b \n");}
执行结果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i;
scanf("%ld%ld",&a,&b);
c=a%1000;
for(i=1;i<b;i++)c=c*a%1000;
if(c<100)printf("0");
if(c<10)printf("0");
printf("%ld\n",c);}
执行结果:
129 57
009
5.略
6.原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …
(1)源程序:
main()
{double e=1,f=1;int n;
for(n=1;n<=20;n++){f/=n;e+=f;}
printf("e=%.14lf\n",e);}
执行结果:
e=2.71828182845905
(2)源程序:
main()
{double e=1,f=1;int n;
for(n=1;f>1e-4;n++){f/=n;e+=f;}
printf("e=%.4f\n",e);}
执行结果:
e=2.7183
7.源程序:
main()
{unsigned long a=0,b=1,c=0;int i,d;
scanf("%d",&d);
for (i=1;i<=(d+2)/3;i++)
printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b));}
本题还可以用递归算法(效率很低),源程序如下:
unsigned long fun(int i)
{return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);}
main()
{int i,d; scanf("%d",&d);
for(i=1;i<=d;i++)
printf("%10ld",fun(i));}
执行结果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i;
for(i=1010;i<=9876;i+=2)
if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(" %d",i);}
执行结果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k;
printf("apple watermelon pear\n");
for(i=1;i<=100;i++)
for(j=1;j<=10;j++)
if((k=100-i-j)*2==400-i*4-j*40)
printf("%4d%7d%9d\n",i,j,k);}
执行结果:
apple watermelon pear
5 5 90
24 4 72
43 3 54
62 2 36
81 1 18
10.源程序:
#include "stdio.h";
#define N 4 /* N为阶数,可以改为其他正整数 */
main()
{int m=N*2,i,j;
for(i=1;i<m;printf("\n"),i++)
for(j=1;j<m;
putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));}
如果把N值改为5,则执行结果如下:
*
***
*****
*******
*********
*******
*****
***
*

作者:宁西贯通 2006-5-7 23:41 回复此发言

--------------------------------------------------------------------------------

8 说明
注意:上面最后一题的输出结果应该是由星号组成的一个菱形,

9 第7章 数 组
一、单项选择题(第192页)
1-4.BBCC 5-8.AABA

二、填空题(第194页)
1.1
2
4
8
16
32
64
128
256
512
2. ①a[age]++ ②i=18;i<26
3. ①break ②i==8
4. ①a[i]>b[j] ②i<3 ③j<5
5. ①b[j]=a[j][0] ②b[j]<a[j][k] 6.a[k++]=a[j]

三、编程题(第196页)
1.源程序:
main()
{int a[4][4],i,j,s=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j||i+j==3)s+=a[i][j];
printf("%d\n",s);} /* 注:5×5矩阵不能照此计算! */
执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
68
2. 源程序:
main()
{int i,a[36];
a[0]=2;
for(i=1;i<=29;i++)a[i]=a[i-1]+2;
for(;i<=35;i++)a[i]=a[(i-30)*5+2];
for(i=0;i<=35;i++)printf("%d\t",a[i]);}
执行结果:
2 4 6 8 10 12 14 16 18 20
22 24 26 28 30 32 34 36 38 40
42 44 46 48 50 52 54 56 58 60
6 16 26 36 46 56
3. 源程序:
#include "stdlib.h"
#include "time.h"
main()
{int a[30],i,m=0;
randomize();
for(i=0;i<=29;i++)
{a[i]=rand();
if(m<a[i])m=a[i];
printf("%d\t",a[i]);}
for(i=0;i<=29;i++)if(a[i]==m)a[i]=-1;
printf("\n-----------------\n");
for(i=0;i<=29;i++)
if(~a[i])printf("%d\t",a[i]);
printf("\n");}
执行结果:
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
32499 29305 22340 5927 13031 2161 2583 31855 22977 14283
4851 22038 6992 11394 20887 27381 6293 18347 16414 10210
-----------------
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
29305 22340 5927 13031 2161 2583 31855 22977 14283 4851
22038 6992 11394 20887 27381 6293 18347 16414 10210
4.源程序:
main()
{int i,n=0,b[16];
scanf("%d",&i);
for(;i;i>>=1)b[n++]=i&1;
for(;n;)printf("%d",b[--n]);}
执行结果:
9876
10011010010100
本题也可以不用数组。源程序如下:
#include "stdio.h"
main()
{int i,n;
scanf("%d",&i);
for(n=16;n;n--)
{asm ROL i,1
putchar(i&1|48);}
} /* ROL是循环左移的汇编指令 */
5. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j,t[M];
randomize();
/*生成M行N列随机数*/
for(i=0;i<M;printf("\n"),t[i++]=0)
for(j=0;j<N;j++)
printf("%4d",a[i][j]=random(50));
/*找出每行的最小数,t[M]是第M行的最小数所在的列数*/
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(a[i][t[i]]>a[i][j])t[i]=j;
/*比较每个最小数在其所在的列上是否也是最小*/
for(j=0;j<M;j++)
for(i=0;i<M;i++)
{if(i==j)continue;
if(a[j][t[j]]>a[i][t[j]])
{t[j]=-1;break;}
}
printf("-------------------\n");
/*输出在行和列上均为最小的数*/
for(i=0;i<M;i++)
if(t[i]!=-1)
printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]]);
}
执行结果:
13 19 13 20 0 1
20 41 6 16 35 30
3 5 37 8 23 15
6 36 24 29 18 1
1 5 28 21 46 34
-------------------
a[0,4]=0
a[1,2]=6
a[3,5]=1
a[4,0]=1
6. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 7
main()
{int a[M][N],i,j,t=0;
randomize();
for(i=0;i<M;i++)
{a[i][N-1]=0;
for(j=0;j<N-1;j++)
{printf("%4d",a[i][j]=random(91)+10);
a[i][N-1]+=a[i][j];}
printf("%4d\n",a[i][N-1]);}
for(i=1;i<M;i++)
if(a[i][N-1]>a[t][N-1])t=i;
if(t)for(j=0;j<N;j++)
{i=a[0][j];a[0][j]=a[t][j];a[t][j]=i;}
printf("-----------------\n");
for(i=0;i<M;printf("\n"),i++)

10 第7章 数 组
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
执行结果:
89 17 32 95 35 20 288
39 48 22 27 73 22 231
51 87 39 71 84 46 378
84 94 97 77 27 26 405
69 50 56 89 37 46 347
-----------------
84 94 97 77 27 26 405
39 48 22 27 73 22 231
51 87 39 71 84 46 378
89 17 32 95 35 20 288
69 50 56 89 37 46 347
7. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j;
struct data{int value,x,y;}max,min;
max.value=0;min.value=100;
randomize();
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
{printf("%4d",a[i][j]=random(100)+1);
if(max.value<a[i][j])
{max.value=a[i][j];max.x=i;max.y=j;}
if(min.value>a[i][j])
{min.value=a[i][j];min.x=i;min.y=j;}
}
printf("-----------------\n");
i=a[0][N-1];a[0][N-1]=max.value;a[max.x][max.y]=i;
i=a[M-1][0];a[M-1][0]=min.value;a[min.x][min.y]=i;
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
执行结果:
51 53 74 65 30 40
30 26 50 6 61 27
47 16 54 58 76 19
57 74 44 92 71 48
73 57 60 32 73 67
-----------------
51 53 74 65 30 92
30 26 50 73 61 27
47 16 54 58 76 19
57 74 44 40 71 48
6 57 60 32 73 67
9. 源程序:
main()
{char s[255];int i,j,b=1;
printf("Input a string:");
scanf("%s",s);
i=strlen(s);
for(j=1;j<=i/2;j++)
b=b&&(s[j-1]==s[i-j]);
printf(b?"Yes\n":"No\n");}
执行结果:
Input a string:level
Yes
10. 源程序:
main()
{char s[255],t,max=0,min=0,l,i;
printf("Input a string(length>4):");
gets(s);
l=strlen(s);
for(i=0;i<l;i++)
{if(s[max]<s[i])max=i;if(s[min]>s[i])min=i;}
t=s[1];s[1]=s[max];s[max]=t;if(min==1)min=max;
t=s[l-2];s[l-2]=s[min];s[min]=t;
printf("%s\n",s);}
执行结果:
Input a string(length>4):C++Builder
Cu+Beild+r
11. 源程序:
main()
{char m[13][10]={"****","January","February","March",
"April","May","June","July","August","September",
"October","November","December"};
int i,j,k,a,s,n;
printf("Please input an integer(100..999):");
scanf("%d",&n);
printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)]);}
执行结果:
Please input an integer(100..999):539
539:5+3+9=17, 17%13=4, April

11 第8章 函 数
一、单项选择题(第241页)
1-5.BCCAA 6-10.CCDDD 11-15.ACACB

二、填空题(第243页)
1.看不出原题的意图。因为要计算1~n的累加和,n应是一个≥1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1~n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。据此猜测,原题应填为:①return(0) ②return(n+sum(n-1))
根据题意,如下程序较为合理:
int sum(int n)
{if(n<=0)return(-1); /* -1是出错标志 */
else if(n==1)return(1);
else return(n+sum(n-1));}
2. ①return(1) ②return(n*facto(n-1))

三、编程题(第244页)
3.源程序:
main()
{int i,a,b,c;
for(i=100;i<999;i++)
if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)
printf("%d\t",i);}
执行结果:
153 370 371 407
8.源程序(非递归算法):
#define P 13 /* P可以改为其他正整数 */
main()
{int a[P],r,c;
for(r=0;r<=P;r++)
{a[r]=1;
for(c=r-1;c>=1;a[c--]+=a[c-1]);
printf("%*d",(P-r)*3+1,a[0]);
for(c=1;c<=r;printf("%6d",a[c++]));
printf("\n");}
}
执行结果:
(应该排列成一个三角形,是贴吧造成现在这个样子的,不是程序有问题)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
9.源程序(递归算法):
#include "stdio.h"
void printOCT(unsigned long n)
{unsigned long i;
if(i=n>>3)printOCT(i);
putchar((n&7)+48);}
main()
{unsigned long i;
scanf("%ld",&i);
printOCT(i);}
执行结果:
1234567890
11145401322
本题也可以不用递归算法,源程序请参考第7章第三题4。

12 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
但是不同时间印刷的版本课后题不太一样呢,象我们的是1999年12月第2版,2005年12月第69次印刷的。没有选择填空,应用题和楼主不知道有多少相同的,因为看不到原题。这个比较麻烦呢。

作者:210.77.204.* 2006-5-9 18:38 回复此发言

--------------------------------------------------------------------------------

13 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
你对照一下主编和出版社,看看对吗?(见说明的第一条。)
我不是说叫你有问题另发帖子吗?

14 第9章 指 针
一、单项选择题(第276页)
1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD

二、填空题(第278页)
1.①int * ②*z
2.*p++
3.①'\0' ②++
4.①q=p+1 ②q<p+10 ③*q>max ④*q<min

三、编程题(第280页)
7.源程序:
main()
{int i=0;char c[20];
do{scanf("%s",&c);i++;}
while(strcmp(c,"stop"));
printf("%d\n",i);}
执行结果:
This car ran form Nanyang
to Luoyang without a stop
10
9.源程序:
main()
{char s[255],c[255]={0};int i;
gets(s);
for(i=0;s[i];c[s[i++]]++);
for(i=0;i<255;i++)
if(c[i])printf("%c=%d\t",i,c[i]);}
执行结果:
abcedabcdcd
a=2 b=2 c=3 d=3 e=1

B. 编译原理 词法分析程序的设计与实现实验题

说他像苍蝇,是骂苍蝇呢还是骂他呢?

C. 求C语言程序设计的答案

a==b表示判断a和b是否相等,后面没输出结果!

a=b是将b的值赋给a,后面输出“*****”

D. 把编译程序设计原理(第二版)高等教育出版社的课后答案给我发一份 可以吗

目录
第1章编译器概述
1.1为什么要学习编译技术
1.2编译器和解释器
1.3编译器的功能分解和组织结构
1.4编译器的伙伴
1.5编译器的复杂性
1.6编译器的设计与实现
1.7编译器的测试与维护
第2章一个微型编译器
2.1基础知识
2.2ToyL语言
2.3ToyL语言词法分析器
2.4ToyL语言语法分析器
2.5ToyL语言解释器
2.6ToyL语言编译器
第3章有穷自动机与词法分析
3.1词法分析基础
3.1.1词法分析器的功能
3.1.2单词识别
3.1.3词法分析的复杂性
3.1.4字符串
3.1.5保留字处理
3.1.6空格符、回车符、换行符
3.1.7括号类配对预检
3.1.8词法错误修正
3.1.9词法分析独立化的意义
3.2有穷自动机
3.2.1确定有穷自动机的定义
3.2.2确定有穷自动机的实现
3.2.3非确定有穷自动机
3.2.4NFA到DFA的转换
3.2.5确定有穷自动机的极小化
3.2.6自动机状态转换表的实现
3.3正则表达式
3.3.1正则符号串集
3.3.2正则表达式的定义
3.3.3正则表达式的局限性
3.3.4正则定义
3.3.5正则表达式到有穷自动机的转换
3.4词法分析器的构造
3.4.1用DFA人工构造词法分析器
3.4.2词法分析器的生成器Lex
练习
第4章文法与语法分析
4.1语法分析
4.1.1语法分析器的输入
4.1.2语法分析的任务
4.1.3语法分析方法分类
4.2文法和文法分析
4.2.1上下文无关文法和语言
4.2.2最左推导和最右推导
4.2.3语法分析树与二义性
4.2.4文法分析算法
4.2.5自顶向下方法概述
4.2.6自底向上方法概述
4.3递归下降法——自顶向下分析
4.3.1递归下降法原理
4.3.2消除公共前缀
4.3.3代入
4.3.4消除左递归
4.4LL分析方法——自顶向下分析
4.4.1LL(1)文法
4.4.2LL(1)分析表
4.4.3LL(1)分析的驱动器
4.4.4LL(1)中的If-Then-Else问题
4.4.5LL(1)分析器的自动生成器LLGen
4.4.6LL(1)分析法与递归下降法的比较
4.4.7正则文法
4.5LR方法——自底向上分析
4.5.1句柄
4.5.2活前缀
4.5.3归约活前缀识别器——LR(0)自动机
4.5.4LR(0)文法及其分析算法
4.5.5SLR(1)文法及其分析算法
4.5.6LR(1)文法
4.5.7LALR(1)文法
4.5.8二义性文法的处理
4.5.9另一种Shift-Rece分析技术:简单优先法
4.5.10LL(1)和LALR(1)方法比较
4.6LR分析器的生成器
4.6.1LALR分析器的生成器YACC
4.6.2LALR分析器的生成器LALRGen
4.7语法错误处理
4.7.1错误恢复和修复
4.7.2递归下降分析的错误恢复
4.7.3LL分析的错误恢复
4.7.4LR分析的错误恢复
练习
第5章语义分析
5.1语义分析基础
5.1.1语义分析内容
5.1.2标识符信息的内部表示
5.1.3类型信息的内部表示
5.1.4运行时值的表示
5.2符号表
5.2.1符号表查找技术
5.2.2符号表的局部化
5.2.3二叉式局部符号表
5.2.4散列式全局符号表
5.2.5嵌套式全局符号表
5.2.6符号表界面函数
5.3类型分析
5.3.1类型的等价性和相容性
5.3.2类型分析的总控算法
5.3.3类型名分析
5.3.4枚举类型分析
5.3.5数组类型分析
5.3.6记录类型分析
5.3.7联合类型分析
5.3.8指针类型分析
5.3.9递归类型分析
5.4声明的语义分析
5.4.1声明的语法结构
5.4.2标号声明部分的语义分析
5.4.3常量声明部分的语义分析
5.4.4类型声明部分的语义分析
5.4.5变量声明部分的语义分析
5.4.6过程、函数声明的语义分析
5.5执行体的语义分析
5.5.1执行体的语义分析
5.5.2带标号语句和转向语句的语义分析
5.5.3赋值语句的语义分析
5.5.4条件语句的语义分析
5.5.5while循环语句的语义分析
5.5.6for循环语句的语义分析
5.5.7过程调用语句的语义分析
5.5.8表达式的语义分析
5.5.9变量的语义分析
练习
第6章运行时的存储环境
6.1运行时的存储空间结构与分配
6.1.1运行时的存储空间基本结构
6.1.2静态区的存储分配
6.1.3栈区的存储分配
6.1.4堆区的存储分配
6.1.5堆区空间管理
6.2过程活动记录与栈区组织结构
6.2.1过程活动记录
6.2.2活动记录的填写
6.2.3栈区组织结构——AR链
6.3运行时的变量访问环境
6.3.1可访问活动记录
6.3.2局部Display表方法
6.3.3静态链方法
6.3.4全局Display表方法和寄存器方法
6.3.5无嵌套时的AR及访问环境
6.4分程序和动态数组空间
6.4.1无动态数组时的分程序空间
6.4.2动态数组空间
练习
第7章面向语法的语义描述
7.1动作文法
7.1.1动作文法定义
7.1.2动作文法的递归实现
7.1.3动作文法的LL实现
7.1.4动作文法的LR实现
7.2动作文法应用
7.2.1用动作文法描述表达式计算
7.2.2用动作文法描述表达式抽象树的构造
7.2.3用动作文法描述语句抽象树的构造
7.3抽象动作文法及其应用
7.3.1抽象变量
7.3.2抽象动作文法
7.3.3栈式LL动作文法驱动器
7.3.4抽象动作文法到栈式LL动作文法的转换
7.3.5栈式LR动作文法驱动器
7.3.6抽象动作文法到栈式LR动作文法的转换
7.4属性文法
7.4.1属性文法定义
7.4.2属性语法树和属性依赖图
7.4.3计算顺序
7.4.4属性值的计算方法
7.4.5拷贝型属性文法
7.5属性文法在编译器设计中的应用
7.5.1类型树的属性文法描述
7.5.2表达式中间代码的属性文法描述
7.5.3变量中间代码的属性文法描述
7.5.4语句中间代码的属性文法描述
7.5.5正则表达式到自动机转换的属性文法描述
7.6S-属性文法及其属性计算
7.6.1S-属性文法
7.6.2S-属性文法的递归实现
7.6.3S-属性文法的LR实现
7.7L-属性文法及其属性计算
7.7.1L-属性文法
7.7.2L-属性文法的递归实现
7.7.3L-属性文法的LR(1)实现
7.8语义分析器的自动生成系统
7.8.1YACC
7.8.2LALRGen
7.8.3Accent系统
练习
第8章中间代码生成
8.1中间代码
8.1.1中间代码的种类
8.1.2后缀式中间代码
8.1.3三地址中间代码
8.1.4抽象语法树和无环有向图
8.1.5多元式中间代码
8.1.6中间代码分量ARG结构
8.2表达式的中间代码生成
8.2.1表达式的语义信息
8.2.2表达式的中间代码
8.2.3变量的中间代码
8.2.4表达式的中间代码生成
8.2.5变量的中间代码生成
8.2.6布尔表达式的短路中间代码
8.3原子语句的中间代码生成
8.3.1输入/输出语句的中间代码生成
8.3.2goto语句和标号定位语句的中间代码生成
8.3.3return语句的中间代码生成
8.3.4赋值语句的中间代码生成
8.3.5函数(过程)调用的中间代码生成
8.4结构语句的中间代码生成
8.4.1条件语句的中间代码生成
8.4.2while语句的中间代码生成
8.4.3repeat语句的中间代码生成
8.4.4for语句的中间代码生成
8.4.5case语句的中间代码生成
8.4.6函数声明的中间代码生成
练习
第9章中间代码优化
9.1引言
9.1.1优化的目标和要求
9.1.2优化的必要性
9.1.3优化的内容
9.1.4局部优化和全局优化
9.1.5基本块和程序流图
9.2常表达式优化
9.2.1常表达式的局部优化
9.2.2基于常量定值分析的常表达式全局优化
9.2.3常量定值分析
9.3公共表达式优化
9.3.1基于相似性的公共表达式局部优化
9.3.2基于值编码的公共表达式局部优化
9.3.3基于活跃代码分析的公共表达式全局优化
9.3.4活跃运算代码分析
9.4程序流图循环
9.4.1循环的基本概念
9.4.2支撑结点
9.4.3自然循环
9.4.4可归约程序流图
9.4.5基于文本的循环及其处理
9.5循环不变代码外提
9.5.1代码外提的基本概念
9.5.2循环不变代码的判定
9.5.3循环不变代码外提的条件
9.5.4基于文本循环和定值表的不变代码外提
9.5.5一种简单的外提优化方案
9.5.6别名分析
9.5.7过程与函数的副作用分析
9.6循环内归纳表达式的优化
9.6.1归纳变量
9.6.2归纳变量计算的优化算法原理
练习
第10章目标代码生成
10.1目标代码
10.1.1虚拟机代码
10.1.2目标机代码
10.1.3窥孔优化
10.2临时变量
10.2.1临时变量的特点
10.2.2临时变量的存储空间
10.2.3临时变量的存储分配
10.2.4变量状态描述
10.3寄存器
10.3.1寄存器分类及其使用准则
10.3.2寄存器分配单位
10.3.3寄存器状态描述
10.3.4寄存器分配算法
10.4基于三地址中间代码的目标代码生成
10.4.1目标地址生成
10.4.2间接目标地址的转换
10.4.3表达式中间代码的目标代码生成
10.4.4赋值中间代码的目标代码生成
10.4.5其他寄存器分配法
10.4.6标号和goto语句中间代码的目标代码生成
10.4.7return中间代码的目标代码生成
10.4.8变量中间代码的目标代码生成
10.4.9函数调用中间代码的目标代码生成
10.5基于AST的代码生成
10.5.1三地址中间代码到AST的转换
10.5.2标记需用寄存器个数
10.5.3从带寄存器个数标记的AST生成代码
10.6基于DAG的代码生成
10.6.1从AST到DAG的转换
10.6.2DAG排序和虚寄存器
10.6.3从带序号和虚寄存器标记的DAG生成代码
10.7代码生成器的自动生成
10.7.1代码生成器的自动化
10.7.2基于指令模板匹配的代码生成技术
10.7.3基于语法分析的代码生成技术
练习
第11章对象式语言的实现
11.1引言
11.2SOOL语法
11.2.1程序
11.2.2分程序
11.2.3类声明
11.2.4类型
11.2.5变量声明
11.2.6函数声明和方法声明
11.2.7语句
11.2.8变量
11.2.9表达式
11.2.10程序示例
11.3SOOL语义
11.3.1声明的作用域
11.3.2Class声明的语义
11.3.3语句的语义
11.4SOOL语义分析
11.4.1标识符的符号表项
11.4.2符号表结构
11.4.3符号表的局部化
11.5SOOL目标代码
11.5.1对象空间
11.5.2当前对象——self
11.5.3活动记录
11.5.4成员变量的目标地址
11.5.5表达式的目标代码
11.5.6Offset原理
11.5.7类的多态性
11.5.8目标代码区
11.5.9方法的动态绑定
11.5.10快速动态绑定目标代码
主要参考文献

E. 求c语言程序设计第三版和c语言程序设计实验与习题指导答案

c语言程序设计第三版指导答案

附录F课后题参考答案
习题1
1.1填空题
1.函数
2.主函数main();主函数main()3.主函数main()4.函数首部;函数体5.{;}
6.顺序结构;选择结构;循环结构7..c;.obj;.exe
1.2思考题
1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构
2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。
3.略4.略5.略1.3编程题1.答:
#include"stdio.h"main()
{floata=10,b=20,h=5,s;s=(a+b)*h/2;
printf("s=%f",s);}
2.答:
#include"stdio.h"
main()
{printf("******************************");printf("*helloworld*");printf("******************************");}
习题2
2.1单选题
DBDCADCABBCA
2.2填空题
1.2.000000

2.1;0.500000
3.9;24.65.100;d6.(1)20
(2)0

(3)607.(1)10;6;4
(2)6;9;15
(3)3;60;83
8.55或'7'
9.x=4;y=6;z=3;m=463
2.3改错题(略)
习题3
3.1单选题
BDABCADCACBBA
3.2填空题
1.32.2613.10
4.2,1;互换a,b的值5.6.66.0037.7
8.5.0,4,c=3<Enter>
9.i=10,j=20<Enter>
10.(1)65(2)65,A(3)3.14,123.46
(4)3.141600e+000,1.234560e+002(5)8765.432100(6)8.765432e+003
11.a=2b=5x=8.8y=76.34c1=65c2=9712.%d/%d;%d/%d=%.2f
3.3改错题(略)3.4编程题
1.答:
#include"stdio.h"main(){
intx,y;
scanf("%d%d",&x,&y);printf(" x y ");
printf("十进制数 %d %d ",x,y);printf("八进制数 %o %o ",x,y);printf("十六进制数 %X %x ",x,y);}
2.答:
#include"stdio.h"main(){
charch;
printf("请输入一个大写英文字母");scanf("%c",&ch);
printf("大写英文字母是%c ",ch);printf("它的前导字符是%c ",ch-1);printf("它的后续字符是%c ",ch+1);}
3.答:
#include"stdio.h"main(){
intx,a,b,c,y;
printf("请输入一个三位整数 ");scanf("%d",&x);a=x/100;
b=(x-a*100)/10;c=x%10;
y=c*100+b*10+a;
printf("反向输出该整数:%d ",y);}}
4.答:
#include"stdio.h"main()
{inthour;
doublesalary,salaryday;
scanf("%d,%lf",&hour,&salaryday);
salary=hour*salaryday-hour*salaryday*0.1;
printf("%8.2lf ",salary);}
5.答:
#include"stdio.h"main(){
inta,b,c,t;
printf("请输入三个整数 ");scanf("%d%d%d",&a,&b,&c);
printf("交换前a=%d,b=%d,c=%d ",a,b,c);t=a;a=c;c=b;b=t;
printf("交换后a=%d,b=%d,c=%d ",a,b,c);}
习题4
4.1单选题
BADDDACBBBBA
4.2填空题
1.1
2.(1)a>0||b>0
(2)x>0&&x<=10(3)a==1.5&&b==1.5&&c==1.5
(4)p<a||p<b||p<c
3.(1)0(2)1(3)1(4)0(5)1
4.c=15.-46.17.5,0,38.59.123
10.(cvb=='y'||cvb=='Y')&&(work>=3||college=='y'||college=='Y')&&age<=35
4.3改错题(略)4.4编程题
1.答
#include"stdio.h"
#include"math.h"main(){
doublea,b,c,p,area;
scanf("%lf%lf%lf",&a,&b,&c);
printf("三角形的三边为:%.llf,%.1lf,%.1lf ",a,b,c);if(a+b>c&&a+c>b&&b+c>a){p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("三角形的面积为%.2lf ",area);}else
printf("不能构成三角形 ");}
2.答:
#include"stdio.h"main()
{intx,y;
scanf("%d,%d",&x,&y);if(x*x+y*y>1000)
printf("%d ",(x*x+y*y)/100);else
printf("%d ",x+y);}
3.答:
#include"stdio.h"#include"math.h"main()
{doublex,y;
scanf("%lf",&x);if(x<-2)y=x*x-sin(x);elseif(x<=2)y=pow(2,x)+x;elsey=sqrt(x*x+x+1);
printf("x=%.2lfy=%.2lf ",x,y);}
4.答:
#include"stdio.h"main()
{longge,shi,qian,wan,x;scanf("%ld",&x);wan=x/10000;
qian=x%10000/1000;shi=x%100/10;
ge=x%10;
if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/printf("thisnumberisahuiwen ");else
printf("thisnumberisnotahuiwen ");
}
5.答:
#include"stdio.h"main()
{floatp,w,s,d,f;
scanf("%f,%,%f",p,s,w);if(s>3000)d=0.15elseif(s>=2000)d=0.1;elseif(s>=1000)d=0.08;elseif(s>=500)d=0.05;elseif(s>=250)d=0.02;elsed=0f=p*w*s*(1-d);printf("%f",f);}
6.答:
#include"stdio.h"main()
{intyear,money;charx;
printf("是否是本公司产品(y/n):");scanf("%c",&x);
if(x=='y'||x=='Y')
{printf("产品使用的年限:");scanf("%d",&year);
if(year<=1)money=0;
elseif(year<8)money=50;elsemoney=100;

printf("产品保修额是:%d ",money);
}
else
{money=200;
printf("不是本公司产品,产品保修额是:%d ",money);}}
7.答:
#include"stdio.h"main()
{intmoney,num1,num2;
printf("请输入取款额(≤2000):");scanf("%d",&money);
if(money>2000)printf("请输入取款额数≤2000! ");elseif(money%50==0){num1=money/100;num2=(money-num1*100)/50;printf("需支付100元:%d张 ",num1);printf("需支付50元:%d张 ",num2);}elseprintf("输入钱数必须是50的倍数! ");}
习题5
5.1单选题
CDABAABDDBDBCB
5.2填空题
1.202.333
3.(1)i<10或i<=9(2)j%3!=0
4.(1)flag*(float)k/(k+1)或1.0*flag*k/(k+1)(2)flag=-flag5.(1)max=x


(2)x!=-1(3)scanf("%d",&x)
6.(1)x<=9或x<10
(2)y=9-x
5.3改错题(略)5.4编程题
1.答:
(1)for循环,其他略
#include"stdio.h"
main()
{inti,s=0;
for(i=1;i<=100;i++)s+=i*i;
printf("%d ",s);}
(2)for循环,其他略
#include"stdio.h"main()
{inti=1,p=1;doubles=1;do{
s+=1.0/p;p*=++i;
}while(1.0/p>1e-6);printf("%lf",s);}
2.答:
#include"stdio.h"main()
{intm,n,t,a,b;
scanf("%d,%d",&m,&n)if(m<n)
{t=mm=nn=t}a=m;b=n;t=m%nwhile(t)
{m=nn=tt=m%n;}printf("%d",n);}
3.答:
#include"stdio.h"main()
{intx,y,s=1;
scanf("%d,%d",&x,&y)for(y>0y--)s*=x
printf("%d,%d,%d ",s%10,s/10%10,s/100%10);}
4.答:
#include"stdio.h"main()
{intx,y,z;
for(x=1x<20x++)for(y=1y<33y++){z=100-x-y
if((z%3)==0&&(5*x+3*y+z/3)==100)printf("x=%d,y=%d,z=%d ",x,y,z)}}
5.答:(a)
#include"stdio.h"main()
{intj,k
for(j=1j<=4j++)
{for(k=1;k<=4-j;k++)printf("");printf("****")printf(" ")}}
(b)
#include"stdio.h"main()
{intj,k
for(j=1j<=4j++)
{for(k=1;k<=4-j;k++)printf("");for(k=1k<=2*j-1k++)printf("*")printf(" ")}}
6.答:
程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。
#include<stdio.h>main(){inti,j,k,n;printf("waterflower'numberis:");for(n=100;n<1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出个位*/if(n==i*i*i+j*j*j+k*k*k){printf("%-5d",n);}}printf(" ");}
7.答:
#include<stdio.h>main(){intx;for(x=1000;x>=3;x--)if(x%3==1&&x%5==2&&x%7==3){
printf("该校的学生人数是:%d人 ",x);break;}}
8.答:
#include<stdio.h>main(){intx=12,i=1;while(1)
{if((x+20+i)==2*(x+i))break;i++;}printf("小明母亲在%d年后比小明的年龄大一倍 ",i);printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁 ",x+i,x+20+i);}
习题6
6.1单选题
DBCCBBDC
C语言程序设计教程(第3版)
278
6.2填空题
1.c2.603.1000104.16
6.3编程题
1.答:
#include"stdio.h"#include"math.h"
#defineF(a)a*a+sqrt(3*a*a+2*a+1)main()
{floatx,f;
scanf("%f",&x);
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x)printf("%f ",f);}
习题7
7.1单选题
BCADACCCDABCBDB
7.2填空题
1.(1)2345(2)10010(3)QuickC

(4)1000001000001000001000001(5)Language
(6)LanguageProgramming2.(1)j+=2(2)a[i]>a[j]3.(1)i=1(2)x[i-1]
7.3改错题(略)7.4编程题
1.答:
#defineN10
#include"stdio.h"main()
{inta[N]={1,2,3,4,5,6,7,8,9,10,osum=0,qsum=0,j;for(j=0;j<10;j++)
if(j%2)qsum+=a[j];
elseosum+=a[j];
printf("osum=%d,qsum=%d ",osum,qsum);}
2.答:
#defineN10
#include"stdio.h"main()
{inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;scanf("%d",&x);for(j=0;j<N;j++)
if(x<a[j])break;if(j==N)a[N-1]=x;else
{for(k=N-1;k>j;k--)a[k]=a[k-1];a[j]=x;}
for(j=0;j<N;j++)
printf("%d",a[j]);}
3.答:
#defineM3
#include"stdio.h"main()
{inta[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;for(j=0;j<M;j++)
for(k=0;k<M;k++)if(a[j][k]!=a[k][j]){flag=0;break;}if(flag)printf("ok");elseprintf("NO");}
4.答:
#include"stdio.h"#include"string.h"main()
{charc1[10],c2[10],j;gets(c1);gets(c2);
for(j=0;(c1[j]==c2[j])&&c1[j]&&c2[j];j++);if(c1[j]>c2[j])printf("%d ",1);if(c1[j]<c2[j])printf("%d ",-1);if(c1[j]==c2[j])printf("%d ",0);}
5.答:
#include"stdio.h"#include"string.h"#defineM3#defineN80main()
{chara[M][N],j,k,n[5]={0};for(j=0;j<M;j++)gets(a[j]);
for(j=0;j<M;j++)
for(k=0;a[j][k];k++)
if(a[j][k]>='A'&&a[j][k]<='Z')n[0]++;
elseif(a[j][k]>='a'&&a[j][k]<='z')n[1]++;elseif(a[j][k]>='0'&&a[j][k]<='9')n[2]++;elseif(a[j][k]=='')n[3]++;elsen[4]++;
for(j=0;j<5;j++)printf("%4d",n[j]);}
习题8
8.1单选题
DBDACBACCC
8.2填空题
1.(1)2,1(2)10#30#(3)FOUR,P(4)60
2.(1)49
(2)2
(3)2

(4)

(5)
8.3改错题(略)8.4编程题
1.答:
#include"stdio.h"
main()
{intn1,n2,n3,t;int*p1,*p2,*p3;
printf("pleaseinput3number:n1,n2,n3:");scanf("%d,%d,%d",&n1,&n2,&n3);p1=&n1;
p2=&n2;p3=&n3;
if(*p1>*p2){t=*p1;*p1=*p2;*p2=t;}
if(*p1>*p3){t=*p1;*p1=*p3;*p3=t;}if(*p2>*p3){t=*p2;*p2=*p3;*p3=t;}
printf("thesortednumbersare:%d,%d,%d ",n1,n2,n3);}
2.答:
#include"stdio.h"#defineN3main()
{inta[N],*p=a;for(;p-a<N;p++)scanf("%d",p);p=a+N-1;
for(;p-a>=0;p--)printf("%d",*p);}
3.答:
#include"stdio.h"main()
{inta[10];
intj,minl=0,maxl=0;for(j=0;j<10;j++)
scanf("%d",a+j);for(j=0;j<10;j++)
{if(a[maxl]<*(a+j))maxl=j;if(a[minl]>*(a+j))minl=j;}
j=a[0];a[0]=a[minl];a[minl]=j;j=a[9];a[9]=a[maxl];a[maxl]=j;for(j=0;j<10;j++)printf("%d",*(a+j));}
4.答:
输入阵列如下:123456789101112输出阵列如下:
121110987654321
#defineM3
#defineN4
#include"stdio.h"main()
{inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=&a[0][0],t;for(k=0,j=M*N-1;k<j;k++,j--)
{t=*(p+k);*(p+k)=*(p+j);*(p+j)=t;}for(k=0k<Mk++){for(j=0j<Nj++)
printf("%4d",a[k][j]);printf(" ");
}}
5.答:
#include"stdio.h"main(){
intlen;
charstr[20],*p=str;
printf("pleaseinputastring: ");scanf("%s",str);len=0;
while(*p!=''){
len++;p++;}
printf("thestringhas%dcharacters. ",len);}
6.答:
#include"string.h"#include"stdio.h"main(){
char*str1[5],ch[5][20],k,t,j,*c;voidsort(char**);for(k=0;k<5;k++){str1[k]=ch[k];gets(str1[k]);}for(k=0;k<7;k++)
{t=k;
for(j=k+1;j<5;j++)if(strcmp(*(str1+t),*(str1+j))>0)t=j;c=*(str1+t);
*(str1+t)=*(str1+k)*(str1+k)=c}
for(k=0;k<5;k++)puts(str1[k]);}
习题9
9.1单选题
CBBADDBCCDDCABCBCCBADCDAB
9.2填空题
1.1202.x3.3,2,2,34.fac/i5.8,176.97.1.0/(i*i)8.
fun-in:30,20,10fun-end:1015,35,105010,20,309.01234510.9363611.(1)r+b[k](2)*x
12.7531913.15
14.(1)*x(2)t15.(1)''(2)n++16.024
9.3改错题(略)9.4编程题
1.答:
voidzhuan()
{charch;
while((ch=getchar())!=' ')
{if(ch>='a'&&ch<='z')ch=ch-32;putchar(ch);}}
2.答:
doubleexpp(intn){intk,fac=1;doublesum=1;
for(k=1;k<=n;k++){fac*=k;
sum+=1.0/fac}
return(sum);}
3.答:
intxy3(intx,inty)
{intk,num=1;
for(k=1;k<=yk++)num*=x
num=num%1000returnnum}
4.答:
intage(intn){intc;
if(n==1)c=10
elsec=age(n-1)+2returnc}
5.答:
#include"stdio.h"
main()
{inta,b,c,d;
voidfun(inta,intb,int*c,int*d);scanf("%d%d",&a,&b);fun(a,b,&c,&d);
printf("%d%d",c,d);
}
voidfun(inta,intb,int*c,int*d){if(b)
{*c=a/b;*d=a%b;}}
6.答:
#include"stdio.h"
main(intargc,char*argv[]){intk;
printf("argc=%d ",argc);for(k=1;k<argc;k++)printf("%s ",argv[k]);}
习题10
10.1单选题
CDBBBBBBADCCBDC
10.2填空题
1.所有结构体成员所占存储空间的总和2.与占用存储空间最大的那个成员相等
附录F课后题参考答案

285
3.(1)structsatype(2)3(3)sa.a(4)9(5)psa=&sa4.805.structnode6.0
10.3编程题
1.答:
#include"stdio.h"
structstudent{
longnum;
charname[20];charsex;floatscore;};main()
{structstudents[20],temp;intj,k,man=0,woman=0;
floatsumman=0,sumwoman=0,aveman,avewoman;for(k=0;k<20;k++)
{scanf("%ld%s%c%f",&s[k].num,s[k].name,&s[k].sex,&s[k].score);if(s[k].sex=='m')
{summan+=s[k].score;man++;}else
{sumwoman+=s[k].score;woman++}}
aveman=summan/man;
avewoman=sumwoman/woman;
printf("%d %f %d %f ",man,aveman,woman,avewoman);for(k=0;k<19;k++)
for(j=0;j<20-k;j++)
if(s[j].score<s[j+1].score)
{temp=s[j];s[j]=s[j+1];s[j+1]=temp;}printf("thesortednumbers: ");for(k=0;k<20;k++)
printf("%ld %s %c %5.1f ",s[k].num,s[k].name,s[k].sex,s[k].score);}
习题11
11.1单选题
BADD
11.2填空题
1.3d3d3302.(1)28
(2)20(3)0(4)--9
3.(1)251
(2)42
(3)209
(4)–295(5)848
习题12
12.1单选题
BCDCAADA
12.2填空题
1.rewind(文件指针)2."d1.dat","rb"3.stdin
4.文本文件;二进制文件5.(1)"w"
(2)str[i]--32

(3)"r"
6.fopen7.Hello8.(1)"r"

(2)fgetc(fp)

(3)time++


C语言程序设计实验与习题指导课后程序设计答案
P18
(1)
#include<stdio.h>intmain(void){intcelsius,fahr;fahr=150;celsius=5*fahr/9-5*32/9;printf("fahr=%d,celsius=%d ",fahr,celsius);return0;}
(2)
#include<stdio.h>intmain(void){intcelsius,fahr;celsius=26;fahr=9*celsius/5+32;printf("celsius=%d,fahr=%d ",celsius,fahr);return0;}
(3)
#include<stdio.h>intmain(void){intaverage,math,eng,comp;math=87;eng=72;comp=93;average=(math+eng+comp)/3;printf("math=%d,eng=%d,comp=%d,average=%d ",math,eng,comp,average);return0;}
(4)
#include<stdio.h>intmain(void){intn,a,b,c;n=152
c=n%10;
b=(n/10)%10;a=n/100;
printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d ",n,c,b,a);return0;
}
P27
(1)
#include<stdio.h>#include<math.h>intmain(void){intcelsius,fahr;printf("Entercelsius:");scanf("%d",&celsius);fahr=9*celsius/5+32;printf("fahr%d ",fahr);return0;}
(2)
#include<stdio.h>#include<math.h>intmain(void){intmoney,year;doublerate,interest;printf("Entermoney,year,rate:");scanf("%d%d%lf",&money,&year,&rate);interest=money*pow(1+rate,year)-money;printf("interest=%.2f ",interest);return0;}
(3)
#include<stdio.h>#include<math.h>intmain(void){doublex,y;printf("Enterx:");scanf("%lf",&x);
if(x<0){y=pow(x+1,2)+2*x+1/x;}else{y=sqrt(x);}
printf("y=f(%f)=%.2f ",x,y);return0;
}
(4)
#include<stdio.h>intmain(void){intx,y;printf("Enternum1:");scanf("%d",&x);printf("Enternum2:");scanf("%d",&y);printf("%d+%d=%d ",x,y,x+y);printf("%d-%d=%d ",x,y,x-y);printf("%d*%d=%d ",x,y,x*y);printf("%d/%d=%d ",x,y,x/y);printf("%d%%%d=%d ",x,y,x%y);return0;}
10的阶乘
#include<stdio.h>intmain(void){inti,n,proct;printf("Entern:");scanf("%d",&n);proct=1;for(i=1;i<=n;i++){proct=proct*i;}printf("proct=%d ",proct);return0;}

F. 急需程序设计语言编译原理(第3版)国防工业出版社 陈火旺 的习题解析

DOC文件下载地址:http://www.teach.ustc.e.cn/jxcg/sj/sj15/zj.doc

购买网页:http://www.maihaoshu.com/cate/855.htm

更多此书信息:http://www..com/s?tn=sitehao123&ie=gb2312&bs=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6&sr=&z=&cl=3&f=8&wd=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6%B9%FA%B7%C0%B9%A4%D2%B5%B3%F6%B0%E6%C9%E7&ct=0

G. 现代编译原理c语言描述 这本书有答案吗

新手的话建议可以看看谭浩强的C程序设计,基本语法会了,可以看下数据结构和算法,接下来看计算机组成原理-->编译原理-->操作系统-->计算机网络。这些学好了,可以深入研究算法,另外可以看点计算机图形学和人工智能。程序最核心的是算法,所以数学基础要好,不能只能做一辈子码奴。其次英语要好,只要能看懂一般的英文文档就OK了。给你介绍一些书。1、算法计算机程序设计艺术-------Donald.E.Knuth----------算法“倚天屠龙”双剑算法导论-----------------ThomasH.Cormen--------算法“倚天屠龙”双剑离散数学及其应用----------KennethH.Rosen具体数学—计算机科学基础--------Donald.E.Knuth2、数据结构数据结构C++数据结构算法与应用3、C语言C程序设计语言(第2版·新版)---C语言“倚天屠龙双剑”---BrianW.Kernighan“C语言之父”CPrimerPlus中文版(第五版)--------C语言“倚天屠龙双剑”---StephenPrataC程序设计(第三版)---------------------------谭浩强C语言大全(第四版)---------------------------HERBERTSCHILDTC语言接口与实现:创建可重用软件的技术-------------DAVIDR.HANSONC语言参考手册(原书第5版)--------------------------SamuelP.HarbisonC程序设计教程---------------------------------H.M.Deitel/P.J.DeitelC陷阱与缺陷-----------------------------------AndrewKoenig5、C++C++程序设计语言(特别版)---c++八大金刚----BjarneStroustrup“C++之父”C++Primer(第3版)中文版----c++八大金刚---StanleyB.LippmanC++Primer(第4版)中文版----c++八大金刚---StanleyB.LippmanC++标准程序库—自修教程与参考手册--c++八大金刚--NicolaiM.JosuttisC++语言的设计和演化-----c++八大金刚----BjarneStroustrup“C++之父”深度探索C++对象模型---c++八大金刚----StanleyB.LippmanEssentialC++中文版---c++八大金刚---StanleyB.LippmanEffectiveC++中文版2ndEdition-----c++八大金刚------ScottMeyersMoreEffectiveC++中文版----c++八大金刚------ScottMeyersC++编程思想(第2版)第1卷:标准C++导引--------BruceEckelC++编程思想(第2版)第2卷:实用编程技术--------BruceEckelC++程序设计--------------------------谭浩强C++程序设计教程(第2版)--------------钱能C++PrimerPlus(第五版)中文版---StephenPrata6、操作系统深入理解计算机系统(修订版)-------RANDALE.BRYANT计算机操作系统(第六版)7、编译原理跟我一起写makefile《编译原理技术和工具》-------Alfred-------龙书《现代编译原理-C语言描述》-----------AndrewW.Appel-----------虎书《高级编译器设计与实现》-----------StevenS.Muchnick-----------鲸书8、网络计算机网络第四版中文版-----------AndrewS.Tanenbaum-------网络编程三剑客TCP/IP详解3卷本--------------------RichardStevens----网络编程三剑客UNIX网络编程2卷本--------------------RichardStevens----网络编程三剑客用TCP/IP进行网际互联-----------DouglasE.Comer高级TCP/IP编程-------------------JonC.SnaderC++网络编程-----------------------DouglasSchmidtUNIX环境高级编程(第2版)--------------------RichardStevens9、LinuxLinux内核设计与实现Linux内核完全注释LINUX内核分析及编程

H. 计算机组成原理与汇编语言程序设计第二版 答案

第一章
6.PentiumIV /1.7G/80G/16XDVD/256M/19’’液晶/56KMODEM
WINDOS2000
第二章
1.(101010.01)2=(42.25)10 =(2A.4)BCD
2.(37.2)8=(31.25)10=(1F.4)(AC.E)
3..(AC.E)16=(172。875)10
4.(75。34)10=(1001011.0)2=(113.125)8=(8E.06)16
5.两种做法:1.先将十进制数转换成二进制数再计算
2.先计算,结果再转换成二进制数。结果为0.0001101
6.(1)原码为00000000补码为00000000
(2)原码为10000000补码为00000000
(3)原码为0.1010000补码为0.1010000
(4)原码为1.1010000补码为1.0110000
(5)原码为00001010补码为00001010
(6)原码为10001010补码为11110110
7.X原=0.1010 X=+0.1010
8.X原=1.0110 X=-0.0110
9.(1)0.000…01
(2)0.11…11
(3)1.00…01
(
4)1.11…11
10.(1)0.00….01
(2)0.11…11
(3)1.11…11
(4)1.00…01
11.参照教材37页的表格公式,注意阶码部分连同阶符的位数以及尾数连同符号的位数
12.参照教材37—38页,
13.使用隐地址
14.采用寄存器寻址
15.(1)1200H
(2)1002H
(3)1200H 1200H

(4)F03H

第三章
3.(1)正溢 01,100000
(2)无 00,111111
(3)无11,100000
(4)负溢 10,100000
4.[X]补—[Y]补=[X]补+[Y]补+1
无 00,000110
(1) 正溢01,100000
(2) 无 11,101111
(3) 无 00,110011
5. 11,00;11,110011
6.(1)0110101
(2)11000011
(3)01011010
7.(1)0011;1000
(2)0011;1001
(3)1010;0000
12.以下所有题的取指过程都是一样的
FT0 PC → MAR
FT1 M → MDR→IR ,PC+1→ PC
(2)FT0:PC→MAR
FT1:M → MDR →IR,PC+1 → PC
ST0:PC → MAR ,PC+1→ PC
ST1:M→ MDR → C
ET0:C → R1
(5)FT0:PC →MAR
FT1:M → MDR → IR,PC+1 → PC
ST0:PC → MAR
ST1:M →MDR → C,PC+1→ PC
DT0:R0→ MAR
ET0:C →MDR
ET1:MDR → M
其余小题参照97—101页的内容,寻址方式不同,各个执行周期也不相同。
13.(2)FT0:PC → MAR
FT1:M→ MDR → IR ,PC+1 → PC
ST0:PC → MAR
ST1:M→ MDR →C,PC+1 → PC
DT0:R1 → MAR
DT1:M→ MDR →D
DT2:R1+1 → Z
DT3:Z → R1
14.(3)FT0:PC →MAR
FT1:M → MDR → IR,PC+1 → PC
ET0:PC →MAR
ET1:M →MDR → D
ET2:D+PC → Z
ET3:Z →PC
第四章
3.该题进行计算时采用变形补码比较方便,可以顺便判断OF位。此题可以上机验证。
4.画图时存储器中地址从上到下是按由低向高排列

002B0H→53H
002B1H→2CH
002B2H→
002B3N→OEH
002B4H→1FH
7.(1)0007H
(2)3400H
8.0562H
9.物理地址1E2C:0062 SP的初始值为64H SP的初始值指向的物理地址是1E324H
10.(SP)=3CH
11.(SP)=5EH
13.(1)对(2)对(3)错 (4)对 (5)错 (6)对 (7)对 (8)错 (9)错
(10)错 (11)对 (12)对
分析错误的原因
14.CF=1 AF=1 ZF=0 SF=0 OF=0 (AL)=15H
15.(1)(CL)=(09226H)=F6H
(2)(1E4F6)=5678H
(3)(BX)=0056H、(AX)=1E40H
(4)(SI)=00F6H、(DS)=1E40H、(1E4F6)=0024H
(5)(0026H)=5678H、(CX)=00F6H、(09226H)=1234H、(AX)=5678H
6.MOV AX,[02C0]
MOV AX,0020H[SI]
MOV AX,[BP]
MOV AX,80H[DI][BX]
试试看,你还能写出几种。
17.(SI)=12484H、(AX)=6156H
18.(AX)=81C6H 、CF=1
19.(AX)=F8E0H、CF=1
20.(AX)=1236H、(BX)=0001H
21.(AX)=0001H
22.(BX)=0012H、ZF=0、CF=1
23.(AX)=FBABH
24.(AX)=0000H、CF=0
25.(AH)=0001H、(AL)=0101H 、CF=1
26.(SI)=0102H、(AL)=A5H
28.(1)program1:
LAFH
OR AH,80H
SAHF
Program2:
PUSHF
POP AX
AND AX,立即数
PUSH AX
POPF
(2)program1:
MOV CL,04H
ROL AL,CL
Program2:
MOV CL,04H
ROR AL,CL
(3)MOV SI,A
MOV BX,B
LEA AX[SI][BX]
(4)MOV CL,2
SHR AX,CL
MOV BX,DX
AND BX,0003H
MOV CL,OEH
SHL BX,CL
OR AX,BX
MOV CL,2
SHR DX,CL
(5)OR CX,0001
(6)XOR AX,OAH
(7)NOT AX
XOR BX,AX
第五章
1.(1)错(2)对(3)错(4)错(5)错(6)对(7)错(8)错
2.(1)(5)(6)(7)(8)(9)
3.(AL)=3, (Bx)=33H
4.(AX)=1234H, (BX)=34H
5.(SI)=7812H, (DS)=0CD56H
6.SI,S2的偏移量分别为30H,38H。CONT的值为8,S2+5字节单元的内容为43H
7.00H, FFFFH, FFH
8.0000H, 5550H
9.00AAH, FFFEH, FF54H用补码表示
10.前两问的答案
DX:008H,0007H,0006H, 0006H, 0005H, 0004H, 0000H共六个
AX:4567D, 456D, 45D,4D, 0000D, 注意进制
11.(AX)=56D4H, (BX)=ADA8H, CF=0
12.01H, D1H,C1H
13.‘A’‘B’‘C’‘D’‘E’‘F’‘G’‘H’‘I
14.0014H, 0007H
15.PUSH AX
POP DX
16.ORG 0020H
17.参照教材156页
18.第一个不同字符的位置,5。
19.地址由低到高依次为:00H,02H,04H,06H,08H。0AH,0CH,0EH ,10H…
20.(1)INC DX
(2)DEC DX
21.5, 24H
22.6, 1CH
23.0308H,0008H,000CH
24.(1)XOR AH,AL
(2)JE ZERO
25.ADD AH,1
ADC AX,1
31.(1)计算AL中的十进制数的二进制表示
(2)24H
32.(1)是0——9的数字或大写字母00——2F,
(2)输入为‘*’

I. 急急急,编译原理

using namespace std;

struct BiNode
{
char data;
BiNode *lchild, *rchild;
};
typedef BiNode *BiTree;

int CreateBiTree(BiTree &T, const char *s1, const char *s2, int len)
{
if (len<=0)
{
T = NULL;
return 1;
}
else
{
T = new BiNode;
T->data = *s1;
int i;
for ( i=0; i<len; i++) if (s2[i]==*s1) break;
CreateBiTree(T->lchild, s1+1, s2, i);
CreateBiTree(T->rchild, s1+i+1, s2+i+1, len-(i+1));
}
return 1;
}

int DestroyBiTree(BiTree &T)
{
if (T==NULL) return 1;
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
delete T;
T = NULL;
return 1;
}

int ATraverse(BiTree &T)
{
if (T==NULL) return 1;
ATraverse(T->lchild);
ATraverse(T->rchild);
cout<<T->data;
return 1;
}

main()
{
char a[2000],b[2000];
while(cin>>a>>b)
{
BiTree T;
int count=0;
int n;
for(n=0;a[n]!='\0';n++);
CreateBiTree(T,a,b,n);
ATraverse(T);
cout<<" ";

cout<<endl;
DestroyBiTree(T);

热点内容
股票涨的算法 发布:2024-05-07 01:59:22 浏览:21
安卓手机如何关闭英文拼写 发布:2024-05-07 01:45:46 浏览:296
光介质存储 发布:2024-05-07 01:32:25 浏览:350
苹果平板ipad密码忘了怎么办 发布:2024-05-07 01:17:16 浏览:704
伏吟的算法 发布:2024-05-07 00:51:48 浏览:830
安卓手机上的照相键在哪里 发布:2024-05-07 00:51:45 浏览:606
ftp如何删除顽固文件 发布:2024-05-07 00:50:57 浏览:251
idea文件夹显示 发布:2024-05-07 00:30:04 浏览:250
怎么把ps存储为ai 发布:2024-05-07 00:30:03 浏览:274
参数内存缓存 发布:2024-05-07 00:28:54 浏览:747