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

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

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() 

{  float a=10, b=20, h=5, s    s=(a+b)*h/2 

   printf("s=%f " , s ) } 

2.答: 

#include "stdio.h" 

main() 

{  printf("******************************")    printf("*        hello  world         *")    printf("******************************") }

习  题  2 

2.1  单选题 

DBDCA  DCABB  CA 

2.2  填空题 

1.2.000000  

 

2.1;0.500000 

3.9;2 4.6 5.100;d 6.(1)20     

(2)0   

 

 (3)60 7.(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  单选题 

BDABC  ADCAC  BBA 

3.2  填空题 

1.3 2.261 3.10 

4.2, 1;互换a,b的值 5.6.6 6.003 7.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=97 12.%d/%d;%d/%d=%.2f\n 

3.3  改错题(略) 3.4  编程题 

1.答: 

#include "stdio.h" main() { 

  int x,y 

  scanf("%d%d",&x,&y)   printf("\t\tx\ty\n") 

  printf("十进制数\t%d\t%d\n",x,y)   printf("八进制数\t%o\t%o\n",x,y)   printf("十六进制数\t%X\t%x\n",x,y) } 

2.答: 

#include "stdio.h" main() { 

  char ch 

  printf("请输入一个大写英文字母")   scanf("%c",&ch) 

  printf("大写英文字母是%c\n",ch)   printf("它的前导字符是%c\n",ch-1)   printf("它的后续字符是%c\n",ch+1) } 

3.答: 

#include "stdio.h"   main()   { 

  int x,a,b,c,y 

  printf("请输入一个三位整数\n")   scanf("%d",&x)   a=x/100 

  b=(x-a*100)/10   c=x%10 

  y=c*100+b*10+a 

  printf("反向输出该整数:%d\n",y)   } } 

4.答: 

#include "stdio.h" main() 

{  int hour 

  double salary, salaryday 

  scanf("%d,%lf", &hour, &salaryday ) 

  salary=hour*salaryday- hour*salaryday*0.1 

printf("%8.2lf\n", salary) } 

5.答: 

#include "stdio.h" main() { 

  int a,b,c,t 

  printf("请输入三个整数\n")   scanf("%d%d%d",&a,&b,&c) 

  printf("交换前a=%d,b=%d,c=%d\n",a,b,c)   t=aa=cc=bb=t 

  printf("交换后a=%d,b=%d,c=%d\n",a,b,c) } 

习  题  4 

4.1  单选题 

BADDD  ACBBB  BA 

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=1 5.-4 6.1 7.5, 0, 3 8.5 9.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() { 

  double a,b,c,p,area 

  scanf("%lf%lf%lf",&a,&b,&c) 

  printf("三角形的三边为:%.llf,%.1lf,%.1lf\n",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\n",area)  }  else 

  printf("不能构成三角形\n") } 

2.答: 

#include "stdio.h" main() 

{ int x,y 

  scanf("%d,%d",&x,&y)   if(x*x+y*y>1000)  

     printf("%d\n",(x*x+y*y)/100)   else 

     printf("%d\n",x+y) } 

3.答: 

#include "stdio.h" #include "math.h" main() 

{ double x,y 

  scanf("%lf",&x)   if(x<-2)       y=x*x-sin(x)   else if (x<=2)     y=pow(2,x)+x   else     y=sqrt(x*x+x+1) 

  printf("x=%.2lf y=%.2lf\n",x,y) } 

4.答: 

#include "stdio.h" main( ) 

{ long ge,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("this number is a huiwen\n")    else      

 printf("this number is not a huiwen\n") 

5.答: 

#include "stdio.h"  main() 

{  float p,w,s,d,f 

scanf("%f,%,%f",p,s,w)    if (s>3000) d=0.15    else if( s>=2000) d=0.1    else if(s>=1000) d=0.08    else if(s>=500) d=0.05    else if(s>=250) d=0.02    else  d=0    f=p*w*s*(1-d)    printf("%f",f) } 

6.答: 

#include "stdio.h" main() 

{  int year,money    char x 

   printf("是否是本公司产品(y/n):")    scanf("%c",&x) 

   if(x=='y'||x=='Y') 

      {printf("产品使用的年限:")       scanf("%d",&year) 

     if(year<=1) money=0 

    else if(year<8) money=50     else money=100 

  

  printf("产品保修额是:%d\n",money) 

   } 

   else  

   {  money=200 

     printf("不是本公司产品,产品保修额是:%d\n",money)    } } 

7.答: 

#include "stdio.h" main() 

{  int money,num1,num2 

   printf("请输入取款额(≤2000):")    scanf("%d",&money) 

   if(money>2000) printf("请输入取款额数≤2000!\n")    else      if(money%50==0)      { num1=money/100        num2=(money-num1*100)/50         printf("需支付100元:%d张\n",num1)        printf("需支付50元:%d张\n",num2)       }    else       printf("输入钱数必须是50的倍数!\n") }

习  题  5 

5.1  单选题 

CDABA  ABDDB  DBCB 

5.2  填空题 

1.2 0 2.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=-flag 5.(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() 

{ int i,s=0 

  for(i=1i<=100i++)   s+=i*i 

  printf("%d\n",s) } 

(2)for循环,其他略 

#include "stdio.h" main() 

{ int i=1,p=1   double s=1   do   { 

      s+=1.0/p       p*=++i 

  }while(1.0/p>1e-6)   printf("%lf",s) } 

2.答: 

#include "stdio.h" main() 

{  int m,n,t,a,b 

   scanf("%d,%d" ,&m,&n)     if (m<n)

{ t=m m=n n=t }    a=m    b=n    t=m%n     while(t) 

   { m=n  n=t t=m%n}    printf("%d",n) } 

3.答: 

#include "stdio.h" main() 

{  int x,y,s=1 

   scanf("%d,%d",&x,&y)     for( y>0 y--)s*=x  

   printf("%d,%d,%d\n ",s%10,s/10%10,s/100%10) } 

4.答: 

#include "stdio.h" main() 

{ int x,y,z 

  for( x=1  x<20 x++)   for( y=1 y<33 y++)   { z=100-x-y  

        if ((z%3)==0 &&(5*x+3*y+z/3)==100)     printf("x=%d,y=%d,z=%d\n",x,y,z)    } } 

5.答: (a) 

#include "stdio.h" main() 

{ int j,k  

   for( j=1 j<=4 j++) 

  {  for(k=1k<=4-jk++)printf(" ")    printf("****")           printf("\n")    } } 

(b) 

#include "stdio.h" main() 

{  int j,k  

   for( j=1 j<=4 j++) 

  {for(k=1k<=4-jk++)printf(" ")      for(k=1 k<=2*j-1 k++)      printf("*")          printf("\n")    } } 

6.答: 

程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。 

#include <stdio.h> main() {   int i,j,k,n   printf("water flower'number is:")   for(n=100n<1000n++)   {     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("\n") } 

7.答: 

#include <stdio.h> main() {   int x   for(x=1000x>=3x--)   if(x%3==1&&x%5==2&&x%7==3)   { 

      printf("该校的学生人数是:%d人\n",x)       break   } } 

8.答: 

#include <stdio.h> main() {    int x=12,i=1    while(1) 

   {  if((x+20+i)==2*(x+i)) break        i++    }    printf("小明母亲在%d年后比小明的年龄大一倍\n",i)    printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁\n",x+i,x+20+i) } 

习  题  6 

6.1  单选题 

DBCCB   BDC

C语言程序设计教程(第3版) 

  278 

6.2  填空题 

1.c 2.60 3.1000  10 4.16  

6.3  编程题 

1.答: 

#include "stdio.h" #include "math.h" 

#define  F(a)  a*a+ sqrt(3*a*a+2*a+1) main() 

{   float  x, f 

    scanf("%f", &x ) 

    f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x)      printf("%f\n", f) } 

习  题  7 

7.1  单选题 

BCADA  CCCDA  BCBDB 

7.2  填空题 

1.(1)2 3 4 5   (2)10010    (3)QuickC  

 

(4)10000        01000        00100        00010        00001   (5)Language 

(6)Language Programming 2.(1)j+=2   (2)a[i]>a[j] 3.(1)i=1    (2)x[i-1] 

7.3  改错题(略) 7.4  编程题 

1.答: 

#define N 10  

#include "stdio.h" main()  

{ int a[N]={1,2,3,4,5,6,7,8,9,10,osum=0, qsum=0,j   for(j=0j<10j++) 

  if( j%2) qsum+=a[j]

else osum+=a[j] 

 printf("osum=%d,qsum=%d\n", osum,qsum) } 

2.答: 

#define N 10 

#include "stdio.h"  main() 

{ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x   scanf("%d",&x)   for(j=0j<Nj++) 

        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=0j<Nj++) 

       printf("%d   ",a[j]) } 

3.答: 

#define M 3 

#include "stdio.h" main() 

{  int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1    for( j=0j<Mj++) 

        for(k=0k<Mk++)           if (a[j][k]!=a[k][j]) { flag=0 break}    if (flag) printf("ok")    else printf("NO") } 

4.答: 

#include "stdio.h" #include "string.h" main() 

{  char c1[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\n",1)    if (c1[j]<c2[j]) printf("%d\n",-1)    if (c1[j]==c2[j]) printf("%d\n",0) } 

5.答: 

#include "stdio.h" #include "string.h" #define M 3 #define N 80 main() 

{  char a[M][N],j,k,n[5]={0}    for(j=0j<Mj++)     gets(a[j])

for(j=0j<Mj++) 

  for(k=0a[j][k]k++) 

    if( a[j][k]>='A' && a[j][k]<='Z') n[0]++ 

    else if (a[j][k]>='a' && a[j][k]<='z') n[1]++     else if (a[j][k]>='0' && a[j][k]<='9') n[2]++     else if (a[j][k]==' ' ) n[3]++     else     n[4]++ 

    for(j=0j<5j++)      printf("%4d", n[j]) } 

习  题  8 

8.1  单选题 

DBDAC  BACCC 

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() 

{  int n1,n2,n3,t    int *p1,*p2,*p3 

   printf("please input 3 number: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("the sorted numbers are:%d,%d,%d\n",n1,n2,n3) } 

2.答: 

#include "stdio.h" #define N 3 main() 

{  int a[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() 

{  int a[10] 

   int j,minl=0,maxl=0    for(j=0j<10j++) 

       scanf("%d", a+j)    for(j=0j<10j++) 

     { 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=0j<10j++)    printf("%d ", *(a+j)) } 

4.答: 

    输入阵列如下:   1   2   3   4                      5   6   7   8                      9   10  11  12     输出阵列如下: 

                     12  11  10  9                      8   7   6   5                      4   3   2   1 

#define M 3 

#define N 4 

#include "stdio.h" main() 

{  int a[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-1k<jk++,j--) 

   {  t=*(p+k) *(p+k)=*(p+j) *(p+j)=t}    for (k=0 k<M k++)    {  for(j=0 j<N j++) 

   printf("%4d ",a[k][j])      printf("\n")

 } } 

5.答: 

#include "stdio.h" main() { 

   int len 

   char str[20],*p=str 

   printf("please input a string:\n")    scanf("%s",str)    len=0 

   while(*p!='\0')    { 

      len++       p++    } 

      printf("the string has %d characters.\n",len) } 

6.答: 

#include "string.h" #include "stdio.h" main() { 

   char *str1[5],ch[5][20],k,t,j,*c void sort(char **)    for(k=0k<5k++)     {str1[k]=ch[k]     gets(str1[k])}    for(k=0k<7k++) 

   {  t=k 

      for(j=k+1j<5j++)      if(strcmp(*(str1+t),*(str1+j))>0) t=j      c=*(str1+t) 

    *(str1+t)=*(str1+k)      *(str1+k)=c     } 

   for(k=0k<5k++)     puts(str1[k]) } 

习  题  9 

9.1  单选题 

CBBAD  DBCCD  DCABC  BCCBA  DCDAB

9.2  填空题 

1.120 2.x 3.3,2,2,3   4.fac /i 5.8,17 6.9 7.1.0/(i*i)   8. 

    fun-in:30,20,10     fun-end:1015,35,1050      10,20,30 9.012345   10.93636  11.(1)r+b[k]  (2)*x 

12.7 5 3 1 9 13.15 

14.(1)*x    (2)t 15.(1)'\0'    (2)n++ 16.024 

9.3  改错题(略) 9.4  编程题 

1.答: 

void  zhuan( ) 

{  char ch 

   while((ch=getchar())!='\n') 

   {    if(ch>='a' && ch<='z') ch=ch-32         putchar(ch)    } } 

2.答: 

double expp(int n) { int k, fac=1  double sum=1 

  for(k=1 k<=n k++)   { fac*=k 

     sum+=1.0/fac    } 

  return(sum) } 

3.答: 

int  xy3( int x, int y)

{ int k, num=1 

  for(k=1k<=y  k++)     num*=x  

  num=num%1000    return num  } 

4.答: 

int age( int n) { int c 

  if(n==1) c=10  

  else c=age(n-1)+2    return c  } 

5.答: 

#include "stdio.h" 

 main() 

{  int a,b,c,d 

   void fun(int a,int b,int *c, int *d)    scanf("%d%d",&a,&b)    fun(a,b,&c,&d) 

   printf("%d %d",c,d) 

void fun(int a,int b,int *c, int *d) {  if (b) 

    { *c=a/b *d=a%b} } 

6.答: 

#include "stdio.h" 

main(int argc,char *argv[]) {  int k 

    printf("argc=%d\n",argc)     for (k=1k<argc k++)          printf("%s\n",argv[k]) } 

习  题  10 

10.1  单选题 

CDBBB  BBBAD  CCBDC   

10.2  填空题 

1.所有结构体成员所占存储空间的总和 2.与占用存储空间最大的那个成员相等 

附录F  课后题参考答案 

 

  285 

3.(1)struct satype  (2)3   (3)sa.a   (4)9   (5)psa=&sa 4.80 5.struct node 6.0 

10.3  编程题 

1.答: 

#include "stdio.h" 

struct student { 

  long  num; 

  char  name[20];   char  sex;   float  score; }; main() 

{ struct  student  s[20], temp;   int j,k, man=0, woman=0 

  float summan=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\t%f\t%d\t%f\n",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("the sorted numbers:\n")        for(k=0;k<20;k++) 

           printf("%ld\t%s\t%c\t%5.1f\n",s[k].num,s[k].name,s[k].sex,s[k].score); } 

习  题  11 

11.1  单选题 

BADD 

11.2  填空题 

1.3d3d330 2.(1)28 

 (2)20   (3)0   (4)--9 

3.(1)251 

 (2)42   

(3)209  

 (4)–295  (5)848 

习  题  12 

12.1  单选题 

BCDCA  ADA 

12.2  填空题 

1.rewind(文件指针) 2."d1.dat","rb" 3.stdin 

4.文本文件;二进制文件 5.(1)"w"    

(2)str[i]--32  

 

 (3)"r" 

6.fopen  7.Hello 8.(1)"r"   

 

(2)fgetc(fp)  

 

  (3)time++

  

  

 C语言程序设计实验与习题指导课后程序设计答案

 P18 

(1) 

#include<stdio.h> int main(void) {  intcelsius,fahr  fahr=150  celsius=5*fahr/9-5*32/9  printf("fahr=%d,celsius=%d\n",fahr,celsius)  return 0 } 

(2) 

#include<stdio.h> int main(void) {  intcelsius,fahr  celsius=26  fahr=9*celsius/5+32  printf("celsius=%d,fahr=%d\n",celsius,fahr)  return 0 } 

(3) 

#include<stdio.h> int main(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\n",math,eng,comp,average)  return 0 } 

(4) 

#include<stdio.h> int main(void) {  intn,a,b,c  n=152

 c=n%10 

 b=(n/10)%10  a=n/100 

 printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",n,c,b,a)  return 0 

P27 

(1) 

#include<stdio.h> #include<math.h> int main(void) {  intcelsius,fahr  printf("Enter celsius:")  scanf("%d",&celsius)  fahr=9*celsius/5+32  printf("fahr%d\n",fahr)  return 0 } 

(2) 

#include<stdio.h> #include<math.h> int main(void) {  intmoney,year  doublerate,interest  printf("Enter money,year,rate:")  scanf("%d%d%lf",&money,&year,&rate)  interest=money*pow(1+rate,year)-money  printf("interest=%.2f\n",interest)  return 0 } 

(3) 

#include<stdio.h> #include<math.h> int main(void) {  doublex,y  printf("Enter x:")  scanf("%lf",&x) 

 if(x<0){   y=pow(x+1,2)+2*x+1/x  }  else{   y=sqrt(x)  } 

 printf("y=f(%f)=%.2f\n",x,y)  return 0 

(4) 

#include<stdio.h> int main(void) {  intx,y  printf("Enter num1:")  scanf("%d",&x)  printf("Enter num2:")  scanf("%d",&y)  printf("%d+%d=%d\n",x,y,x+y)  printf("%d-%d=%d\n",x,y,x-y)  printf("%d*%d=%d\n",x,y,x*y)  printf("%d/%d=%d\n",x,y,x/y)  printf("%d%%%d=%d\n",x,y,x%y)  return 0 } 

10的阶乘 

#include<stdio.h> int main(void) {  inti,n,product  printf("Enter n:")  scanf("%d",&n)  product=1  for(i=1i<=ni++){   product=product*i  }  printf("product=%d\n",product)  return 0 }

这是谭浩强版习题题答案,看与你的是否一致

1.5请参照本章例题,编写一个C程序,输出以下信息:

************

Very Goodj!

************

解:

main()

{

printf(" ************ \n")

printf("\n")

printf(" Very Good! \n")

printf("\n")

printf(" ************\n")

}

1.6编写一个程序,输入a b c三个值,输出其中最大者。

解:main()

{int a,b,c,max

printf("请输入三个数a,b,c:\n")

scanf("%d,%d,%d",&a,&b,&c)

max=a

if(max<B)

max=b

if(max<C)

max=c

printf("最大数为:%d",max)

}

第三章

3.3 请将下面各数用八进制数和十六进制数表示:

(1)10 (2)32 (3)75 (4)-617

(5)-111 (6)2483 (7)-28654 (8)21003

解:十 八 十六

(10)=(12)=(a)

(32)=(40)=20

(75)=(113)=4b

(-617)=(176627)=fd97

-111=177621=ff91

2483=4663=963

-28654=110022=9012

21003=51013=520b

3.5字符常量与字符串常量有什么区别?

解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符

而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号'\0'.

3.6写出以下程序的运行结果:

#include

void main()

{

char c1='a',c2='b',c3='c',c4='\101',c5='\116'

printf("a%c b%c\tc%c\tabc\n",c1,c2,c3)

printf("\t\b%c %c\n",c4,c5)

解:程序的运行结果为:

aabb cc abc

A N

3.7将"China"译成密码.密码规律:用原来的字母后面第4个字母代替原来的字母,

例如,字母"A"后面第4个字母是"E",用"E"代替"A".因此,"China"应译为"Glmre".

请编一程序,用赋初值的议程使c1,c2,c3,c4,c5分别变成'G','1','m','r','e',并

输出.

main()

{char c1="C",c2="h",c3="i",c4='n',c5='a'

c1+=4

c2+=4

c3+=4

c4+=4

c5+=4

printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5)

}

3.8例3.6能否改成如下:

#include

void main()

{

int c1,c2(原为 char c1,c2)

c1=97

c2=98

printf("%c%c\n",c1,c2)

printf("%d%d\n",c1,c2)

}

解:可以.因为在可输出的字符范围内,用整型和字符型作用相同.

3.9求下面算术表达式的值.

(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)

(2)(float)(a+b)/2+(int)x%(int)y=3.5(设a=2,b=3,x=3.5,y=2.5)

3.10写出下面程序的运行结果:

#include

void main()

{

int i,j,m,n

i=8

j=10

m=++i

n=j++

printf("%d,%d,%d,%d\n",i,j,m,n)

}

解:结果: 9,11,9,10

第4章

4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'.想得

到以下的输出格式和结果,请写出程序要求输出的结果如下:

a= 3 b= 4 c= 5

x=1.200000,y=2.400000,z=-3.600000

x+y= 3.60 y+z=-1.20 z+x=-2.40

u= 51274 n= 128765

c1='a' or 97(ASCII)

c2='B' or 98(ASCII)

解:

main()

{

int a,b,c

long int u,n

float x,y,z

char c1,c2

a=3b=4c=5

x=1.2y=2.4z=-3.6

u=51274n=128765

c1='a'c2='b'

printf("\n")

printf("a=%2d b=%2d c=%2d\n",a,b,c)

printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z)

printf("x+y=%5.2f y=z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x)

printf("u=%6ld n=%9ld\n",u,n)

printf("c1='%c' or %d(ASCII)\n",c1,c2)

printf("c2='%c' or %d(ASCII)\n",c2,c2)

}

4.5请写出下面程序的输出结果.

结果:

57

5 7

67.856400,-789.123962

67.856400 ,-789.123962

67.86,-789.12,67.856400,-789.123962,67.856400,-789.123962

6.785640e+001,-7.89e+002

A,65,101,41

1234567,4553207,d687

65535,17777,ffff,-1

COMPUTER, COM

4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',

问在键盘上如何输入?

main()

{

int a,b

float x,y

char c1,c2

scanf("a=%d b=%d,&a,&b)

scanf(" x=%f y=%e",&x,&y)

scanf(" c1=%c c2=%c",&c1,&c2)

}

解:可按如下方式在键盘上输入:

a=3 b=7

x=8.5 y=71.82

c1=A c2=a

说明:在边疆使用一个或多个scnaf函数时,第一个输入行末尾输入的"回车"被第二

个scanf函数吸收,因此在第二\三个scanf函数的双引号后设一个空格以抵消上行

入的"回车".如果没有这个空格,按上面输入数据会出错,读者目前对此只留有一

初步概念即可,以后再进一步深入理解.

4.7用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-

3.75,z=57.8,请问

在键盘上如何输入数据?

scanf("%5d%5d%c%c%f%f%*f %f",&a,&b,&c1,&c2,&y,&z)

解:

main()

{

int a,b

float x,y,z

char c1,c2

scanf("%5d%5d%c%c%f%f",&a,&b,&c1,&c2,&x,&y,&z)

}

运行时输入:

10 20Aa1.5 -3.75 +1.5,67.8

注解:按%5d格式的要求输入a与b时,要先键入三个空格,而后再打入10与20。%*f

是用来禁止赋值的。在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不

会赋给任何变量。

4.8设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,

用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字.请编

程.

解:main()

{

float pi,h,r,l,s,sq,vq,vz

pi=3.1415926

printf("请输入圆半径r圆柱高h:\n")

scanf("%f,%f",&r,&h)

l=2*pi*r

s=r*r*pi

sq=4*pi*r*r

vq=4.0/3.0*pi*r*r*r

vz=pi*r*r*h

printf("圆周长为: =%6.2f\n",l)

printf("圆面积为: =%6.2f\n",s)

printf("圆球表面积为: =%6.2f\n",sq)

printf("圆球体积为:=%6.2f\n",vz)

}

4.9输入一个华氏温度,要求输出摄氏温度,公式为C=5/9(F-32),输出要有文字说明,

取两位小数.

解: main()

{

float c,f

printf("请输入一个华氏温度:\n")

scanf("%f",&f)

c=(5.0/9.0)*(f-32)

printf("摄氏温度为:%5.2f\n",c)

}

第五章 逻辑运算和判断选取结构

5.4有三个整数a,b,c,由键盘输入,输出其中最大的数.

main()

{

int a,b,c

printf("请输入三个数:")

scanf("%d,%d,%d",&a,&b,&c)

if(a<B)

if(b<C)

printf("max=%d\n",c)

else

printf("max=%d\n",b)

else if(a<C)

printf("max=%d\n",c)

else

printf("max-%d\n",a)

}

方法2:使用条件表达式.

main()

{int a,b,c,termp,max

printf(" 请输入 A,B,C:")

scanf("%d,%d,%d",&a,&b,&c)

printf("A=%d,B=%d,C=%d\n",a,b,c)

temp=(a>b)?a:b

max=(temp>c)? temp:c

printf(" A,B,C中最大数是%d,",max)

}

5.5 main()

{int x,y

printf("输入x:")

scanf("%d",&x)

if(x<1)

{y=x

printf("X-%d,Y=X=%d \n",x,y)

}

else if(x<10)

{y=2*x-1

printf(" X=%d, Y=2*X-1=%d\n",x,y)

}

else

{y=3*x-11

printf("X=5d, Y=3*x-11=%d \n",x,y)

}

}

(习题5-6:)自己写的已经运行成功!不同的人有不同的算法,这些答案仅供参考! 818pp.com

# include

void main()

{

float s,i

char a

scanf("%f",&s)

while(s>100||s<0)

{

printf("输入错误!error!")

scanf("%f",&s)

}

i=s/10

switch((int)i)

{

case 10:

case 9: a='A'break

case 8: a='B'break

case 7: a='C'break

case 6: a='D'break

case 5:

case 4:

case 2:

case 1:

case 0: a='E'

}

printf("%c",a)

}

http://818pp.com/

5.7给一个不多于5位的正整数,要求:1.求它是几位数2.分别打印出每一位数字3.

按逆序打印出各位数字.例如原数为321,应输出123.

main()

{

long int num

int indiv,ten,hundred,housand,tenthousand,place

printf("请输入一个整数(0-99999):")

scanf("%ld",&num)

if(num>9999)

place=5

else if(num>999)

place=4

else if(num>99)

place=3

else if(num>9)

place=2

else place=1

printf("place=%d\n",place)

printf("每位数字为:")

ten_thousand=num/10000

thousand=(num-tenthousand*10000)/1000

hundred=(num-tenthousand*10000-thousand*1000)/100

ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10

indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10

switch(place)

{case 5:printf("%d,%d,%d,%d,%d",tenthousand,thousand,hundred,ten,indiv)

printf("\n反序数字为:")

printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,tenthousand)

break

case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv)

printf("\n反序数字为:")

printf("%d%d%d%d\n",indiv,ten,hundred,thousand)

break

case 3:printf("%d,%d,%d\n",hundred,ten,indiv)

printf("\n反序数字为:")

printf("%d%d%d\n",indiv,ten,hundred)

case 2:printf("%d,%d\n",ten,indiv)

printf("\n反序数字为:")

printf("%d%d\n",indiv,ten)

case 1:printf("%d\n",indiv)

printf("\n反序数字为:")

printf("%d\n",indiv)

}

}

5.8

1.if语句

main()

{long i

float bonus,bon1,bon2,bon4,bon6,bon10

bon1=100000*0.1

bon2=bon1+100000*0.075

bon4=bon2+200000*0.05

bon6=bon4+200000*0.03

bon10=bon6+400000*0.015

scanf("%ld",&i)

if(i<=1e5)bonus=i*0.1

else if(i<=2e5)bonus=bon1+(i-100000)*0.075

else if(i<=4e5)bonus=bon2+(i-200000)*0.05

else if(i<=6e5)bonus=bon4+(i-400000)*0.03

else if(i<=1e6)bonus=bon6+(i-600000)*0.015

else bonus=bon10+(i-1000000)*0.01

printf("bonus=%10.2f",bonus)

}

用switch语句编程序

main()

{long i

float bonus,bon1,bon2,bon4,bon6,bon10

int branch

bon1=100000*0.1

bon2=bon1+100000*0.075

bon4=bon2+200000*0.05

bon6=bon4+200000*0.03

bon10=bon6+400000*0.015

scanf("%ld",&i)

branch=i/100000

if(branch>10)branch=10

switch(branch)

{case 0:bonus=i*0.1break

case 1:bonus=bon1+(i-100000)*0.075break

case 2:

case 3:bonus=bon2+(i-200000)*0.05break

case 4:

case 5:bonus=bon4+(i-400000)*0.03break

case 6:

case 7

case 8:

case 9:bonus=bon6+(i-600000)*0.015break

case 10:bonus=bon10+(i-1000000)*0.01

}

printf("bonus=%10.2f",bonus)

} http://818pp.com/

5.9 输入四个整数,按大小顺序输出.

main()

{int t,a,b,c,d

printf("请输入四个数:")

scanf("%d,%d,%d,%d",&a,&b,&c,&d)

printf("\n\n a=%d,b=%d,c=%d,d=%d \n",a,b,c,d)

if(a>b)

{t=aa=bb=t}

if(a>c)

{t=aa=cc=t}

if(a>d)

{t=aa=dd=t}

if(b>c)

{t=bb=cc=t}

if(b>d)

{t=bb=dd=t}

if(c>d)

{t=cc=dd=t}

printf("\n 排序结果如下: \n")

printf(" %d %d %d %d \n",a,b,c,d)

}

5.10塔

main()

{

int h=10

float x,y,x0=2,y0=2,d1,d2,d3,d4

printf("请输入一个点(x,y):")

scanf("%f,%f",&x,&y)

d1=(x-x0)*(x-x0)+(y-y0)(y-y0)

d2=(x-x0)*(x-x0)+(y+y0)(y+y0)

d3=(x+x0)*(x+x0)+(y-y0)*(y-y0)

d4=(x+x0)*(x+x0)+(y+y0)*(y+y0)

if(d1>1 &&d2>1 &&d3>1 &&d4>1)

h=0

printf("该点高度为%d",h)

}

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=1i<=20i++)

for(j=1j<=33j++)

for(k=1k<=33k++)

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,bint i

a=b=1

for(i=1i<=10i++) /*要计算前30项,把10改为15。*/

{printf("%8ld%8ld",a,b)

a=a+bb=b+a}}

递归法 源程序:

main()

{int i

for(i=0i<=19i++)

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=aa=bb=m}

if(a<c){m=aa=cc=m}

if(b<c){m=bb=cc=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=aa=bb=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^cc=c^aa=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=0i<=3i++)

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=5float 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=aa=bb=cc=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*by=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(aprintf("%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-1else 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=xbreak

case 0:y=x-1break

case 1:y=x+1}

printf("%d\n",y)}

4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。

现给出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)

}

执行结果:(运行于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/10break

default:y=6}

printf("x=%d,y=%d\n",x,y)}

7.源程序:

main()

{unsigned mfloat 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 iunsigned j[10],m=0

scanf("%ld",&i)

for(i){j[m++]=(i+2)%10i/=10}

for(mm--)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-2sum+=i=-i+2}

printf("%d\n",sum)}

执行结果:

51

2.源程序:

main()

{double p=0,n=0,fint i

for(i=1i<=10i++)

{scanf("%lf",&f)

if (f>0)p+=felse n+=f}

printf("%lf %lf %lf\n",p,n,p+n)}

3.源程序:

main()

{unsigned a

scanf("%ld",&a)

for (aprintf("%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=1i<bi++)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=1int n

for(n=1n<=20n++){f/=ne+=f}

printf("e=%.14lf\n",e)}

执行结果:

e=2.71828182845905

(2)源程序:

main()

{double e=1,f=1int n

for(n=1f>1e-4n++){f/=ne+=f}

printf("e=%.4f\n",e)}

执行结果:

e=2.7183

7.源程序:

main()

{unsigned long a=0,b=1,c=0int i,d

scanf("%d",&d)

for (i=1i<=(d+2)/3i++)

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,dscanf("%d",&d)

for(i=1i<=di++)

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=1010i<=9876i+=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=1i<=100i++)

for(j=1j<=10j++)

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=1i<mprintf("\n"),i++)

for(j=1j<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=18i<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=0i<4i++)

for(j=0j<4j++)

scanf("%d",&a[i][j])

for(i=0i<4i++)

for(j=0j<4j++)

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=1i<=29i++)a[i]=a[i-1]+2

for(i<=35i++)a[i]=a[(i-30)*5+2]

for(i=0i<=35i++)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=0i<=29i++)

{a[i]=rand()

if(m<a[i])m=a[i]

printf("%d\t",a[i])}

for(i=0i<=29i++)if(a[i]==m)a[i]=-1

printf("\n-----------------\n")

for(i=0i<=29i++)

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(ii>>=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=16nn--)

{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=0i<Mprintf("\n"),t[i++]=0)

for(j=0j<Nj++)

printf("%4d",a[i][j]=random(50))

/*找出每行的最小数,t[M]是第M行的最小数所在的列数*/

for(i=0i<Mi++)

for(j=0j<Nj++)

if(a[i][t[i]]>a[i][j])t[i]=j

/*比较每个最小数在其所在的列上是否也是最小*/

for(j=0j<Mj++)

for(i=0i<Mi++)

{if(i==j)continue

if(a[j][t[j]]>a[i][t[j]])

{t[j]=-1break}

}

printf("-------------------\n")

/*输出在行和列上均为最小的数*/

for(i=0i<Mi++)

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=0i<Mi++)

{a[i][N-1]=0

for(j=0j<N-1j++)

{printf("%4d",a[i][j]=random(91)+10)

a[i][N-1]+=a[i][j]}

printf("%4d\n",a[i][N-1])}

for(i=1i<Mi++)

if(a[i][N-1]>a[t][N-1])t=i

if(t)for(j=0j<Nj++)

{i=a[0][j]a[0][j]=a[t][j]a[t][j]=i}

printf("-----------------\n")

for(i=0i<Mprintf("\n"),i++)

10 第7章 数 组

for(j=0j<Nj++)

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=0min.value=100

randomize()

for(i=0i<Mprintf("\n"),i++)

for(j=0j<Nj++)

{printf("%4d",a[i][j]=random(100)+1)

if(max.value<a[i][j])

{max.value=a[i][j]max.x=imax.y=j}

if(min.value>a[i][j])

{min.value=a[i][j]min.x=imin.y=j}

}

printf("-----------------\n")

i=a[0][N-1]a[0][N-1]=max.valuea[max.x][max.y]=i

i=a[M-1][0]a[M-1][0]=min.valuea[min.x][min.y]=i

for(i=0i<Mprintf("\n"),i++)

for(j=0j<Nj++)

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=1j<=i/2j++)

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=0i<li++)

{if(s[max]<s[i])max=iif(s[min]>s[i])min=i}

t=s[1]s[1]=s[max]s[max]=tif(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=100i<999i++)

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=0r<=Pr++)

{a[r]=1

for(c=r-1c>=1a[c--]+=a[c-1])

printf("%*d",(P-r)*3+1,a[0])

for(c=1c<=rprintf("%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=0char 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=0s[i]c[s[i++]]++)

for(i=0i<255i++)

if(c[i])printf("%c=%d\t",i,c[i])}

执行结果:

abcedabcdcd

a=2 b=2 c=3 d=3 e=1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11079746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存