C语言入门8-数组-基本算法
一、 什么是数组
数组就是具有相同数据类型的有序集合。
分为一维数组、二维数组及多维数组。
一维数组就是用一个下标定义的数组
二维数组就是用二个下标定义的数组
我们把具有三个下标及三个下标以上的数组称为多维数组。
二、 数组
- 1. 一维数组的定义
(1) 一维数组的定义的形式始下:
类型说明符 数组名[常量表达式];
Int a [10];
定义数组时,数组的大小必须确定
(2) 对于一维数组的定义说明如下:
数组名应符合标识符的命名规则,正式应用中第一个字符应为英文
用方括号将常量表达式括起来
常量表达式定义了数组元素的个数
数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素。
常量表达式中不允许出现变量。
- 2. 数组的初始化
(1) 对数组元素赋初始化可以用以下方法实现
① 在定义数组时对数组元素赋以初值。
② 可以只给一部分元素赋值:例始
int a[10]={1,2,3,4};在语句只给了前4个元素初值,后面6个默认以0补齐
③ 如果想一个数组里的全部元素值为0;可以写成
int a[10]={0};或int a[10]={0,0,0,0,0,0,0,0,0,0};
④ 在数组赋初值时可以不指定长度,长度默认就是后面元素的个数:
例 int a[]={1,2,2,3,4};数组默认长度为4.
整型数组排序
一、 什么是排序
排序是计算机内经常进行的一种操作,
其目的是将一组"无序"的记录序列调整为"有序"的记录序列。
二、 排序的方法
排序的方法有很多:快速排序、希尔排序、堆排序、直接选择排序,基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序。
排序是一个基本功,这里先介绍一种最简单和实用的方法:冒泡排序法。
- 1. 冒泡排序法
现在给大家一个来思考,给你10个质量不同的塑料小球,让你从轻到重依次分开,不用能用称重的方法解决,你能想到用什么办法吗?
冒泡排序(BubbleSort)的基本概念是:
依次比较相邻的两个数,将小数放在前面,·大数放在后面。
即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,
如此继续,直至比较最后两个数,将小数放前,大数放后。
- 2. 冒泡排序的算法设计原理
冒泡排序算法的运作如下:(从后往前)
(1) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3) 针对所有的元素重复以上的步骤,除了最后一个。
(4) 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
(1) 参考代码如下:
/* 从低到高排序 */
#include "stdio.h"
void main()
{ int a[6] = { 6, 2, 4, 1, 5, 9 };
int t;
int i,j; // i是外层循环 j是内层循环
for (i = 1; i < 6; i++)
{
for (j = 0; j <6-i ; j++)
{
if (a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("从低到高依次为\n");
for(i=0;i<6;i++)
printf("%d\t",a[i]);
}
算法—穷举的实现
一、 穷举
穷举法(Exhaustion),也称枚举法(Enumeration):列举所有可能,逐一试探 。
1、穷举法的基本思想:
根据问题的 部分已知条件 预估 解的范围
在此范围内 对所有可能的情况 进行逐一验证
2、若某个情况符合题目的全部条件,则该情况为本问题的一个解
若全部情况的验证结果均不符合题目的全部条件,则说明该题无解
直到找到满足已知条件的解为止
3、穷举法 求解问题的 两个基本要素 (多选题 )
(1)确定穷举对象和穷举范围
影响算法的时间复杂度、 循环结构实现
(2)确定判定条件
符合什么条件 才能 成为问题的答案、分支结构实现
4、穷举法的实际应用,常用于密码的破译 , 也称蛮力法(Brute Force),或暴力搜索法
(1)穷举法优点:算法简单,逻辑清晰,易于理解,程序易于实现
(2)缺点:运算量较大、只适合于“有几种组合”、“是否存在”、求解不定方程 等类型的问题求解
二、 鸡兔同笼 参考代码如下:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i;// 鸡的只数
for(i=; i<; i++)
{
if(*i+(-i)*==)
{
printf("鸡%d头\n兔%d只\n",i,-i) ;
}
}
}
三、 ACM案例28水仙花数
水仙花数定义 各个位数立方和等于它本身的三位数。
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int num;//定义数变量
int g,s,b;//定义个、十、百位变量名
printf("水仙共数有:");
for(num=;num<=;num++)//穷举测试
{
g=num%; //个位数
s=num/%; //十位数
b=num/; //百位数
if(g*g*g+s*s*s+b*b*b==num) //判断条件
{
printf("%d\t",num);
}
}
}
C语言入门8-数组-基本算法的更多相关文章
- 小学生都看得懂的C语言入门(4): 数组与函数
// 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...
- 小学生都看得懂的C语言入门(3): 数组与函数
#include <stdio.h> int main() { int x; ; ; scanf("%d",&x){ sum+=x; cnt++; scanf( ...
- C语言入门100题,考算法的居多
入门题,考算法的居多,共同学习! 1. 编程,统计在所输入的50个实数中有多少个正数.多少个负数.多少个零. 2. 编程,计算并输出方程X2+Y2=1989的所有整数解. 3. 编程,输入一个10进制 ...
- C语言入门(16)——C语言的数组
和结构体类似,数组也是一种复合数据类型,它由一系列相同类型的元素组成.C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必 ...
- Go语言入门——数组、切片和映射
按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始” 但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了. ...
- 我为什么反对推荐新人编程C/C++语言入门?
虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...
- c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...
- 【转】c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...
随机推荐
- Dropbox是同步盘,Box.net是网盘(所以要学习Box)
自从能无缝用Dropbox后,确实得瑟了很久,但只有可怜巴巴的2G空间,搞不出什么妖蛾子,dropbox的好用,世所共知.百度云盘2T的空间,我却不敢把重要的东西放在里面. 在还没有优盘的时候,我常常 ...
- Rainyday.js – Rendering Raindrops with JavaScript
Posted · Category:GPL License,Tools 直击现场 The idea behind Rainyday.js is to create a JavaScript libra ...
- windows下进程间通信的(13种方法)
转自:http://blog.csdn.NET/shiqz/article/details/5862936 摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进 ...
- SAP HANA 开发模式 - 基于SAP HANA平台的多团队产品研发
“基本”开发模式 Windows: Unix/Linux: 在基本模式下我们可以通过regi来进行激活我们的object.Regi是一个类git功能的,方便和HANA repository交互的一个命 ...
- SAP TABLECONTROL 自定义SEARCH HELP
项目上需要开发一个界面如下的应用程序.这是一个MB1A发料的辅助程序,限制住移动类型和在特定字段写入产品号. 这个应用程序的主要功能毫无疑问是通过BAPI实现的.但在TABLECONTROL中需要对填 ...
- Python 爬虫从入门到进阶之路(六)
在之前的文章中我们介绍了一下 opener 应用中的 ProxyHandler 处理器(代理设置),本篇文章我们再来看一下 opener 中的 Cookie 的使用. Cookie 是指某些网站服务器 ...
- Adam和学习率衰减(learning learning decay)
目录 梯度下降法更新参数 Adam 更新参数 Adam + 学习率衰减 Adam 衰减的学习率 References 本文先介绍一般的梯度下降法是如何更新参数的,然后介绍 Adam 如何更新参数,以及 ...
- 不一样的go语言-玩转语法之二
本文继续玩转语法,是为之二. I/O(Input/Output),输入输出是计算机最为突出的特点,也可以说是计算机最为核心的功能.没有I/O,计算机就是一堆废铜废铁.从最低层的电子元器件开始, ...
- Spring Boot:使用Redis存储技术
综合概述 Redis是一个开源免费的高性能key-value数据库,读取速度达110000次/s,写入速度达81000次/s.Redis支持丰富的数据类型,如Lists, Hashes, Sets 及 ...
- HBase 学习之路(八)——HBase协处理器
一.简述 在使用HBase时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器( ...