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

目录

第1节        永不停止的哭声

让计算机永不停止地在屏幕上打印wa:

不停地在屏幕上打印0和1:

让计算机“永无止境”地打印hello:

让计算机“永不止境”地在屏幕上显示中文汉字“你好”:

第2节        我说几遍就几遍

使用while循环输出100个wa:

打印1~100:

让计算机先输出100再输出99、98、97、……、1:

打印1~100中的偶数:

打印1~100中能被3整除的数:

让计算机从100打印到200:

让计算机从1打印到100再打印到1:

第3节        if对while说:我对你很重要

让计算机输出1~100中所有不能被3整除的数:

输出1~100中能被3整除但不能被5整除的所有数:

1~100中所有7的倍数和末尾含7的数:

第4节        求和!求和!!求和!!!

求1 + 2 + 3的值:

求1~100中所有数的和:

求1~100中所有7的倍数或者末尾含7的数的总和:

求1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10的值:

求1~100所有偶数的和:

输入一个整数n(1 <= n <= 9),求n的阶乘:

第5节        逻辑挑战4:60秒倒计时开始

让计算机输出3、2、1、0:

让计算机输出3、2、1、0(每过一秒打印一个数):

让计算机输出3、2、1、0(每次打印新内容前清除屏幕):

3秒的倒计时:

60秒的倒计时:

第6节        这个有点晕——循环嵌套来了

3行星号,每行5个星号的图形(循环嵌套):

5行星号,第一行1个星号,第二行2个星号……:

请尝试用while循环打印下面的图形(1):

请尝试用while循环打印下面的图形(2):

第7节        逻辑挑战5:奔跑的字母

字母H从左边向右边移动了3步:

第8节        究竟循环了多少次

打印6个OK:

打印8个OK:

请问下面这段代码会打印多少个“OK”?

第9节        逻辑挑战6:奔跑的小人

小人:

奔跑的小人:

设计一个“小人”并让它从右边向左边奔跑:

第10节        for隆重登场

用while让计算机从1循环到10:

用for让计算机从1循环到10:

用for循环来实现1~100中所有数的总和:

打印1~100中所有偶数:

用for循环输出1~100中所有7的倍数或者末尾含7的数:

求1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10的值:

尝试用for循环打印下面的图形:

尝试用for循环来打印一个九九乘法表:


第1节        永不停止的哭声


让计算机永不停止地在屏幕上打印wa:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	while (1 > 0)
	{
		printf("wa ");
	}

	system("pause");
	return 0;
}

调试结果:



不停地在屏幕上打印0和1:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	system("color 02");
	while (1 > 0)
	{
		printf(" 0 1");
	}

	system("pause");
	return 0;
}

调试结果:



让计算机“永无止境”地打印hello:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	while (1 > 0)
	{
		printf("hello ");
	}

	system("pause");
	return 0;
}

调试结果:



让计算机“永不止境”地在屏幕上显示中文汉字“你好”:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	while (1 > 0)
	{
		printf("你好 ");
	}

	system("pause");
	return 0;
}

调试结果:


第2节        我说几遍就几遍


使用while循环输出100个wa:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 100)
	{
		printf("wa ");
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



打印1~100:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 100)
	{
		printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



让计算机先输出100再输出99、98、97、……、1:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 100; //初始值从100开始
	while (a >= 1) //请注意这里的循环条件变为 a >= 1
	{
		printf("%d ", a);
		a = a - 1; //每循环一次将a的值递减1
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



打印1~100中的偶数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 2;
	while (a <= 100)
	{
		printf("%d ", a);
		a = a + 2;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



打印1~100中能被3整除的数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 3;
	while (a <= 100)
	{
		printf("%d ", a);
		a = a + 3;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



让计算机从100打印到200:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 100;
	while (a <= 200)
	{
		printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



让计算机从1打印到100再打印到1:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a < 100)
	{
		printf("%d ", a);
		a = a + 1;
	}
	while (a >= 1)
	{
		printf("%d ", a);
		a = a - 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:


第3节        if对while说:我对你很重要


让计算机输出1~100中所有不能被3整除的数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 100)
	{
		if (a % 3 != 0)
			printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



输出1~100中能被3整除但不能被5整除的所有数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 100)
	{
		if (a % 3 == 0 && a % 5 != 0)
			printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



1~100中所有7的倍数和末尾含7的数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 100)
	{
		if (a % 7 == 0 || a % 10 == 7)
			printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:


第4节        求和!求和!!求和!!!


求1 + 2 + 3的值:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1 + 2 + 3;
	printf("%d\n", a);

	system("pause");
	return 0;
}

调试结果:



求1~100中所有数的和:

int main()
{
	int a, i;
	a = 0;
	i = 1;
	while (i <= 100)
	{
		a = a + i;
		i = i + 1;
	}
	printf("%d\n", a);

	system("pause");
	return 0;
}

调试结果:



求1~100中所有7的倍数或者末尾含7的数的总和:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, i;
	a = 0;
	i = 1;
	while (i <= 100)
	{
		if (i % 7 == 0 || i % 10 == 7)
		{
			a = a + i;
		}
		i = i + 1;
	}
	printf("%d\n", a);

	system("pause");
	return 0;
}

调试结果:



求1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10的值:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, i;
	a = 1;
	i = 1;
	
	while (i < 10)
	{
		i = i + 1;
		a = a * i;
	}
	printf("%d\n", a);

	system("pause");
	return 0;
}

调试结果:



求1~100所有偶数的和:

#include <stdio.h>
#include <stdlib.h>

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


	system("pause");
	return 0;
}

调试结果:



输入一个整数n(1 <= n <= 9),求n的阶乘:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int ret = 1;
	int num = 0;
	scanf("%d", &num);
	if (1 <= num && num <= 9)
	{
		while (num)
		{
			ret = ret * num;
			num = num - 1;
		}
		printf("%d\n", ret);
	}

	system("pause");
	return 0;
}

调试结果:


第5节        逻辑挑战4:60秒倒计时开始


让计算机输出3、2、1、0:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("3\n");
	printf("2\n");
	printf("1\n");
	printf("0\n");

	system("pause");
	return 0;
}

调试结果:



让计算机输出3、2、1、0(每过一秒打印一个数):

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
	printf("3\n");
	Sleep(1000);
	printf("2\n");
	Sleep(1000);
	printf("1\n");
	Sleep(1000);
	printf("0\n");

	system("pause");
	return 0;
}

调试结果:



让计算机输出3、2、1、0(每次打印新内容前清除屏幕):

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
	system("cls");
	printf("3\n");
	Sleep(1000);

	system("cls");
	printf("2\n");
	Sleep(1000);

	system("cls");
	printf("1\n");
	Sleep(1000);

	system("cls");
	printf("0\n");
	Sleep(1000);

	system("pause");
	return 0;
}

调试结果:



3秒的倒计时:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
	int a;
	a = 3;
	while (a >= 0)
	{
		system("cls");
		printf("%d\n", a);
		Sleep(1000);
		a = a - 1;
	}

	system("pause");
	return 0;
}

调试结果:



60秒的倒计时:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
	int a;
	a = 60;
	system("color 0a");
	while (a >= 0)
	{
		system("cls");
		printf("%d\n", a);
		Sleep(1000);
		a = a - 1;
	}

	system("pause");
	return 0;
}

调试结果:



两分钟的倒计时:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int main()
{
	int i, j;             //i控制分;j控制秒;
	system("color ea");  //黄底绿字;里面控制颜色的参数是16进制,从1-f;
	for (i = 1; i >= 0; i--)    //**外循环**,i从1自减到0;**控制分**从1到0;
	{
		if (i >= 1)        //这个判断语句用来输出第一个出现的时间:“2:00”;
		{               //只有在i=1的时候才会成立,但要注意括号内的条件表达式不能写成“i=1”,这代表条件恒成立;
			printf("2:00");
			Sleep(1000);  //等待时间;1000ms==1s;
		}
		for (j = 59; j >= 0; j--) //**内循环**,j从59自减到0;**控制秒**;
		{
			system("cls"); //清屏;
			if (j <= 9)       //这个判断语句用来输出形如“1:09”的时间样式;如果没有的话只会输出“1:9”,这显然与题意有出入;
			{
				printf("%d:0%d\n", i, j);
				Sleep(1000);
				continue;
			}
			printf("%d:%d\n", i, j);
			Sleep(1000);
		}
	}
	return 0;
}

调试结果:


第6节        这个有点晕——循环嵌套来了


3行星号,每行5个星号的图形(循环嵌套):

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int main()
{
	int a, b;
	a = 1;
	while (a <= 3)
	{
		b = 1;
		while (b <= 5)
		{
			printf("*");
			b = b + 1;
		}
		printf("\n");
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:



5行星号,第一行1个星号,第二行2个星号……:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>


int main()
{
	int a, b;
	a = 1;
	while (a <= 5)
	{
		b = 1;
		while (b <= a)
		{
			printf("*");
			b = b + 1;
		}
		printf("\n");
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:



请尝试用while循环打印下面的图形(1):

输入一个整数n(1 <= n <= 30),当输入的n值为3时,打印结果为:

1
2    2
3    3    3

输入一个整数n(1 <= n <= 30),当输入的n值为6时,打印结果为:

1
2    2
3    3    3
4    4    4    4
5    5    5    5    5
6    6    6    6    6    6

代码:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>


int main()
{
	int a, b;
	a = 1;
	while (a <= 5)
	{
		b = 1;
		while (b <= a)
		{
			printf("*");
			b = b + 1;
		}
		printf("\n");
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:

 



请尝试用while循环打印下面的图形(2):

输入一个整数n(1 <= n <= 30),当输入的n值为3时,打印结果是:

1
2    3
4    5    6

输入一个整数n(1 <= n <= 30),当输入的n值为5时,打印结果是:

1
2    3
4    5    6
7    8    9    10
11   12   13   14   15

代码:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>


int main()
{
	int a, b, c, n;
	a = 1;
	c = 1;
	scanf("%d", &n);
	while (a <= n)
	{
		if (1 <= n <= 30)
		{
			b = 1;
			while (b <= a)
			{
				printf("%d ", c);
				b = b + 1;
				c = c + 1;
			}
		}
		printf("\n");
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:


第7节        逻辑挑战5:奔跑的字母


字母H从左边向右边移动了3步:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int main()
{
	int a, b;
	a = 0;
	while (a <= 2)
	{
		system("cls");
		b = 1;
		while (b <= a)
		{
			printf(" ");
			b = b + 1;
		}

		printf("H\n");
		Sleep(1000);
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:


第8节        究竟循环了多少次


打印6个OK:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, b;
	a = 1;
	while (a <= 2)
	{
		b = 1;
		while (b <= 3)
		{
			printf("ok ");
			b = b + 1;
		}
		a = a + 1;
	}
	printf("\n");
	
	system("pause");
	return 0;
}

调试结果:



打印8个OK:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, b;
	a = 1;
	while (a <= 4)
	{
		b = 1;
		while (b <= 2)
		{
			printf("ok ");
			b = b + 1;
		}
		a = a + 1;
	}
	printf("\n");
	
	system("pause");
	return 0;
}

调试结果:



请问下面这段代码会打印多少个“OK”?

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i, j;
	i = 1;
	while (i <= 10)
	{
		j = 1;
		while (j <= i)
		{
			printf("OK ");
			j = j + 1;
		}
		i = i + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:

答案:55个“ok”。 


第9节        逻辑挑战6:奔跑的小人


小人:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf(" O\n");
	printf("<H>\n");
	printf("I I\n");

	system("pause");
	return 0;
}

调试结果:



奔跑的小人:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int main()
{
	int a, b;
	a = 0;
	while (a <= 2)
	{
		system("cls");

		b = 1;
		while (b <= a)
		{
			printf(" ");
			b = b + 1;
		}
		printf(" O\n");

		b = 1;
		while (b <= a)
		{
			printf(" ");
			b = b + 1;
		}
		printf("<H>\n");

		b = 1;
		while (b <= a)
		{
			printf(" ");
			b = b + 1;
		}
		printf("I I\n");

		Sleep(1000);
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:



设计一个“小人”并让它从右边向左边奔跑:

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int main()
{
	int a = 0, b;
	while (a <= 10)
	{
		system("cls");
		b = 10;
		while (b > a)
		{
			printf(" ");
			b = b - 1;
		}
		printf(" 0\n");
		b = 10;
		while (b > a)
		{
			printf(" ");
			b = b - 1;
		}
		printf("<H>\n");
		b = 10;
		while (b > a)
		{
			printf(" ");
			b = b - 1;
		}
		printf("I I\n");
		Sleep(100);
		a = a + 1;
	}

	system("pause");
	return 0;
}

调试结果:


第10节        for隆重登场


用while让计算机从1循环到10:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;
	a = 1;
	while (a <= 10)
	{
		printf("%d ", a);
		a = a + 1;
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



用for让计算机从1循环到10:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;

	for (a = 1; a <= 10; a = a + 1)
	{
		printf("%d ", a);
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



用for循环来实现1~100中所有数的总和:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, sum;
	sum = 0;
	for (a = 1; a <= 100; a++)
	{
		sum = sum + a;
	}
	printf("%d ", sum);
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



打印1~100中所有偶数:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a;

	for (a = 2; a <= 100; a = a + 2)
	{
		printf("%d ", a);
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



用for循环输出1~100中所有7的倍数或者末尾含7的数:

int main()
{
	int a;

	for (a = 1; a <= 100; a++)
	{
		if (a % 7 == 0 || a % 10 == 7)
			printf("%d ", a);
	}
	printf("\n");

	system("pause");
	return 0;
}

调试结果:



求1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10的值:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, b, sum;
	a = 10;
	sum = 1;
	for (b = 1; b <= a; b++)
	{
		sum = sum * b;
	}
	printf("%d\n", sum);

	system("pause");
	return 0;
}

调试结果:



尝试用for循环打印下面的图形:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, b, c;
	for (a = 1; a <= 4; a++)
	{
		for (b = 4; b >= a; b--)
		{
			printf(" ");
		}
		for (c = 1; c <= 2 * a - 1; c++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (a = 1; a <= 5; a++)
	{
		for (b = 1; b <= a - 1; b++)
		{
			printf(" ");
		}
		for (c = 1; c <= 9 - 2 * (a - 1); c++)
		{
			printf("*");
		}
		printf("\n");
	}

	system("pause");
	return 0;
}

调试结果:



尝试用for循环来打印一个九九乘法表:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a, b;
	for (a = 1; a <= 9; a++)
	{
		for (b = 1; b <= a; b++)
		{
			if (a > 2 && a < 5)
			{
				if (b == 3)
				{
					printf(" ");
				}
			}
			printf("%d * %d = %d  ", b, a, b * a);
		}
		printf("\n");
	}

	system("pause");
	return 0;
}

调试结果:


目录 第1章 一大波数正在靠近——排序 1 第1节 zui快zui简单的排序——桶排序 2 第2节 邻居好说话——冒泡排序 7 第3节 zui常用的排序——快速排序 12 第4节 小哼买书 20 第2章 栈、队列、链表 25 第1节 解密QQ号——队列 26 第2节 解密回文——栈 32 第3节 纸牌游戏——小猫钓鱼 35 第4节 链表 44 第5节 模拟链表 54 第3章 枚举!很暴力 57 第1节 坑爹的奥数 58 第2节 炸弹人 61 第3节 火柴棍等式 67 第4节 数的全排列 70 第4章 wan能的搜索 72 第1节 不撞南墙不回头——深度优先搜索 73 第2节 解救小哈 81 第3节 层层递进——广度优先搜索 88 第4节 再解炸弹人 95 第5节 宝岛探险 106 第6节 水管工游戏 117 第5章 图的遍历 128 第1节 深度和广度优先究竟是指啥 129 第2节 城市地图——图的深度优先遍历 136 第3节 zui少转机——图的广度优先遍历 142 第6章 zui短路径 147 第1节 只有五行的算法——Floyd-Warshall 148 第2节 Dijkstra算法——通过边实现松弛 155 第3节 Bellman-Ford——解决负权边 163 第4节 Bellman-Ford的队列优化 171 第5节 zui短路径算法对比分析 177 第7章 神奇的树 178 第1节 开启“树”之旅 179 第2节 二叉树 183 第3节 堆——神奇的优先队列 185 第4节 擒贼先擒王——并查集 200 第8章 更多精彩算法 211 第1节 镖局运镖——图的zui小生成树 212 第2节 再谈zui小生成树 219 第3节 重要城市——图的割点 229 第4节 关键道路——图的割边 234 第5节 我要做月老——二分图zui大匹配 237 第9章 还能更好吗——微软亚洲研究院面试 243 啊哈算法 目 录 第1章 编程改变思维 1 第1节 为什么要学习编程 1 第2节 本书是讲什么的,写给谁看的 4 第2章 梦想启航 7 第1节 编程的魔力 7 第2节 让计算机开口说话 9 第3节 多彩一点 18 第4节 让计算机做加法 21 第5节 数字的家――变量 26 第6节 数据输出――我说咋地就咋地 31 第7节 数据输入――我说算啥就算啥 33 第8节 究竟有多少种小房子 37 第9节 拨开云雾见月明 40 第10节 逻辑挑战1:交换小房子中的数 42 第11节 天啊!这怎么能看懂 45 等等。。。。。。。。。。。。。。。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值