5_1 数组的概念数组
注:(1)在定义数组时,数组的元素个数(又称数组长度)必须是肯定的,即只能是整型常量表达式。函数
(2)完成数组的定义,引用元素时,下标从0开始计数。code
5_2 一维数组排序
2.1 一维数组的定义字符串
2.2 一维数组的使用get
1. 两种方法初始化字符串处理
(1)在定义数组时同时初始化数组元素string
注:①能够只部分元素初始化io
②只能给元素逐个赋值,不能总体赋值。class
(2)先定义,再初始化:采用循环结构如:
#include<stdio.h> int main() { int i,score[10]; for (i=0;i<10;i++) { scanf("%d",&score[i]);/*也能够是对元素直接赋值如:score[i]=i+2;*/ } return 0; }
2.C语言中只能逐个地引用数组元素,而不能对数组进行总体引用。如:
for (i=0;i<50;i++) printf("%d",score[i]);/*而不是printf("%d",score);*/
3.删除数组元素
简要分析:功能实现 ①查找定位 ②移动
#include<stdio.h> #define N 10 int main() { int a[N]={1,2,3,4,5,6,7,8,9,10},x,i,k,flag=0; printf("原数组值:"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("输入要删除的元素值:"); scanf("%d",&x); for(i=0;i<N;i++) if (a[i]==x) {k=i;flag=1;break;} if (flag==0) printf("不存在为%d的元素值!\n",x); else { if (k==N-1) a[N-1]=0; else { for (i=k;i<N-1;i++) a[i]=a[i+1]; a[i]=0; } printf("\n删除元素%d后的数组值:",x); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); } return 0; }
2.一维数组的排序
【5-4】输入N个整数,将其按升序排列
①冒泡排序法:
#include<stdio.h> #define N 5 int main() { int a[N],t,i,j; printf("请输入%d个数:",N); for (i=0;i<N;i++) scanf("%d",&a[i]); for (i=0;i<N-1;i++) for (j=0;j<N-i-1;j++) if (a[j]>a[i]) { t=a[j];a[j]=a[j+1];a[j+1]=t; } printf("升序排列结果以下:\n"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); return 0; }
②选择排序法:
#include<stdio.h> #define N 5 int main() { int a[N],t,i,j,k; printf("请输入%d个数:",N); for (i=0;i<N;i++) scanf("%d",&a[i]); for (i=0;i<N-1;i++) { k=i; for (j=i+1;j<N;j++) if (a[j]<a[k]) k=j; if (k!=i) { t=a[k];a[k]=a[i];a[i]=t; } } printf("升序排列结果以下:\n"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); return 0; }
2.3.数组中递推的应用
【5-5】利用一维数组,输出斐波拉契数列:1,1,2,3,5,8,13,21,34,55,89……
#include<stdio.h> #define N 20 int main() { int a[N]={1,1},i; for (i=2;i<N;i++) a[i]=a[i-1]+a[i-2]; for(i=0;i<N;i++) { printf("%d\t",a[i]); if((i+1)%5==0) printf("\n"); } return 0; }
5_3 二维数组
_3-1.二维组的定义
_3-2.二维数组的使用
1.二维数组的初始化
2.二维数组元素的引用
3.二维数组的应用举例
5_4 字符数组
_4-1 字符数组的定义
_4-2 字符数组和字符串
_4-3 字符数组的初始化
①逐一赋值:char str[10]={C',' ','p','r','o','g','r','a','m'};
②字符串赋给指定的数组:char str[10]={"C progaram"}
_4-4. 字符数组的输入输出
1. 用格式符“%c”逐个输入输出数组中的字符
【例5-8】逐个输入/输出数组中的字符
#include<stdio.h> #include<stdio.h> int main() { char c[10]; int i; printf("请输入10个字符:"); for(i=0;i<10;i++) scanf("%c",&c[i]); printf("您输入的10个字符为:"); for (i=0;i<10;i++); printf("%c",c[i]); printf("\n"); return 0; }
2. 用格式符“%s”将整个字符串一次输出,遇到‘\0’中止输出(中止后不会自动换行)。
(1)【例5-9】
#include<stdio.h> int main() { char c[]="Program"; printf("%s\n",c); c[4]='\0'; printf("%s\n",c); return 0; }
注:数组下标从0开始计数,因此c[4]是第五个数即‘\0’,结束。
(2)用“%s”输出字符时,printf 函数中的输出项为元素的地址如:
char c[]="Program"; printf("%s",&c[1]); /*结果为:rogram*/
(3) 可用scanf输入一个字符串,系统默认以空格做为一个串的输出结束标志如:
char c[20]; scanf("%s",c); printf("%s",c);
键盘输入:you are a student.
结果为:you
注:若是要输入的字符串中原本就有空格字符,则不能使用格式控制符“%”将整个字符串输入。此时,一般可采用格式符“%c”逐个输入数组中的字符或字符串处理函数gets来接收字符串。
_4-5 经常使用的字符串处理函数
头文件stdio.h 包含:输入、输出、合并、修改、比较、转换、复制、搜索等几类。
而其余字符串函数应包含头文件“string.h”
1.字符串输出函数puts
2.字符串输入函数gets
#include<stdio.h> int main() { char str [15]; printf("请输入一个字符串:"); gets (str) puts("您输入的字符串以下:"); puts (str); return 0; }
①当输入的字符串中含有空格时,输出仍为所有字符串。使用gets函数接受字符串时,只以回车做为结束标 志。这是与scanf函数不一样的。
②使用puts函数输出字符串时,其参数能够是字符数组名,也能够是字符串常量。
③puts函数彻底能够由printf函数取代,当须要按比较灵活的格式输出时,一般使用printf函数。
3.字符串链接函数strcat
功能:把字符数组2中的字符串链接到字符数组1中字符串的后面,字符串1的串结束标志'\0'自动删去。字符数组名2能够字符串常量。
通常调用格式:strcat(字符数组名1,字符数组名2)如:
#include<stdio.h> #include<string.h> { char str1[30]="This a"; char str2[10]="book"; strcat(str1,str2); puts(str1) return 0; }
4. 字符串复制函数strcpy
功能:把字符数组2中的字符串复制到字符数组1中。串结束标志'\0'也一同拷贝。"字符数组名2"能够字符串常量。
格式:strcpy(字符数组名1,字符数组名2)
#include<stdio.h> #include<string.h> int main() { char str1[15],str2[]="C Language"; strcpy (str1,str2); puts(str1); return 0; }
5. 字符串比较函数strcmp
功能:两个数组(字符串)按照ASC‖码顺次比较,并由函数返回值比较结果。
字符串1=字符串2,函数返回0值;
字符串1>字符串2,函数返回>0值
字符串1<字符串2,函数返回<0值
格式:strcmp (字符数组名1,字符数组名2)
6.求字符串长度的函数strlen
功能:测出字符串的实际长度(不含字符串结束标志‘\0’)并做为函数返回值
格式:strlen(字符数组名)
5_5 数组的应用举例