第六章 利用数组处理批量数据

 数组:
*    数组是一组有序数据的集合,数组中的数据排列有一定的规律,下标(从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;
}

你可能感兴趣的:(c语言)