数组

在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈。

前面我们大致学了 1.定义变量,2.数据的输入与输出,3.判断语句if...else if ...else  ,4.循环语句 while,do while,for 三种循环方式。

然而上面面讲的都是废话。。。下面开始讲数组。

数组是什么?数组是构造数据类型。很难懂吗?说直白一点,数组就是很多个相同的数据类型的元素聚集在一起之后的结果。

当然,使用数组的时候,同样需要定义它。还记得怎么定义一个变量吗?   现在,请定义一个整型变量a。如果你认真复习过前面的类容,相信可以很容易写出来 int  a; 这样的语句。那么,我现在问,如何定义1000个整型变量,难道要取一千个变量名,诸如int a,b,c,d,e......;这样吗?那也太麻烦了吧。所以就出现了数组这一概念。数组的定义很方便,如下

#include<stdio.h>
int main()
{//定义了有一千个空间的整型变量
//此时在计算机中会开辟1000个整型大小的内存空间
//每个空间都可以表示一个整型变量
int a[];
}

上面的程序中就定义了一个大小为1000的整型数组。当然数组的出现就是为了输入和存储的方便。运用数组一般都与上一篇文章的循环相结合。

1.从键盘中第一行输入一个数字a,第二行输入a个数字,按回车,然后出现每个数字加一的结果。

代码:

#include<stdio.h>
int main()
{
//为防止出现n的值过大的情况,一般吧数组开的比较大
int n,i,a[];
scanf("%d",&n); //从键盘中输入一个数
for(int i=;i<n;i++)
{//通过循环从键盘中输入n个数
scanf("%d",&a[i]);
//i代表着数组的下标,数组下标从0开始
}
for(int i=;i<n;i++)
{
a[i]+=;//通过循环使数组中的每个数都加1
//输出结果
printf("%d ",a[i]);
}
return ;
}

运行结果

当然用while循环也能做到如上操作,自己可以试试,此处就不再说明了。真正值得关注的是,1.数组必须提前说明开辟了多少的空间,并且要开的够用。例如上题,如果第一行输入的是n是1001

,很明显,我只开了1000个空间,只能存放1000个数,这种现象称为数组越界,程序虽然可以运行,不会报错,但是是错误的。2.访问数组存放的第一个数是0,即a[0]代表数组存放的第一个数,a[n-1]代表数组存放的最后一个数。3.数组空间是逻辑地址是连续的,即可以通过0~n-1来访问数组中的所有的元素。

2.观察这段数字 1,1,2,3,5,8,13,21... 发现规律,现在从键盘中输入一个小于50的数m,按下回车,输出数列中的第m个数。

可以看出,这个数的前两数的和等于这个数。即  a(n)=a(n-1)+a(n-2) n>=3

规律发现了,那么用程序如何实现它:

#include<stdio.h>
int main()
{
/*用数组来存放这个数列,
因为已知前两个数,就能知道下一个数
,所以可以用递推的思想来求解*/
int n,i,a[];
//数组的下标从0开始,
a[]=;
a[]=;
for(i=;i<=;i++)
{
//递推式
a[i]=a[i-]+a[i-];
}
scanf("%d",&n);
/*由于数组下标从0开始,a[0]即数列的第一个数
所以第n个数是a[n-1].*/
printf("%d",a[n-]);
}

运行结果

3.不止语句是可以嵌套使用,数组同样也可以,比如如果有两个数组a[100],b[100]。如果b数组是一个整型数组,完全可以用b数组里面的某个数数来表示a数组的下标,例如a[b[i]]; b[i]作为了a数组的下标.

不过数组用的比较多的不只是存数字,它还可以存字符,即字符数组,定义一个字符数组:char a[100];每一个空间可以存放一个字符,例如,'a','b','.'.'?','8'......等。此处需要区分字符数组与字符串的区别。字符串一般都有一个结束符‘\0’,放在存放的字符末尾.表示字符串的结束.例如我要存放"good,time",一共有九个字符,在数组中需要开辟10个空间,存放情况为'g','o','o','d',',','t','i','m','e','\0'.最后一个为结束符.并且对于字符数组的操作c定义了许多的库函数,有些例如复制syrcpy,求长度strlen,比较strcmp函数都是很常用的,需要掌握它。

例题:从键盘中输入一串字符串,无空格,把它倒着输出出来

代码:

#include<stdio.h>
//关于字符,库函数所以需要的头文件
#include<string.h>
int main()
{
int i,l;
char a[];
//输入字符串
scanf("%s",a);
//库函数求字符串的长度
l=strlen(a);
//倒着输出
for(i=l-;i>=;i--)
printf("%c",a[i]);
}

由于只想着能让大家对c语言有一个简单的整体的认识,并且限于个人水平,所以都写的是一些比较基础的东西。如想了解的更深入需要自己去下功夫。

简单学C——第四天的更多相关文章

  1. HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    M ...

  2. HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    简单数学题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  3. HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  4. [老老实实学WCF] 第四篇 初探通信--ChannelFactory

    老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...

  5. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  6. 从0系统学Android--3.2四种基本布局

    从0系统学Android--3.2四种基本布局 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.3 系统控件不够用?创建自定义控件 上一节我们学习了 Android 中的一些常用的控件 ...

  7. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)  1.安装对应dll     Update-Package Xama ...

  8. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫

    下载地址:http://download.csdn.net/detail/u013357243/8514915 以下是执行图片展示 制作思路以及代码解析 猫猫学IOS(四)UI之半小时搞定Tom猫这里 ...

  9. HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others)    M ...

随机推荐

  1. eclipse中建立tomcat容器

    步骤 1.  new - orther - server 出现下图,选择tomcat版本, 2. 选择已有的web项目至tomcat容器中,如果尚未建立,可不选. 3. 点击完成后,就会发现一个新建项 ...

  2. NavBarControl 左侧菜单

    (1)示例图片 具体实现: 一. using DevExpress.XtraNavBar; 二. 从窗体上拖一个 NavBarControl 控件 命名为:nbcLeft 三.窗体OnLoad 事件 ...

  3. jdk的动态代理

    至于jdk的动态代理怎么用此处并不多说,现在是更深一步的理解,jdk的Proxy类到底做了什么. Proxy.newProxyInstance可以生成代理类,此方法有三个参数(ClassLoader ...

  4. polygonal approximation

    Several methods and codes in the website: https://sites.google.com/site/dilipprasad/source-codes TRA ...

  5. ListBox重绘

    .NET Framework 类库  ListBox.ItemHeight 属性 当 DrawMode 属性设置为 DrawMode.OwnerDrawFixed 时,所有项具有相同的高度.当 Dra ...

  6. java数据库连接池dbcp的使用

    近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式 ...

  7. Android实战技巧之六:PreferenceActivity使用详解

    一.写作前面 当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置. 对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页, ...

  8. 线程本地存储(Thread Local Storage, TLS)简单分析与使用

    在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS ...

  9. JAVA 上加密算法的实现用例---转载

    通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 ...

  10. Java泛型方法定义及泛型类型推断

    泛型的推断 @Test public void test3(){ //类型推断时使用两个类型的最小公倍数 int x1 = add(3,4); Number x2 = add(3.5,4); Obje ...