当前位置: 首页 > article >正文

C Prime Plus 第6章习题

你该逆袭了

红色标注的是:错误的答案
蓝色标注的是:正确的答案
绿色标注的是:做题时有疑问的地方
橙色标注的是:答案中需要着重注意的地方

练习题

  • 一、复习题
    • 1、
    • 2、
    • 3、
    • 4、
    • 5、
      • 我的答案:错误
      • 正确答案:
    • 6、
    • 7、
    • 8、
      • 我的答案:错误
      • 正确答案:
    • 9、
    • 10、
    • 11、
    • 12、
    • 13、
      • 我的答案:考虑非常不到位
      • 正确答案:有我想不到的注意点
    • 14、
  • 二、编程练习
    • 1、
      • 我的答案:
      • 标准答案:
    • 2、
      • 我的答案:
      • 标准答案:
    • 3、
      • 我的答案:
      • 补充知识点:
      • 标准答案:
    • 4、
      • 我的答案:
      • 标准答案:
    • 5、这道题对于我,还是挺有挑战的!
      • 我的答案:
      • 编程分析:
      • 标准答案:
    • 6、
    • 7、
      • 我的答案:
      • 标准答案:
    • 8、
      • 我的答案:
      • 注意点:
    • 9、
    • 10、
      • 我的答案:
      • 标准答案:
    • 11、
      • 我的答案:
      • 标准答案:
    • 12、
      • 我的答案:非常的乱!!!
      • 正确答案:
    • 13、
      • 我的答案:
      • 正确答案:
    • 14、想不出来题目的方法二!!!
      • 我的答案:
        • 方法一:
        • 方法二:我绞尽脑汁,想不出来!!!
      • 编程分析:
      • 正确答案:
    • 15、实在是想不出来怎么做
      • 我的答案:错误,实在不会做
      • 标准答案:
      • 重点:
    • 16、
      • 关键点
    • 17、从16题到18题,都没有做,全部结合16题的正确答案的思路解答的。
      • 编程分析:
      • 正确答案:
      • 关键点:
    • 18、
      • 我的答案:
      • 正确答案:

一、复习题

1、

在这里插入图片描述
我的答案:
2

2、

在这里插入图片描述
我的答案:
int 类型:36 18 9 4 2 1
double 类型:会一直执行 value /= 2命令,程序无法结束。

3、

在这里插入图片描述
我的答案:

x > 5;
(scanf("%lf", &x) == 0);
5 == x;

4、

在这里插入图片描述
我的答案:

(scanf("%d", &x) == 1);
x != 5;
x >= 20;

5、

在这里插入图片描述

我的答案:错误

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int list[10] = { 0 };  //中括号

	for (i = 1; i <= 10; i++)  //分号
	{
		list[i] = 2 * i + 3;
		for (j = 1; j >= i; j++)  
		{
			printf("  %d", list[j]);
		}
		printf("\n");
	}
	return 0;
}

正确答案:

当 i 值为 1 时,嵌套循环的内层循环将会是无限循环,且该 for 循环使用 >= 在逻辑上错误。

for (j = 1; j >= i; j++)    //错误
//应该改成
for (j = 1; j <= i; j++)

6、

在这里插入图片描述
我的答案:

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	char output = 0;

	for (i = 0; i < 8; i++)
	{
		j = 0;
		for (j = 0; j < 8; j++)
		{
			printf("%c  ", '$');
		}
		putchar('\n');
	}

	return 0;
}

标准答案:
行数使用外层循环控制,行内数据通过内层循环控制打印。

7、

在这里插入图片描述
我的答案:

Hi!  Hi!  Hi!  Bye!  Bye!  Bye!  Bye!  Bye!
ACGM    

8、

在这里插入图片描述

我的答案:错误

Go west,young man!
Hp xftu-zpvoh!nbo"
Go west, young man!
$o west, young man!

正确答案:

错误原因:没有仔细审题,while(ch != ‘g’)

Go west,youn!
Hp!xftu-!zpvo
Go west, young
$o west, youn

9、

在这里插入图片描述
我的答案:

31|32|33|30|31|32|33|
***
1
5
9
13
***
2 6
4 8
8 10
***
======
=====
====
===
==

10、

在这里插入图片描述
我的答案:
mint
10
double
ii

11、

在这里插入图片描述
我的答案:

#include <stdio.h>
#define SIZE 8

int main()
{
	int by_twos[SIZE] = { 0 };
	int index = 0;

	for (index = 0; index < SIZE; index++)
	{
		by_twos[index] = 2 * index;
	}
	for (index = 0; index < SIZE; index++)
	{
		printf("%d  ", by_twos[index]);
	}
	printf("\n");

	return 0;
}

12、

在这里插入图片描述
我的答案:

long name(int x)  //返回类型一定要是 long
{
	*****;
	return long类型的值;
}

13、

在这里插入图片描述

我的答案:考虑非常不到位

long mit(int x)
{
	long y = 0;
	y = x * x;
	return y;
}

正确答案:有我想不到的注意点

函数的参数为 int 类型,为了确保返回值为 long 类型,必须使用类型转换,且数值等于该参数的平方。处理方法有很多,其中更加安全的方式如下。

long square(int num)
{
	return(long)num) * num;
}

这样能够保证在计算平方之前就已经将类型转换为 long 类型,返回值为 long 类型。

下面的代码(也就是我的答案)则不够安全,主要原因在于计算平方时使用 int 类型,对于较大的数值,会产生 int 类型的越界,截断结果。转换为 long 类型后,结果依然是截断后的错误数据。

long square(int num)
{
	return (long)(num * num);  //不安全!
}

14、

在这里插入图片描述
我的答案:

1:Hi!
K = 1
k is 1 in the loop
Now k is 3
K = 3
k is 3 in the loop
Now k is 5
k = 5
k is 5 int the loop
Now k is 7
k = 7

二、编程练习

1、

在这里插入图片描述

我的答案:

#include <stdio.h>
#define COUNT 26

int main()
{
	char c = 'a';
	int n = 0;
	char shuzu[26] = { 0 };

	for (c = 'a', n = 0; c < 'a' + COUNT; c++, n++)
	{
		shuzu[n] = c;
	}
	for (n = 0; n < COUNT; n++)
	{
		printf("%c ", shuzu[n]);
	}
	printf("\n");

	return 0;
}

标准答案:

程序需要两个循环,第一个循环初始化并存储小写字母,第二个循环用来打印数组的元素。

#include <stdio.h>

int main()
{
	char alphabet[26] = { 0 };
	int i = 0;

	char c = 'a';
	for (i = 0; i < 26; i++,c++)
	{
		alphabet[i] = c;
	}
	for (i = 0; i < 26; i++)
	{
		printf("%c ", alphabet[i]);
	}

	return 0;
}

2、

在这里插入图片描述

我的答案:

#include <stdio.h>
#define COUNT 5

int main()
{
	int n = 0;
	int m = 0;

	for (n = 0; n < COUNT; n++)
	{
		for (m = 0; m < n + 1; m++)
		{
			printf("$");
		}
		printf("\n");
	}

	return 0;
}

标准答案:

外层循环控制打印的行数,内层循环控制打印的行内内容。

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;

	for (i = 1; i <= 5; i++)  //外层循环 控制 行数
	{
		for (j = 0; j < i; j++)  //内层循环 使用 j < i 表示第 N 行打印 N 个字符
		{
			printf("$");
		}
		printf("\n");
	}
}

3、

在这里插入图片描述

我的答案:

#include <stdio.h>
#define COUNT 6

int main()
{
	int n = 0;
	int m = 0;
	char c = 0;

	for (n = 0; n < COUNT; n++)
	{
		for (m = 0, c = 'F'; m < n + 1; m++, c--)
		{
			printf("%c", c);
		}
		printf("\n");
	}

	return 0;
}

补充知识点:

注意:如果你的系统不使用 ASCII码 或其他以数字顺序编码的代码,可以把字符数组初始化为 字母表 中字母。

char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
//数组的最后一个存放字符串的结束标志 '\0'

然后,使用数组下标选择单独的字母,例如,lets[0] 是 ‘A’,等等。

标准答案:

程序最终打印 6 行字符,字符数量逐行递增,且行内字符从 ‘F’ 递减。
所以,嵌套循环中外层循环执行 6 次,内层循环表示第 N 行 打印 N 个字符,且字符从 ‘F’ 递减。

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	char c = 0;

	for (i = 1; i <= 6; i++)  //外层循环 控制行数
	{
		for (j = 0, c = 'F'; j < i; j++, c--)  //内层循环 控制每行的输入内容
		{
			printf("%c", c);
		}
		printf("\n");
	}

	return 0;
}

4、

在这里插入图片描述

我的答案:

#include <stdio.h>
#define COUNT 6

int main()
{
	int n = 0;
	int m = 0;
	char c = 0;
	char d = 'A';

	for (n = 0; n < COUNT; n++)  //外循环:6次循环
	{
		for (m = 0, c = d; m < n + 1; m++)  //内循环
		{
			printf("%c", c);
			c++;
			d = c;
		}
		printf("\n");
	}

	return 0;
}

标准答案:

不初始化待打印的字符,

for (j = 0, c = 'F'; j < i; j++, c++)

即删除 c = ‘F’ 的赋值,使其持续递增。

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	char c = 'A';

	for (i = 1; i <= 6; i++)  //外层循环 控制行数
	{
		for (j = 0; j < i; j++,c++)  //内层循环 不初始化待打印数据,且使用 c++ 进行递增
		{
			printf("%c", c);
		}
		printf("\n");
	}
}

5、这道题对于我,还是挺有挑战的!

在这里插入图片描述

我的答案:

#include <stdio.h>

int main()
{
	int x = 0;
	int y = 0;
	int z = 0;
	int zz = 0;
	char c = 0;
	char zimu = 0;
	char zimuzimu = 0;

	printf("请输入一个大写字母:");
	scanf("%c", &c);
	for (x = 0; x < c-'A'+1; x++)  //5
	{
		for (y = 0; y < c - 'A' - x; y++)  //4-x
		{
			putchar(' ');
		}
		for (z = 0, zimu = 'A'; z < x+1; z++, zimu++)
		{
			printf("%c", zimu);
		}
		if (0 == x)   //黔驴技穷了,只想到这个方法了,汗颜汗颜
		{
			printf("\n");
			continue;
		}
		for (zz = 0,zimuzimu=zimu-2; zz < x; zz++, zimuzimu--)
		{
				printf("%c", zimuzimu);
			
		}
		printf("\n");
	}

	return 0;
}

在这里插入图片描述

编程分析:

程序首先读取用户输入的大写字母,并通过嵌套循环打印金字塔类型的字母表。
其中每行的字母都需要正序和逆序显示,每行的最大字符(中间字符)与行数有关,第1行的最大字符为’A’,第2行的最大字符为’B’,第2行的最大字符为’C’,…
为了保证每行字符居中,若字符数量不足,需要通过空格填充,使其成为正三角形结构。
为了保证行内的打印效果,在内层循环中应当判断每行打印的空格数。
程序的算法有很多,其中最简单的算法是,空格数、正序字符数、逆序字符数分开打印。
例如,若用户输入 E ,则需要打印 5 行,每行中间字符为 A~E,第 1 行需要补 4 个空格,最后一行不需要补空格。先打印从 A 到中间字符(中间字符 = ‘A’ + ‘行号’ - 1),打印逆序字母后不需要打印空格。

标准答案:

#include <stdio.h>

int main()
{
	char c = 0;
	printf("请输入一个你想要的大写字母:");
	scanf("%c", &c);
	
	int num = c - 'A' + 1;  //既是需要打印的从 A 开始的字符数,也是打印的 总行数
	int n = 0;
	int m = 0;
	char ch = 0;

	for (n = 1; n <= num; n++)  //外层循环 控制行数
	{
		for (m = 0; m < num - n; m++)  //打印 空格 
		{                              //空格数为:总字符数减去当前行应打印的字符数
			printf(" ");               //本行应打印空格数 + 应打印字符数 + 总字符数(总行数)
		}
		for (ch = 'A'; m < num; m++, ch++)  //打印 正序字母
		{                                   //在打印正序字符数时,需要通过 ch 做递增操作
			printf("%c", ch);               //起始值 m 在空格处 已经通过循环
		}
		for (m = 1, ch -= 2; m < n; m++, ch--)  //打印 剩余字符
		{                                       //ch -= 2 ,
			printf("%c", ch);                   //在正序字符处,当 n=1 时,ch++ 已经变成了 B,
		}                                       //然而,第一行 在剩余字符处,没有要打印的字符
		printf("\n");
	}

	return 0;
}

6、

在这里插入图片描述
我的答案:

#include <stdio.h>

int main()
{
	int shangxian = 0;
	int xiaxian = 0;
	int n = 0;
	
	printf("请输入表格的上下限。\n");
	printf("上限:");
	scanf("%d", &shangxian);
	printf("下限:");
	scanf("%d", &xiaxian);
	for (n = xiaxian; n <= shangxian; n++)
	{
		printf("%10d%10d%10d", n, n * n, n * n * n);
		printf("\n");
	}


	return 0;
}

在这里插入图片描述

7、

在这里插入图片描述

我的答案:

#include <stdio.h>
#include <string.h>

int main()
{
	char word[21] = { 0 };
	int size = 0;
	int n = 0;
	int m = 0;

	printf("请输入一个单词(小于20个字母):");
	scanf("%s", word);
	size = strlen(word);
	printf("size=%d\n", size);
	for (n = 0,m=size-1; n < size; n++)
	{
		printf("%c", word[m]);
		m--;
	}

	return 0;
}

在这里插入图片描述

标准答案:

#include <stdio.h>
#include <string.h>

int main()
{
	char ch[20] = { 0 };
	int length = 0;
	int i = 0;

	printf("请输入一个单词:");
	scanf("%s", ch);
	length = strlen(ch);
	printf("%d 是单词的长度。\n", length);
	for (i = length - 1; i >= 0; i--)
	{
		printf("%c", ch[i]);
	}
	printf("\n");

	return 0;
}

8、

在这里插入图片描述

我的答案:

#include <stdio.h>

int main()
{
	double a = 0;
	double b = 0;

	printf("请输入两个浮点数:");
	while (scanf("%lf%lf", &a, &b) == 2)
	{
		putchar('\n');
		printf("%lf\n", (a - b) / (a * b));
		printf("请输入两个浮点数:");
	}
	if (scanf("%lf%lf", &a, &b) != 2)
	{
		printf("你输入的数据不对,程序结束!\n");
	}

	return 0;
}

注意点:

scanf 是忽略 空格 的。

//以下两种形式是一样的
while (scanf("%lf%lf", &a, &b) == 2)

while (scanf("%lf  %lf", &a, &b) == 2)  //scanf 是 忽略空格 的

在这里插入图片描述

9、

在这里插入图片描述
我的答案:

#include <stdio.h>

double result(double, double);  //函数声明

int main()
{
	double a = 0;
	double b = 0;

	printf("请输入两个浮点数:");
	while (scanf("%lf%lf", &a, &b) == 2)
	{
		putchar('\n');
		printf("%lf\n", result(a,b));
		printf("请输入两个浮点数:");
	}

		if (scanf("%lf%lf", &a, &b) != 2)
	{
		printf("你输入的数据不对,程序结束!\n");
	}

	return 0;
}

double result(double c, double d)
{
	double r = (c - d) / (c * d);
	return r;
}

在这里插入图片描述

10、

在这里插入图片描述

我的答案:

#include <stdio.h>

int main()
{
	int max = 0;
	int min = 0;
	int flag = 0;
	int count = 0;
	int sum = 0;
	
	printf("enter lower and upper integer limits:");
	while ((flag=(scanf("%d%d", &min, &max))) == 2)
	{
		if (min != max)
		{
			sum = 0;
			for (count = min; count <= max; count++)
			{
				sum += count * count;
			}
			printf("the sums of the squares from %d to %d is %d\n",
				min * min, max * max, sum);
			printf("enter next set of limits:");
		}
		else
		{
			printf("Done");
			break;
		}
	}

	return 0;
}

在这里插入图片描述

标准答案:

#include <stdio.h>

int main()
{
	int lower = 0;
	int upper = 0;
	int n = 0;
	int sum = 0;

	printf("请依次输入 最小值 最大值:");
	scanf("%d %d", &lower, &upper);
	while (lower < upper)
	{
		sum = 0;
		for (n = lower; n <= upper; n++)
		{
			sum += n * n;
		}
		printf("the sums of the squares from %d and %d is %d\n", lower, upper, sum);
		printf("请再次输入 最小值 最大值:");
		scanf("%d %d", &lower, &upper);
	}
	printf("Done.\n");

	return 0;
}

11、

在这里插入图片描述

我的答案:

#include <stdio.h>

int main()
{
	int shuzu[10] = { 0 };
	int n = 0;

	printf("请输入 8 个整数:");
	for (n = 0; n < 8; n++)
	{
		scanf("%d", &shuzu[n]);
	}
	printf("\n");
	printf("倒序输出 8 个整数:");
	for (n = 0; n < 8; n++)
	{
		printf("%5d", shuzu[7 - n]);
	}

	return 0;
}

在这里插入图片描述

标准答案:

#include <stdio.h>

int main()
{
	int n = 0;
	int shuzu[8] = { 0 };

	printf("请依次输入 8 个整数:");
	for (n = 0; n < 8; n++)
	{
		scanf("%d", &shuzu[n]);
	}
	for (n = 7; n >= 0; n--)  //倒序输出
	{
		printf("%d ", shuzu[n]);
	}

	return 0;
}

12、

在这里插入图片描述

我的答案:非常的乱!!!

#include <stdio.h>

int main()
{
	double count = 0;
	double input = 0;
	double sum1 = 0;
	double sum2 = 0;
	double sum = 0;
	double n = 0;
	double fuhao = 0;

	while (scanf("%lf", &input) == 1 && (input>0))
	{
		sum1 = 0;
		sum2 = 0;
		sum = 0;
		for (count = 1; count <= input; count++)  //全部都是正值
		{
			sum1 += 1.0 / count;
		}
		for (count = 1; count <= input; count++)
		{
			fuhao = 1;
			for (n = 0; n <= count; n++)  //控制 正负号的交替
			{
				fuhao *= (-1);
			}
			sum2 += fuhao / count;
		}
		sum = sum1 + sum2;
		printf("%lf\n", sum1);
		printf("%lf\n", sum2);
		printf("总和 = %lf\n", sum);

		printf("请继续输入:");
	}
	if (input <= 0)
	{
		printf("Done\n");
	}
	return 0;
}

在这里插入图片描述

正确答案:

第 1 个序列可以直接求和。
第 2 个序列需要通过判断奇偶项来获取该项的正负号。

#include <stdio.h>

int main()
{
	int length = 0;
	int n = 0;
	double sum = 0;

	printf("请输入 长度:");
	scanf("%d", &length);
	while (length > 0)
	{
		sum = 0;
		for (n = 1; n <= length; n++)  //计算 1 + 1/2 + 1/3 + ... + 1/length = 
		{
			sum += 1.0 / n;  
		}
		printf("1 + 1/2 + 1/3 + ... + 1/length = %lf\n", sum);

		sum = 0;
		for (n = 1; n <= length; n++)  //计算 1 - 1/2 + 1/3 - 1/4 + ... + 1/length =
		{
			if (n % 2 == 1)
			{
				sum += 1.0 / n;
			}
			else
			{
				sum -= 1.0 / n;
			}
		}
		printf("1 - 1/2 + 1/3 - 1/4 + ... + 1/length = %lf\n", sum);

		sum = 0;                       //计算上面两个式子的总和。
		for (n = 1; n <= length; n++)  //计算 2 + 2/3 + 2/5 + ... =
		{                              //只计算 奇数项,偶数项被消除了。
			if (n % 2 != 0)
			{
				sum += 2.0 / n;
			}
		}
		printf("2 + 2/3 + 2/5 + ... = %lf\n", sum);

		printf("请再次输入 长度:");
		scanf("%d", &length);
	}


	return 0;
}

13、

在这里插入图片描述

我的答案:

#include <stdio.h>

int main()
{
	int count = 0;
	int n = 0;
	int shuzu[8] = { 0 };
	int multiply = 0;

	for (count = 0; count < 8; count++)
	{
		multiply = 1;
		for (n = 0; n <= count; n++)
		{
			multiply *= 2;
		}
		shuzu[count] = multiply;
		printf("%5d", shuzu[count]);
	}

	return 0;
}

在这里插入图片描述

正确答案:

#include <stdio.h>

int main()
{
	int shuzu[8] = { 0 };
	int n = 0;
	shuzu[0] = 2;

	for (n = 1; n < 8; n++)
	{
		shuzu[n] = shuzu[n - 1] * 2;
	}

	int i = 0;
	do
	{
		printf("%d ", shuzu[i]);
		i++;
	} while (i < 8);

	return 0;
}

14、想不出来题目的方法二!!!

在这里插入图片描述

我的答案:

方法一:
#include <stdio.h>

int main()
{
	double sz1[8] = { 0 };
	double sz2[8] = { 0 };
	int n1 = 0;
	int n2 = 0;
	int n3 = 0;

	printf("请输入 8 个数:");
	for (n1 = 0; n1 < 8; n1++)
	{
		scanf("%lf", &sz1[n1]);
	}
	for (n2 = 0; n2 < 8; n2++)   //外循环:存储数组的值
	{
		sz2[n2] = 1;
		for (n3 = 0; n3 <= n2; n3++)  //内循环:
		{
			sz2[n2] *= sz1[n3];
		}
	}
	for (n1 = 0; n1 < 8; n1++)
	{
		printf("%lf  ", sz2[n1]);
	}


	return 0;
}

在这里插入图片描述

方法二:我绞尽脑汁,想不出来!!!
//想使用题目提示的方法二: 
//利用第二个数组的第 5 个元素是第二个数组的第 4 个元素与第一个数组的第 5 个元素之和,
//只用一个循环就能完成任务,不需要使用嵌套循环

//这个方法,没有想出来!!!

//以下是我的错误的想法:
sz2[0] = 1;
for (n2 = 0, n1 = 0; n2 < 8; n2++, n1++)
{
	sz2[n2] *= sz1[n1];
	printf("%lf  ", sz2[n2]);
}

编程分析:

第 2 个数组计算第一个数组的前 N 项和。

正确答案:

	second[0] = first[0];   //单循环,这就是我不会的方法
	for (n = 1; n <= 7; n++) 
	{
		second[n] = second[n - 1] + first[n];
	}

以上代码:是这道题的精华。

#include <stdio.h>

int main()
{
	int first[8] = { 0 };
	int second[8] = { 0 };
	int n = 0;
	int m = 0;
	int sum = 0;


	printf("请输入 8 个整数:");
	for (n = 0; n < 8; n++)
	{
		scanf("%d", &first[n]);
	}

	for (n = 0; n < 8; n++)  //嵌套循环
	{
		sum = 0;
		for (m = 0; m <= n; m++)
		{
			sum += first[m];
		}
		second[n] = sum;
	}
	for (n = 0; n < 8; n++)
	{
		printf("%d ", second[n]);
	}
	printf("\n");

	second[0] = first[0];   //单循环,这就是我不会的方法
	for (n = 1; n <= 7; n++) 
	{
		second[n] = second[n - 1] + first[n];
	}
	for (n = 0; n < 8; n++)
	{
		printf("%d ", second[n]);
	}
	printf("\n");


	return 0;
}

15、实在是想不出来怎么做

在这里插入图片描述

我的答案:错误,实在不会做

#include <stdio.h>

int main()
{
	int input[255] = { 0 };
	int count = 0;
	int jishu = 0;
	int ch = 0;
	int n = 0;

	printf("请输入一行:");

	//while ((ch = getchar()) != '\n')    //第一次尝试
	//{
	//	jishu++;
	//	for (count = 0; count < jishu; count++)
	//	{
	//		input[count] = ch;
	//	}
	//}

	for (count = 0, ch = getchar(); (ch = getchar()) != '\n'; count++)  //第二次尝试
	{
		input[count] = ch;
	}

	for (n = 0; n < count-1; n++)
	{
		printf("%c", input[n]);
	}

	return 0;
}

标准答案:

#include <stdio.h>

int main()
{
	char data[256];
	printf("enter the char in a line:");

	int i = 0;
	do
	{
		scanf("%c", &data[i]);
	} while (data[i] != '\n' && ++i);  //i++ 是不正确的,因为若为 i++,此时,i 为 0,条件判断结果为 0 ,程序就结束了。

	printf("the reverse char of the data:");
	for (i--; i >= 0; i--)
	{
		printf("%c", data[i]);
	}

	return 0;
}

重点:

i++ 是不正确的,因为若为 i++,此时,i 为 0,条件判断结果为 0 ,程序就结束了。

 while (data[i] != '\n' && ++i);  //i++ 是不正确的,因为若为 i++,此时,i 为 0,条件判断结果为 0 ,程序就结束了。

在这里插入图片描述

16、

在这里插入图片描述
计算方法想复杂了
正确答案:

#include <stdio.h>

int main()
{
	double a = 0;
	double b = 0;
	int year = 0;

	a = 100;
	b = 100;
	year = 0;

	do 
	{
		a = a + 100 * 0.1;  //这种计算方法我不会!!!
		b = b + b * 0.05;   //
		year++;
	} while ((b - a) < 0);  //输出判断!!!

	printf("需要多少年:%d", year);  

	return 0;
}

关键点

a = a + 100 * 0.1;  //这种计算方法我不会!!!
b = b + b * 0.05;   

判断是否满足 输出 的条件判断。

while ((b - a) < 0);  //输出判断!!!

17、从16题到18题,都没有做,全部结合16题的正确答案的思路解答的。

在这里插入图片描述

编程分析:

通过 不定次数循环计数 进行计算更合理,当取出 10 万美元之后,若余额低于 9 万美元,则不够下一年支取。

正确答案:

根据16题的解答思路编写的

#include <stdio.h>

int main()
{
	double a = 0;
	int year = 0;

	a = 100;
	year = 0;

	do
	{
		a = a + 0.08 * a;
		a -= 10;
		year++;       //判断条件是 a > 9 ,而不是 a > 10 
	} while (a > 9);  //从下一年开始,就不满足 10 万了
                  	  //就全部取出来了。

	printf("%d 年\n", year+1); //把下一年的也要全部取出来才行
	printf("%d 年\n", ++year);

	return 0;
}

关键点:

	                  //判断条件是 a > 9 ,而不是 a > 10 
	} while (a > 9);  //从下一年开始,就不满足 10 万了
	                  //就全部取出来了。

printf("%d 年\n", year+1); //把下一年的也要全部取出来才行

18、

在这里插入图片描述

我的答案:

这段代码有问题!!!

#include <stdio.h>

int main()
{
	int weeks = 0;
	int count = 0;

	count = 5;
	weeks = 1;

	while (count < 150)
	{
		
		count = count - weeks;
		count = count * 2;
		printf("%d ", count);   //这段话不应该放在这个位置
		weeks++;
	}

	return 0;
}

在这里插入图片描述

正确答案:

#include <stdio.h>

int main()
{
	int weeks = 0;
	int count = 0;

	count = 5;
	weeks = 1;

	while (count < 150)
	{
		printf("%d ", count);   //应该放在这个地方!!!
		
		count = count - weeks;
		count = count * 2;
		
		weeks++;
	}

	return 0;
}

在这里插入图片描述


http://www.kler.cn/a/321045.html

相关文章:

  • 一文3000字从0到1带你进行Mock测试(建议收藏)
  • Nginx 上安装 SSL 证书并启用 HTTPS 访问
  • 借助Excel实现Word表格快速排序
  • 前端怎么获取视口大小
  • 微搭低代码入门05循环
  • 政务数据治理专栏开搞!
  • 【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)
  • 面试速通宝典——3
  • 框架漏洞(5-rce s2-057 CVE-2017-8046 CVE-2018-1273 Shiro-550)
  • 【C++】——vector深度剖析模拟实现
  • Go语言中的互斥锁与竞争问题
  • 【Kubernetes】常见面试题汇总(二十九)
  • 《深度学习》—— ResNet 残差神经网络
  • 【OSS安全最佳实践】降低因账号密码泄露带来的未授权访问风险
  • 【小程序】微信小程序课程 -2 快速上手
  • 论文不会写怎么办?推荐这5款AI论文工具帮你一键搞定!
  • 【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理
  • C++学习笔记(34)
  • 【MySQL】字符集与Collation
  • MySQL 预处理语句:强大的数据库工具
  • en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 分散
  • 运算符两边的数据类型
  • [数据库] Redis学习笔记(一):介绍、安装、基本数据结构、常见命令
  • 在Windows系统上安装的 zstd C++ 库
  • ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge
  • Spring 事务与 MySQL 事务:深度解析与实战指南