数组是一组有序数据的集合。用一个数组名和下标确定数组中的元素。数组中的每一个元素都属于同一个数据类型。
例:对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9.要求按逆序输出。
#include<stdio.h> int main(){ int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf("%d\n",a[i]); printf("\n"); return 0; }
例:用数组处理Fibonacci数列问题
#include<stdio.h> int main(){ int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++){ if(i%5==0)printf("\n"); printf("%12d",f[i]); } printf("\n"); return 0; }
6.2.1 怎样定义二维数组
二维数组表示形式为:数组名[下标][下标]
例:输出一个已知的字符串
#include<stdio.h> int main(){ char c[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'}; int i; for(i=0;i<15;i++) printf("%c",c[i]); printf("\n"); return 0; }
例:输出一个菱形图
#include<stdio.h> int main(){ char lingxing[][5]={{'','','*},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*}}; int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) printf("%c",lingxing[i][j]); printf("\n"); } return 0;
字符串:
puts函数:输出字符串的函数,一般形式为:puts,作用是将一个字符串输出到终端。
gets函数:输入字符串的函数,一般形式为:gets,作用是输入一个字符串到字符数组。
strcpy:strcpy(字符数组1,字符串2),作用是将字符串2复制到字符数组1中去。
strcmp函数:字符串比较函数,一般形式为:strcmp(字符串1,字符串2),作用是比较字符串1和字符串2。
strlen函数:测字符串长度的函数,一般形式为:strlen(字符数组),函数的值为字符串中的实际长度。
(%A)具体格式如下:
%d |
有符号十进制整数 |
%i |
有符号十进制整数 |
%o |
无符号八进制整数 |
%u |
无符号十进制整数 |
%x |
无符号十六进制数字 |
%X |
无符号十六进制数字 |
%c |
单个字符 |
%s |
字符串 |
数组的赋值:
数组a[n]只赋值a[0]-a[n-1]项,a[n]系统不会填补为零
#include<stdio.h> int main(){ int a[2]={1,2}; for(int i=0;i<2;i++){ a[i]=i; } printf("%d\n%d\n",a[0],a[1]); return 0; }
指针变量的使用:
//声明一个指针变量,指向变量a的地址
int *pa;
//通过取地址符&,获取a的地址,赋值给指针变量
//通过间接寻址符,获取指针指向的内容
printf("%d",*pa)
多维数组的地址:
int num[2][2]={ {1,2},{2,3} }
多维数组的指针:
int num[5]={2,3,4,5,6}; int *p=nums;
函数参数为指针:
void swap(int *x,int *y); void main(){ int x=20,y=20; swap(&x,&y); printf("x=%d,y=%d",x,y); } void swap(int *x,in *y){ int t; t=*x; *x=*y; *y=t; }
数组倒置
void invert(int *a){ int LEN=length(a); int b; for(int i=1;i<LEN;i++){ for(int j=0;j<LEN-i;j++){ b=a[j]; a[j]=a[j+i]; a[j+i]=b; } } }
输出杨辉三角形前十行
#include<stdio.h> int main(void){ int a[10][10]; int b=0; for(int i=0;i<10;i++){ b++; for(int j=0;j<b;j++){ if(j==0||j==b-1){ a[i][j]=1; } else if(j>0&&j<b-1&&b>=3){ a[i][j]=a[i-1][j]+a[i-1][j-1]; } printf("%5d",a[i][j]); } printf("\n"); } return 0; }
重难点:
1.int *p中,*p和p的差别:*p是数值,p是地址。
2.*p++是地址会变化:取当前值,然后再移动地址。
(*p)++是数值会要变化:取当前值,然后再使数值增加1。
3.二级指针:
*p:一级指针:存放变量的地址。
**p:存放一级指针的地址。
4.数组名:数组名不可以自加,他是常量名。
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。