c语言程序设计 第五章 代码练习

3.输入两个正整数 m 和n,求其最大公约数和最小公倍数

卡壳在算法;

4.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

代码:

#include<stdio.h>
int main()
{
	printf("请输入一段字符:\n");
	int letter=0,space=0,num=0,other=0;
	char c;
	while((c=getchar())!='\n')
	{
		if(c>='a'&&c<='z'||c>='A'&&c<='Z')
			{letter++;}
		else if(c>='0'&&c<='9')
			{num++;}
		else if(c==' ')
			{space++;}
		else 
			{other++;}
	}
	printf("字母一共%d个\n空格一共%d个\n数字一共%d个\n其他符号一共%d个\n",letter,space,num,other);
	return 0;
}

一开始结果有错,统计的其他字符数量比实际的多。这个时候写的是 if else else else else

后面改成了if /else if/else if/else if/else 就正常了

 

 5.代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int a,n;
	int temp=0;
	int sum=0;
	printf("请输入一个a的值:\n");
	scanf("%d",&a);
	printf("请输入一个n的值:\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{temp=10*temp+a;
	sum=temp+sum;}
	printf("sum2=%d\n",sum);
	return 0;
}

算法卡了好久,没理解t=t*10+a;一直以为是t=10*i+a,感觉不对劲,又搞了 t=pow(10,i)+a,后面是vscode有点问题,也没有验证,反正t=t*10+a是对的。

 

代码:

  1 #include<stdio.h>
  2 int main()
  3 {
  4         int i;
  5         int s=0,x=1;
  6         for(i=1;i<=20;i++)
  7         {
  8                 x=x*i;
  9                 s=x+s;
 10         }
 11         printf("sum=%d\n",s);                                                                                                                                                                          
 12         return 0;
 13 }

 结果:

 一些问题:一开始忘记给sum,x赋初值,所以出来的结果都是随机的。

 后面注释的是我本来想写个阶乘函数,然后在主函数调用,但是好像并不需要这么复杂,我也不会搞这个,就注释掉了。

还有一个注意的地方,double如果变成int,结果会从上面变成下面:

后面把double改成long int,结果也是正确的。注意相应要改成%ld

 7.

代码:

  1 #include<stdio.h>
  2 int main()
  3 {
  4         double s1=0,s2=0,s3=0;
  5         int i=1;
  6         for(i=1;i<=100;i++)
  7         {
  8                 s1=s1+i;
  9         }
 10         for(i=1;i<=50;i++)
 11         {
 12                 s2=s2+i*i;
 13         }
 14         for(i=1;i<=10;i++)
 15         {
 16                 s3=s3+1.0/i;                                                                                                                                                                           
 17         }
 18         printf("%.5f\n",s1+s2+s3);
 19         return 0;
 20 }
 21 

 结果:

 可以看到上面的结果是47976.00000,下面的结果正确,因为把1/k改成了1.0/k;

8.盗版印刷错误,是153=1的三次方+5的三次方+3的三次方。我说怎么看不懂呢。

注意:12.3%10会报错,但是x/10%10,给x赋值123,结果会是2.我还不知道是为什么,但是问题不大。

 

 代码:

  1 #include<stdio.h>
  2 int main()
  3 {
  4 
  5         for(int i=100;i<1000;i++)
  6         {
  7                 int a,b,c;
  8                 a=i/100;
  9                 b=(i/10)%10;
 10                 c=i%10;
 11                 if(a*a*a+b*b*b+c*c*c==i)
 12                 printf("%d是水仙数\n",i);                                       
 13         }
 14         return 0;
 15 }
 16 

结果:

 

 一些问题:在for循环里面,我定义了一个i,然后就是没有出现结果。

发现可以在for括号后面,定义i,很方便,for(int i=100;i<1000;i++)。

9. 

 代码:

#include<stdio.h>

int main()
{
	int i, j, sum;      /* i表示要判断的数,j表示因子,sum表示因子之和*/ 

	for (i = 2; i <= 1000; i++)
	{
		sum = 1;
		for (j = 2; j <= i / 2; j++)
			if (i%j == 0)         /* 判断i能否被j整除,能的话j即为因子  因子不包括自身 */ 
				sum += j;

		if (sum == i)    /* 判断此数是否等于因子之和 */ 
		{
			printf("%d its factors are 1, ", i);    /* 输出该数 */ 

			for (j = 2; j <= i / 2; j++)
				if (i%j == 0)printf("%d, ", j);    /* 输出因子 */ 

			printf("\n");
		}
	}

	return 0;
}

结果:

10.

  1 #include<stdio.h>
  2 int main()
  3 {
  4         double a=2,b=1,sum=0,temp;
  5         for(int i=1;i<=20;i++)                                                  
  6         {
  7                 sum=a/b+sum;
  8                 temp=a;
  9                 a=a+b;
 10                 b=temp;
 11         }
 12         printf("%f",sum);
 13         printf("\n");
 14         return 0;
 15 }

 结果:

代码:

  1 #include<stdio.h>
  2 int main()
  3 {
  4         double total_m=100,total_sum=0.0;
  5         for(int i=0;i<10;i++)
  6         {
  7                 total_sum+=total_m;
  8                 total_m/=2;
  9                 total_sum+=total_m;
 10         }
 11         total_sum-=total_m;
 12         printf("共经历%f米,弹起来%f米\n",total_sum,total_m);                   
 13         return 0;
 14 }

 结果:

 

代码:

1 #include<stdio.h>
  2 int main()
  3 {
  4         int sum=1;
  5         for(int i=9;i>0;i--)
  6         {
  7                 sum=(sum+1)*2;
  8         }
  9         printf("有%d个桃子\n",sum);                                                                                                                                                                    
 10         return 0;
 11 }
 12 

 结果:

13.  while(fabs(x0-x1)>=le-5);

fabs求绝对值的函数,1e-5指10的五次方。

代码:

  1 #include<stdio.h>
  2 #include<math.h>
  3 int main()
  4 {
  5         float a,x0,x1;
  6         printf("输入正数:");
  7         scanf("%f",&a);
  8         x0=a/2;
  9         x1=(x0+a/x0)/2;
 10         do                                                                                                                                          
 11         {
 12                 x0=x1;
 13                 x1=(x0+a/x0)/2;
 14         }
 15         while(fabs(x0-x1)>=1e-5);
 16         printf("[%f]的平方根为[%f]",a,x1);
 17         return 0;
 18 }

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值