看到论坛里一个小问题,自己也写了下

本文介绍了一个C语言程序,该程序能够接收多个一位数字输入,并统计每个数字出现的次数。之后,程序将根据出现次数对这些数字进行排序输出,若出现次数相同,则按数字大小降序输出。

问题:输入任意多个一位数字(0-9),然后按照出现次数输出.

我写的对应功能如下:

1.可以接受任意多个一位数;

2.按照出现次数多少排序输出;

3.如几个数字出现次数相同时,按照数字由大到小排序(这个要是由小到大就能省去冒泡排序后的那一块儿).


#include<stdio.h>  
void Pro(int ar[],int n);
void Bubble_Sort(int Num[],int len);  //冒泡排序  
int Idex[10]={0,1,2,3,4,5,6,7,8,9};   //可能出现的数字组成的数组
int main(void)  
{  
    int i,n;      
    puts("Input the number of elements to the array:");  
        scanf("%d",&n);  
    int ar[n];                      //变长数组,编译器需要支持C99标准才行.   
    puts("Input n numbers:");  
    for(i=0;i<n;i++)                //读取数组元素  
        scanf("%d",&ar[i]);  
    Pro(ar,n);    
    putchar('\n');
    return 0;  
}  
void Pro(int ar[],int n)
{
     int i,j=0,temp;
     int Num[10]={0}; 

     for(i=0;i<n;i++)     //统计各个数字出现的次数 
     {
         temp=ar[i];
         switch(temp)
         {
		 case 0:Num[0]++;break;
		 case 1:Num[1]++;break;
		 case 2:Num[2]++;break;
		 case 3:Num[3]++;break;
		 case 4:Num[4]++;break;
		 case 5:Num[5]++;break;
		 case 6:Num[6]++;break;
		 case 7:Num[7]++;break;
		 case 8:Num[8]++;break;
		 case 9:Num[9]++;break;
		 default :       break;
         }
     }	
    Bubble_Sort(Num,10);                    //排序 
      
    for(i=1;i<10;i++)                       //如果出现次数相同,则按数字由大到小排列 
        for(j=0;j<10-i;j++)
        {
            if(Num[j]==Num[j+1] && Num!=0)
                if(Idex[j]<Idex[j+1])
                {
                    temp=Idex[j];
                    Idex[j]=Idex[j+1];
                    Idex[j+1]=temp;
                }
        } 
    
    puts("统计结果如下(出现次数由多到少排序,出现次数相同时按数字由大到校排序,数字后括号内为其出现的次数统计):");
    for(i=0;i<10;i++)
	{
		if(0!=Num[i])             //过滤掉后面次数为0的元素 
            printf("%d(%d)  ", Idex[i],Num[i]);
	}
	putchar('\n');
     
}
void Bubble_Sort(int Num[],int len)      //冒泡排序  
{  
    int i,j,temp1,temp2;  
    for(i=1;i<len;i++)  
    {  
        for(j=0;j<len-i;j++)            //循环找到下沉"气泡",每下沉一位,下次比较长度小一位   
        {  
            if(Num[j]<=Num[j+1])  
            {  
                temp1=Num[j];          //数字交换 
                Num[j]=Num[j+1];  
                Num[j+1]=temp1;

				temp2=Idex[j];        //次数对应数字也同时移动 
				Idex[j]=Idex[j+1];
				Idex[j+1]=temp2;
            }  
        }  
    }  
}  


<think>好的,用户之前问过如何搭建网站,现在又想知道小白怎么自己程序。这说明他可能对技术方面有进一步的兴趣,想从建站扩展到编程。我需要先回顾他之前的提问,确保这次的回答和之前的建议有连贯性。 用户提到是“小白”,所以需要从零基础开始,不能假设他有编程经验。搭建网站的时候,我推荐了WordPress和静态网站,现在学编程可能需要更基础的指导。他可能对编程的应用场景不太清楚,或者想了解如何开始学习,选择什么语言,有什么资源。 首先,要确定他的学习目标。是兴趣驱动还是职业发展?不同的目标可能推荐不同的语言。比如,兴趣的话可能选Python做小项目,职业的话可能需要Java或C++。但用户没有明确说明,所以应该先建议明确目标。 然后,编程基础很重要。变量、控制结构、函数这些概念需要解释清楚。可能需要用简单的例子,比如用Python的print语句,或者变量赋值,让用户容易理解。 接下来是选择编程语言。根据不同的应用方向推荐,比如Web开发用JavaScript,数据分析用Python,移动端用Kotlin或Swift。这样用户可以根据自己的兴趣选择,增加学习的动力。 开发环境配置对新手可能是个障碍,所以要推荐简单易用的工具,比如VS Code,或者在线平台如Codecademy,避免一开始就被环境问题劝退。 学习路径要分阶段,从基础到项目实战,逐步深入。项目驱动学习效果更好,可以建议小项目,比如计算器、待办事项应用,这样用户能实际看到成果,保持兴趣。 学习资源方面,推荐免费且适合新手的平台,比如菜鸟教程、B站视频,还有LeetCode这样的练习平台。同时,社区支持也很重要,遇到问题可以寻求帮助。 常见误区需要提醒,比如不要急于求成,不要只看不练,避免陷入复杂环境配置。这些是新手常犯的错误,提前指出可以帮助他们少走弯路。 最后,鼓励持续学习,定期练习,参与开源项目。可能用户需要一些动力和方法论,保持学习的持续性。 还要注意用户的后续问题,比如具体语言选择、调试技巧等,保持回答的开放性,让他可以继续提问。之前的回答结构清晰,分步骤说明,这次也应该保持类似的格式,方便用户逐步跟进。 另外,用户之前可能已经接触过HTML/CSS,所以在编程入门时可以稍微提到这些和编程语言的关系,帮助他建立联系。例如,JavaScript作为网页的动态部分,和之前学的静态页面结合起来。 总之,回答需要循序渐进,从明确目标到选择语言,再到学习资源和实践项目,覆盖整个学习路径,同时给出鼓励和避免常见错误,帮助小白顺利入门编程。</think>小白自学编程可遵循以下结构化学习路径,按步骤拆解并附带实用工具推荐: 一、明确学习目标 1. 先确定编程应用方向: $$ \begin{cases} \text{Web开发} & \rightarrow JavaScript/PHP \\ \text{数据分析} & \rightarrow Python/R \\ \text{移动开发} & \rightarrow Kotlin/Swift \\ \text{系统编程} & \rightarrow C/C++/Rust \\ \text{自动化办公} & \rightarrow Python/VBA \end{cases} $$ 二、掌握编程基础 1. 核心概念三部曲: - 变量与数据类型:理解 $a = 5$, $\text{name} = "Alice"$ 等基本操作 - 控制结构:掌握条件语句 $if...else$ 和循环 $for/while$ - 函数编:学习参数传递与返回值,如 $def\ add(x,y):\ return\ x+y$ 三、选择入门语言推荐 1. Python(综合首选): ```python # 第一个程序示例 print("Hello World!") # 计算斐波那契数列 def fib(n): a, b = 0, 1 while a < n: print(a, end=' ') a, b = b, a+b fib(1000) ``` 2. JavaScript(Web开发必学): ```javascript // 网页交互示例 document.getElementById("demo").innerHTML = "Hello JavaScript!"; // 事件监听 button.addEventListener('click', () => { alert('按钮被点击!'); }); ``` 四、开发环境搭建 1. 工具组合推荐: - 编辑器:VS Code(含智能提示插件) - 学习平台:Replit(在线编程环境) - 版本控制:Git + GitHub Desktop - 调试工具:浏览器开发者工具(F12) 五、分阶段学习路径 1. 新手阶段(1-3个月): $$ \text{基础语法} \rightarrow \text{小项目实践} \rightarrow \text{调试技能} $$ - 推荐项目:计算器/待办清单/简易爬虫 2. 进阶阶段(3-6个月): $$ \text{算法基础} \rightarrow \text{框架学习} \rightarrow \text{团队协作} $$ - 必学内容:数据结构/设计模式/REST API 六、学习资源推荐 1. 免费学习平台: - 中文:菜鸟教程(基础语法)、力扣(算法练习) - 英文:freeCodeCamp(项目实战)、Codecademy(交互学习) 2. 视频教程: - B站:黑马程序员/尚硅谷系统课 - YouTube:Corey Schafer(Python)、Traversy Media(Web开发) 七、避坑指南 1. 常见误区: - ✖ 盲目追求多语言(先精通一门) - ✖ 只看教程不代码(实操占比应>70%) - ✖ 忽略代码规范(缩进/命名要规范) 2. 高效学习法: - 每天坚持代码(哪怕只有30分钟) - 善用Stack Overflow解决报错 - 参与开源项目(从修复简单bug开始) 八、实战成长建议 1. 项目进化路线: $$ \text{控制台程序} \rightarrow \text{GUI应用} \rightarrow \text{网络应用} \rightarrow \text{分布式系统} $$ 2. 作品集搭建: - GitHub仓库规范管理代码 - 使用GitHub Pages展示项目 - 参与Hackathon编程马拉松 学习曲线参考: - 基础语法掌握:约50小时 - 能完成小项目:约200小时 - 达到实习水平:约600小时 - 开发完整应用:约1000小时 特别提示: 1. 遇到报错时:仔细阅读错误信息(90%的问题可通过错误提示解决) 2. 推荐安装Copilot:AI辅助编程工具能提升学习效率 3. 加入技术社区:优快云/掘金/V2EX等论坛获取最新资讯 后续可深入的方向: - 如何选择第一个编程项目? - 怎样提升代码运行效率? - 常见算法优化技巧有哪些? - 如何准备技术面试? 记住编程就像学乐器,重点在于持续练习。每天进步一点点,半年后你会惊讶自己的成长!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值