C语言编程入门:10个经典实战小程序解析

不晚
不晚
发布时间:2026-10-15 | 5人浏览过
原创

探索C语言基础逻辑的最佳方式是研读经典案例。本文整理了包含数学运算、流程控制及字符处理的10个代表性程序,深入解析其背后的算法思路与代码实现细节。

基础逻辑与循环应用

第1步:使用三重循环生成不重复三位数

该案例旨在解决排列组合问题。通过三个嵌套的 for 循环分别代表百位、十位和个位,遍历1至4的数字。利用 if (i!=k && i!=j && j!=k) 条件确保三位数字互不相同,并通过 printf 输出所有符合条件的组合。

main() 
{ 
int i,j,k; 
printf("\n"); 
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); 
         } 
}

第2步:实现阶梯式利润提成计算

此题考察复杂的条件分支与数据类型选择。关键点在于根据利润区间分段计算奖金,并定义奖金变量为 long int 以防止溢出。预先计算各阈值区间的累计奖金(如 bonus1 为10万时的奖金),可简化后续 if-else 的逻辑判断。

main() 
{ 
long int i; 
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
// 预计算各阶段基准奖金
bonus1=100000*0.1;
bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;

scanf("%ld",&i);
if(i<=100000)       bonus=i*0.1;
else if(i<=200000)   bonus=bonus1+(i-100000)*0.075;
else if(i<=400000)   bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)   bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)  bonus=bonus6+(i-600000)*0.015;
else                 bonus=bonus10+(i-1000000)*0.01;

printf("bonus=%d",bonus);
}

第3步:利用完全平方数性质反推整数

题目要求在10万以内寻找满足特定条件的整数。分析指出:若整数 $x$ 加100后是平方数,再加168(即总共加268)也是平方数。代码通过 sqrt() 函数开方,并验证 x*x == i+100 来确认整数解,这是验证完全平方数的有效手段。

#include "math.h" 
main() 
{ 
long int i,x,y,z; 
for (i=1;i<100000;i++) 
   { 
     x=sqrt(i+100);  /*计算加100后的平方根*/ 
     y=sqrt(i+268);  /*计算加268后的平方根*/ 
     if(x*x==i+100&&y*y==i+268) /*验证是否为整数平方*/ 
        printf("\n%ld\n",i); 
   } 
}

第4步:计算日期在一年中的序数

该程序涉及时间逻辑处理。核心步骤是先通过 switch 语句累加前几个月的天数,再加上当月日期。特别注意闰年判断逻辑:(year%400==0 || (year%4==0 && year%100!=0))。如果是闰年且月份大于2月,总天数需额外加1。

main() 
{ 
int day,month,year,sum,leap; 
printf("\nplease input year,month,day\n"); 
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{ 
   case 1:sum=0;break;
   case 2:sum=31;break;
   case 3:sum=59;break; // 注意闰年修正
   case 4:sum=90;break;
   case 5:sum=120;break;
   case 6:sum=151;break;
   case 7:sum=181;break;
   case 8:sum=212;break;
   case 9:sum=243;break;
   case 10:sum=273;break;
   case 11:sum=304;break;
   case 12:sum=334;break;
   default:printf("data error");break;
}
sum=sum+day; 
if(year%400==0||(year%4==0&&year%100!=0)) leap=1;
else leap=0;
if(leap==1&&month>2) sum++; 
printf("It is the %dth day.",sum); 
}

第5步:通过交换法对三个整数排序

目标是将输入的x, y, z按从小到大的顺序输出。算法策略是始终将最小值置换到x位置:首先比较x与y,若x大则交换;接着比较x与z,若x大则交换。此时x已是最小值。最后只需比较y与z并交换即可确保有序。

main() 
{ 
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y) { t=x; x=y; y=t; } // 确保x<=y
if (x>z) { t=x; x=z; z=t; } // 确保x<=z,此时x最小
if (y>z) { t=y; y=z; z=t; } // 确保y<=z
printf("small to big: %d %d %d\n",x,y,z);
}

图形输出与字符控制

第6步:输出字母C图案

这是一个简单的控制台绘图练习。通过多行 printf 语句,利用空格和星号 * 的组合,模拟出字母“C”的形状。虽然代码中包含一行

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表