我正在用KN King的书 C 教自己
我一直在浏览作者提供的示例,并在Visual Studio中添加我自己的笔记。
我得到了下面程序中包含的循环的“大图”,但有些细节在我身上丢失了。
我希望你可以启发我在图片中用红色圈出的声明的作用?它在做什么?
图1 - 完整程序:
图2 - 底部两个环切断,显示预期结果正常:
在第一个循环括号的上下文中,红色语句似乎是不必要的。但是当我删除它时,我得到的程序无法按预期运行。所以它必须绑在它下面的两个循环之一。我正在挠头实际上做了什么。
作者在下面的BOLD-FACED TEXT中暗示了这个目的,但他并不是100%明确地发生了什么。这很奇怪,因为红色语句处理包含初始余额的数组,但在循环中它包含在与打印顶行的利率标签的交易中。
作者说:
第二行有点棘手,因为它的值取决于第一行中的数字。我们的解决方案是在计算数组时将第一行存储在数组中,然后使用数组中的值来计算第二行。
任何帮助将不胜感激!
我包含了书中的文字和下面的源代码
计算兴趣
我们的计划打印一张表格,显示在一段时间内以不同利率投资100美元的价值。用户将输入利率和资金投入的年数。该表将以一年为间隔显示货币价值 - 以该利率和接下来的四个较高利率 - 假设利息每年复利一次。以下是该程序的会话内容:
输入利率:6输入年数:5
显然,我们可以使用For Statement打印第一行。
第二行有点棘手,因为它的值取决于第一行中的数字。我们的解决方案是在计算数组时将第一行存储在数组中,然后使用数组中的值来计算第二行。
当然,可以对第三行和后一行重复此过程。
我们最终会得到两个For语句,一个嵌套在另一个中: - 外循环将从1计数到用户请求的年数 - 内循环将利率从其最低值增加到其最高价值
注意使用NUM_RATES来控制两个For循环。如果我们稍后更改名为value的数组的大小,则循环将自动调整。
#include <stdio.h>
#define NUM_RATES (sizeof(value)/sizeof(value[0])) /* NUM_RATES is a macro that finds the length of the array
based on the SIZE OF THE ARRAY in bytes ( size of(value) ) DIVIDED BY the SIZE OF EACH ELEMENT ( sizeof(value[0]) ) */
#define INITIAL_BALANCE 100.00
main()
{
int low_rate; /*User input --- the lowest interest rate*/
int num_years; /*User input --- the number of years*/
int i;
int year;
float value[5]; /*Remember that the number in the brackets represents the number of elements --- 1 for each of the 5 year timeline in this case */
printf("Enter interest rate: ");
scanf_s("%d", &low_rate);
printf("Enter number of years: ");
scanf_s("%d", &num_years);
printf("\nYears"); /*This statement prints out the label for the "YEAR" column on the left side of the chart */
/*This loop prints out the LABELS FOR THE INTEREST RATE ROW AT THE TOP. Right next to the "Year" */
for (i = 0; i < NUM_RATES; i++) { /* NUM_RATES is 5 here
Remember that NUM_RATES, seen above, is a macro for (sizeof(value)/sizeof(value[0]))
This macro measures the LENGTH of the array by dividing the array size in bytes by the element size in bytes
The macro format makes it easy for the loops to adjust if we need to CHANGE THE SIZE OF THE ARRAY */
printf("%6d", low_rate + i); /* Prints out the low rate + i according to the loop above */
value[i] = INITIAL_BALANCE;
}
printf("\n"); /* This statement starts a new line for the loop below */
/* This loop prints the numbers IN THE YEARS COLUMN. Counts from 1 to the number of years entered by the user */
for (year = 1; year <= num_years; year++) {
printf("%3d ", year);
/* This NESTED loop increments the interest rate FROM ITS LOWEST VALUE TO ITS HIGHEST VALUE AND MULTIPLIES IT BY $100. Occurs right after the year column entry printed */
for (i = 0 ; i < NUM_RATES ; i++) {
value[i] = value[i] + ( ((low_rate + i) / 100.0) * value[i]);
printf("%7.2f", value[i]);
}
printf("\n"); /*This statement causes the value to be placed on the next line*/
}
return 0;
}
答案 0 :(得分:1)
有问题的一行:
value[i] = INITIAL_BALANCE;
会将值数组中每个元素的值设置为常量值(即 100.00 )。否则,未初始化数组中的值可能为0或随机/ 垃圾值,具体取决于编译器。
请参阅this sample并提供更新的输出。请注意在 main()的函数声明之前添加的关键字 int ,以及正式参数 argc 和 argc 。 KN King的C书应该解释这些,尽管你可以在网上找到很多资源,例如The GNU C Programming Tutorial。