《C语言程序设计》第5章习题答案
1.选择题
(1)C(2)D(3)C(4)B(5)A(6)A(7)A(8)B(9)A(10)B(11)A(12)A 2.填空题
(1)整型
(2)值传递
地址传递
(3)全局变量
局部变量
(4)自动变量
静态变量
寄存器变量
外部变量
(5)自动变量
(6)15
300
(7)8
121
(8)x=3,y=4,n=7
(9)5 6
3.程序设计题
(1)
#include
int gcd_recursion(int a,int b);
void main()
{
int i,j;
puts("\nPlease enter 2 integer");
scanf("%d,%d",&i,&j);
if(i<0||j<0)
{
puts("\nData Error!Please enter 2 integer");
scanf("%d, %d",&i,&j);
}
else
printf("gcd(%d,%d)=%d",i,j,gcd_recursion(i,j));
}
int gcd_recursion(int a,int b)
{ int c,d;
if(a
{c=a;
a=b;
b=c;
if(a%b==0)
return b;
else
d=gcd_recursion(b,a%b);
}
else if(a%b==0)
return b;
else
d=gcd_recursion(b,a%b);
return d;
}
(2)
#include
int delete_char(char c,char str[]);
void main()
{char str[10],c,i;
puts("\nPlease enter a string:");
gets(str);
puts("Please enter a char you want to delete:");
c=getchar();
puts("Before deleted:");
puts(str);
puts("After deleted:");
i=delete_char(c,str);
puts(str);
printf("There are %d characters deleted.",i); }
int delete_char(char c,char str[])
{ int i,j,total,k,sum;
i=0;
total=0;
while(str[i]!='\0')
{
k=i;
sum=0;
while(str[k]==c)
{ k++;
sum++;
}
total=total+sum;
if(str[i]==c)
{ for(j=i;str[j+sum]!='\0';j++)
str[j]=str[j+sum];
str[j]='\0';
}
i++;
}
return total;
}
(3)
#include
int max(int a,int b);
void main()
{
int i,j,k;
puts("\nPlease enter 3 integer:");
scanf("%d,%d,%d",&i,&j,&k);
printf("max is %d.",max(max(i,j),k));
}
int max(int a,int b)
{ if(a>b)
return a;
else
return b;
}
(4)
#include
void int_string(long a,char str[]);
void reverse(char c[],int size);
void insert_space(char c[],int size);
void main()
{
long i;
char str1[10];
puts("\nPlease enter 1 long interger:");
scanf("%d",&i);
int_string(i,str1);
printf("digital string is %s",str1);
}
void int_string(long a,char str[])
{
int i=0;
while(a!=0)
{
str[i]=a%10+'0';
a=a/10;
i++;
}
str[i]='\0';
insert_space(str,i);
}
void insert_space(char c[],int size)
{
int i;
c[2*size-1]='\0';
for(i=2*(size-1);i>=2;i-=2)
{
c[i]=c[i/2];
c[i-1]=' ';
}
}
(5)
#include
long facto(long x);
main()
{
int a;
long factorial;
printf("\nPlease enter a integer:");
scanf("%d",&a);
factorial=facto(a);
printf("\nThe %d's jieceng is :%ld\n",a,factorial);
}
long facto(long x)
{
if(x==1)
return 1;
else
return(x*facto(x-1));
}
(6)
#include
float average(float math,float chinese,float english);
main()
{
float score[3];
float aver;
printf("Please enter your score:math,chinese,english\n");
scanf("%f,%f,%f",&score[0],&score[1],&score[2]);
aver=average(score[0],score[1],score[2]);
printf("Your average is %.2f\n",aver);
}
float average(float math,float chinese,float english)
{
return(math+chinese+english)/3;
}
(7)
#include
float max=0,min=0;
float average(float arr[],int n)
{
int i;
float aver,sum=arr[0];
max=min=arr[0];
for(i=1;i { if(arr[i]>max) max=arr[i]; else if (arr[i min=arr[i]; sum=sum+arr[i]; } aver=sum/n; return(aver); } main() { float score[10], aver; int i; printf("Please enter ten score:"); for(i=0;i<10;i++) scanf("%f",&score[i]); aver=average(score,10); printf("max=%.2f\nmin=%.2f\naverage=%.2f\n",max, min,aver); } (8) #include int fib(int n) { if((n==1||n==2)) return 1; else return(fib(n-1)+fib(n-2)); } void main() { int i; printf("\n"); for(i=1;i<20;i++) { printf("%-12d",fib(i)); if(i%5==0) printf("\n"); } }