1. 问题分析与基础概念
计算长方形面积和周长是编程入门最经典的练习之一。这个看似简单的问题实际上包含了多个编程基础概念,非常适合初学者用来熟悉编程的基本流程。
长方形面积公式 S = a × b 和周长公式 P = 2 × (a + b) 是小学数学就学过的知识。但在编程实现时,我们需要考虑更多细节:
- 变量定义与数据类型选择
- 输入输出的格式控制
- 运算表达式的正确书写
- 边界条件的处理
提示:虽然题目要求输入范围是0 ≤ a,b < 10000,但在实际编程中,我们还需要考虑用户可能输入负数或非数字字符的情况。良好的程序应该具备基本的错误处理能力。
2. C语言实现详解
2.1 基础代码实现
让我们先看题目给出的基础实现代码:
c复制#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d", a*b, 2*(a+b));
return 0;
}
这段代码虽然简短,但包含了几个关键点:
#include <stdio.h>:引入标准输入输出库,这是C语言中进行输入输出操作必须的int main():程序的主函数,所有C程序都从这里开始执行int a, b:定义两个整型变量来存储长和宽scanf("%d %d", &a, &b):从标准输入读取两个整数,分别存入a和bprintf("%d %d", a*b, 2*(a+b)):计算并输出面积和周长return 0:表示程序正常结束
2.2 代码优化与改进
虽然基础版本可以工作,但我们可以做一些改进:
c复制#include <stdio.h>
int main() {
int length, width;
// 更清晰的变量命名
printf("请输入长方形的长和宽(用空格分隔):");
scanf("%d %d", &length, &width);
// 计算中间结果
int area = length * width;
int perimeter = 2 * (length + width);
// 格式化输出
printf("面积: %d\n周长: %d\n", area, perimeter);
return 0;
}
改进点:
- 使用更有意义的变量名(length/width而不是a/b)
- 添加用户提示
- 使用中间变量提高代码可读性
- 更友好的输出格式
3. 输入验证与错误处理
3.1 基本输入验证
原题假设输入都是有效的,但实际应用中我们需要处理各种异常情况:
c复制#include <stdio.h>
#include <stdbool.h>
bool validateInput(int num) {
return num >= 0 && num < 10000;
}
int main() {
int length, width;
printf("请输入长方形的长和宽(用空格分隔):");
if(scanf("%d %d", &length, &width) != 2) {
printf("错误:请输入两个整数!\n");
return 1;
}
if(!validateInput(length) || !validateInput(width)) {
printf("错误:长和宽必须在0到9999之间!\n");
return 1;
}
// ... 其余计算和输出代码 ...
return 0;
}
3.2 高级输入处理
更健壮的做法是读取整行输入然后解析:
c复制#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_INPUT 100
bool isNumber(const char *str) {
for(int i = 0; str[i] != '\0'; i++) {
if(!isdigit(str[i])) return false;
}
return true;
}
int main() {
char input[MAX_INPUT];
int length, width;
printf("请输入长方形的长和宽(用空格分隔):");
fgets(input, sizeof(input), stdin);
// 移除换行符
input[strcspn(input, "\n")] = '\0';
char *[token](https://taotoken.net?utm_source=hardware) = strtok(input, " ");
if(token == NULL || !isNumber(token)) {
printf("错误:请输入有效的长!\n");
return 1;
}
length = atoi(token);
token = strtok(NULL, " ");
if(token == NULL || !isNumber(token)) {
printf("错误:请输入有效的宽!\n");
return 1;
}
width = atoi(token);
if(length < 0 || length
