谭浩强c语言第五版 第二章习题解答

答案解析

4.1

在这里插入图片描述
解题思路
只需要在拿出一个空瓶子 盛放醋或者酱油 即可变量交换

int main()
{
    
    
	int vinegar = 1;
	int sauce = 2;
	int empty=0;
	//将vinegar倒入empty
	empty = vinegar;
	//把sauce倒入vinrgar
	vinegar = sauce;
	sauce=empty;
	return 0;
}

4.2

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    
    
 	int i, j, k = 0;
	int arr[10] = {
    
     0 };
	//通过for循环jiang10个数录入数组中
	for (i = 0; i < 10; i++)
	{
    
    
		 scanf("%d", &arr[i]);
	}
	

	k = arr[0];
	i = 0;
	//假设将第一个数设为最大的 然后与数组每个数 比较 
 	for (i = 0; i < 10; i++)
	{
    
    
		//如果他比选定的数大 那么将大数赋给他
		if (arr[i] > k)
		{
    
    
			k = arr[i];
		}
	}
	printf("%d",k);
	return 0;
}

;代码运行结果如图

在这里插入图片描述

4.3

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    
    
	int tmp = 0;
	int i = 0;
	int arr[3] = {
    
     0 };
	//依次录入数组元素
	for (i = 0; i < 3; i++)
	{
    
    
		scanf("%d", &arr[i]);
	}
	int m = 0;
	int n = 0;
	int temp;
	//通过排序算法 将元素按从小到大的顺序排好
	for (m = 0; m < 3; m++)
	{
    
    
		for (n = 0; n < 3 - m - 1;n++)
		{
    
    
			if (arr[n] > arr[n + 1])
			{
    
    
				temp = arr[n];
				arr[n] = arr[n + 1];
				arr[n + 1] = temp;
			}
		}
	}
	//依次输出
	i = 0;
	for (i = 0; i < 3; i++)
	{
    
    
		printf("%d ", arr[i]);
	}
	return 0;
}

附上输出图
在这里插入图片描述

4.4

在这里插入图片描述

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    
    
	int i, j; 
		j = 0;
		//for 循环产生 1-100个整数即可 
		for (i = 0; i < 101; i++)
		{
    
    
			j = i + j;
        }
		printf("%d", j);
		return 0;
}

4.5

在这里插入图片描述

#include<stdio.h>
int main()
{
    
    
	int i = 0;
	scanf("%d", &i);
	//判断 除以5和3的余数是否同时为0
	if (i%5==0&&i%3==0)
	{
    
    
		printf("yes");
	}
	else
		printf("no");
	return 0;
}

4.6

在这里插入图片描述

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    
    
	int i, j, k;
	k = 100;
	int arr[101] = {
    
     0 };
	for (i = 0; i < 101; i++)
	{
    
    
		arr[i] = k++;//通过这个给数组每个元素附上100-200
		for (j = 2; j < arr[i]; j++)
		{
    
    
			if (arr[i] % j == 0)//判断arr[i]这个元素是否是合数
			{
    
    
				arr[i] = 0;//合数直接置零
				break;
			}
	    }
	}
	int m = 0;
	for (m = 0; m < 101; m++)
	{
    
    
		if (arr[m] != 0)//排除掉被置零的元素
		{
    
    
			printf("%d  ", arr[m]);
		}
	}
	return 0;
 }

在这里插入图片描述

4.7

在这里插入图片描述

求最大公约数 老祖宗的更相减损术
更相减损术的第一步就是判断两个数得最大公约数是否为2
我们只需要将for循环入口设置为**for (; i % 2 == 0&&j%2==0;)**只要要求的两个数 i j 均可以同时整除2就可以进入循环 我们还要增加一个变量m 确定除了几次2 在后续补上

for (; i % 2 == 0&&j%2==0;)
	 {
    
    
		 i = i/2;
		 j = j / 2;
		 m++;
	 }

当我们输入 i j 变量时 第二步就需要判断 i j 谁大 为了方便 我们将i变量设置为较大变量 通过简单的变量转换

if (j > i)
	 {
    
    
		 a = i;
		 i = j;
		 j = a;
	 }

在这里插入图片描述
从本例可以看出 就是先用输入的较大变量i减去较小变量j得到的差 然后差在和减数比较 较大的做被减数 小的做减数 直到减数和差相等
可见 循环的出口就是减数和差相等。
设计思路 先相减在将 减数和差的较大值附给i

for (;;)
	 {
    
    
		 b = i - j;
		 
		
		 if (j == b)
		 {
    
    
			 break; 
		 }
		 if (b > j)
		 {
    
    
			 a = j;
			 j = b;
			 b = a;
		 }
		 i = j;
		 j = b;

     }

最后如果m变量大于0那么因数就要乘以2的m倍 反之直接输出

if (m > 0)
	 {
    
    
		 n = 2 * m * b;
		 printf("最大公约数是%d", n);
      }
	 else
		 printf("最大公约数是%d", j);

附上整个

common()
 {
    
    
	 int a = 0;
	 int n = 0;
	 int m = 0;
	 int i = 0;
	 int j = 0; 
	 printf("请输入被求数\n");
	 scanf("%d %d", &i, &j);
	 for (; i % 2 == 0&&j%2==0;)
	 {
    
    
		 i = i/2;
		 j = j / 2;
		 m++;
	 }
	 if (j > i)
	 {
    
    
		 a = i;
		 i = j;
		 j = a;
	 }
	 a = 0;
	 int b = 0;
	 for (; ; )
	 {
    
    
		 b = i - j;
		 
		
		 if (j == b)
		 {
    
    
			 break;
		 }
		 if (b > j)
		 {
    
    
			 a = j;
			 j = b;
			 b = a;
		 }
		 i = j;
		 j = b;

     }
	 if (m > 0)
	 {
    
    
		 n = 2 * m * b;
		 printf("最大公约数是%d", n);
      }
	 else
		 printf("最大公约数是%d", j);
 }

4.8

在这里插入图片描述

4.8.1

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
    
    
	int i, j, k, m;
	float n,p,q;
	printf("请将方程化成标准形式AX^2+BX+C=0");
	printf("请依次输入A,B,C");
	scanf("%d %d %d", &i, &j, &k);
	m=j * j - 4 * i * k ;
	
	if (m < 0)
	{
    
    
		printf("没有实数根");
	}
	n = sqrt(m);//平方根函数
	p = (n - j) / (2 * i);
	q = (-n - j) / (2 * i);
	printf("%.2f %.2f",p,q);

}

8.1

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
    
    
	int arr[101] = {
    
     0 };
	int i, j, k;
	k = 1900;
	for (i =0; i < 101; i++)
	{
    
    
		arr[i] = k++;
		//第一个条件
		if (arr[i] % 4 == 0 && arr[i] % 100 != 0)
		{
    
    
			printf("%d ", arr[i]);
		}
		if (arr[i] % 400 == 0 && arr[i] % 100 == 0)
		{
    
    
			printf("%d ", arr[i]);
		}
	}
	return 0;
}

在这里插入图片描述

8.2

上面已经写了 见 4.8

8.3

在这里插入图片描述

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
    
    
	int arr[10] = {
    
     0 };
	int i, j, k;//十个数传入数组
	for (i = 0; i < 10; i++)
	{
    
    
		scanf("%d", &arr[i]);
	}
	int m, n;
	for (m = 0; m < 10; m++)
	{
    
    //冒泡排序 输出最后一个即可
		for (n = 0; n < 10 - m - 1; n++)
		{
    
    
			if (arr[n] > arr[n + 1])
			{
    
    
				k=arr[n];
				arr[n ] = arr[n+1];
				arr[n + 1] = k; 

			}
		}
	}
	printf("%d", arr[9]);
	return 0;
}


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45849625/article/details/112654765
今日推荐