c语言学习笔记11

来源:互联网 发布:提前还房贷 知乎 编辑:程序博客网 时间:2024/04/28 21:25

一、基本概念
数组是用来存储多个类型相同的数据的数据结构——容器。
1.多个,类型相同。
2.数组是一段连续的内存区域。
3.数组变量的本质就是其首字节的地址。
4.数组是数据的容器,而非数据本身。
5.数组中的每个数据项被称为数组的元素,一个数组包括一到多个元素。数组中元素的个数被称为数组的长度。
6.数组下标就是元素在数组中的索引号,从零开始。
7.数组元素通过数组名和下标的组合进行访问,[]叫做下标运算符:数组名[下标],表示数组中第“下标”个元素。
二、数组的定义
元素类型 数组名[长度(元素个数)] = {初始化表};
int arr[10];//0-9
arr是个数组,其中包含10个元素,每个元素都是int类型的。
类型定义:从近到远,由右向左,括号优先。
arr[0] = 100; // 将100赋值给arr数组的第0个元素。
printf ("%d", arr[8]); // 打印arr数组的第8个元素。
有效元素:arr[0], arr[1], ..., arr[9]
printf ("%d", arr[10]); // 越界
arr[10] = 100; // 可能引发错误
arr[12] = 200; // 可能引发错误
arr[i]是数组元素,i数组元素的下标,从0到数组的长度-1。超出此范围,将导致段错误或者覆盖其它变量。
三、数组的使用
1.数组的初始化
int arr[10] = {100,200,300,400,500,600,700,800,900,1000};
依次取初始化表中的值对数组中的每个元素进行初始化。
int arr[10] = {100, 200, 300};
初始化没有显示指明初始值的元素,一律初始化为零。
int arr[10] = {0}; // 全部初始化为0
int arr[10] = {}; // 全部初始化为0
int arr[10]; // 不做初始化
如果在定义数组时不指定长度,则取初始化表的长度作为数组的长度。
int arr[] = {1,2,3,4,5}; // 等价于int arr[5] = {1,2,3,4,5}
int arr[]; // 错误!
计算数组长度:sizeof (arr) / sizeof (arr[0])
练习:输入10个整数,逆序输出。
注意:
1)键盘->键盘缓冲区->程序输入缓冲区->程序变量。对于scanf("%d", &i),如果输入的数据不是int而是字符,
scanf读不走这些字符,该字符会一直留在程序输入缓冲区中,进而影响后续scanf的读取操作。解决方案:
scanf ("%*[^\n]"); // 忽略(丢弃)缓冲区中除\n以外的全部字符
scanf ("%*c"); // 忽略(丢弃)\n字符
经过这两步,使程序输入缓冲区处于干净的状态,后续的scanf读取可以正常工作。
2)程序变量->程序输出缓冲区->显示缓冲区->显示器。printf并不会立即将所要打印的数据放到显示器上显示,
而是将其放入程序输出缓冲区中。而只有在以下时机,该缓冲区中的内容才会真的被同步到显示设备上:
a.遇到\n;
b.程序结束;
c.缓冲区满;
d.需要输入;
e.手动更新缓冲区(setbuf/setbuffer);
f.手动刷新流(fflush)。
四、变长数组
int arr[10]; // 定长数组
int arr[] = {1,2,3,4,5}; // 定长数组
int len = 20;

int arr[len]; // 变长数组


//在数组中查找目标数,使用函数值来判断是否存在#include<stdio.h>#define MAX_SIZE 8const int TRUE=1;//定义函数结果之一const int FLASE=0;//定义函数结果之一//检查一个数组中是否存在目标数int search_data(const int array[],const int size, const int target){int i=0;//定义i//遍历数组寻找targetfor (i=0;i<size;++i){if(target==array[i])return TRUE;}return FLASE;}int main(void){int q[MAX_SIZE]={7,5,0,89,12,4,31,54};int x=0;int i=0;printf("Elrment in the array:\n");for(i=0;i<MAX_SIZE;++i)printf("%4d",q[i]);//输入要查找的值printf("\nPlease input the target number:");scanf("%d",&x);//根据返回值类型,查找得到的结果if (TRUE==search_data(q,MAX_SIZE,x)){printf("%4d exists in this array.\n",x);}else{printf(" Can't find %d in this array/n",x);}return 0;}


0 0