C语言小白,求源程序(最好每行代码给出解释)
#include <stdio.h>
int count(int n)
{
int cnt;
for(cnt=0;n;n/=10)
if(n%10==3)
cnt++;
return cnt;
}
void sort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;++i)
{
for(j=0;j<n-i-1;++j)
{
if(count(a[j])<count(a[j+1]))
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main()
{
int a[3],i;
for(i=0;i<3;++i)
scanf("%d",&a[i]);
sort(a,3);
for(i=0;i<3;++i)
printf("%d ",a[i]);
return 0;
}
因为是小白,能否给出每行代码的解释?
2023-06-12 广告
判断有没有3的出现 可以采用%(取模运算)的方式;
排序可以采用 逻辑符号 &&(逻辑非) ||(逻辑与)进行判断 也可以使用冒泡排序;
楼上的回答已经很好了,我做一个注释吧:
#include <stdio.h>
int count(int n) //返回值为int类型的自定义函数(参数为要判断的值)
{
int cnt; //声明一个临时变量
for(cnt=0;n;n/=10) //for循环传递进来的值 每循环一次除以10
** 注 整形除以整形的结果一定是整形,小数部分会自动忽略,199/10=19;即n小于10的时候不会进入循环体内部 **
if(n%10==3) //判断n对10取模是否等于3,在c语言中 = 表示赋值,== 表示对比
cnt++; //上边的语句如果为真 cnt加1
return cnt; // for循环执行完毕后 返回cnt的值,该函数运行完毕
}
void sort(int a[],int n) //冒泡排序函数(参数为 存放需要判断的值的数组,数组元素个数)
{
int i,j,t; //声明三个变量
for(i=0;i<n-1;++i) //for循环
{
for(j=0;j<n-i-1;++j) //嵌套for循环
{
if(count(a[j])<count(a[j+1])) //调用count函数并对比返回值
{
t=a[j]; //以下三条语句完成数值的交换,即每次循环都把小的数值后移
a[j]=a[j+1];
a[j+1]=t; //这个冒泡排序的函数看不懂的话可以搜一下视频教程
}
}
}
}
int main()
{
int a[3],i; //声明一个数组和变量
for(i=0;i<3;++i) //for循环3次
scanf("%d",&a[i]); //循环一次 等待输入一个数值
sort(a,3); //调用冒泡排序函数
for(i=0;i<3;++i) //for循环遍历输出数组
printf("%d ",a[i]);
return 0;
}
非常感谢这位大侠这么详细的注释,可加速我的学习进程。我原有最早BASIC基础。目前想学C和C++。因先入为主,我先采纳SHINE1991这位大侠的答案了。我另外还有一个C++的问题,恳请您能象这题一样解答,如能过机运行,我会采纳您的答案。谢谢了!