· 在一组给定的数据中,如何找出某个数据是否存在?
先看一段代码

#include<stdio.h>
/*
找出key在数组a中的位置
@param key 要寻找的数字
@param a 要寻找的数组
@param length 数组a的长度
@return 如果找到,返回a总的位置,如果找不到返回-1
*/
int search(int key, int a[], int length);    int main(void)
{int a[]={2,4,6,7,2,1,3,5,9,11,13,23,14,32};int x;int loc;printf("请输入一个数字:");scanf("%d", &x);// loc=search(x,a,sizeof(a)/sizeof(a[0]));  //if (loc !=-1){printf("%d在第%d\个位置上n",x,loc);  }else{printf("%d不存在\n",x);}return 0;
}int search(int key, int a[], int length)   //自定义函数
{int ret = -1;int i;for (i=0;i<length;i++){if(a[i]==key){ret = i;break;}}return ret;
}

数组的集成初始化
· 直接用大括号给出数组的所有元素的初始值
· 不需要给出数组的大小,编译器替我们计算

int main(void)
{int a[]={2,4,6,7,2,1,3,5,9,11,13,23,14,32};{int i;for (i=0;i<13;i++){printf("%d\t",a[i]);}printf("\n");}return 0;
}

结果

56
4
2 4 6 7 2 1 3 5 9 11 13 23 14


下面我们进行更改,

int b[20] = {2};

· 如果给出了数组的大小,但是后面的初始值数量不足,则其后的元素被初始化为0

如果将上面代码数组初始化其中的代码进行修改

int a[13]={2};

打印出结果

2 0 0 0 0 0 0 0 0 0 0 0 0

· 集成初始化时的定位
· 用[n]在初始化数据中给出定位;
· 没有定位的数据接在前面的位置后面;
· 其他位置的值补零;
· 也可以不给出数组大小,让编译器算;
· 特别适合初始数据稀疏的数组;

我们将赋值从新改变下,根据老师说法,但是这个写法只有C99才有用,所以编译器不认

#include<stdio.h>> int main(void)
{
//  int a[]={2,4,6,7,2,1,3,5,9,11,13,23,14,32};int a[13]={[1]=2,4,[5]=6};{int i;for (i=0;i<13;i++){printf("%d\t",a[i]);}printf("\n");}return 0;
}

数组的大小
· sizeof 给出整个数组所占据的内容的大小,单位是byte;

int main(void)
{int a[]={2,4,6,7,2,1,3,5,9,11,13,23,14,32};{int i;printf("%lu\n",sizeof(a));    //获取a单元得大小printf("%lu\n",sizeof(a[0]));   //获取a单元里第一个值得大小for (i=0;i<13;i++){printf("%d\t",a[i]);}printf("\n");}return 0;
}

执行结果

52
4
2 4 6 7 2 1 3 5 9 11 13 23 14

· 这里将i<13改为数组得实际大小,i<sizeof(a)/sizeof(a[0]),由此得知数组有多少个单元,这样写会更安全
这里需要注意得是格别编译器的结果是不一样的
· sizeof(a[0])给出的数组中单个元素的大小,于是相除就得到整个数组的单元个数;
· 这样的代码,一旦修改数组中初始的数据,不需要修改遍历代码;

for (i=0;i<i<sizeof(a)/sizeof(a[0]);i++){printf("%d\t",a[i]);}

数组的赋值
· 数组变量本身不能被赋值;
· 要把一个数组的所有元素交给另外一个数组,必须采用遍历;

如果我们在基础上再定义一个变量b,并且让变量b[]=a;,这样可以嘛?大家可以自己去试试

int a[]={2,4,6,7,2,1,3,5,9,11,13,23,14,32};
int b[]=a;

如果不能,那我们则需要遍历这个数组,我们需要写一个循环,这样才能将a的每一个元素赋给另外一个元素

for (i=0;i<length;i++){b[i]=a[i];
}

遍历数组

· 遍历数组,通常使用for循环,让循环变量i从0到数组的长度,这样循环体内最大的i正好是数组最大的有效下标;
· 遍历数组,常见的错误是:
· 循环结束条件是<=数组长度;
· 离开循环后,继续用i的值来做数组元素的小标!;

翁恺老师C语言学习笔记(九)数组的运算相关推荐

  1. 翁恺老师C语言学习笔记(十一)字符串

    字符数组 如果我们定义了这样的一个字符数组 char word[] = {'H','e','l','l','o','!'}; word[0] H word[1] e word[2] l word[3] ...

  2. 翁恺老师C语言学习笔记(十一)字符串_字符串常量

    字符串常量 char* s = "Hello,world!" 我们先看一段代码 #include<stdio.h>int main(void) {char *s = & ...

  3. 翁恺老师C语言学习笔记(十)指针_指针与数组

    传入函数的数组成了什么? · 当我们向一段函数传入数组变量,参数接收到的是值,如果我们传入指针时,参数接收到的是也是值(一个地址): · 如果传入函数的是一个普通变量,它接收到的是一个值 · 如果传入 ...

  4. 翁恺老师C语言学习笔记(十)指针_指针的使用

    指针的应用场景一 · 交换两个变量的值 void swap(int *pa, int *pb);//定义指针*pa和*pb int main(void) {int a = 5; int b = 6;s ...

  5. 翁恺老师C语言学习笔记(十)指针_指针变量就是记录地址的变量

    指针变量就是记录地址的变量 scanf函数 · 如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量 · scanf("%d", &i) · ...

  6. 翁恺老师C语言学习笔记(十)指针_运算符取得变量的地址

    指针(一) 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指 ...

  7. 翁恺老师C语言学习笔记(七)函数

    题目:求出1-10.20-30.35-45的三个和 #include<stdio.h>int main() {int i;int sum;for(i=1,sum=0;i<10;i++ ...

  8. 翁恺老师C语言学习笔记(十)指针_指针运算

    我们先看一段代码 #include <stdio.h>int main(void) {char ac[] = {0,1,2,3,4,5,6,7,8,9,};char *p = ac;pri ...

  9. 翁恺老师C语言学习笔记(八)数组

    · 如何写一个程序计算用户输入的数字的平均数 用户输入正整数,并计算输入数字的平均数,如果输入"-1"表示输入结束: #include<stdio.h>int main ...

最新文章

  1. “完美论文”过于真实,道出了科研狗的痛
  2. ASP.NET 5系列教程 (二):Hello World
  3. vs 设置调试路径为exe所在的路径
  4. etcd 启动分析_Kubernetes网络分析之Flannel
  5. Coursera课程Python for everyone:Quiz: Single-Table SQL
  6. 3d max用不同目标做关键帧_基于光流的视频目标检测系列文章解读
  7. VTK:PolyData之Curvatures
  8. semaphore 的原理与实现
  9. 学python哪个网站好-有哪些值得推荐的Python学习网站|
  10. STM32学习笔记(7):USART串口的使用
  11. Android扩展类方法,Android 扩展 uni小程序SDK 原生能力
  12. 闲 鱼,进阶技巧,如何提高你的曝光量?
  13. Java、SQL 十年混战史:Oracle 告 Google、“窃”IBM 往事
  14. delphi接口带上请求头是什么意思_python接口自动化(二十)--token登录(详解)...
  15. 数学建模基本模型(一) 优化模型
  16. 60分钟教你上手PyTorch + 迁移学习
  17. lighttpd http响应报文(Response)增加安全头Referrer-Policy和X-Permitted-Cross-Domain-Policies方法
  18. Android 隐藏虚拟按键
  19. centos7 mysql libssl_centos7.2安装mysql5.7.13及ssl主从复制
  20. 计算机五个盘,我的电脑分区分了5个盘。怎么办?

热门文章

  1. GPU GPGPU
  2. bz 1029: [JSOI2007]建筑抢修
  3. CStdioFile写文件中出现的问题
  4. 用汇编的眼光看C++(之类继承)
  5. oracle代码连接,Oracle连接核心知识点
  6. java多线程异步调用别的系统接口代码_60 多个实例讲解,彻底搞懂 Java 多线程!
  7. js获取今天剩余时间_js动画,setTimeout/setInterval的不准确
  8. html上下走马灯特效,上下左右滚动的走马灯文字代码
  9. android半透明闪退,(Android)react-native-splash-screen实践-解决react-native打包好后启动白屏的问题...
  10. java arraylist length,在Java中调整ArrayList的大小时,无法理解溢出的可能性