单位换算
1KB=210B=1024B
1MB=210KB=1024KB
1GB=210MB=1024MB
内存地址
以2GB内存地址为例,2GB=231B,计算机就为这231个存储单元(字节)的位置编码:
#include一维数组int main(void){ int a,b,c; printf("%p,%p,%pn",&a,&b,&c); int d[3]; d[0]=1,d[1]=2,d[2]=3; printf("%d,%d,%dn",d[0],d[1],d[2]); printf("%p,%p,%pn",&d[0],&d[1],&d[2]); return 0; }
定义数组及初始化
#includeint main(void){ //1.定义数组 //int a[2*2]; const int b=2; //常变量 int c[2*b]; //int e[3.1]; //error int e[(int)3.1]; int f['A']; int g[true]; //2.定义并初始化数组 int a[4]={1}; //在不完全初始化中,元素如果未被初始化将会有一个默认值0 for(int i=0;i<4;++i) printf("%dn",a[i]); return 0; }
数组的排序
#includeint main(void){ int a[5] = {89,34,-56,1,23}; int len = 5; //选择排序 for(int j=0;j 指针 #include二维数组void f1(int b){ b=10; } void f2(int *c){ *c=10; } int main(void){ int *p; //p时int *类型的,用来存放int型变量的地址 读作:定义了一个指向 int的指针变量 p int a=2; p=&a; //p指向 a *p=3; / for(int from=0,end=len-1;from a[(from+end)/2]) from = (from+end)/2+1; else end = (from+end)/2-1; } return -1; } int main(void){ int a[LEN]={3,6,9,12,15}; //insert(a,2,8); //invert(a); //printf("%dn",find1(a,12)); //3 //printf("%dn",find1(a,7)); //-1 printf("%dn",find2(a,15)); //4 printf("%dn",find2(a,7)); //-1 show(a); //printf("有效元素的个数为:%dn",length(a)); //show(a); return 0; } 二维数组的定义及初始化
1.二维数组定义的一般形式:
类型说明符 数组名 [常量表达式][常量表达式]2.二维数组在内存中的存储方式
例如:int a[2][3]; 这里定义了一个2行3列的数组,我们可以把它看成一个表格:
但实际内存是线性的,(假设此二维数组从第1000个字节处开始存放)所以实际储存方式如下::
#includeint main(void){ //1.完全初始化 //int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //2.不完全初始化 //int a[3][4] = {1}; //1,0,0,0,0,0,0,0,0,0,0,0 //int a[3][4]={{1,2,3,4},{},{9,10,11,12}}; //只适合部分编译器 //int a[3][4] = {{1},{2,3},{4}}; //1,0,0,0,2,3,0,0,4,0,0,0 //int a[3][4] = {{1},{2,3}}; //1,0,0,0,2,3,0,0,0,0,0,0 int a[][4]={1,2,3,4,5,6,7,8,9,10,11}; //1,2,3,4,5,6,7,8,9,10,11,0 //输出方式2 for(int i=0;i<12;++i) printf("%dn",a[i/4][i%4]); return 0; } 通过指针引用多维数组
&a[1]:1012
a[1]+2:1020
*(a+0)+1:1004
&a[1][1]:1016
*( *(a+1)+2):6求二维数组的鞍点
鞍点:某行最大值+某列最小值#include#define M 5 #define N 6 bool f(int (*a)[N],int i,int j){ for(int x=0;x 字符数组 #includeint main(void){ char a[10]={'h','a',' ','h','a','n'}; //''空字符 是C语言中字符串结束的标志 printf("hahahehe"); //输出haha printf("%s","ABCD"); //字符串常量末尾都有一个空字符 printf("%s",a); //字符型数组定义时初始化所有特有的形式 char b[10] = {"ha han"}; char c[10] = "ha han"; char d[]="ha"; // d 数组有3个元素 //c = "ha han"; //error 因为c是一个char * 类型的常量 char *ch = "ha han"; //字符串常量在计算机的内存当中是一个没有名字的数组 printf("AAA%s",ch); return 0; } 字符串的输入和输出
#includevoid show(char *a,int len){ for(int i=0;i 处理字符串的函数
库函数#include中 #include//有效长度 int strlen(char *a){ if(a == NULL) return 0; int len = 0; while(a[len] != '') len++; return len; } //小写 char *strlwr(char *a){ if(a == NULL) return NULL; char *a1 = a; while(*a != ''){ if(*a <= 'Z' && *a >= 'A') *a += 32; ++a; } return a1; } //大写 char *strupr(char *a){ if(a == NULL) return NULL; char *a1 = a; while(*a != ''){ if(*a <= 'z' && *a >= 'a') *a -= 32; ++a; } return a1; } //复制 char *strcpy(char *a,char *b){ if(a == NULL||b == NULL) return a; char *a1 = a; while((*(a++) = *(b++))!= '') ; return a1; } //连接 char *strcat(char *a,char *b){ if(a == NULL||b == NULL) return a; char *a1 = a; while(*(a++) != '') ; a--; while((*(a++) = *(b++))!= '') ; return a1; } //覆盖 char *strncpy(char *a,char *b,int n){ if(a == NULL||b == NULL) return a; char *a1 = a; for(int i=0;i *b) return 1; a++,b++; }while(true); } int main(void){ //以上函数注释掉也可以运行,在库函数#include 中 char a[] = "ABChaha"; printf("%dn",strlen(a)); printf("%sn",strlwr(a)); printf("%sn",strupr(a)); printf("%sn",strcpy(a,"lala")); printf("%sn",strcat(a,"123")); printf("%sn",strncpy(a,"abcdef",4)); printf("%dn",strcmp("abcde","abde")); return 0; } 习题1
1.输出以下杨辉三角形(要求输出10行)
方法一:#include#define N 10 int main(void){ int a[N][N]={0}; for(int i=0;i =2&&j>=1) a[i][j]=a[i-1][j-1]+a[i-1][j]; printf("%5d",a[i][j]); } putchar('n'); } return 0; } 方法二:
#include#define N 10 void show(int a[N][N]){ for(int i=0;i 习题2
2.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,如下图:
#include#define N 10 void show(int a[]){ for(int i=0;i =0&&m<=N) break; printf("输入有误。"); }while(1); for(int i = N-m;i 习题3
3.有n个人围城一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的原来第几号的那位。#includeint main(void){ int a[1000]={0}; printf("请输入总人数:"); int n; scanf("%d",&n); for(int i=0,cnt=0,sum=0;sum!=n-1;++i){ if(a[i%n]==3) continue; if((a[i%n]=(cnt++)%3+1)==3) sum++; } int i; for(i=0;i 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)