数组:
* 数组是一组有序数据的集合,数组中的数据排列有一定的规律,下标(从0开始)代表数据在数组中的序号
* 用数组名和下标来唯一的确定数组中的元素
* 数组中的每一个元素都属于同一种数据类型,不能把不同类型放到同一种元素中
* s[15]:c语言中用来表示第15个数据的元素
* 数组和循环结合起来可以有效的处理大批量的数据
* 怎样定义和引用一维数组:
* 1、怎样定义一维数组:
* 要使用数组必须先定义数组:类型符 数组名[常量表达式]
* 常量表达式可以包括常量和常量符号(int a[3+2]是合法的)
* 但常量表达式不能包括变量(int a[n]是不合法的)
* int a[10];
* 他表示定义了一个整型数组,数组名为a,此数组包括10个整型元素
* 定义数组必须指定数组中元素的个数(常量表达式)
* 对数组的大小不能动态定义,数组的大小不依赖于程序运行过程中变量的值
* 2、怎样引用一组一维数组:
* 引用数组元素的表达形式为:数组名[下标]
* 只能引用数组元素而不能一次整体调用整个数组全部元素的值
* 3、一维数组的初始化(定义数组的同时给各数组元素赋值):
* a、 在定义数组时对全部数组赋予初始值
* int a[10]={0,1,2,3,4,5,6,7,8,9};
* b、只给数组中的一部分元素赋值
* int a[10]={0,1,2,3,4};系统自动给没有赋值的元素赋值为0;
* c、如果想整个数组的值都为0可以:
* int a[10]={0,0,0,0,0,0,0,0,0,0}||int a[10]={0}//未赋值部分自动为0
* d、对全部元素赋值时,由于元素个数已经确定,因此可以不指定数组长度:
* int a[5]={1,2,3,4,5}可以写成int a[]={1,2,3,4,5}(系统会根据数据个数确定数组长度);
* 怎样引用和定义二维数组:
* 二维数组常称为矩阵,把数组写成行(row)和列(column)的形式
* 1、怎样定义二维数组:
* 类型说明符 数组名[常量表达式][常量表达式]
* float pay[3][6]
* 定义了一个float类型的二维数组,三行六列,有三个一维数组,每一个一维数组又包括六个一维数组
* 在内存中,二维数组是连续存放的,是线性的
* 2、怎样引用二维数组:
* 数组名[下标][下标]
* 二维数组的数据元素也可以出现在表达式中,也可以被赋值(b[1][2]=a[2][3]/2是合法的)
* 引用数组元素时,下标应该在已经定义的数组大小范围
* *要严格区分定义b[2][3]和引用b[2][3]的区别
* 3、二维数组的初始化:
* 分行给数组赋值
* int a[2][3]={{1,2,3},{4,5,6},{7,8,9}};
* 将所有数据写入,按照数据元素在内存中的排列顺序赋值
* int a[2][3]={1,2,3,4,5,6,7,8,9};//数据过多容易写漏
* 对部分元素赋值,其余元素自动为0
* int a[2][3]={{2},{4},{5}};
* int a[2][3]={{1},{4,5}};
* int a[2][3]={{1},{},{5}};
* int a[][4]={{0,0,3}{}{1,10}}//可以
* 如果对所有的元素赋予初值,对一维的长度可以不指定,但必须指定二维
* int a[2][3]={1,2,3,4,5,6};
* int a[][3]={1,2,3,4,5,6};与上面等价
* 系统会自动推算一维的长度
* 字符数组:
* 用来存放字符数据的数组是字符数组,一个元素内存放一个字符
* 1、怎样定义字符数组:
* char arr[10];
* arr[0]='i';
* 也可以用整型数组来存放字符数据(int arr[10];arr[0]='i')合法但是浪费存储空间
* 2、字符数组的初始化:
* a、 把各个字符依次赋值给每一个元素
* char arr[10]={'i','q','s','e','v','b','n','w','t','t'};
* b、初始化时提供初值过程中初值数量大于元素数量,出现语法错误
* 初始化时提供初值过程中初值数量小于元素数量,将字符赋值给前面的元素,其他元素自动定为'\0'
* char arr[4]={'a','x','u'};
* c、定义时可以忽略数组长度,系统会根据初值个数确定数组长度
* char arr[]={'a','s','d'};
* d、也可以定义一个二位字符数组;
* char arr[2][3]={{'a','d','f'},{'h','t','r'}};
* 3、怎样引用字符数组中的元素:
* for循环
* 4、字符串和字符串结束标志:'\0'
* 在遇到'\0'时,表示字符串结束,把他前面的字符组成一个字符串
* C语言在字符数组存储字符串常量时,通常会自动加上'\0',占一个字节
* 字符串的初始化:char c[]={"i love you"};也可以写成char c[]="i love you";
* 字符数组不要求最后一个字符为'\0',甚至没有'\0'也是可以的;
* 5、字符数组的输入输出:
* a、逐个字符输出输入。%c;
* b、将整个字符串一次输入或输出 %s
* c、输出字符不包括'\0';
* d、%s输出时,输出项是字符数组名,而不是字符元素名
* f、遇到第一个\0就输出;
* g、scanf函数可以输入一个字符串;输入项是数组名,不加&,数组名代表数组第一个元素的地址
* 6、使用字符串处理函数:1、puts函数:输出字符串函数
* puts(str);
* 2、gets函数:输入字符串函数
* gets(str);//str是已经定义的数组
* 3、puts和gets只能获取和输入一个字符串
* putchar和getchar只能获取一个字符,通过循环可以输出字符串
* 4、strcat:字符串连接函数strcat(str1,str2);//str1必须足够大接纳str2
* 5、strcpy函数和strncpy函数:字符串复制函数
* strcpy(str1,str2);2复制到1//1的大小必须足够大装下2;
* str2可以是数组名也可以是数组元素名也可以是常量
* strcpy(str1,str2);strcpy(str1,str2[0]);strcpy(str1,"you");
* strncpy(str1,str2,n);strncpy可以将str2中的前n个字符复制到str1中,取代str1中的前两个字符
* 6、strcmp函数:字符串比较函数
* strcmp(str1,str2);//将两个字符串进行比较直到出现\0或不一样的字符为止
* 如果全部字符,则认为两个字符串相等,出现不相同的字符以第一对出现的为准
* 比较结果有函数值带回,相等0;1>2正整数;1<2负整数;字母越往后越大,小写字母大于大写字母
* 7、strlen函数:测字符串长度的函数
* strlen(str);函数值为字符串实际长度,不包括\0;
* 8、strlwr(_strlwr)函数:转换为小写的函数;
* strlwr(str);
* 9、strupr(_strupr)函数:转换大写的函数;
*
*
int main()
{
//定义数组和引用数组
int t;
int arr1[10];//arr1[10]表示数组包含10个元素
t = arr1[6];//t等于arr1数组中序号为6的元素
//对数组的10个元素依次赋值0,1,2,3……9并逆序输出
int arr2[10] = { 0,1,2,3,4,5,6,7,8,9 };
for (int i2 = 9; i2 >= 0; i2--)//数组输出只能单个输出不能整体输出
{
printf("%d ", arr2[i2]);
}
//有十个地区的面积,要求 对他们由小到大进行排列
int arr3[10];
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr3[i]);
}
printf("\n");
for (int i = 0; i < 10; i++)//进行9次循环从0下标到9下标
{
for (int j = i+1; j < 9; j++)//每一趟循环中进行9-j次循环
{
if (arr3[i] > arr3[j])//i下标分别与循环中的j下标进行比较,最小的取代i下标的元素
{
int tmp;//借助第三者进行交换
tmp = arr3[i];
arr3[i] = arr3[j];
arr3[j] = tmp;
}
}
printf("%d\n", arr3[i]);//依次输出arr3[10]的值
}
//将一个二维数组的行列互换,存到另一个二维数组中
int arr4[2][3] = { 1,2,3,4,5,6 };
int brr4[3][2];
int k;
for (int i4 = 0;i4 < 2; i4++)
{
for (int j4 = 0; j4 < 3; j4++)
{
k = arr4[i4][j4];
for (int i5 = 0; i5 < 3; i5++)
{
for (int j5 = 0; j5 < 2; j5++)
{
brr4[i5][j5] = k;//对brr4[3][2]依次赋值
}
}
printf("%d ", k);
}
printf("\n");
}
//有一个3*4的矩阵,求最大的值,以及他所在的行和列
int arr6[3][4] = { 3,2,1,5,4,7,9,0,8,12,32,66 };
int max, row, colum;
max= arr6[0][0];
for (int i7 = 0; i7 < 3; i7++)
{
for (int j7 = 0; j7 < 4; j7++)
{
if (arr6[i7][j7] > max)
{
max = arr6[i7][j7];
row = i7;
colum = j7;
}
}
}
printf("max:%d\n行:%d\n列:%d", max, row, colum);
//定义一个字符数组,输出一个已知的字符串
char arr[5] = {'a','b','\0','c'};
for (int i8 = 0; i8 < 5; i8++)
{
printf("%c", arr[i8]);//输出字符串%c
}
//输出一个菱形图
char a[][5] = { {'\0','\0','*'}, {'\0','*','\0','*'},{'*','\0','\0','\0','*'},{'\0','*','\0','*'},{'\0','\0','*'}};
for (int i9 = 0; i9 < 5; i9++)
{
for (int j9 = 0; j9 < 5; j9++)
{
printf("%c ", a[i9][j9]);
}
printf("\n");
}
//%s输出时,输出项是字符数组名,而不是字符元素名
char b[] = "asdfgg";
printf("%s",b);
//从键盘获取一个字符串;
char c[5];
scanf("%s", c);//输入项是数组名,不加&,数组名代表数组第一个元素的地址
printf("%o", c);//%o是用八进制形式输出数组的起始地址
printf("%s", c);
//输入输出函数
char d[10] = "asd";
puts(d);//字符串输出
for(int i=0;i<10;i++)
{
char a;
a = d[i];
putchar(a);//字符输出
}
//连接函数:srtcat
char f[10] = "asdf";
char g[] = "xcvb";
printf("%s", strcat(f, g));
//复制函数strcpy和strncpy
char h[] = "asgg";
char i[] = "df";
//strcpy(h, i);
//printf("%s", h);
strncpy(h, i, 2);//取代前两个字符
printf("%s", h);
//比较函数:strcmp;
char j[] = "asdf";
char k2[] = "asdg";
if (strcmp(j, k2) >= 0)
{
printf("大于");
}
else
{
printf("小于");
}
//大写变小写
char l[] = "ZXassC";
printf("%s\n", _strlwr(l));
//小写变大写
printf("%s",_strupr(l));
//输入一行字符,统计出现了多少个单词,单词之间用空格隔开;
char m[] = "i love you";
int sum = 1;
for (int i0 = 0; i0 < strlen(m); i0++)
{
if (m[i0] == ' ')
{
sum++;
}
}
printf("%d", sum);
//有三个字符串找出其中最大者;
char p[10];
char q[10];
char r[10];
scanf("%s %s %s", p, q, r);//从键盘获取三个字符串
if (strcmp(p, q) >= 0)
{
if (strcmp(p, r) >= 0)
{
printf("%s", p);
}
else
printf("%s", r);
}
else
{
if (strcmp(q, r) >= 0)
{
printf("%s", q);
}
else
printf("%s", r);
}
return 0;
}