C Prime Plus 第6章习题

news2024/9/21 21:56:45

你该逆袭了

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

练习题

  • 一、复习题
    • 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.coloradmin.cn/o/2153405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

窥探 引用拷贝、浅拷贝、深拷贝 的那些事 (clone版)

谁家玉笛暗飞声 散入春风满洛城 往期回顾✨内部类 目录✨ 引用拷贝 介绍 总结 浅拷贝 介绍 浅拷贝的步骤 深拷贝 介绍 引用拷贝 介绍 引用拷贝就是我们常用的 “赋值” &#xff0c;只是复制了原对象的引用&#xff0c;即两个对象指向同一块内存堆地址。修改其中的一个对象会影…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.6 处理器架构2 函数

新的架构来了&#xff0c;本游戏的最后一个攻略分享&#xff0c;最后汇编部分无非是对于操作码的熟练&#xff0c;硬件没有问题&#xff0c;那么也就无关痛痒了。 汇编实现&#xff0c;两数相或和两数相与非一起相与即可。 八位异或器&#xff0c;整就完事了。 有手就行。 利…

【梯度下降算法学习笔记】

梯度下降单参数求解 经过之前的学习我们来引入梯度下降的理念 α \alpha α为学习率 w 1 w 初 − α ∂ J ( w ) ∂ w w_1w_初-\alpha\frac{\partial J(w)}{\partial w} w1​w初​−α∂w∂J(w)​ w 2 w 1 − α ∂ J ( w 1 ) ∂ w 1 w_2w_1-\alpha\frac{\partial J(w_1)}…

国庆电影扎堆来袭,AI智能体帮你推荐必看佳片!(附制作教程)

大家好&#xff0c;我是凡人。 今天看到新闻&#xff0c;发现国庆有10部影片要扎堆儿上映&#xff0c;对于选择困难症的我属实有点难选&#xff0c;同时也想避开一些坑省的浪费金钱和时间。 本着不知道就问AI的习惯&#xff0c;想问问大模型怎么看&#xff0c;但做了简单的交…

MySQL 优化器:理解与探秘

在 MySQL 数据库的世界里&#xff0c;优化器扮演着至关重要的角色。它就像是一位幕后的魔法师&#xff0c;默默地为数据库的高效运行贡献着力量。那么&#xff0c;MySQL 优化器究竟是什么&#xff1f;它又是如何工作的呢&#xff1f;让我们一起来揭开它的神秘面纱。 一、MySQL…

行业人工智能研究-Python自监督方式学习图像表示算法

学术界人工智能研究落后于工业界 摘要 行业或工业界在人工智能研究上超出学术界&#xff0c;并占据着大量的计算力&#xff0c;数据集和人才诱人的薪水和明朗的预期吸引大量人才离开学术界&#xff0c;涌入行业或工业界即使&#xff0c;比如Meta开源其人工智能模型&#xff0…

二分查找算法(1) _二分查找_模板

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 二分查找算法(1) _二分查找模板 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 1. 二…

掌握Android开发新趋势:Jetpack与现代架构技术全解析

随着Android开发技术的不断进步&#xff0c;Jetpack和现代架构技术已成为构建高效、可维护应用的关键。本文将为您介绍一套全面的学习资料&#xff0c;包括大纲、PDF文档、源代码以及学习视频&#xff0c;帮助您深入理解Jetpack核心库、架构组件以及现代开发工具。 内容&#…

linux-基础知识4

网络连接性测试 ping ping可以用来测试本机与目标主机的连通速度网络稳定性 ping -c 5 -s 1024 目标主机ip地址 -c 表示ping包的个数,linux如果缺省-c会一直ping下去&#xff0c;windows平台的选项是-n -s指定ping发送数据的字节数默认是84字节。windows的是-l 没有问题时会之…

如何设计出一个比较全面的测试用例

目录 1. 测试用例的基本要素(不需要执行结果) 2. 测试用例的给我们带来的好处 3. 用例编写步骤 4. 设计测试用例的方法 4.1 基于需求进行测试用例的设计 4.2 具体的设计方法 1.等价类 2.边界值 3.判定表&#xff08;因果图&#xff09; 4.正交表法 5.场景设计法 6.错误猜测…

IO流体系(FiletOutputStream)

书写步骤&#xff1a; 1.创建字节输出流对象 细节1:参数是字符串表示的路径或者是File对象都是可以的 细节2:如果文件不存在会创建一个新的文件&#xff0c;但是要保证父级路径是存在的。 细节3:如果文件已经存在&#xff0c;则会清空文件 2.写数据 细节:write方法的参数…

Python | 绘制核密度图

写在前面 台风天&#xff0c;适合敲代码。前两天正好看到一个有意思的核密度图&#xff0c;使用的是seaborn绘制的。之前了解过这个包&#xff0c;但是一致没有去绘制相关的图&#xff0c;这次正好去学习一下相关的函数。 绘制结果如下所示&#xff1a; 主要两个有意思的地方…

二维光场分析

一、单色光波长的复振幅表示 实波函数 复波函数 复振幅 由于时间因子相同,可以用复振幅来描述 光强 1.1 球面波的复振幅(单色点光源发出的光波) 等相位面是同心球面,波矢处处与等相位面垂直,即 是 r = 1 处的振幅 发散球面波: 会聚球面波: <

828华为云征文 | 华为云X实例监控与告警管理详解

前言 随着云计算的飞速发展&#xff0c;越来越多的企业将业务部署在云平台上&#xff0c;云服务器实例的管理变得尤为重要。云实例的稳定性、性能及安全性&#xff0c;直接影响着业务的连续性与用户体验。为了确保这些目标的实现&#xff0c;监控与告警是关键手段。本文将详细…

2024华为杯研赛C题原创python代码+结果表(1-2问)|全部可运行|精美可视化

2024华为杯研赛C题原创python代码结果表&#xff08;1-2问&#xff09;&#xff5c;全部可运行&#xff5c;精美可视化 以下均为python代码&#xff0c;推荐用anaconda中的notebook当作编译环境 第一问&#xff1a; import pandas as pd import numpy as np import matplotl…

pg入门18—如何使用pg gis

1. 下载postgre gis镜像 2. 运行镜像 docker run -p 15432:5432 -d -e POSTGRES_PASSWORDAb123456! postgis/postgis:12-3.4-alpine 3. 使用gis # 进入容器&#xff0c;登录pgdocker exec -it bash# 登录数据库psql -U postgres# 创建数据库CREATE DATABASE mygeotest;# 使用…

初步认识C++模版

前言 在C语言中&#xff0c;我们知道函数的形参需要指定类型&#xff0c;但是在C中&#xff0c;我们可以模版实现各种类型参数的通用函数。 1. 泛型编程 我们通过函数重载实现多种类型的同一作用的函数。如交换函数&#xff1a; void Swap(int& left, int& right) …

力扣 167.两数之和||—输入为有序数组

文章目录 题目介绍解法 题目介绍 解法 利用相向双指针&#xff0c;初始时l在最用左边&#xff0c;r在最右边 1.numbers[l] numbers[r] < target 则 l 2.numbers[l] numbers[r] < target 则 r 3.numbers[l] numbers[r] target 说明找到了答案 class Solution {publi…

linux 操作系统下dhcrelay命令介绍和案例应用

linux 操作系统下dhcrelay命令介绍和案例应用 dhcrelay是一个用于DHCP&#xff08;动态主机配置协议&#xff09;中继的命令&#xff0c;主要功能是在没有本地DHCP服务器的子网中转发DHCP请求。这使得不同子网的DHCP客户端能够与位于其他子网中的DHCP服务器进行通信。 dhcrela…

基于YOLO算法的网球运动实时分析-击球速度测量-击球次数(附源码)

这个项目通过分析视频中的网球运动员来测量他们的速度、击球速度以及击球次数。该项目使用YOLO&#xff08;You Only Look Once&#xff09;算法来检测球员和网球&#xff0c;并利用卷积神经网络&#xff08;CNNs&#xff09;来提取球场的关键点。此实战项目非常适合提升您的机…