C语言程序设计第二版第四章第七章课后答案.docx
《C语言程序设计第二版第四章第七章课后答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第二版第四章第七章课后答案.docx(23页珍藏版)》请在冰点文库上搜索。
C语言程序设计第二版第四章第七章课后答案
1、输入函数scanf的参数错误,应该为:
scanf("%f",&k);
2、|12341234|
3、ff10
4、1,3,1
5、原字符串左边加空格再加字符串本省,字符个数总和为5个
6、scanf("%d,%d,%c,%c",&a1,&a2,&c1,&c2);
7、
printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a/b=%d\n",a/b);
printf("(float)a/b=%f\n",(float)a/b);
printf("a%b=%d\n",a%b);
8、
voidmain()
{floatr;floats,c;
printf("pleaseinputthenumber:
");
scanf("%f",&r);
if(r>=0)
{s=3.14*r*r;
c=2*3.14*r;
printf("s=%f,c=%f\n",s,c);
}
else
printf("youinputnumberiserror!
");
}
9
voidmain()
{intn;
printf("pleaseinputthenumber:
");
scanf("%d",&n);
if(n>=100&&n<=999)
printf("%d%d%d",n%10,(n/10)%10,n/100);
else
printf("youinputnumberiserror!
");
}
10、
voidmain()
{inti,j,k;
scanf("%d,%d,%d",&i,&j,&k);
((i%2!
=0?
1:
0)+(j%2!
=0?
1:
0)+(k%2!
=0?
1:
0))==2?
printf("YES\n"):
printf("NO\n");
}
11、
voidmain()
{chara;
scanf("%c",&a);
printf("%c,%c,%c",a-1,a,a+1);
printf("%d,%d,%d",a-1,a,a+1);
}
12、voidmain()
{floata,b,c,s,Area;
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c||a+c>b||b+c>a)
{s=(a+b+c)/2;
Area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%f\n",Area);
}
else
printf("youinputthenumberiserror!
\n");
}
习题4
1:
0
2:
20
3:
(x<30&&x>20)||(x<-100)
4:
***a=25,b=14,c=16***
5:
37
6:
if(a<=b)printf("1");
elseprintf("2");
7、
#include
voidmain()
{chara,b,t1,t2;
scanf("%c,%c",&a,&b);
t1=a>b?
a:
b;
t2=a
a:
b;
if((t1-t2)%2==0)printf("%c,%c",a+1,b+1);
else
printf("%c,%c",a-1,b-1);
getch();
}
8、#include
voidmain()
{inttemp1=0,temp2=0,x,y,i=1;
printf("Pleaseinput(x,y):
");
scanf("%d,%d",&x,&y);
while((i*y)<=x)
{if(x==(i*y)){temp1=1;break;}
temp2=i;i++;}
if(temp1)
printf("%d/%d=%d",x,y,i);
else
printf("%d/%d--->shang=%d,yushu=%d",x,y,temp2,x-y*temp2);
getch();
}
9、#include
voidmain()
{floatx,y,m=0,n=0;
scanf("%f,%f",&x,&y);
n=(x-2)*(x-2);
m=(y-2)*(y-2);
if((m+n)<=1)
printf("(%.3f,%.3f)Intheyuan",x,y);
else
printf("(%.3f,%.3f)outoftheyuan",x,y);
getch();
}
10、#include
voidmain()
{
inttemp=0,month,year;
printf("Pleaseinput(year,month):
");
scanf("%d,%d",&year,&month);
if((year%400==0)||(year%4==0&&year%100!
=0))
temp=1;
if(month==2)
{if(temp)printf("%dyear%dmonthhave29",year,month);
elseprintf("%dyear%dmonthhave28",year,month);
}
elseif(month%2==0)
printf("%dyear%dmonthhave30",year,month);
elseprintf("%dyear%dmonthhave31",year,month);
getch();
}
11、switch(a/10)
{case5:
m=4;break;
case4:
m=3;break;
case3:
m=2;break;
case2:
m=1;break;
default:
m=5;
}
12、方法一:
#include
voidmain()
{intx,y;
scanf("%d",&x);
if(x<0&&x>-5)
y=x-1;
elseif(x==0)
y=x;
elseif(x>0&&x<8)
y=x+1;
printf("%d",y);
getch();
}
方法二:
#include
voidmain()
{intx,y;
scanf("%d",&x);
if(x<8&&x>-5)
if(x==0)y=x;
{
floatx,y,t;
printf("Entertwonumber(x,y):
");
scanf("%f,%f",&x,&y);
SWAP(x,y);
printf("\n\nExchanged:
x=%f,y=%f",x,y);
getch();
}
5、
#include
intfib(intn)
{intp;
if(n==0)p=0;
elseif(n==1)p=1;
elsep=fib(n-1)+fib(n-2);
returnp;
}
voidmain()
{intn;
printf("Pleaseinputfib:
");
scanf("%d",&n);
printf("\n\nfibonacci=%d",fib(n));
}
6、
#include
longfac(intn)
{longf;
if(n==0)
f=1;
else
f=n*fac(n-1);
returnf;
}
voidmain()
{intm,n;longf;
printf("Pleaseinput(m,n):
");
scanf("%ld,%ld",&m,&n);
f=fac(n+m)+fac(n);
printf("\n\nfibonacci=%ld",f);
}
7、
#include
voidlist()
{inti,j;
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf("%d*%d=%d",i,j,i*j);
printf("\n");
}
}
voidmain()
{list();}
8、
#include
inthe(intn)
{inti,s=0;
for(i=1;iif(n%i==0)s+=i;
returns;
}
voidmain()
{
inti,j;
for(i=1;i<30000;i++)
{for(j=1;j<30000;j++)
if((he(i)==j)&&(he(j)==i)&&(i!
=j))
printf("%d<--->%d",i,j);
}
}
9、
#include
#definemax100
structwork
{
longsid;
charname[15];
}worker[max];
intsize=0;
structwork*set_list()
{
do
{
printf("\n\nPleaseinput(sid,name):
");
scanf("%ld,%s",&worker[size].sid,worker[size].name);
size++;
}while(worker[size-1].sid!
=0);
returnworker;
}
voidpaixu(structworka[])
{
inti,j,k;longt;charv[15];
for(i=0;i{k=i;
for(j=i;jif(a[i].sid>a[j].sid)k=j;
if(k!
=i)
{t=a[i].sid;a[i].sid=a[j].sid;a[j].sid=t;
strcpy(v,a[i].name);strcpy(a[i].name,a[j].name);strcpy(a[j].name,v);
}
}
for(i=0;i<=size-2;i++)
printf("sid:
%ld\tname:
%s\n\n",a[i].sid,a[i].name);
getch();
}
voidselect(structworka[])
{inti=0,found=1;longnum;
printf("Inputselectsid:
");
scanf("%ld",&num);
for(i=0;i<=size-2;i++)
{
if(a[i].sid==num)
{found=0;
printf("%ld:
%s",num,a[i].name);
break;
}
}
if(found)printf("\n\nNOthissid!
!
!
");
getch();
}
voidmain()
{structwork*p;
p=set_list();
paixu(p);
select(p);
}
10、
#include
floatjiecheng(intn)
{
longs=1;inti;
for(i=1;i<=n;i++)
s=s*i;
returns;
}
floatchengfang(floatx,intn)
{
floats=1;inti;
for(i=1;i<=n;i++)
s=s*x;
returns;
}
floatf(floatx,intn)
{
floats=1,t=0;inti=1,j=-1;
for(i=1;i<=n;i++)
{
t=j*chengfang(x,2*i)/jiecheng(2*i);
s+=t;
j=j*j;
}
returns;
}
main()
{
floats1=0,s2=0,s3=0,s4=0,x=5.6;intn=7;
s1=f(x,n);
s2=f(x+2.3,n);
s3=f(x-3.2,n+3);
s4=s1/(s2+s3);
printf("%f",s4);
getch();
}
习题7
1:
(1)D
(2)A(3)D(4)B(5)D
2:
(1)1544678234
(2)6333
3:
(1)a[8]=data;k>=0a[k]=tempbreakk<=8
(2)"%s"str[i]<='Z'c[str[i]+26-'a']++i+'a'
4、/*题目:
求一组成绩的平均分数以及高于平均分的成绩。
*/
#include
#definemax100
voidmain()
{floata[max],s=0,average=0;
inti,n;
printf("PleaseinputN:
");/*输入要处理元素的个数*/
scanf("%d",&n);
printf("\nPleaseinput%dgeshu:
",n);/*输入90,85,92,77,80,62*/
for(i=0;i{scanf("%f",&a[i]);
s+=a[i];
}
average=s/n;
printf("\naverage=%.2f\n",average);/*输出81.00*/
for(i=0;iif(a[i]>average)
printf("%.2f",a[i]);/*输出90.00,85.00,92.00*/
}
5、/*题目:
编写程序,输入一组整数,将他们排序后由小到大输出。
*/
#include
#definemax100
voidmain()
{
inta[max],j,i,k=0,t=0,n=0;
printf("PleaseinputN:
");/*输入要处理元素的个数*/
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;i{
k=i;
for(j=i+1;jif(a[k]>a[j])
k=j;
if(k!
=i)/*元素排序前下标与排序后下标不符,则交换其值*/
{t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n\n");
for(i=0;iprintf("%d",a[i]);
}
6、/*题目:
从键盘输入一个4x4的整数矩阵,以主对角线(\)为对称轴*/
/*将左下角元素中较大者替换右上角元素,并将右上角含对称轴输出。
*/
#include
#include
voidmain()
{
intd[4][4]={{0,0,0,0}},i,j;
clrscr();
printf("\nPleaseinput16num:
");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&d[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(d[i][j]>d[j][i])/*左下角元素大于右上角元素则交换*/
d[j][i]=d[i][j];
for(i=0;i<4;i++)
{
printf("\n\n\n\n\n");/*为了保持每行的间隔与每列的相同*/
for(j=0;j<4;j++)
if(j>=i)
printf("\t%d",d[i][j]);/*为了使位数不同的数输出依然保持三角型*/
else
printf("\t");
}
}
7、*题目:
输入一个3x4的二维数组,然后分别按行和按列输出。
*/
#include
#include
voidmain()
{
intd[3][4]={{0,0,0,0}},i,j;
printf("Pleaseinput12num:
");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&d[i][j]);
printf("\n\nAnhang:
");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d",d[i][j]);
printf("\n\nAnlie:
");
for(i=0;i<4;i++)
for(j=0;j<3;j++)
printf("%d",d[j][i]);
}
8、/*题目:
编写程序,将两个字符串连接起来,不用strcat函数。
*/
#include
#include
voidmain()
{
chars1[50],s2[50];
inti=0,j=0,t=0;
printf("Inputone:
");
gets(s1);
while(s1[i]!
='\0')i++;/*统计s1中字符个数*/
printf("\n\nInputsecond:
");
gets(s2);
while(s2[j]!
='\0')j++;/*统计s2中字符个数*/
for(t=0;t<=j;t++)/*把s2中字符连接到s1后面*/
{s1[i]=s2[t];i++;}
printf("\n\none+second:
");
puts(s1);
}
9、/*输入一行字符串,统计字符对ab的个数。
*/
#include
#include
#defineMAX100
voidmain()
{
charstr[MAX];
inti=0,flage=0;
intcount=0;
printf("\nPleaseinputastring:
");
gets(str);
while(str[i])
{
if(str[i]=='a')
flage=1;
elseif(str[i]=='b')
{
if(flage==1)
{count++;flage=0;}
}
elseflage=0;
i++;
}
printf("thedoublechar\"ab\"countis%d\n",count);
}
10、#include/*相对于第一种方法,这种方法能把同为最大的字符串全部打印出来。
*/
#include
intpaixu(inta[],intn)/*构造对长度为n的数组排序的函数*/
{inti,j,t,k,temp;
for(i=0;i{
k=i;
for(j=i+1;jif(a[k]>a[j])
k=j;
if(k!
=i)
{t=a[i];
a[i]=a[k];
a[k]=t;
}
}
temp=a[n-1];
returntemp;/*返回最大字符串的长度的值*/
}
voidmain()
{
charstr1[50],str2[50],str3[50],str4[50],str5[50],str6[50];
charstr7[50],str8[50],str9[50],str10[50];
intcount[10]={0},temp[10]={0},i,j;
intpaixu(inta[],intn);
for(i=1;i<=10;i++)/*输入10个字符串*/
{
printf("\nPleaseinput%dstring:
",i);
if(i==1)
{gets(str1);while(str1[count[0]]){count[0]++;temp[0]++;}}
if(i==2)
{gets(str2);while(str2[count[1]]){count[1]++;temp[1]++;}}
if(i==3)
{gets(str3);while(str3[count[2]]){count[2]++;temp[2]++;}}
if(i==4)
{gets(str4);while(str4[count[3]]){count[3]++;temp[3]++;}}
if(i==5)
{gets(str5);while(str5[count[4]]){count[4]++;temp[4]++;}}
if(i==6)
{gets(str6);while(str6[count[5]]){count[5]++;temp[5]++;}}
if(i==7)
{gets(str7);while(str7[count[6]]){count[6]++;temp[6]++;}}
if(i==8)
{gets(str8);while(str8[count[7]]){count[7]++;temp[7]++;}}
if(i==9)
{gets(str9);while(str9[count[8]]){count[8]++;temp[8]++;}}
if(i==10)
{gets(str10);while(str10[count[9]]){count[9]++;temp[9]++;}}
}
j=paixu(temp,10);
for(i=1;i<=10;i++)
{
if(count[i-1]==j)
{
/*只要字符串长度与最大长度相等就打印出来*/
switch(i)
{case1:
puts(str1);
printf("\n");break;
case2:
puts(str2);
printf("\n");break;
case3:
puts(str3);
printf("\n");break;
case4:
puts(str4);
printf("\n");