C语言学习笔记(六) -数组 Arrays
来源:互联网 发布:最好的矩阵论教材 编辑:程序博客网 时间:2024/05/29 08:38
数组的定义
一维数组
/*数组:相同数据类型的有序集合一维数组定义:元素类型 数组名[元素个数];元素个数可以是常量,常量表达式,常量*/#include <stdio.h>int main(void){ int arr[5]; //常量 随机值 int n; scanf("%d",&n); int arr1[n]; //变量 int arr2[]={};//通过初始化,限定数组的长度 int arr3[5]={0,1,2,3,4}; int arr4[5]={1};//剩下的值都为0; int arr5[]={1,2,3,4,5,6,7,8,9};//根据初始化值,限定数组长度 char arr6[3]={'a','b'};//剩下的值0=> '\0' return 0;}
数组使用
/* 数组的使用 元素的使用:数组名[下标] 下标从0开始,到(数组长度-1)结束*/#include <stdio.h>int main(void){ int a[5] = {1,2,3}; //输入 for(int i=0; i<5; i++) { scanf("%d",&a[i]); } //输出 for(int i = 0; i < 5; i++) printf("%d\n",a[i]); return 0;}
数组逆序
//// 求数组逆序//#include<stdio.h>#define N 10 //定义长度int main(void){ int a[N],i,temp; printf("请输入一组数:\n"); for (i=0; i<N; i++) { scanf("%d",&a[i]); } for (i=0; i<N/2; i++) { //将对称元素值互换 temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("逆序数组为:"); for (i=0; i< N; i++) { printf("%d",a[i] ); } printf("\n"); return 0;}
二维数组
/*二维数组:元素类型 数组名[行数][列数] */#include <stdio.h>int main(void){ char arr1[3][4]; int n=3,m=4; char arr2[n][m]; //只能省略行,不能省略列,根据初始化值的个数和列数,确定有几行 char arr3[][4]={1,2,3,4,5,6,7,8,9,0}; char arr4[][3]={{0},{},{1},{1,2,3}}; printf("arr1=%lu\n",sizeof(arr1)); //char[3][4] 12 printf("arr1[0]=%lu\n",sizeof(arr1[0])); //char[4] 4 printf("arr1[0][0]=%lu\n",sizeof(arr1[0][0])); //char 1 printf("arr4[0][0]=%lu\n",sizeof(arr4[0][0])); printf("arr4[0]=%lu\n",sizeof(arr4[0])); printf("arr4=%lu\n",sizeof(arr4)); return 0;}
二维数组元素的引用
//二维数组元素的引用//元素的引用 数组名[行数][列数]//#include <stdio.h>#define N 5#define M 10int main(void){ char a[N][M]; int row=sizeof(a)/sizeof(a[0]); // 50/10=5 row int col=sizeof(a[0])/sizeof(a[0][0]); //10/1=10 col //遍历二维数组的每一行 for (int i=0; i<row; i++) { //遍历第i行的每一列 for (int j=0; j<col; j++) { scanf("%c",&a[i][j]); printf("%c",a[i][j]); } printf("\n"); }}
数组与矩阵
矩阵的转置
//// 矩阵的转置//#include <stdio.h>int main(void){ int n,m; printf("请输入矩阵的长度和宽度:\n"); scanf("%d,%d",&n,&m); char a[n][m]; //输入 for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { scanf("%c",&a[i][j]); printf("%c",a[i][j]); } printf("\n"); } //转置 char b[m][n]; for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { b[j][i]=a[i][j]; } } //输出 for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { printf("%c",b[i][j]); } printf("\n"); }}
矩阵的主对角线,辅对角线之和
//// 求矩阵的主对角线,辅对角线之和//#include <stdio.h>int main(void){ int a[4][4]={1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16}; int sum1=0; int sum2=0; for (int i=0; i<4; i++) { for (int j=0; j<4; j++) { if (i==j) { sum1+=a[i][j]; } if (i+j==3) { sum2+=a[i][j]; } } } printf("sum1=%d,sum2=%d\n",sum1,sum2); return 0;}
数组与函数
数组作为函数参数
////数组与函数//数组作为函数参数//1.数组元素作为函数参数,函数形参定义为数组元素的类型//2.数组名作为函数参数,传递的实参是数组地址,接收形参是指针类型//3.为了在被调函数中体现出实参是数组,形参使用数组类型接收//4.使用其他的整型变量将数组长度传给被调函数//5.使用数组名做函数参数,可以实现在被调函数中间间接访问主调中值//#include <stdio.h>int max(int,int);int main(void){ int a[] ={1,2,3,4,5}; int p1,p2; scanf("%d,%d",&p1,&p2); printf("max=%d\n",max(a[p1],a[p2])); return 0;}//求比较大的值int max(int a,int b){ return a>b?a:b;}
#include <stdio.h>void input(int [],int);//声明可以不加变量名void output(int [],int);void change(int [],int);int main(void){ int a[5]; //sizeof(a)=>sizeof(int[5]) unsigned long len=sizeof(a)/sizeof(a[0]); printf("数组的长度是:%lu\n",len); input(a,len); output(a,len); change(a,len); return 0;}void change(int a[],int len){ int t; for (int i=0; i<len/2; i++) { t=a[i]; a[i]=a[len-1-i]; a[len-1-i]=t; } for (int i=0; i<len; i++) { printf("%d",a[i]); } printf("\n");}void input(int arr[],int len){ for (int i=0; i<len; i++) { scanf("%d",&arr[i]); }}void output(int b[],int len) //相当于 (int *b,int len)指针{ for (int i=0; i<len; i++) { printf("%d",b[i]); } printf("\n");}
二维数组做函数参数
/* *二维数组做函数参数 *1.数组名做函数参数,实参是二维数组名,形参是指向二维数组一行的指针 2.二维数组降维成一维数组,将行列都传递 * */ #include <stdio.h>void input(int [][4],int);void sum(int [],int,int);void most(int [],int,int);void change(int [],int,int,int []);void sort(int [],int);int main(void){ int a[3][4]; int value; input(a,3); //输入二维数组 sum(a[0],3,4); //求二维数组每行的和 most(a[0],3,4); //求二维数组中最值 int b[4][3]; change(a[0],3,4,b[0]); //输出降维转置后数组 for(int i=0;i<4; i++){ for(int j=0; j<3; j++){ printf("%d ",b[i][j]); } printf("\n"); } //输出每行排序后的结果 printf("此二维数组每行排序后的结果为:\n"); sort(a[0],3); for(int i=0;i<3; i++){ sort(a[i],3); printf("%d ",a[i]); printf("\n"); } return 0;}void input(int a[][4],int len) //指针 int (*)[4]{ printf("输入3行4列数组:\n"); for (int i=0 ; i<len; i++) { for (int j=0; j<4; j++) { scanf("%d",&a[i][j]); } }}//降维成一维数组求二维数组每行的和void sum(int b[],int row,int col){ int sum=0; for (int i=0; i<row; i++) { sum=0; for (int j=0; j<col; j++) { sum+=b[i*col+j]; //b[i*row+j]等同于a[i][j] } printf("第%d行的和是:%d\n",i,sum); }}//求二维数组最大值void most(int b[],int row,int col){ int maxValue=b[0]; int minValue=b[0]; for (int i=0; i<row*col; i++) { if (maxValue<b[i]) { maxValue=b[i]; } if (minValue>b[i]) { minValue=b[i]; } } printf("此二维数组最大值是:%d\n",maxValue); printf("此二维数组最小值是:%d\n",minValue);}//转置二维数组void change(int a[],int row,int col,int b[]){ for (int i=0; i<row; i++) { for (int j=0; j<col; j++) { b[j*row+i]=a[i*col+j]; } } printf("转置后的数组为:\n");}//选择排序void sort(int a[],int len){ int min=0; //最小值下标位置 int temp; for (int i=0; i<len-1;i++) { min=i; for (int j=i+1; j<len; j++) { if (a[min]>a[j]) { min=j; } } temp=a[min]; a[min]=a[i]; a[i]=temp; }}
二维数组的转置
////数组返回给主调函数,保证返回的地址有用且有效//////二维数组的转置#include <stdio.h>void change(int[],int,int,in[]);int main(void){ int a[3][4]={1,2,3,4, 5,6,7,8, 9,10,11,12}; int b[4][3]; change(a,3,4,b); for (int i=0; i<4; i++) { for (int j=0; j<3; j++) { printf("%d ",b[i][j]); } printf("\n"); }}void change(int a[],int row,int col,int b[]){ for (int i=0; i<row; i++) { for (int j=0; j<col; j++) { b[j*row+i]=a[i*col+j]; } }}
三维数组
////三维数组//#include <stdio.h>int main(void){ int a[2][3][4]={{,,,},{,,,},{},{}}; return 0;}
0 0
- C语言学习笔记(六) -数组 Arrays
- C语言学习笔记<六>
- C语言学习笔记<数组>
- C语言学习笔记:数组
- C语言程序学习(六)笔记
- C语言学习笔记(六)字符串
- 黑马程序员-C语言笔记(六)数组
- C语言学习(六)指针2 数组与指针
- C语言(六)--数组
- C语言学习笔记5--数组
- 黑马程序员-ios学习笔记 c语言 数组
- iOS开发学习笔记-C语言学习(六)
- C语言学习笔记(八)--数组
- C语言学习笔记(四)数组
- 【C语言学习笔记】数组、字符串、指针
- C语言学习笔记6-数组
- C语言学习笔记-二维数组
- c语言学习笔记之数组小结
- Android实现推送方式解决方案<二>
- 虚拟机Hyper-V安装CentOS6网卡为什么不识别?
- 【02】什么是微信公众平台?
- 创建Java线程池
- iOS strong,copy,retain,weak,assign的区别,以及各自的用法
- C语言学习笔记(六) -数组 Arrays
- Android-ViewPagerIndicator框架使用——CirclePageIndicator
- anroid,IOS 链接到指定网址
- Office Project Server 2007 安装出错:SharePoint兼容性故障
- js中cookie的使用详细分析
- 深入探讨this指针
- 容器第六课,自定义Map的功能,底层源码
- sourcetree for mac 入门教程
- Java自学总结之一primitive与对象引用变量