C语言第七章习题答案.docx
《C语言第七章习题答案.docx》由会员分享,可在线阅读,更多相关《C语言第七章习题答案.docx(9页珍藏版)》请在冰点文库上搜索。
![C语言第七章习题答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/eb228a60-dc2e-4d6b-87b4-18a8f9555f6c/eb228a60-dc2e-4d6b-87b4-18a8f9555f6c1.gif)
C语言第七章习题答案
7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
hcf(u,v)
intu,v;
{inta,b,t,r;
if(u>v)
{t=u;u=v;v=t;}
a=u;b=v;
while((r=b%a)!
=0)
{b=a;a=r;}
return(a);
}
lcd(u,v,h)
intu,v,h;
{intu,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%dn",h);
l=lcd(u,v,h);
printf("L.C.d=%dn",l);
return(u*v/h);
}
#include
void main()
{intu,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%dn",h);
l=lcd(u,v,h);
printf("L.C.D=%dn",l);
}
7.2求方程根
floatx1,x2,disc,p,q;
greater_than_zero(a,b)
floata,b;
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
equal_to_zero(a,b)
floata,b;
{x1=x2=(-b)/(2*a);}
smaller_than_zero(a,b)
floata,b;
{p=-b/(2*a);
q=sqrt(disc)/(2*a);
}
main()
{
floata,b,c;
printf("n输入方程的系数a,b,c:
n");
scanf("%f,%f,%f",&a,&b,&c);
printf("n方程是:
%5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c);
disc=b*b-4*a*c;
printf("方程的解是:
n");
if(disc>0)
{great_than_zero(a,b);
printf("X1=%5.2ftX2=%5.2fnn",x1,x2);
}
elseif(disc==0)
{
zero(a,b);
printf("X1=%5.2ftX2=%5.2fnn",x1,x2);
}
else
{
small_than_zero(a,b,c);
printf("X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin",p,q,p,q);
}
}
7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
#include
#include
void main()
{intnumber;
scanf("%d",&number);
if(prime(number))
printf("yes");
else
printf("no");
}
intprime(number)
intnumber;
{intflag=1,n;
for(n=2;n if(number%n==0)
flag=0;
return(flag);
}
7.4写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换。
#defineN3
intarray[N][N];
convert(array)
intarray[3][3];
{inti,j,t;
for(i=0;i for(j=j+i;j {t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{
inti,j;
printf("输入数组元素:
n");
for(i=0;i for(j=0;j scanf("%d",&array[i][j];
printf("n数组是:
n");
for(i=0;i {for(j=0;j printf("%5d",array[i][j]);
printf("n");
}
convert(array);
printf("转置数组是:
n");
for(i=0;i {for(j=0;j printf("%5d",array[i][j]);
printf("n");
}
}
7.5写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include
#include
void main()
{
charstr[100];
printf("输入字符串:
n");
scanf("%s",str);
inverse(str);
printf("转换后的字符串是:
%sn",str);
}
inverse(str)
charstr[];
{
chart;
inti,j;
for(i=0,j=strlen(str);i<(strlen(str)/2;i++,j--)
{
t=str[i];
str[i]=str[i-1];
str[i-1]=t;
}
}
7.6写出一个函数,将两个字符串连接。
charconcatenate(string1,string2,string);
charstring1[],string2[],string[];
{
inti,j;
for(i=0;string1[i]!
='';i++)
string[i]=string1[i];
for(j=0;string2[j]!
='';j++)
string[i+j]=string2[j];
string[i+j]='';
}
#include
voidmain()
{
chars1[100],s2[100],s[100];
printf("n输入字符串1:
n");
scanf("%s",s1);
printf("输入字符串2:
n");
scanf("%s",s2);
concatenate(s1,s2,s);
printf("连接后的字符串:
%sn",s);
}
7.8写一个函数,输入一个4位数字,要求输出这4个数字字符,但是两个数字间空一个空格。
#include
voidmain()
{
charstr[80];
printf("请输入含有四个数字的字符串:
n");
scanf("%s",str);
insert(str);
}
insert(str)
charstr[];
{
inti;
for(i=strlen(str);i>0;i--)
{str[2*i]=str[i];
str[2*i-1]='';
}
printf("n结果是:
n %s",str);
}
7.9编写一个函数,由实参传来一个字符串字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
#include
intalph,digit,space,others;
voidmain()
{chartext[80];
gets(text);
alph=0,digit=0,space=0,others=0;
count(text);
printf("nalph=%d,digit=%d,space=%d,others=%dn",alph,digit,space,others);
}
count(str)
charstr[];
{inti;
for(i=0;str[i]!
='';i++)
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
alph++;
elseif(str[i]>='0'&&str[i]<='9')
digit++;
elseif(strcmp(str[i],'')==0)
space++;
else
others++;
}