啊哈C语言 第五章 【代码】【习题答案】

目录

第三节        逻辑挑战7:判断质数很简单

判断5是否为质数:

判断5是否为质数(反向思维):

判断5是否为质数(改善方法):

判断任意一个数是不是质数:

输出一个数的所有约数,如果没有约数就是质数:

第4节        更快一点:break

判断一个正整数是否为质数:

用break语句输出1 2 3 4 5:

第5节        continue

用continue语句打印1~100的偶数:

第6节        逻辑挑战8:验证哥德巴赫猜想

判断一个数是否为质数:

在4~100内验证哥德巴赫猜想并输出每个偶数的所有可能的拆分方法:

第7节        逻辑挑战9:水仙花数

用三重嵌套循环来产生100~999:

在100~999中判断哪个数字是“水仙花数”(拼接法):

在100~999中判断哪个数字是“水仙花数”(分割法):

输入一个3位数,求这个数个位、十位和百位的数之和:

输入范围在1~99999999的n位数,求这个n位数每一位上的数之和:

第8节        逻辑挑战10:解决奥数难题

请在两个□内填入相同的数字使得等式成立:□3 * 6528 = 3□ * 8256

请问A、B、C、D、E(5个互不相同的整数)分别为多少时,ABCD*E=DCBA:

用1~6自然数组成一个三角形并让这个三角形三条边上数字之和相等:

第9节        逻辑挑战11:猜数游戏

限定6次猜0~99的整数:

生成一个1~20000000的随机数:

第10节        逻辑挑战12:你好坏,关机啦

启动关机程序与6次猜数问题结合:


第三节        逻辑挑战7:判断质数很简单


判断5是否为质数:

#include 
#include 

int main()
{
	int a;
	a = 5;

	if (a % 2 != 0 && a % 3 != 0 && a % 4 != 0)
	{
		printf("质数\n");
	}
	else
	{
		printf("合数\n");
	}

	system("pause");
	return 0;
}

调试结果:



判断5是否为质数(反向思维):

#include 
#include 

int main()
{
	int a;
	a = 5;

	if (a % 2 == 0 || a % 3 == 0 || a % 4 == 0)
	{
		printf("合数\n");
	}
	else
	{
		printf("质数\n");
	}

	system("pause");
	return 0;
}

调试结果:

 



判断5是否为质数(改善方法):

#include 
#include 

int main()
{
	int a, count, i;

	count = 0;
	a = 5;

	for (i = 2; i <= 4; i++)
	{
		if (a % i == 0)
			count++;
	}

	if (count == 0)
	{
		printf("质数\n");
	}
	else
	{
		printf("合数\n");
	}

	system("pause");
	return 0;
}

调试结果:

  



判断任意一个数是不是质数:

#include 
#include 

int main()
{
	int a, count, i;
	count = 0;
	scanf("%d", &a);
	for (i = 2; i <= a - 1; i++)
	{
		if (a % i == 0)
			count++;
	}
	if (count == 0)
	{
		printf("质数\n");
	}
	else
	{
		printf("合数\n");
	}

	system("pause");
	return 0;
}

调试结果:



输出一个数的所有约数,如果没有约数就是质数:

#define  _CRT_SECURE_NO_WARNINGS

#include 
#include 

int main()
{
	int a, count, i;
	count = 0;
	scanf("%d", &a);
	for (i = 2; i <= a - 1; i++)
	{
		if (a % i == 0)
		{
			count++;
			printf("%d ", i); //打印出约数
		}
	}
	if (count == 0)
	{
		printf("\n质数\n");
	}
	else
	{
		printf("\n合数\n");
	}

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第1张图片


第4节        更快一点:break


判断一个正整数是否为质数:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 

int main()
{
	int a, count, i;
	count = 0;
	scanf("%d", &a);
	for (i = 2; i <= a - 1; i++)
	{
		if (a % i == 0)
		{
			count++;
			break;
		}
	}
	if (count == 0)
	{
		printf("质数\n");
	}
	else
	{
		printf("合数\n");
	}

	system("pause");
	return 0;
}

调试结果:



用break语句输出1 2 3 4 5:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 

int main()
{
	int a, count, i;
	count = 0;
	scanf("%d", &a);
	for (i = 2; i <= a - 1; i++)
	{
		if (a % i == 0)
		{
			count++;
			printf("%d ", i); //打印出约数
		}
	}
	if (count == 0)
	{
		printf("质数\n");
	}
	else
	{
		printf("合数\n");
	}

	system("pause");
	return 0;
}

调试结果:


第5节        continue


用continue语句打印1~100的偶数:

#include 
#include 

int main()
{
	int i;
	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
		{
			continue;
		}
		printf("%d ", i);
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:


第6节        逻辑挑战8:验证哥德巴赫猜想


判断一个数是否为质数:

#include 
#include 

int main()
{
	int k, a, b, i, count1, count2;
	for (k = 4; k <= 100; k = k + 2)
	{
		for (a = 2; a <= k / 2; a++)
		{
			//判断a是否为质数
			count1 = 0;
			for (i = 2; i <= a - 1; i++)
			{
				if (a % i == 0)
				{
					count1++;
					break;
				}
			}
			if (count1 == 0) //如果a为质数
			{
				b = k - a;
				//判断b是否为质数
				count2 = 0;
					for (i = 2; i <= b - 1; i++)
					{
						if (b % i == 0)
						{
							count2++;
							break;
						}
				}
				if (count2 == 0) //如果b也是质数
				{
					printf("%d = %d + %d\n", k, a, b);
					break; //打印这个解并跳出循环
				}
			}
		}
	}

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第2张图片



在4~100内验证哥德巴赫猜想并输出每个偶数的所有可能的拆分方法:

#include 
#include 

int main()
{
    int a, b, k, i, count1, count2;
    for (k = 4; k <= 100; k = k + 2)
    {
        printf("%d", k);
        for (a = 2; a <= k / 2; a++)
        {
            count1 = 0;
            for (i = 2; i <= a - 1; i++)
            {

                if (a % i == 0)
                    count1++;
            }
            if (count1 == 0)
            {
                b = k - a;
                count2 = 0;
                for (i = 2; i <= b - 1; i++)
                {

                    if (b % i == 0)
                        count2++;
                }
                if (count2 == 0)
                    printf(" = %d + %d ", a, b);
            }
        }
        printf("\n");
    }
  
	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第3张图片


第7节        逻辑挑战9:水仙花数


用三重嵌套循环来产生100~999:

#include 
#include 

int main()
{
	int i, j, k;
	for (i = 1; i <= 9; i++)
	{
		for (j = 0; j <= 9; j++)
		{
			for (k = 0; k <= 9; k++)
			{
				printf("%d ", i * 100 + j * 10 + k);
			}
		}
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第4张图片



在100~999中判断哪个数字是“水仙花数”(拼接法):

#include 
#include 

int main()
{
	int i, j, k;
	for (i = 1; i <= 9; i++)
	{
		for (j = 0; j <= 9; j++)
		{
			for (k = 0; k <= 9; k++)
			{
				if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
				{
					printf("%d ", i * 100 + j * 10 + k);
				}
			}
		}
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



在100~999中判断哪个数字是“水仙花数”(分割法):

#include 
#include 

int main()
{
	int x, a, b, c;
	for (x = 100; x <= 999; x++)
	{
		a = x / 100;
		b = x / 10 % 10;
		c = x % 10;
		if (x == a * a * a + b * b * b + c * c * c)
			printf("%d ", x);
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



输入一个3位数,求这个数个位、十位和百位的数之和:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 

int main()
{
	int x, a, b, c, d;
	scanf("%d", &x);

	a = x / 100;
	b = x / 10 % 10;
	c = x % 10;
	d = a + b + c;

	printf("%d \n", d);

	system("pause");
	return 0;
}

调试结果:



输入范围在1~99999999的n位数,求这个n位数每一位上的数之和:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 

int main()//主函数 
{
	int x, y = 0; //定义两个数,x代表这个输入的n位数,y代表n各个位上数之和 
	scanf("%d", &x); //输入一个数,将其存放到x 
	while (x > 0) //使用while循环函数只要x>0循环一直进行 
	{
		y += x % 10; //y只要一直加x的余数,就是各个位数上的数字 
		x = x / 10; //由于x等号两边的数为整数则结果为整数,让x的位数递减直至x=0循环结束 
	}
	printf("%d\n", y);

	system("pause");
	return 0;
}

调试结果:


第8节        逻辑挑战10:解决奥数难题


请在两个□内填入相同的数字使得等式成立:□3 * 6528 = 3□ * 8256

#include 
#include 

int main()
{
	int i;
	for (i = 1; i <= 9; i++)
	{
		if ((i * 10 + 3) * 6528 == (30 + i) * 8256)
			printf("%d\n", i);
	}

	system("pause");
	return 0;
}

调试结果:



请问A、B、C、D、E(5个互不相同的整数)分别为多少时,ABCD*E=DCBA:

#include 
#include 

int main()
{
	int a, b, c, d, e;
	for (a = 0; a <= 9; a++)
	{
		for (b = 0; b <= 9; b++)
		{
			for (c = 0; c <= 9; c++)
			{
				for (d = 0; d <= 9; d++)
				{
					for (e = 0; e <= 9; e++)
					{
						if (a != b && a != c && a != d && a != e && b != c && b != d && b != e && c != d && c != e && d != e)
						{
							if ((a * 1000 + b * 100 + c * 10 + d) * e == (d * 1000 + c * 100 + b * 10 + a))
							{
								printf("%d%d%d%d\n", a, b, c, d);
								printf("*  %d\n", e);
								printf("----\n");
								printf("%d%d%d%d\n", d, c, b, a);
							}
						}
					}
				}
			}
		}
	}

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第5张图片



用1~6自然数组成一个三角形并让这个三角形三条边上数字之和相等:

#include 
#include 

int main()
{
	int a, b, c, d, e, f, sum = 0;
	for (a = 1; a <= 6; a++)
	{
		for (b = 1; b <= 6; b++)
		{
			for (c = 1; c <= 6; c++)
			{
				for (d = 1; d <= 6; d++)
				{
					for (e = 1; e <= 6; e++)
					{
						for (f = 1; f <= 6; f++)
						{
							if (a + b + c == c + d + e)
							{
								if (c + d + e == e + f + a)
								{
									if (a + b + c == a + f + e)
									{
										if (a != b && a != c && a != d && a != e && a != f
											&& b != c && b != d && b != e && b != f
											&& c != d && c != e && c != f
											&& d != e && d != f
											&& e != f)
										{
											sum++;
											printf("\n\n");
											printf("	 %d\n\n", a);
											printf("     %d       %d\n\n", b, f);
											printf("%d	 %d	 %d\n\n", c, d, e);
											printf("--------------------------\n");
										}

									}
								}
							}
						}
					}
				}
			}
		}
	}
	printf("\nsum = %d \n", sum);

	system("pause");
	return 0;
}

调试结果:



         1

     4       6

5        2       3

--------------------------


         1

     5       6

3        4       2

--------------------------


         1

     6       5

2        4       3

--------------------------


         1

     6       4

3        2       5

--------------------------


         2

     3       5

6        1       4

--------------------------


         2

     4       6

3        5       1

--------------------------


         2

     5       3

4        1       6

--------------------------


         2

     6       4

1        5       3

--------------------------


         3

     2       6

5        4       1

--------------------------


         3

     4       5

2        6       1

--------------------------


         3

     5       4

1        6       2

--------------------------


         3

     6       2

1        4       5

--------------------------


         4

     1       5

6        3       2

--------------------------


         4

     2       3

6        1       5

--------------------------


         4

     3       2

5        1       6

--------------------------


         4

     5       1

2        3       6

--------------------------


         5

     1       3

6        2       4

--------------------------


         5

     2       4

3        6       1

--------------------------


         5

     3       1

4        2       6

--------------------------


         5

     4       2

1        6       3

--------------------------


         6

     1       3

4        5       2

--------------------------


         6

     1       2

5        3       4

--------------------------


         6

     2       1

4        3       5

--------------------------


         6

     3       1

2        5       4

--------------------------

sum = 24
请按任意键继续. . .

第9节        逻辑挑战11:猜数游戏


限定6次猜0~99的整数:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 

int main()
{
	int a, b, sum;
	sum = 6;
	srand((unsigned)time(NULL));
	a = rand() % 100;
	while (1)
	{
		sum--;
		scanf("%d", &b);
		if (b > a)
			printf("大了,还剩下%d次机会,请继续\n", sum);
		if (b < a)
			printf("小了,还剩下%d次机会,请继续\n", sum);
		if (b == a)
		{
			printf("恭喜你,答对了!\n");
			break;
		}
		if (sum == 0)
		{
			printf("已经没有机会了,请重新开始吧!\n");
			break;
		}
	}

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第6张图片



生成一个1~20000000的随机数:

#include 
#include 
#include 

int main()
{
    int a, b, n, i = 1;
    srand((int)time(NULL));

    while (i > 0)
    {
        int a = rand() % 4000 + 1;
        int b = rand() % 5000 + 1;

        int n = a * b;

        printf("%d\n", n);
        i--;
    }

    system("pause");
    return 0;
}

调试结果:


第10节        逻辑挑战12:你好坏,关机啦


启动关机程序与6次猜数问题结合:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include

int main()
{
	int a, b, sum;
	sum = 6;
	srand((unsigned)time(NULL));
	a = rand() % 100;
	while (1)
	{
		sum--;
		scanf("%d", &b);
		if (b > a)
			printf("大了,还剩下%d次机会,请继续\n", sum);
		if (b < a)
			printf("小了,还剩下%d次机会,请继续\n", sum);
		if (b == a)
		{
			printf("恭喜你,答对了!\n");
			break;
		}
		if (sum == 0)
		{
			printf("没有机会了,系统将在50秒后关机\n");
			system("shutdown -s -t 50");
			break;
		}
	}

	system("pause");
	return 0;
}

调试结果:

啊哈C语言 第五章 【代码】【习题答案】_第7张图片


 

你可能感兴趣的:(啊哈C语言,学习,c语言)