C语言习题求助:实现x²-y²函数并打印x,y从-1到1的11x11网格
问题分析
- 仅使用了单层循环:当前代码只有1层for循环,仅能输出单组x对应的11个y取值的计算结果,要生成11×11的网格必须使用双层循环,外层遍历所有x的取值,内层遍历每个x对应的所有y取值。
- 变量使用不规范:变量x未初始化就被赋值给origX,origX、origY、count、update四个变量定义后全程未使用,属于冗余代码。
- 输出格式不符合要求:使用
%f\t作为输出格式,默认输出6位小数且制表符对齐效果不稳定,和示例中固定宽度保留2位小数的格式不匹配。 - 未实现要求的独立函数:题目明确要求先定义返回x²-y²的函数再调用,现有代码没有封装对应的独立函数。
- 浮点数精度问题:直接对浮点数做连续递减操作容易产生累计精度误差,更推荐用整数循环变量换算x、y的取值。
正确实现方案
首先封装要求的计算函数,再用双层循环遍历所有x、y的取值,控制输出格式即可:
#include <stdio.h> // 实现题目要求的返回x² - y²的函数 double square_diff(double x, double y) { return x * x - y * y; } int main() { // 外层循环遍历x的取值,从1到-1每次减0.2,共11个值 for (int i = 0; i < 11; i++) { double x = 1.0 - 0.2 * i; // 内层循环遍历y的取值,从1到-1每次减0.2,共11个值 for (int j = 0; j < 11; j++) { double y = 1.0 - 0.2 * j; double res = square_diff(x, y); // 固定8位宽度,保留2位小数输出,和示例格式对齐 printf("%8.2f", res); } // 每行输出完换行 printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者Gtown
相关产品推荐
相关产品推荐

