1. C语言编程实战:从改错到算法实现的五个经典案例
作为一名长期奋战在C语言教学一线的开发者,我深知初学者在学习过程中遇到的典型问题和困惑。今天我将通过五个精心挑选的编程案例,分享一些在代码调试和算法实现中的实用技巧,这些内容都来自哈工大C语言编程练习中的经典题目。
提示:在阅读代码时,建议先尝试自己解决问题,再看解析和答案,这样学习效果会更好。
1.1 字符串查找程序的调试与优化
第一个案例是一个常见的字符串查找程序,原题要求从预定义的字符串数组中查找用户输入的字符串。这个题目看似简单,却包含了多个初学者容易犯错的细节。
c复制#include <stdio.h>
#include <string.h>
int main()
{
int i=0, findFlag=0;
char x[13];
char *str[13] = { "Pascal", "Basic", "Fortran", "Java", "Visual C", "Visual Basic" };
printf("Input string:\n");
gets(x);
while (i < 6 && !findFlag)
{
if (strcmp(x, str[i]) == 0)
{
findFlag = 1;
}
i++;
}
if (findFlag)
{
printf("%s\n", x);
}
else
{
printf("Not find!\n");
}
}
这个程序有几个关键点需要注意:
-
变量初始化:原代码中
i和findFlag未初始化,这是常见错误。在C语言中,局部变量不会自动初始化,使用未初始化的变量会导致不可预测的行为。 -
字符串比较:原代码错误地使用了
strcmp(x, str),正确的应该是strcmp(x, str[i])。字符串指针数组str的每个元素str[i]才是指向具体字符串的指针。 -
循环控制:修改后的代码使用`!findF
