经典 C 程序 100 例实战详解:从入门到精通的一周学习计划
第一天:基础编程思维入门(程序 1-5)
程序 1:三位数排列组合问题
题目:用 1、2、3、4 组成无重复数字的三位数,求所有可能的组合。
核心思路:三重循环遍历百位、十位、个位,通过条件判断过滤重复数字。
main() {int i,j,k;for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++)if(i!=k&&i!=j&&j!=k) printf("%d,%d,%d\n",i,j,k);
}
关键点:三重循环的嵌套逻辑,条件判断的去重逻辑。
扩展思考:若数字改为 0-9,如何修改代码?(提示:百位不能为 0)
程序 2:完全平方数求解
题目:寻找一个数,加 100 是完全平方数,再加 168 也是完全平方数。
核心思路:遍历 10 万以内的数,用平方根函数判断是否为整数。
#include "math.h"
main() {long int i,x,y;for(i=1;i<100000;i++) {x=sqrt(i+100); y=sqrt(i+268); if(x*x==i+100&&y*y==i+268)printf("%ld\n",i);}
}
关键点:利用数学库函数sqrt
,通过平方验证完全平方数。
优化点:可缩小循环范围,比如从 1 开始到(y^2 - 268)
,减少计算量。
程序 3:三数排序
题目:输入三个数,按从小到大输出。
核心思路:两两比较交换,确保最小数在最前。
main() {int x,y,z,t;scanf("%d%d%d",&x,&y,&z);if(x>y) {t=x;x=y;y=t;} if(x>z) {t=z;z=x;x=t;} if(y>z) {t=y;y=z;z=t;} printf("small to big: %d %d %d\n",x,y