目录
一、数组 1.1、数组的概念1.2、数组的定义1.3、计算平均成绩与总分1.4、数组初始化1.5、求数组中最大数1.6、冒泡排序二、字符串 2.1、字符串概念与定义2.2、字符串输入与输出 2.2.1、使用scanf与printf可以完成字符串的输入2.2.2、使用gets,puts完成2.3、字符串连接函数strcat2.4、字符串拷贝函数strcpy 2.5、字符串比较函数strcmp2.6、获得字符串长度函数strlen 2.7、数组移动作业 P181三、二维数组四、上课示例与作业源文件下载用来存储一组相同类型数据的数据结构。有点像班上放手机的手机袋,超市的储物柜。
特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。
格式: 类型 数组名[元素个数];
举例:存储5个人的年龄
int ages[5]; //在内存中开辟4x5=20个字节的存储空间
char str[]={'x','y'};
char str[]="xy";
double array[10];
可以在定义数组的同时对数组进行初始化:
int ages[5]={17,18,19,20,21};
遍历数组:
for(int i=0;i<5;i++)
{
printf(“ages[%d]=%d\n”,i,ages[i]);
}
注意:
(1)数组的初始化
①.int ages[5]={17,18,19,20,21};//一般写法
②. int ages[5]={17,18};//只对前两个元素赋值
③. int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个
④. int ages[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。
⑤. int ages[];//错误,编译器无法知道应该分配多少的存储空间
⑥. int ages[5];ages={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化
⑦. int ages[‘A’]={1,2,3};//正确,相当于是ages[65]
⑧. int count=5;int ages[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。
⑨. 而int count=5;int ages[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量
但是访问数组时,是利用相同的数组名和其不同的下标来访问,下标必须从0开始计算,那么最后一个元素的下标就是“长度-1”。即数组元素的一般形式为:数组名[下标]
#include "stdio.h" void main() { //数组定义 int a[5],i; //定义长度为5的int类型数组,相当于定义了5个变量 //使用数组元素,0-5叫下标 a[0]=100; a[1]=200; a[2]=300; a[3]=400; a[4]=500; //循环输入 for(i=0;i<5;i++) { scanf("%d",&a[i]); } //遍历数组中的每一个元素 for(i=0;i<5;i++) { printf("%d \n",a[i]); } }初始化赋值的一般形式为:类型说明符 数组名[常量表达式]={值,值……值};其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:int a[10]={ 0,1,2,3,4,5,6,7,8,9 };相当于a[0]=0;a[1]=1...a[9]=9;
可以只给部分元素赋初值,但值的个数多于数组元素个数则不行;当{ }中值的个数少于数组元素个数时,则只给前面部分元素赋值,多于数组元素个数时,则越界。 只能给元素逐个赋值,不能给数组整体赋值。 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。
#include "stdio.h" void main() { int i,a[]={1,2}; for(i=0;i<3;i++) { printf("%d\n",a[i]); } }1
2
99
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序舞蹈演示
/* Note:Your choice is C IDE */ #include "stdio.h" void main() { //冒泡排序 int a[]={195,99,98,0,-35,46,8,-10,99,98},i,j,t; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<10;i++) printf("%d \n",a[i]); }N个数排序,外重循环N-1,内重循环N-1-i,比较交换
C语言中的字符数组就是一个字符串,字符串是一个特殊的字符数组。
单字符数组的定义例如:char c[10]; /*单字符数组,即一串字符*/单字符数组的初始化例如:char c[10]={'H','e','l','l','o','\0'};char c[]={'H','e','l','l','o',0};这种初始化方法,系统不会自动给其加上字符串结束符,即’\0’字符,所以要人为加上。 字符串结束标志:在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串常量总是以'\0'作为字符串的结束符。因此当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
/* Note:Your choice is C IDE */ #include "stdio.h" void main() { //字符串 (糖葫芦) char str[]={'H','e','l','l','o','\0'}; int i; char str1[]="Kitty"; printf("%s",str1); for(i=0;i<5;i++) printf("\n %c",str1[i]); }char str[100];
scanf("%[^\n]s",str);
printf("%s",str);
格式:strcat (字符数组名1,字符数组名2)功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。注意:第一个参数只能是字符数组变量,而不能是字符串常量
#include "stdio.h" #include "string.h"; void main() { char str1[100]="Hello"; char str2[]=" Kitty"; //使用strcat函数将str2的内容复制到 //str1中,只适用于字符串 strcat(str1,str2); printf("%s \n",str1); printf("%s \n",str2); }格式:strcpy (字符数组名1,字符数组名2)功能:把字符数组2中的字符串拷贝到字符数组1中。字符串结束标志“\0”也一同拷贝。字符数组2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组
/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h"; void main() { char str1[100]="Boy!"; char str2[]="Girl!"; printf("%s \n",str1); printf("%s \n",str2); //将str2的内容复制到str1中 strcpy(str1,str2); printf("%s \n",str1); printf("%s \n",str2); }格式:strcmp(字符数组名1,字符数组名2)功能:按照ASCII码顺序比较两个数组中同位字母的大小,并由函数返回值返回比较结果。字符串1=字符串2的话,返回值=0;字符串2>字符串2的话,返回值 >0;字符串1<字符串2的话,返回值 <0。本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h"; void main() { char str1[]="abe123"; char str2[]="abd"; //-1 小于 //0 等于 //1 大于 printf("%d",strcmp(str1,str2)); }
1
格式:strlen(字符数组名)功能:计算数组里字符串的实际长度(不含字符串结束标志‘\0’) 并将长度作为函数返回值;也可以计算字符串常量的长度。
/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h"; void main() { char str1[]="abe123"; //获得字符串长度,中文占两位 printf("\n %d",strlen(str1)); }6
更多函数请点击这里
一组数组是线性的,二组数组是平面的
/* Note:Your choice is C IDE */ #include "stdio.h" void main() { int a[3][3],i,j; a[0][0]=1; a[0][1]=5; for(i=0;i<3;i++) { for(j=0;j<3;j++) { a[i][j]=i*j; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("a[%d][%d]=%d \t",i,j,a[i][j]); } printf("\n"); } } /* Note:Your choice is C IDE */ #include "stdio.h" void main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("a[%d][%d]=%d \t",i,j,a[i][j]); } printf("\n"); } }转载于:https://www.cnblogs.com/zzqwe/p/8516299.html
相关资源:经典小波分析面向对象编程-ell2.m