第一篇:C語(yǔ)言程序設(shè)計(jì)教程第九章習(xí)題答案
1、li
300.0 chang 30
200.0 chang
2、#include
char sid[100];
char name[100];
float score[3];}student;void main(){
int i;float j;
printf(“nPlease input sid:
”);
scanf(“%s”,student.sid);
printf(“nPlease input name: ”);
scanf(“%s”,student.name);
printf(“nPlease input 3 score:(like1,1,1)”);/*輸入逗號(hào)隔開(kāi)*/
scanf(“%f,%f,%f”,&student.score[0],&student.score[1],&student.score[2]);
printf(“nsid = %s”,student.sid);
printf(“nname = %s”,student.name);
j=(student.score[0]+student.score[1]+student.score[2])/3.0;
printf(“naverage = %.2f”,j);
getch();}
3、#include
do {
n++;
printf(“nnPlease input %d student message:
nn”,n);
printf(“t%d student sid:
”,n);
p1=(student *)malloc(F);p1->next=NULL;
scanf(“%s”,p1->sid);
printf(“nt%d student name:
”,n);
scanf(“%s”,p1->name);
printf(“nt%d student scores(englesh,math,c_language):
”,n);
scanf(“%d,%d,%d”,&p1->score.english,&p1->score.math,&p1->score.c_language);
p1->score.all=p1->score.english+p1->score.math+p1->score.c_language;
if(n==1)
{ head->next=p1;p2=p1;}
else
{ p2->next=p1;
p2=p1;
}
printf(“nntttContinue or back(press y/n):
”);
ch=getch();
}while(ch=='y'||ch=='Y');return head;} void average1(student *head){ student *p;int j;clrscr();p=head->next;
while(p)
{ j=p->score.all/3;
printf(“nnname:
%staverage: %d”,p->name,j);
p=p->next;
} printf(“nnnPress eny key return.”);getch();} void average2(student *head){ student *p;int n=0,temp1=0,temp2=0,temp3=0;p=head->next;while(p){ temp1+=p->score.english;
temp2+=p->score.math;
temp3+=p->score.c_language;
p=p->next;n++;} printf(“nnaverage english is : %dnaverage math is : %dnaverage c_language is : %dt”,temp1/n,temp2/n,temp3/n);} student *sort(student *head){ student *head1,*p,*q,*r;int temp1=0,temp2=0,temp3=0,temp4;char s[15],n[15];head1=head;for(p=head1->next;p->next!=NULL;p=p->next){ r=p;
for(q=p->next;q;q=q->next)
if(q->score.all>r->score.all)
r=q;
if(r!=p)
{ strcpy(s,p->sid);strcpy(n,p->name);
temp1=p->score.english;
temp2=p->score.math;
temp3=p->score.c_language;
temp4=p->score.all;
strcpy(p->sid,r->sid);strcpy(p->name,r->name);
p->score.english=r->score.english;
p->score.math=r->score.math;
p->score.c_language=r->score.c_language;
p->score.all=r->score.all;
strcpy(r->sid,s);strcpy(r->name,n);
r->score.english=temp1;
r->score.math=temp2;
r->score.c_language=temp3;
r->score.all=temp4;
} } return head1;} void output(student *head){ student *head2,*p;int i=1;clrscr();head2=sort(head);for(p=head2->next;p!=NULL;p=p->next)
printf(“nnname: %stsid: %stenglish: %dtmath: %dtc_language: %dtaverage: %dtmingci: %d”,p->name,p->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++);
average2(head);
printf(“nnnttPress eny key back.”);getch();} void main(){ student *head,*p1,*p2;int i=0,j=1;head=input();do {
clrscr();
printf(“nn(1): average1.nn(2): average2.nn(3): sort.nn(4): output.nnn
Please choose:
”);
scanf(“%d”,&i);
switch(i)
{ case 1: average1(head);break;
case 2: clrscr();average2(head);printf(“nnnPress eny key retuen.”);getch();break;
case 3: clrscr();p1=sort(head);for(p2=p1->next;p2!=NULL;p2=p2->next)printf(“nttname: %stmingci:%d”,p2->name,j++);printf(“nnnPress eny key back.”);getch();break;
case 4: output(head);break;
default: printf(“nYour choose is not right.”);break;
} }while(i!=-1);}
4、#include
p=(worker *)malloc(F);p->next=0;
printf(“nntPlease input %d worker message :
”,n);
printf(“n%d worker sid:
”,n);scanf(“%s”,p->sid);
printf(“n%d worker name:
”,n);scanf(“%s”,p->name);
printf(“n%d worker money:
”,n);scanf(“%d”,&p->money);
if(n==1)
{
head->next=p;q=p;
max=p->money;strcpy(a,p->name);
min=p->money;strcpy(b,p->name);
}
else
{
q->next=p;
if(p->money>max){max=p->money;strcpy(a,p->name);}
if(p->money
q=p;
}
printf(“ntty/n”);ch=getch();}while(ch=='y'||ch=='Y');return head;} void output(){
clrscr();printf(“nThe max money is: %dttname is: %snn”,max,a);printf(“nThe min money is: %dttname is: %s”,min,b);} void main(){
input();output();getch();} 5、6、#include“stdio.h” #define F sizeof(stu)#define NULL 0 typedef struct student { int sid;int average;struct student *next;}stu;stu *head;stu *create(){ stu *p1,*p2;int n=0;char ch;head=(stu *)malloc(F);head->next=NULL;
do {
n++;
printf(“nnPlease input %d student message:
nn”,n);
printf(“t%d student sid:
”,n);
p1=(stu *)malloc(F);p1->next=NULL;
scanf(“%d”,&p1->sid);
printf(“nt%d student average:
”,n);
scanf(“%d”,&p1->average);
if(n==1)
{ head->next=p1;p2=p1;}
else
{ p2->next=p1;
p2=p1;
}
printf(“nntttContinue or back(press y/n):
ch=getch();
}while(ch=='y'||ch=='Y');return head;} stu *select(stu *head,int x){ stu *s;s=head->next;while(s){
if(s->sid==x)
break;
s=s->next;} return s;}
stu *insert(stu *head,int x,int y){ stu *p,*r,*q;clrscr();p=head->next;r=(stu *)malloc(sizeof(stu));r->sid=x;r->average=y;if(p==NULL)/*如果插入空表*/
{
p=r;
r->next=NULL;
”);
printf(“ninsert success!”);
}
else
{ while(x>p->sid)/*找到插入的位置,按學(xué)號(hào)大小。(找到位置或者到了表尾都會(huì)跳出循環(huán))*/
{
if(p->next==NULL)break;p=p->next;
}
if(x
sid)
/*插到中間位置*/
{
r->sid=p->sid;
r->average=p->average;
p->sid=x;
p->average=y;
r->next=p->next;
p->next=r;
printf(“ninsert success!”);
}
else if(x==p->sid)/*學(xué)號(hào)不能相同*/
printf(“nError--->your input this same sid.”);
else
/*插到末尾*/
{
p->next=r;
r->next=NULL;
printf(“ninsert success!”);
}
}
return head;} stu *get(stu *head,int n)/*得到位置為n的結(jié)點(diǎn)的指針*/ { stu *p;int i;p=head->next;if(n==0)return head;else
{
for(i=1;i p=p->next; return p;} } stu *delete(stu *head,int sid){ stu *p,*q;int temp=0,i=0;p=head->next;if(!p) { printf(“nlist is empty.press eny key back.”);getch();return head;}/*表空*/ else { while(p) /*查找學(xué)號(hào)為sid的結(jié)點(diǎn)的指針*/ {i++;/*標(biāo)記學(xué)號(hào)為sid的結(jié)點(diǎn)的位置*/ if(p->sid==sid) {temp=1;break;} /*temp=1標(biāo)記找到了*/ p=p->next;} if(temp==1)/*如果有學(xué)號(hào)為sid的結(jié)點(diǎn)*/ { q=get(head,i-1);/*得到sid的前一個(gè)結(jié)點(diǎn)的指針*/ q->next=p->next; free(p); printf(“nndelete sucess!!”); return head; } else /*沒(méi)有找到*/ { printf(“nnNO this data.n”); return head; } } } void print(stu *head){ stu *p;p=head->next;if(!p){printf(“nlist is empty.press eny key back.”);getch();} while(p){ printf(“n%d :t%d ”,p->sid,p->average); p=p->next;} } main(){ stu *p1,*p2;char ch1;int n,i=0,j=0;head=create();do {clrscr();printf(“n1.insert.”);printf(“n2.select.”);printf(“n3.delect.”);printf(“n4.print list.”);printf(“n5.EXIT ”);printf(“n ............choice(1-5).............”);ch1=getch();switch(ch1){ case '1': { clrscr(); printf(“nplease input insert sid.and average(like 1,1):”); scanf(“%d,%d”,&i,&j); head=insert(head,i,j); printf(“nnnPress eny key back.”);getch(); break; } case '2': { clrscr(); printf(“ninput you want to selete sid: ”); scanf(“%d”,&n); p1=select(head,n); { if(p1)printf(“nsid:%dtaverage:%d”,p1->sid,p1->average); else printf(“nNo this data.”); } printf(“nnnPress eny key back.”);getch(); break; } case '3': { clrscr();printf(“nPlease input you want delete sid: ”); scanf(“%d”,&n); head=delete(head,n); printf(“nnnPress eny key back.”);getch(); break; } case '4': { clrscr(); printf(“All information :”); print(head); printf(“nnnPress eny key back.”);getch(); break; } case '5': return; default: printf(“nnYour enter is not right.press eny key back.”);getch();} }while(n);} 7、#include char data; struct list *next;}L;L *set_list(){ L *head,*p1,*p2; char c; int n=0; head=(L *)malloc(F);head->next=0; /*建立鏈表*/ p1=p2=head; printf(“nPlease input char(press * finish):”); scanf(“%c”,&c); while(c!='*') { n++; if(n==1) p1->data=c; else { p1=(L *)malloc(F); p1->data=c; p2->next = p1; p2 = p1; p1->next = 0; } scanf(“%c”,&c); } p1=head; while(p1) { printf(“%c ”,p1->data);p1=p1->next; } printf(“nnn”); return head;} void change_list(L *head1) /*算法:p2指向最后一個(gè)元素,p1指向第一個(gè)元素。交換他們的值,p1,p2同時(shí)往中間靠攏。*/ { L *p1,*p2,*p3; int i,j,k,n=1; char temp; p1=head1;p2=head1;p3=head1; while(p3->next) { p3=p3->next;n++; }/*求鏈長(zhǎng)*/ for(i=n;i>(n/2);i--)/*外循環(huán)使p1后移,p2前移。*/ { p2=head1;for(j=1;j p2=p2->next;/*p2指向最后一個(gè)元素*/ temp=p1->data;p1->data=p2->data;p2->data=temp;/*交換他們的值*/ p1=p1->next;/*p1向后移*/ } while(head1) { printf(“%c ”,head1->data);head1=head1->next;} } void main(){ L *head;head=set_list();change_list(head);getch();} C語(yǔ)言程序設(shè)計(jì)教程課后習(xí)題答案 第一章 C語(yǔ)言程序設(shè)計(jì)概述 -習(xí)題答案 算法的描述有哪些基本方法? 答 1、自然語(yǔ)言 2、專用工具C語(yǔ)言程序的基本結(jié)構(gòu)是怎樣的?舉一個(gè)例子說(shuō)明。 答 1、C語(yǔ)言程序由函數(shù)構(gòu)成; 2、“/*”與“*/”之間的內(nèi)容構(gòu)成C語(yǔ)言程序的注釋部分; 3、用預(yù)處理命令#include、#define可以包含有關(guān)文件或預(yù)定義信息; 4、大小寫字母在C語(yǔ)言中是有區(qū)別的; 5、除main()函數(shù)和標(biāo)準(zhǔn)庫(kù)函數(shù)外,用戶也可以自己編寫函數(shù),應(yīng)用程序一般由多個(gè)函數(shù)組成,這些函數(shù)指定實(shí)際所需要做的工作。C語(yǔ)言有什么特點(diǎn)? 答 1、具有結(jié)構(gòu)語(yǔ)言的特點(diǎn),程序之間很容易實(shí)現(xiàn)段的共享; 2、主要結(jié)構(gòu)成分為函數(shù),函數(shù)可以在程序中被定義完成獨(dú)立的任務(wù),獨(dú)立地編譯代碼,以實(shí)現(xiàn)程序的模塊化; 3、運(yùn)算符豐富,包含的范圍很廣; 4、數(shù)據(jù)類型豐富; 5、允許直接訪問(wèn)物理地址,即可直接對(duì)硬件進(jìn)行損傷,實(shí)現(xiàn)匯編語(yǔ)言的大部分功能; 6、限制不太嚴(yán)格,程序設(shè)計(jì)自由度大,這樣使C語(yǔ)言能夠減少對(duì)程序員的束縛; 7、生成的目標(biāo)代碼質(zhì)量,程序執(zhí)行效率高,同時(shí)C語(yǔ)言編寫的程序的可移植性好。★指出合法與不合法的標(biāo)識(shí)符命名。 答 AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×說(shuō)明下列Turbo C熱鍵的功能。 答 F2:源文件存盤 F10:調(diào)用主菜單 F4:程序運(yùn)行到光標(biāo)所在行(用于調(diào)試程序)Ctrl+F9:編譯并鏈接成可執(zhí)行文件 Alt+F5:將窗口切換到 DOS 下,查看程序運(yùn)行結(jié)果。說(shuō)明下列Turbo C方式下輸入并運(yùn)行下列程序,記錄下運(yùn)行結(jié)果。 ①main() {printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main() { int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是錯(cuò)誤的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答 運(yùn)行結(jié)果: ******************** welcome you very good ******************** 運(yùn)行結(jié)果: please input three numbers;3,1,4 /*左側(cè)下劃線內(nèi)容為鍵盤輸入*/ max number is:4 7 一個(gè)C程序是由若干個(gè)函數(shù)構(gòu)成的,其中有且只能有一個(gè)___函數(shù)。 答 main()8 在Turbo C環(huán)境下進(jìn)行程序調(diào)試時(shí),可以使用Run下拉菜單的___命令或按___鍵轉(zhuǎn)到用戶屏幕查看程序運(yùn)行結(jié)果。 答 1、User screen 2、Alt+F5 9 ★C語(yǔ)言對(duì)標(biāo)識(shí)符與關(guān)鍵字有些什么規(guī)定? 答 1、標(biāo)識(shí)符用來(lái)表示函數(shù)、類型及變量的名稱,它是由字母、下劃線和數(shù)字組成,但必須用字母或下劃線開(kāi)頭。 2、關(guān)鍵字是一種語(yǔ)言中規(guī)定具有特定含義的標(biāo)識(shí)符,其不能作為變量或函數(shù)名來(lái)使用,用戶只能根據(jù)系統(tǒng)的規(guī)定使用它們。C源程序輸入后是如何進(jìn)行保存的? 答 是以C為擴(kuò)展名保存的純文本文件。 第二章 C語(yǔ)言程序的基本數(shù)據(jù)類型與表達(dá)式 -習(xí)題答案 ★指出下列常數(shù)中哪些是符合C語(yǔ)法規(guī)定的。 答 ''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×請(qǐng)找出下列程序中的錯(cuò)誤,改正后寫出程序運(yùn)行結(jié)果。 ①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main() { char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答 main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);} 運(yùn)行結(jié)果:AVER=5 ②main() { char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 運(yùn)行結(jié)果:a=3,b='A'“end” aabcc abc 3 寫出下列賦值的結(jié)果,表格中寫了數(shù)值的是要將它賦給其他類型的變量,將所有的空格填上賦值后的數(shù)據(jù)(實(shí)數(shù)保留到小數(shù)點(diǎn)后兩位)。int 99 -1 char 'h' unsigned int float 55.78 long int 答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D' unsigned int 99 104 66 55 68 65535 float 99.00 104.00 66.00 55.78 68.00-1.00 long int 99 104 66 55 68-1 ★寫出程序運(yùn)行結(jié)果。 ①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main() { int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之間應(yīng)為逗號(hào),教材有誤 答 運(yùn)行結(jié)果: 9,11,9,10 運(yùn)行結(jié)果: 30,1,0,0 ③void main() {int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);} 答 運(yùn)行結(jié)果: 11,19,30,1 ★寫出下面表達(dá)式的值(設(shè)a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3) ⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a ⑼a+b,18+(b=4)*3,(a/b,a%b) ⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a 答 ⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每組表達(dá)式中,被執(zhí)行后結(jié)果完全等價(jià)的是哪些(設(shè)a、b、m是已被賦值的整型變量)? ①m=(a=4,4*5)與m=a=4,4*5 ②(float)(a/b)與(float)a/b ③(int)a+b與(int)(a+b)④m%=2+a*3與m=m%2+a*3 ⑤m=1+(a=2)+(b=3)與a=2,b=3,m=1+a+b 答 ①前面是賦值表達(dá)式,而后面的是一個(gè)逗號(hào)表達(dá)式,所以一定不同; ②前面的表達(dá)式中a/b結(jié)果為一整數(shù),結(jié)果已經(jīng)取整,精度可能受到影響,之后強(qiáng)制float后才為浮點(diǎn)型,后面的是先將a轉(zhuǎn)換為float后再與b相除,其值保證了精度,所以不同。 ③因?yàn)閍、b均為整數(shù),其前后兩個(gè)表達(dá)式的計(jì)算結(jié)果是一致的。 ④前一表達(dá)式是一算術(shù)表達(dá)式,而后者為一賦值表達(dá)式,此為一點(diǎn)不同;另外,前一表達(dá)式的m只被賦過(guò)一次值,后一表達(dá)式中的m曾兩次被賦值,第一次賦值時(shí)與第一表達(dá)式中的值一致,第二次賦值后即不再相同。⑤前后表達(dá)式的計(jì)算結(jié)果應(yīng)該是一致的:a=2, b=3, m=6 7 條件表達(dá)式x>0?x:-x的功能是什么? 答 如果x的值是一正數(shù),則表達(dá)式的值為x值;如果x的值是一非正數(shù),則表達(dá)式的值為-x。其實(shí)該表達(dá)式的值即為x的絕對(duì)值,C語(yǔ)言中提供了一個(gè)函數(shù)fabs(x)即可完成此功能,該函數(shù)包含在math.h頭文件中。用一個(gè)條件表達(dá)式描述從a、b、c中找出最大都賦給max.答 max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x為int型變量,則執(zhí)行以下語(yǔ)句后x的值為()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下類型說(shuō)明語(yǔ)句: char w;int x;float y;double z;則表達(dá)式w*x+z-y的結(jié)果為()類型。A.float B.char C.int D.double 答 D.第三章 順序結(jié)構(gòu)程序設(shè)計(jì) -習(xí)題答案 變量k為float類型,調(diào)用函數(shù)scanf(“%d”,&k),不能使變量k得到正確數(shù)值的原因是___。 答 格式修飾符與變量類型不一致。因?yàn)?d輸入的數(shù)據(jù)類型應(yīng)該為十進(jìn)制整數(shù),而&k為占用4個(gè)字節(jié)的float類型變量的地址。★a=1234,b=12,c=34,則執(zhí)行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的輸出是___。 答 |1234 1234 | 分析如下: ①%3d為右對(duì)齊輸出變量,且指定輸出變量的值寬度為3個(gè)字符位,如果變量實(shí)際位數(shù)小于3,則左端補(bǔ)空格,如果變量實(shí)際位數(shù)大于3,則按實(shí)際長(zhǎng)度輸出,不受限制。 ②%-3d為左對(duì)齊輸出變量,在輸出變量時(shí),如是變量實(shí)際位數(shù)小于3,則在右端補(bǔ)空格,否則按實(shí)際輸出。★設(shè)有“int a=255,b=8;”,則“printf(“%x,%on”,a,b);”輸出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”則輸出為FF,10。說(shuō)明在輸出十六進(jìn)制字母時(shí),其大小寫受格式修飾符的限制,如果是“%x”則輸出小寫,如果是“%X”則輸出大寫。 ②如果希望在輸出十六進(jìn)制時(shí)輸出前導(dǎo)符0x或0X,則以上輸出語(yǔ)句應(yīng)改“printf(“%#x,%on”,a,b);”為或“printf(“%#X,%on”,a,b);”。本條解釋不必須掌握?!镆韵鲁绦蜉敵龅慕Y(jié)果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函數(shù)中用到格式符%5s,其中5表示輸出字符占用5列。如果字符串長(zhǎng)度大于5,則按___輸出;如果字符串長(zhǎng)度小于5,則按___輸出。 答 ①實(shí)際 ②左端補(bǔ)空格 6 ★已定義變量如下: int a1,a2;char c1,c2;若要求輸入a1、a2、c1和c2的值,正確的輸入函數(shù)調(diào)用語(yǔ)句是___。 答 scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 輸入兩個(gè)整型變量a、b的值,輸出下列算式以及運(yùn)算結(jié)果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每個(gè)算式占一行。如a=10,b=5,a+b輸出為:10+5=15 答 設(shè)int a=10,b=5;以下為輸出語(yǔ)句及結(jié)果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★輸入一個(gè)非負(fù)數(shù),計(jì)算以這個(gè)數(shù)為半徑的圓周長(zhǎng)和面積。答 #define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l(fā)=%ftarea=%fn”,l,area);} 9 輸入任意一個(gè)3位數(shù),將其各位數(shù)字反序輸出(例如輸入123,輸出321)。 答 main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此處算法*/ 第1章 程序設(shè)計(jì)基礎(chǔ)知識(shí) 一、單項(xiàng)選擇題(第23頁(yè))1-4.CBBC 5-8.DACA 二、填空題(第24頁(yè)) 1.判斷條件 2.面向過(guò)程編程 3.結(jié)構(gòu)化 4.程序 5.面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言 7.有窮性 8.直到型循環(huán) 9.算法 10.可讀性 11.模塊化 12.對(duì)問(wèn)題的分析和模塊的劃分 三、應(yīng)用題(第24頁(yè))2.源程序: main() {int i,j,k;/* i:公雞數(shù),j:母雞數(shù),k:小雞數(shù)的1/3 */ printf(“cock hen chickn”);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 %dn”,i,j,k*3);} 執(zhí)行結(jié)果: cock hen chick 4 18 78 8 11 81 12 4 84 3.現(xiàn)計(jì)算斐波那契數(shù)列的前20項(xiàng)。 遞推法 源程序: main() {long a,b;int i;a=b=1; for(i=1;i<=10;i++)/*要計(jì)算前30項(xiàng),把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));} 執(zhí)行結(jié)果: 1 2 3 5 8 13 21 34 55 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(“%.10fn”,x);} 執(zhí)行結(jié)果: 1.3247179572 5.源程序略。(分子、分母均構(gòu)成斐波那契數(shù)列)結(jié)果是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 printf(“%d %d %dn”,a,b,c);} 執(zhí)行結(jié)果: 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”);} 執(zhí)行結(jié)果: Yes 第2章 C語(yǔ)言概述 一、單項(xiàng)選擇題(第34頁(yè))1-4.BDCB 5-8.AABC 二、填空題(第35頁(yè)) 1.主 2.C編譯系統(tǒng) 3.函數(shù) 函數(shù) 4.輸入輸出 5.頭 6..OBJ 7.庫(kù)函數(shù) 8.文本 三、應(yīng)用題(第36頁(yè)) 5.sizeof是關(guān)鍵字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是標(biāo)識(shí)符。 8.源程序: main(){int a,b,c; scanf(“%d %d”,&a,&b);c=a;a=b;b=c; printf(“%d %d”,a,b);} 執(zhí)行結(jié)果:34 34 12 第3章 數(shù)據(jù)類型與運(yùn)算規(guī)則 一、單項(xiàng)選擇題(第75頁(yè)) 1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB 二、填空題(第77頁(yè)) 1.補(bǔ)碼 2.±(10^-308~10^308)3.int(整數(shù))4.單目 自右相左 5.函數(shù)調(diào)用 6.a或b 7.1 8.65,89 三、應(yīng)用題(第78頁(yè))1.10 9 2.執(zhí)行結(jié)果: 0 0 12 1 第4章 順序結(jié)構(gòu)程序設(shè)計(jì) 一、單項(xiàng)選擇題(第90頁(yè))1-5.DCDAD 6-10.BACBB 二、填空題(第91頁(yè)) 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頁(yè)) 1.仿照教材第27頁(yè)例2-1。 2.源程序: main(){int h,m; scanf(“%d:%d”,&h,&m);printf(“%dn”,h*60+m);} 執(zhí)行結(jié)果: 9:23 563 3.源程序: main() {int a[]={-10,0,15,34},i;for(i=0;i<=3;i++) printf(“%d370C=%g370Ft”,a[i],a[i]*1.8+32);} 執(zhí)行結(jié)果: -10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F 4.源程序: main() {double pi=3.14***9,r=5; printf(“r=%lg A=%.10lf S=%.10lfn”,r,2*pi*r,pi*pi*r);} 執(zhí)行結(jié)果: 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=%.10lfn”,sqrt(s*(s-a)*(s-b)*(s-c)));} else printf(“Data error!”);} 執(zhí)行結(jié)果: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=**%dnd=%gne=%6.2fnf=%-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 %dn”,a,b,c);} 執(zhí)行結(jié)果: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 %.2fn”,a,b,c,(a+b+c)/3.);執(zhí)行結(jié)果: 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=%dn”,a,b,c);printf(“x=%d,y=%dn”,x,y);} 第5章 選擇結(jié)構(gòu)程序設(shè)計(jì) 一、單項(xiàng)選擇題(第113頁(yè))1-4.DCBB 5-8.DABD 二、填空題(第115頁(yè))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(原題最后一行漏了個(gè)d,如果認(rèn)為原題正確,則輸出k=%。)6.8!Right!11 7.$$$a=0 8.a=2,b= 1三、編程題(第116頁(yè))1.有錯(cuò)。正確的程序如下: main(){int a,b,c; scanf(“%d,%d,%d”,&a,&b,&c); printf(“min=%dn”,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);} 執(zhí)行結(jié)果: 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(“%dn”,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(“%dn”,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(“%dn”,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(“%dn”,y);} 4.本題為了避免考慮每月的天數(shù)及閏年等問(wèn)題,故采用面向?qū)ο蟮某绦蛟O(shè)計(jì)。 現(xiàn)給出Delphi源程序和C++ Builder源程序。 Delphi源程序: procedure TForm1.Button1Click(Sender: TObject);begin edit3.Text:=format('%.0f天',[strtodate(edit2.text)-strtodate(edit1.text)]);end; procedure 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);} 執(zhí)行結(jié)果:(運(yùn)行于Windows下)http://img378.photo.163.com/nxgt/41463572/1219713927.jpg 5.源程序: main() {unsigned a,b,c; printf(“請(qǐng)輸入三個(gè)整數(shù):”); scanf(“%d %d %d”,&a,&b,&c); if(a&&b&&c&&a==b&&a==c)printf(“構(gòu)成等邊三角形n”);else if(a+b>c&&a+c>b&&b+c>a) if(a==b||a==c||b==c)printf(“構(gòu)成等腰三角形n”);else printf(“構(gòu)成一般三角形n”);else printf(“不能構(gòu)成三角形n”);} 執(zhí)行結(jié)果: 請(qǐng)輸入三個(gè)整數(shù):5 6 5 構(gòu)成等腰三角形 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=%dn”,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 %.2fn”,m,m*(1-n),m*n);} 執(zhí)行結(jié)果: 450 450 429.75 20.25 8.2171天(起始日期和終止日期均算在內(nèi)) 本題可利用第4小題編好的程序進(jìn)行計(jì)算。把起始日期和終止日期分別打入“生日”和“今日”欄內(nèi),單擊“實(shí)足年齡”按鈕,將所得到的天數(shù)再加上1天即可。 9.源程序: #include “math.h”;main() {unsigned long i;scanf(“%ld”,&i); printf(“%ld %dn”,i%10,(int)log10(i)+1);} 執(zhí)行結(jié)果: 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(“%ldn”,i);} 執(zhí)行結(jié)果: 6987 8109 (注:要加密的數(shù)值不能是0或以0開(kāi)頭。如果要以0開(kāi)頭需用字符串而不能是整數(shù)。)第6章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 一、單項(xiàng)選擇題(第142頁(yè))1-4.BCCB 5-8.CBCA 二、填空題(第143頁(yè)) 1.原題可能有誤。如無(wú)誤,是死循環(huán) 2.原題有誤。如果把b=1后面的逗號(hào)改為分號(hào),則結(jié)果是8。3.20 4.11 5.2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x 三、編程題(第145頁(yè))1.源程序: main() {int i=1,sum=i; while(i<101){sum+=i=-i-2;sum+=i=-i+2;} printf(“%dn”,sum);} 執(zhí)行結(jié)果: 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 %lfn”,p,n,p+n);} 3.源程序: main() {unsigned a;scanf(“%ld”,&a); for(;a;printf(“%d,”,a%10),a/=10);printf(“b n”);} 執(zhí)行結(jié)果: 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 57 009 5.略 6.原題提供的計(jì)算e的公式有誤(前面漏了一項(xiàng)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=%.14lfn”,e);} 執(zhí)行結(jié)果: e=2.7***05(2)源程序: main() {double e=1,f=1;int n; for(n=1;f>1e-4;n++){f/=n;e+=f;} printf(“e=%.4fn”,e);} 執(zhí)行結(jié)果: 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));} 執(zhí)行結(jié)果: 68 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);} 執(zhí)行結(jié)果: 1024 1026 1028 1032 1034 1036 …… …… 9874 9876 9.源程序: main(){int i,j,k; printf(“apple watermelon pearn”);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%9dn”,i,j,k);} 執(zhí)行結(jié)果: 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為階數(shù),可以改為其他正整數(shù) */ main(){int m=N*2,i,j; for(i=1;i putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));} 如果把N值改為5,則執(zhí)行結(jié)果如下: * *** ***** ******* ********* ******* ***** *** * 作者:寧西貫通 2006-5-7 23:41 回復(fù)此發(fā)言 ------------------說(shuō)明 注意:上面最后一題的輸出結(jié)果應(yīng)該是由星號(hào)組成的一個(gè)菱形,第7章 數(shù) 組 一、單項(xiàng)選擇題(第192頁(yè))1-4.BBCC 5-8.AABA 二、填空題(第194頁(yè)) 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] 三、編程題(第196頁(yè))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(“%dn”,s);} /* 注:5×5矩陣不能照此計(jì)算!*/ 執(zhí)行結(jié)果: 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(“%dt”,a[i]);} 執(zhí)行結(jié)果: 4 6 8 10 12 14 16 18 20 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();第二篇:C語(yǔ)言程序設(shè)計(jì)教程課后習(xí)題答案
第三篇:《C語(yǔ)言程序設(shè)計(jì)教程(第二版)》習(xí)題答案