C语言上机实践:优化循环解兑零问题

需积分: 39 3 下载量 164 浏览量 更新于2024-07-13 收藏 326KB PPT 举报
"C语言上机练习题" 在C语言上机习题中,我们关注的是如何优化代码,减少无效循环,以及实现特定的算法。题目给出的代码片段是解决一个货币找零问题,目标是计算出使用2元和5元面额的纸币组合成100元有多少种方法。原始代码中存在两层嵌套循环,分别用于遍历2元和5元纸币的数量。 第6行的循环条件是`for(f=0;f<=(100-t*2)/5;f++)`,这个循环用于找出5元纸币的最大数量,使得总金额不超过100元。这里的优化点在于,当`t`确定时,`f`的最大值可以直接计算,而不需要在循环内部进行判断。我们可以提前计算 `(100 - t * 2) / 5` 的结果,并将其赋值给一个新的变量,然后用这个新变量作为循环条件,从而简化循环。 优化后的代码可能如下: ```c #include <stdio.h> int main() { int x, f, t, n; int max_f; // 新增的变量,用于存储f的最大值 x = 0; for (t = 0; t <= 50; t++) { max_f = (100 - t * 2) / 5; // 计算f的最大值 for (f = 0; f <= max_f; f++) { n = 100 - f * 5 - t * 2; if (n >= 0) x++; } } printf("%d", x); return 0; } ``` 此外,题目还提到了其他附加题,这些题目旨在帮助学生熟悉C语言的基本语法和运算: 1. 输入任意一整数,输出其绝对值。这里使用了条件语句`if`来判断输入的整数是否为负数,如果是负数,则取其相反数。代码如下: ```c #include<stdio.h> int main() { int x, y; scanf("%d", &x); y = x; if (x < 0) y = -x; printf("x=%d, |x|=%d\n", x, y); return 0; } ``` 2. 输入两个数x和y,如果x能被y整除,显示"yes",否则显示"no"。通过`%`运算符检查x是否能被y整除。代码如下: ```c #include<stdio.h> int main() { int x, y; printf("input x, y: "); scanf("%d, %d", &x, &y); if (x % y != 0) printf("NO\n"); else printf("YES\n"); return 0; } ``` 3. 求解一元二次方程ax^2 + bx + c = 0的实根。这里使用了数学库`math.h`中的平方根函数`sqrt()`来计算根。如果a为0,方程变为线性,否则使用公式求解。代码如下: ```c #include<stdio.h> #include<math.h> int main() { float a, b, c, d, a2, x1, x2; printf("Input a, b, c\n"); scanf("%f, %f, %f", &a, &b, &c); if (a == 0) { x1 = -c / b; printf("root=%f\n", x1); } else { d = b * b - 4 * a * c; a2 = 2 * a; if (d >= 0) { x1 = (-b + sqrt(d)) / a2; x2 = (-b - sqrt(d)) / a2; printf("roots are %.2f and %.2f\n", x1, x2); } else { printf("No real roots\n"); } } return 0; } ``` 这些练习题涵盖了C语言的基础知识,如输入输出、基本运算符、条件语句、循环结构以及数学函数的使用,对于初学者来说是非常有价值的实践。通过这样的练习,学生可以加深对C语言编程的理解,并提高解决问题的能力。