谭浩强【C程序设计】课后编程题(第五章)

//Homework
//P141


//5.3
void max_min_Number(void)
{
	unsigned int m, n;
	int i;
	unsigned int min, max,mul;
	scanf_s("%d%d", &m, &n);
	mul = m * n;
	for ( i= m; i > 0; i--)
	{
		if (m % i == 0 && n % i == 0)
			break;
	}
	max = i;
	printf("The greatest common divisor is %d\n", max);
	min = mul / max;  // m*n = max*min
	printf("The least common multiple is %d\n", min);
}

//5.4
void char_Stati(void)
{
	char s[100];
	int i;
	int abc=0, nul=0, num=0, other=0;
	gets(s);
	//printf("%s", m);
	//scanf_s("%s",s, 100);  // VS2019特性
	for (i = 0; i < strlen(s);i++)
	{
		if (('a' <= s[i] && s[i] <= 'z') || ('A' <= s[i] && s[i] <= 'Z'))
		{
			abc++;
		}
		else  if ('0' <= s[i] && s[i] <= '9')
		{
			num++;
		}
		else if (s[i] == ' ')
		{
			nul++;
		}
		else
		{
			other++;
		}
	}
	printf("%s\n", s);
	printf("字母:%d  数字:%d  空格:%d  其它:%d\n", abc, num, nul, other);

}

//5.5
void multi_2Sum(void)
{
	int  i,j,n;
	long sum = 0,num=0;
	scanf_s("%d", &n);
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= i; j++)
		{
			num = num + 2 * pow(10, j - 1);
			if(i==j)
			{
				printf("per: %d\n", num); //  方便查看
			}
		}
		sum += num;
		num = 0;
	}
	printf("total: %d\n", sum);
}

//5.6
void sum_Sn(void)
{
	int i, j;
	long long int  mul=1, sum=0;
	for (i = 1; i <= 20; i++) // 外层循环用于求和
	{
		for (j = 1; j <= i; j++)//内层循环用于求阶乘
		{
			mul = mul*j;
			if (i == j)
			{
				printf("%-d的阶乘是:%-lld\n", j, mul);  // 使用lld输出
			}
		}
		sum += mul;
		mul = 1;
	}
	printf("1到20各数的阶乘之和为:%-lld\n", sum);  // 使用lld输出
}

//5.7
void sum_Dir(void)
{
	int i;
	double k;
	int l = 0;
	double sum1 = 0, sum2 = 0, sum3 = 0;
	scanf_s("%f", &k); //输入k
	for (i = 1; i <= 100; i++)
	{
		sum1 += k ;
	}
	printf("%d\n", sum1);
	for (i = 1; i <= 50; i++)
	{
		 sum2 += k * k;
	}
	printf("%d\n", sum2);
	for (i = 1; i <= 10; i++)
	{
		sum3+= 1 / k;
	}
	printf("%d\n", sum3);
	printf("%d\n", sum1+sum2+sum2);
}

//5.8
void narcissus_Numbers(void)
{
	int i;
	int _n100, _n10, _n1;
	printf("This is a program of narciaaus numbers:\n");
	for (i = 100; i <= 999; i++)
	{
		_n100 = i / 100;
		_n10 = i % 100 / 10;
		_n1 = i %10;
		if (_n100 * _n100 * _n100 + _n10 * _n10 * _n10 + _n1 * _n1 * _n1 == i)
		{
			printf("%d\n", i);
		}
	}
}

//5.9
void full_Numbers(void)
{
	int i = 1000, j=1, k=0;
	int sum = 0;
	char num[100] = { 0 };
	while (--i)  // 1-1000,i=999
	{
		printf("---------第%d层循环--------\n", i);
		while (j<i) 
		{
			if(i % j == 0) // 得到因子
			{ 
				sum += j;    // 因子求和
				printf("%d\n", j);
			}
			j++;
			if (sum == i)
			{
				printf("sum is  %d\n", sum);
				printf("%d is full number\n ", i);
				sum = 0;
			}
		}
		j = 1;
		k = 0;
		sum = 0;
		printf("--------------------------\n", i);
		printf("\n");
	}
}

//5.10
void fraction_20(void)
{
	int k=20;
	float i = 2, j = 1;
	int last_i=1, last_j = 1;
	float sum=0;
	int temp_i, temp_j;
	while (k--)
	{
		printf("%.0f/%.0f\n", i, j); //输出验证
		temp_i = i;                //暂存i0
		temp_j = j;
		sum += i / j;
		i = i + last_i;             // 求值i1
		j = j + last_j;            //
		last_i = temp_i;       // last_i = temp_i
		last_j = temp_j;      // last_j = temp_j
	}
	printf("%.2f", sum);
}

//5.11
void ball_Height(void)
{
	float _height = 100;
	int i;
	for (i = 0; i < 10; i++)
	{
		_height = 1.0 / 2 * _height;
	}
	printf("the height is %.2f m\n", _height);
}

//5.12
void monkey_Peach(void)
{
	int i;
	double first_day, last_day=1;
	for (i = 0 ;i < 10; i++)
	{
		last_day = (2 * last_day + 1);
	}
	first_day = last_day;
	printf("the number of peach in the first day is %.0f\n", first_day);
	// 下面是验证
	for (i = 0; i < 10; i++)
	{
		last_day = (1/2 * last_day + 1);
	}
	first_day = last_day;
	printf("the number of peach in the last day is %.0f\n", first_day);
}

//5.13
void loop_Roots(void)
{
	double a=0;
	double xn=1.0,xn_1=0;  // 设初值
	double error=1.0;
	printf("please enter a number:\n");
	scanf_s("%lf", &a); // 键入求根值
	xn = a / 2;
	while (error > 1e-5)
	{
		xn_1 = 1.0 / 2 * (xn + a / xn);
		error = abs(xn_1 - xn);
		xn = xn_1;
	}
	printf("the root of sqrt number is %.2f:\n",xn_1);
}

//5.14
//牛顿迭代法求根公式:
// Pn+1 = Pn-[f(Pn)/f'(Pn)]
void newton_Roots(void)
{
	# 
	double pn_1=0, pn=1.5;
	double err=1.0;
	while (err >= 1e-6)
	{
		pn_1 = pn - ((2*pn*pn*pn-4*pn*pn+3*pn-6)/(6 * pn * pn - 8 * pn + 3));
		err = abs(pn_1 - pn);
		pn = pn_1;
	}
	printf("the root of f(x) is %.4f.\n", pn_1);

}

//5.15 
void  half_Roots(void)
{
	double x0=-10, x1=10; //定义区间
	double xn;
	double err = 1.0;
	double zero = 0.0;
	int i = 10;
	while(err>1e16 || err!=0)
	{
		err = (x1 - x0)/2.0;  //误差
		xn = 1.0 / 2.0 * ((float)abs(x1) - (float)abs(x0));   // 二分,
		if ((2 * x1 * x1 * x1 - 4 * x1 * x1 + 3 * x1 - 6)*(2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6) < zero)   //
		{
			x1 = xn;
		}
		else
		{
			x0 = xn;
		}
	}
	printf("the root of f(x) is %.4f.\n", xn);
}

// 5.16
void print_Shape(void)
{
	printf("   *   \n  ***  \n ***** \n*******\n ***** \n  ***  \n   *   ");
}

//5.17
void game_Combine(void)
{
	int i, j;
	for (i = 1; i <= 3; i++)
	{
		for (j = 1; j <= 3; j++)
		{
			if ((i != 1 || j != 1)&& (i != 3 || j != 1) && (i != 3 || j != 3))
			{
				printf("T1-%d VS T2-%d\n", i, j);
			}

		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicssic

与你一起成长

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值