當前位置:首頁 » 編程軟體 » 程序設計語言編譯原理答案

程序設計語言編譯原理答案

發布時間: 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-04-26 20:44:00 瀏覽:227
存儲念第幾音 發布:2024-04-26 20:33:35 瀏覽:250
衡陽dns的伺服器地址是多少 發布:2024-04-26 20:32:26 瀏覽:269
我的世界空島伺服器青金石 發布:2024-04-26 20:18:03 瀏覽:650
微信小程序演算法 發布:2024-04-26 20:03:36 瀏覽:975
易語言模板不能靜態編譯 發布:2024-04-26 19:59:02 瀏覽:353
sql注釋語句 發布:2024-04-26 19:58:48 瀏覽:654
sql存儲過程out 發布:2024-04-26 19:33:15 瀏覽:415
struts2訪問方法 發布:2024-04-26 19:11:36 瀏覽:259
外文翻譯android 發布:2024-04-26 19:03:30 瀏覽:92