谭浩强C语言习题集课后源码.docx
《谭浩强C语言习题集课后源码.docx》由会员分享,可在线阅读,更多相关《谭浩强C语言习题集课后源码.docx(13页珍藏版)》请在冰豆网上搜索。
![谭浩强C语言习题集课后源码.docx](https://file1.bdocx.com/fileroot1/2022-12/14/3a492172-815f-4cd8-a569-c0ad592627cf/3a492172-815f-4cd8-a569-c0ad592627cf1.gif)
谭浩强C语言习题集课后源码
3.1输入一行字符,分别统计其中英文字母,数字,空格,其他字符个数
#include
voidmain()
{
inta=0,b=0,c=0,d=0;
chari;
printf("请输入一行字符:
");
while((i=getchar())!
='\n')//如何实现连续输入一串字符并进行判断?
?
{
if(i>=65&&i<=90||i>=96&&i<=122)
a++;
elseif(i==32)
b++;
elseif(i>=48&&i<=57)
c++;
else
d++;
}
printf("英文字母:
%d个,\n空格:
%d个,\n数字:
%d个,\n其他字符:
%d个\n",a,b,c,d);
}
3.2#include
voidmain()
{
intn,a,i,b=1;
longsum=0;
printf("inputn,a:
");
scanf("%d%d",&n,&a);
for(i=0;i{
sum+=a;
a=a*10+a/b;//如何避免使得a=99*10+99?
的问题?
?
b=b*10;
}
printf("和为:
%d\n",sum);
}
3.3#include
voidmain()
{
longsum=0,b=1;
inti;
for(i=1;i<=20;i++)
{
b=b*i;//保持b的连乘
sum+=b;
}
printf("1!
+2!
+3!
+...+20!
=%d\n",sum);
}
3.4#include
voidmain()
{
inti;
floatsum_1=0.0,sum_2=0.0;
floatsum_3=0.0;
floatsum;
for(i=1;i<=20;i++)
{
sum_1+=i;
}
for(i=1;i<=20;i++)
{
sum_2+=i*i;
}
for(i=1;i<=20;i++)
{
sum_3+=1/i;
}
sum=sum_1+sum_2+sum_3;
printf("1+2+...+20+1^2+2^2+...20^2+1/1+1/2+...1/20=%.4f\n",sum);
}
3.5#include
voidmain()
{
inti,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%4d",i);
}
printf("\n");
}
3.6难!
!
!
#include
voidmain()
{
inti,j,a;
for(i=2;i<=1000;i++)
{
a=0;//A在第一个for语句后面赋值
for(j=1;j
{
if(i%j==0)
a=a+j;
}//在这个for语句中完成约数累加后外面比较
if(a==i)
printf("%4d",i);
}
printf("\n");
}
3.6求1000以内的完数并每行按格式输出其因子:
6=1+2+3
#include
voidmain()
{
intsum,a,k,j,i;
for(i=1;i<1000;i++)
{
sum=0;
for(j=1;j
if(i%j==0)
{
sum=sum+j;//假如找到一个因子就加起来
a=j;//for循环执行完后a就是最大的那个因子
}
if(sum==i)//判断因子之和与i是否相等
{
printf("%d=",i);
for(k=1;k
if(i%k==0)
{
printf("%d",k);
if(k!
=a)
printf("+");//假如这个k不是最大的那个因子则输出+号
}
printf("\n");//每输出完一个就换行
}
}
}
3.7#include
voidmain()
{
floatj=2.0,i=1.0;
inta;
floatsum=0.0;
for(a=0;a<20;a++)
{
sum+=j/i;
j=i+j;
i=j-i;
}
printf("2/1+3/2+5/3+...=%.4f\n",sum);
}
3.8#include
voidmain()
{
inta;
floatsum=100.0,h=50.0;
for(a=1;a<10;a++)
{
sum=sum+2*h;//少跳一次
h=h/2;
}
printf("共经过:
%f米\n",sum);
printf("第10次反弹:
%f米\n",h);
}
3.9#include
voidmain()
{
inti,j=1;
for(i=1;i<10;i++)
{
j=(j+1)*2;
}
printf("第一天一共摘了%d个桃子\n",j);//不采用sum=sum+j的形式
}
3.10
#include
#include
voidmain()
{
floatx1,x2=1.0;
inta;
printf("inputa:
");
scanf("%d",&a);
do
{
x1=x2;
x2=(x1+a/x1)/2;//x1与x2的相互转换
}while(fabs(x2-x1)>1e-5);//难点!
!
!
printf("根号%d的近似值为:
%.4f\n",a,x2);
}
3.11不会!
!
!
3.12不会!
!
!
3.11
#include
#include
floatsolution(floatx)
{
floatx1,y,k;
do
{
k=6*x*x-8*x+3;
y=2*x*x*x-4*x*x+3*x-6;
x1=x-y/k;
x=x1;
}
while(fabs(y)<0.001);
returnx;
}
voidmain()
{
floatx;
x=1.5;
x=solution(x);
printf("%f\n",x);
}
3.12
3.13#include
voidmain()
{
inti,j;
for(i=0;i<4;i++)
{for(j=0;j<4-i;j++)
printf("");
for(j=0;j<2*i-1;j++)
printf("*");
printf("\n");
}
for(i=0;i<3;i++)
{
for(j=0;j
printf("");
for(j=0;j<7-2*i;j++)
printf("*");
printf("\n");
}
}
3.14不会!
!
!
#include"stdio.h"
voidmain()
{
chari,j,k;
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
for(k='x';k<='z';k++)
{
if(i!
=j&&i!
=k&&j!
=k&&i!
='x'&&k!
='x'&&k!
='z')
printf("a--%c\nb--%c\nc--%c\n",i,j,k);
}
}
3.15#include
voidmain()
{
intx,y;
printf("inputx:
");
scanf("%d",&x);
if(x<1)
printf("y=%d\n",x);
elseif(x>=1&&x<10)
printf("y=%d\n",2*x-1);
else
printf("y=%d\n",3*x-11);
}
3.16#include
voidmain()
{
intx,y;
printf("inputscore:
");
scanf("%d",&x);
if(x>=90&&x<=100)
printf("A\n");
elseif(x>=80&&x<=89)
printf("B\n");
elseif(x>=70&&x<=79)
printf("C\n");
elseif(x>=60&&x<=69)
printf("D\n");
elseif(x>=0&&x<=59)
printf("E\n");
else
printf("inputerror!
\n");
}
3.17#include
voidmain()
{
intx,y,z;
intweishu(intx);
intfanxu(intx);
inta,b,c,d,e,i,index=1;
printf("请输入一个小于5位的数字:
");
scanf("%d",&x);
y=weishu(x);
z=fanxu(x);
if(x/100000!
=0||x<0)//确定输入的是一个小于5位的数字
printf("inputerror!
\n");
else
{
printf("该数是一个%d位数字\n",y);
if((x%10)!
=0)printf("个位:
%d\n",x%10);
if((x%100/10)!
=0)printf("十位:
%d\n",x%100/10);
if((x%1000/100)!
=0)printf("百位:
%d\n",x%1000/100);
if((x%10000/1000)!
=0)printf("千位:
%d\n",x%10000/1000);
if((x/10000)!
=0)printf("万位:
%d\n",x/10000);
printf("该数的逆序为:
%d\n",z);
}
}
intweishu(intx)
{
inty=1,i;
for(i=0;i<5;i++)
{if(x/10!
=0)
y++;
x=x/10;}
returny;
}
intfanxu(intx)
{
intz,a,b,c,d,e;
a=x%10;
b=x%100/10;
c=x%1000/100;
d=x%10000/1000;
e=x/10000;
z=a*10000+b*1000+c*100+d*10+e*1;
returnz;
}
3.18