一、          什么是数组

数组就是具有相同数据类型的有序集合。

分为一维数组、二维数组及多维数组。

一维数组就是用一个下标定义的数组

二维数组就是用二个下标定义的数组

我们把具有三个下标及三个下标以上的数组称为多维数组。

二、          数组

  1. 1.       一维数组的定义

(1) 一维数组的定义的形式始下:

类型说明符  数组名[常量表达式];

Int         a     [10];

定义数组时,数组的大小必须确定

(2) 对于一维数组的定义说明如下:

数组名应符合标识符的命名规则,正式应用中第一个字符应为英文

用方括号将常量表达式括起来

常量表达式定义了数组元素的个数

数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素。

常量表达式中不允许出现变量。 

  1. 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. 1.       冒泡排序法

现在给大家一个来思考,给你10个质量不同的塑料小球,让你从轻到重依次分开,不用能用称重的方法解决,你能想到用什么办法吗?

冒泡排序(BubbleSort)的基本概念是:

依次比较相邻的两个数,将小数放在前面,·大数放在后面。

即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,

如此继续,直至比较最后两个数,将小数放前,大数放后。

 

  1. 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-数组-基本算法的更多相关文章

  1. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  2. 小学生都看得懂的C语言入门(3): 数组与函数

    #include <stdio.h> int main() { int x; ; ; scanf("%d",&x){ sum+=x; cnt++; scanf( ...

  3. C语言入门100题,考算法的居多

    入门题,考算法的居多,共同学习! 1. 编程,统计在所输入的50个实数中有多少个正数.多少个负数.多少个零. 2. 编程,计算并输出方程X2+Y2=1989的所有整数解. 3. 编程,输入一个10进制 ...

  4. C语言入门(16)——C语言的数组

    和结构体类似,数组也是一种复合数据类型,它由一系列相同类型的元素组成.C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必 ...

  5. Go语言入门——数组、切片和映射

    按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始” 但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了. ...

  6. 我为什么反对推荐新人编程C/C++语言入门?

    虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...

  7. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  8. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

  9. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

随机推荐

  1. LINUX基础内容

    在Linux中,有三种基本的文件类型: 1) 普通文件 普通文件是以字节为单位的数据流,包括文本文件.源码文件.可执行文件等.文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程 ...

  2. Ruby元编程:动态添加类属性及其实际应用

    上个星期测试道的Monkey老师和我聊到测试用例参数过多的问题,其实这样的问题在我这里也同样经历过.比如我的测试用例必须面对不同的测试环境,每个环境有无数的参数,开发的最初阶段,因为参数少,所以就放在 ...

  3. 解决vuejs 创建数据后设置对象的属性实现不了双向绑定问题

    抛出踩坑:vue创建后的数据,自定义设置对象的属性,实现不了双向绑定 当业务场景,需要在请求接口数据新增自定义的属性 let foodList = [ {title: '回锅肉', price: 99 ...

  4. Java多线程同步工具类之CountDownLatch

    在过去我们实现多线程同步的代码中,往往使用join().wait().notiyAll()等线程间通信的方式,随着JUC包的不断的完善,java为我们提供了丰富同步工具类,官方也鼓励我们使用工具类来实 ...

  5. C语言指针学习总结

    上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂. 最近在重温数据结构的内容,因为大多数据结构的教材都是用C语言描述的,而数据结构中也大量的用到了指针的内容,所以我就在这篇笔记中 ...

  6. vue项目接入api接口

    我们在做项目时,一切基础在于数据上面,所以接入api接口是关键. 访问接口是我们会遇到跨域,而,vue-cli给我们提供了反向代理,所以我们只需要配置一下就可以了. 在config文件中找到index ...

  7. js 数组去重方法

    var arr = ['a',1,2,3,'a',4,2,3,1,4,2,8,10,null,'a']; // 方法一 var newArr = [...new Set(arr)]; console. ...

  8. docker无法启动

    docker无法启动 docker启动时报错Error starting daemon: SELinux is not supported with the overlay2 graph driver ...

  9. KVM web管理工具——WebVirtMgr

    系统环境: [root@kvm-admin ~]# cat /etc/redhat-release CentOS Linux release (Core) 关闭防火墙.selinux [root@kv ...

  10. Web安全深度剖析

    Web安全深度剖析 链接:https://pan.baidu.com/s/15NulgWNzQ2JPCdn9q1jE-g 提取码:6y83    Web安全深度剖析>总结了当前流行的高危漏洞的形 ...