文档库 最新最全的文档下载
当前位置:文档库 › C语言字符数组总结

C语言字符数组总结

C语言字符数组总结
C语言字符数组总结

字符数组总结

字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\0?,因为此字符是字符串的结束标志。因此,对字符数组的初始化、输入输出与一般数组又有不同。现总结如下:

数组的赋值(其中前两种赋值后不能以字符串进行处理)

1. 逐个元素赋值

char a[5];

a[0]=…C?; a[1]=…H?; a[2]=…I?; a[3]=…N?; a[4]=…A?;

2. 一般整体赋值

char a[5]={…C?, …H?, …I?,?N?,?A?};

char a[ ]={…C?, …H?, …I?, …N?, …A?}

3. 字符串整体赋值

char a[ ]={“abc”};

char a[ ]=“abc”;

char a[4]={…a?,…b?,…c?,…\0?};

字符串的输入(已知:char str[ 10 ]; int i;)

1. 逐个元素输入(必须输入9个)

for(i=0;i<9;i++)

scanf(“%c”,&str[i]); //此句也可以用str[i]=getchar();代替

str[9]=…\0?;

注意:?\0?只能直接赋值,不能从外部输入,外部输入的\0是\和0两个字符

2. 整个字符串输入(以空格,回车或TAB键结束)

scanf(“%s”,str);

注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。

3. 整个字符串输入(只以回车键结束)

gets(str);

注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。

字符串的输出(已知:char str[ 10 ]; int i;)

1. 逐个字符输出(注意此时for语句表示从第一个字符一直到?\0?)

for(i=0;a[i]!=…\0?;i++) //此句中的a[i]!=…\0?;也可以用i

printf(“%c”,&str[i]);

2. 整体字符串输出

printf(“%s”,str);

3. 整体字符串输出(此语句输出字符串后自动换行)

puts(str);

字符串函数

1. 求字符串长度函数strlen(a)→获取字符串a的长度

#include

#include

void main( )

{

char a1[10]="china";

int nLength = strlen(a1);

printf("%d\n",nLength);

nLength = strlen("beijing\0wuhan");

printf("%d\n",nLength);

}

2. 字符串连接函数strcat(a,b)→将字符串b连到字符串a后面,执行后a为连接后的结果

#include

#include

void main( )

{

char str1[30] = {"People's_Republic_of_"};

char str2[ ] = {"china"};

printf("%s\n", strcat(str1, str2));

}

3. 字符串拷贝函数strcpy(a,b)→将字符串b拷贝到a中,执行后b的内容将变为a的内容

#include

#include

void main( )

{

char a1[8], a2[ ]="china", a3[ ]="wu";

strcpy(a1,a2);

strcpy(a2,a3);

printf("a1=%s\na2=%s\n",a1,a2);

}

4.字符串比较函数strcmp(a,b)→对a和b进行比较,如果a和b相等值为0,如果a大于

b则值大于0,如果a小于b则值小于0

#include

#include

void main()

{

char a1[6]="CHinA", a2[ ]="china";

int nRet = strcmp( a1, a2 ); //或直接写成int nRet = strcmp( "CHinA", "china" );

if( nRet > 0 )

{

printf( "a1大于a2\n" );

}

else if( nRet < 0 )

{

printf( "a1小于a2\n" );

}

else

{

printf( "a1等于a2\n" );

}

}

5. 大小写字母转换函数:strlwr(a)、strupr(a) 将字符串a中的大(或小)写字母转换为小(或大)写字母

#include

#include

void main()

{

char a1[6]="CHinA", a2[ ]="wuHAn";

printf ("%s\n", strlwr(a1));

printf ("%s\n", strupr(a2));

}

c语言数组习题优选稿

c语言数组习题 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 下列数组定义语句中,错误的是() ① char x[1]='a'; ②auto char x[1]={0}; ③ static char x[l]; ④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数

据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是 ______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6}; ② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][]={{1,2,3},{4,5,6}};

C语言字符数组总结

字符数组总结 字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\0?,因为此字符是字符串的结束标志。因此,对字符数组的初始化、输入输出与一般数组又有不同。现总结如下: 数组的赋值(其中前两种赋值后不能以字符串进行处理) 1. 逐个元素赋值 char a[5]; a[0]=…C?; a[1]=…H?; a[2]=…I?; a[3]=…N?; a[4]=…A?; 2. 一般整体赋值 char a[5]={…C?, …H?, …I?,?N?,?A?}; char a[ ]={…C?, …H?, …I?, …N?, …A?} 3. 字符串整体赋值 char a[ ]={“abc”}; char a[ ]=“abc”; char a[4]={…a?,…b?,…c?,…\0?}; 字符串的输入(已知:char str[ 10 ]; int i;) 1. 逐个元素输入(必须输入9个) for(i=0;i<9;i++) scanf(“%c”,&str[i]); //此句也可以用str[i]=getchar();代替 str[9]=…\0?; 注意:?\0?只能直接赋值,不能从外部输入,外部输入的\0是\和0两个字符 2. 整个字符串输入(以空格,回车或TAB键结束) scanf(“%s”,str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 3. 整个字符串输入(只以回车键结束) gets(str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 字符串的输出(已知:char str[ 10 ]; int i;) 1. 逐个字符输出(注意此时for语句表示从第一个字符一直到?\0?) for(i=0;a[i]!=…\0?;i++) //此句中的a[i]!=…\0?;也可以用i

C语言:数组的应用实验报告

课程名称:结构化程序设计与C语言开课实验室:年月日 一、实验目的 用C语言编写和调试数组的程序,包括一维数组和二维数组。从而对数组的程序设计有比较深入的了解。 二、内容及结果 1、程序二选择排序法 1)题目:用选择法对10个整数排序。 2)代码: #include int main() { int a[10]; int i,j,t; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers:\n");

for(i=0;i<10;i++) printf("%d",a[i]); printf("\n"); return 0; } 3)运行截图: 2、程序二将一个数组中的值按逆序重新存放。 1)题目:将一个数组中的值按逆序重新存放。 2)代码: # include int main () { int a[5]={8,6,5,4,1}; int i,t; for(i=0;i<=2;i++) { t=a[i]; a[i]=a[4-i]; a[4-i]=t;

} for(i=0;i<=4;i++) printf("%d ",a[i]); return 0; } 3)运行截图: 3、程序三输出杨辉三角形(10行) 1)题目:输出杨辉三角形(10行) 2)代码: #include int main() { int yh[10][10]={0}; int i,j; for(i=0;i<10;i++) yh[i][0]=1; for(i=1;i<10;i++) for(j=1;j<10;j++) yh[i][j]=yh[i-1][j-1]+yh[i-1][j]; for(i=0;i<10;i++) { for(j=0;j

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

c语言字符数组与字符串总结

字符数组与字符串 <1>定义 Char数组名[常量表达式] 数组中每一个元素的值为一个字符。 系统在内存为字符数组分配若干连续的存储单元,每个储存单元为一个字节。 <2>初始化 逐个元素初始化,如char c[8]={‘b’,’o’,’y’};(要记得加单引号) 用字符串初始化,如char c[11]={“I am a boy”};初始化后在末尾自动添加’0’ 如果初值个数<数组长度,则只将这些字符赋给数组中前面元素,其余元素自动定为空字符(即’0’) <3>输入输出 ①用格式”%c”逐个输入输出,如scanf(“%c”,&a[0]); ②用格式符”%s”整个字符串输入输出,如scanf(“%s”,a) 用”%s”格式输出字符数组时,遇’\0’结束输出,且输出字符中不含’\0’,用scanf及”%s”输入时,数组名前不能再加”&”符号。 字符串的末尾必须有’\0’字符,且字符串只能存放在字符数组中。 scanf中%s输入时遇空格或回车结束。 ③用函数gets实现输入 gets(字符数组),如gets(a) 调用函数时,回车键作为输入结束标志;然后将接收到的字符依

次赋给数组各个元素,并自动在字符串末尾加字符串结束标记’\0’ ④用字符串输出函数puts实现输出 puts(字符串/字符数组),如puts(a); 输出一个字符串,并在输出后自动换行。 <4>字符串处理函数 ①字符串拷贝函数 格式strcpy(字符数组1,字符串2) 将字符串2拷贝到字符数组1中去,要求字符数组1必须足够大,拷贝时’\0’一同拷贝,不能使用赋值语句为一个字符数组赋值。字符数组1应写成数组名的形式,比如char a[0]; strcpy(a,…) ②字符串连接函数 格式strcat(字符数组1,字符数组2) 将字符数组2连到字符数组1后面,要求字符数组1必须足够大,连接前,两串均以’\0’结束;连接后,串1的’0’取消,新串最后加’\0’。 ③计算字符串长度的函数 strlen(字符数组); 求出字符串或字符数组中实际字符个数,不包括’\0’,并且遇到’\0’结束。 ④字符串比较函数 格式strcmp(字符数组1,字符数组2)

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

C语言数组知识点总结

C语言数组知识点总结 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

数组定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:inta[10];元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 inta[10]={0,1,2,3,4,5,6,7,8,9};正确。 inta[10];a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: inta[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: inta[10]={0,1,2,3,4,5,6,7,8,9};可以写成inta[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:inta[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: inta[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 inta[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: inta[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 inta[3][4]={{1},{5,6}};可以看成是inta[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组 1、定义:chara[10];字符数组a长度为10。每个元素只能存放一个字符。例如: a[0]='h';a[1]='a';a[2]='p';…… 2、初始化: chara[]={'h','a','p','p','y'}; chara[]="happy"; chara[]={"happy"};注意,因为字符串结尾自动加'\0',所以chara[]="happy";长度为6,不是5。

C语言数组知识点总结

数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式: 类型说明符数组名[常量表达式];例如: int a[10]; 元素为a[0] a[9] 、 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以就是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9}; 正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9}; 错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6}; 后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但就是,既不赋初值,也不指定长度就是错误的。例如:int a[]; 错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4]; 可以瞧成就是包含3 个一维数组,每个一维数组里包含4 个元素。一共3*4=12 个元素。所有元素为a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以就是就是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}}; 其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}}; 可以瞧成就是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组

c语言编程技巧如何定义一个字符串的数组

C语言编程技巧:如何定义一个字符串的数组 实现目的 我们在用C语言编写程序时,经常会遇到使用字符串数组的情况,这种数组的特点是,数组中的每个元素都是一个字符串,但每个字符串的长度却不相同。如果你使用C++语言进行编程的话,实现起来相对比较简单,只需直接选择标准模板库的字符串string类,在代码中定义该类的一个数组即可实现。现在的问题是,在纯C语言中如何定义这样的一个字符串数组呢? 如对于下面的一个字符串数组: str = { “I love C.”, “I love C++.”, “I love JA V A.”, “I love Python.”, “I love LabVIEW.” }

下面给出C语言中的两种定义方法。 方法1:定义一个char类型的二维数组 这种方法是通过定义一个char类型的二维数组实现,通过二维数组的行索引可得到数组中的每个字符串,列的大小限定了每个字符串所能包含的最大字符个数,所以采用这种定义方式时,列的大小必须不能小于数组所有字符串的最大长度。如对于上面的数组,C语言的定义代码如下: 在取该数组的每个字符串时,直接对行索引即可。 方法2:定义一个指向char类型的指针数组 这种方法是通过定义一个指向char类型的指针数组实现,数组中的每个元素都是一个指针,通过该指针可得到数组中的每个字符串。如对于上面的数组,C语言的定义代码如下: 两种方法对比 上面的两种方法都可以实现我们的目的,但在内存的占用上两种方法不同。第1种方法定义了一个5行20列的二维数组,即每个字符串所占的字节长度都为20个,所以共需要占用100个字节,而第2种方法是定义的指针数组,每个指针指向的字符串占用的字节长度是其实际长度,所以其总的长度肯定小于100个字节。综合来讲,第1种方法相对于第2种方法,造成了存储空间的浪费情况。

C语言中数组的总结

C语言中数组的总结 目录 1.数组的定义 2.一维数组的创建和初始化 3.给数组元素赋值 4.数组下标越界 5.二维数组 6.多维数组 7.指针与一维数组 8.指针与多维数组 9.指针,数组与函数 10.变长数组 11.以上全部内容 数组的定义 1.数组:一系列相同数据类型的有序序列。 2.声明数组: int states[50]; char code[28]; float candy[13]; 等等…… 通过声明将会告知编译器三个信息:1)数组内含有多少元素2)元素的数据类型3)数组名

一维数组的创建和初始化 1.数组的初始化:在数组创建时,我们要为数组初始化。 int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//数组的初始化 int months[ ]={ 31,28,31,30,31,30,31,31,30};//初始化时省略方括号中的数字,编译器会根据初始化列表中项数来确定数组的大小。(本例中数组的大小为9)const int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//将数组设置为只读,这样程序只能从数组中检索值,不能把新值写入数组。(一旦声明为const,便不能再给他赋值) 以花括号括起来,用逗号分隔数组元素来初始化数组,逗号和值之间可以使用空格。 C const 与C++ const 区别一:c++允许在声明数组时使用const整数变量,而c不允许。 区别二:const定义的变量未初始化时,c会使用一个变量地址上的随机的值,c++会报错未初始化的const 'y'。 区别三:const int y; const int *p2 =&y; int * p1; p1 = p2;//c++不允许这么做(从'const int*'到'int*' [- fper]的无效转换),c 会给出一个警告(赋值从指针目标类型中丢弃“const”限定符) 1)失败的初始化数组 a)未初始化数组:数组元素和未初始化的普通变量一样,编译器使用的值是内存地址上现有的值,使得数组储存的都是垃圾值。

关于C语言中的字符串数组输入输出控制符的若干问题

关于C语言中的字符串数组输入输出控制符的若干问题 示例一: #include void main() { int i; int a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%d",&(a[i])); } printf("%d,%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4],a[5]); //printf("%d",a); 这是错误做法,没有输出若干个实数的控制符,只能一个个输出。 } 实例二: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%s",&(a[i])); //只可从键盘输入一个字符,否则输出将每次输入多余的部分丢弃。 //不可写成:scanf("%c",&(a[i])); } printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]); //不可用%s%s%s%s%s%s //也可以这样写:printf("%s",a); } 示例三: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%c",&(a[i])); getchar(); //如果用%c作为输入一个字符控制符用,后面必须加此句;

c语言学习笔记(数组、函数)

数组 2010-3-29 22:40 一维数组的定义和一维数组的引用 内存中一串连续的存储单元(变量),叫数组。指针移动和比较只有在一串连续的数组中才有意义。 当数组中每个变量只带一个下标时,为一维数组。 定义一个一维数组: 类型名数组名【常量表达式】如:int a[8]; 说明:①定义一个一维整型名为a的数组。 ②方括号中规定此数组有8个元素,(a【0】-a【7】),不存在a【8】这个元素。 ③a数组中每个元素均为整型,且每个元素只能存放整型。 ④每个元素只有一个下标,且第一个元素的下标总为0。 ⑤c编译程序,为a数组开辟8个连续存储单元。 3)在定义数组语句中,可以有多个数组说明符;它们用逗号隔开。 例:double a【22】,v【100】,u【5】,a,b,c;注:双精度型每个单元占用8个字节的存储空间。另外,也可以和普通变量一起定义。 用逗号分隔开。 2010-3-23 10:29 一维数组元素的引用2 1) 引用形式:数组名【下标表达式】可以是:常量,变量,表达式。 如:double x【8】则x【0】x【j】x【i+k】均合法 2) (1)一个数组元素实际上就是一个变量名,代表内存中的一个存储单元。我们可以把数组元素看做一个变量名来处理。 (2)一个数组不能整体引用,数组名中存放的是一个地址常量,它代表整个数组的首地址。当学习指针时,引用的变量的地址,就是变量中第一个字节的地址。数组的首地址也是它的第一个元素的第一个字节的地址,即它的首地址。 数组的首地址存放在数组名中。所以说,数组名就代表一个地址。数组名是一个地址值。 (3)在引用数组元素时,数组元素下标表达式必须是整数,下标表达式下限为0.系统并不自动检验数组元素下标是否越界,因此编程时要注意。 如:double a,b; int c[10]; a=2.0;b=3.0; 则a[i]; 是不合法的。 给数组赋初值时,如果所赋初值少于元素个数时,后面的元素补为0,字符补为’\0’可以通过赋初值来定义一个数组的大小。如:int a[]={0,0,0,0,0}; 相当于:a[5]={0};

c语言数组习题

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 下列数组定义语句中,错误的是() ① char x[1]='a';②auto char x[1]={0}; ③ static char x[l];④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6};② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6};④ static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计4个元素,初值依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组S中存放的是字符串"123",该答案不符合题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组s的长度为4,其中的初值是字符串"123",不符合题意(即正确的);备选答案③中也是给数组s赋予字符串的初值,但是字符串不是"123",而是"123\n",所以该答案符合题意(即错误的);显然答案④也不符合题意(即正确的)。下面来分析答案④为什么是正确的,该答案给出了数组长度为4,赋初值时仅给前3个元素赋予字符'1 '、 '2'、'3',第 4个元素没有赋初值,按照C语言的规定,也有初值,且初值为空值,对字符型数组来说,空值就是'\0',即字符率结束标记,所以数组S中存放的也是字符串" 123"。【答案】③

c语言中的字符数组与字符串

c语言中的字符数组与字符串 一、字符数组的定义 一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。char str[20]; 二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。 char country[10][20]; country[i]:第i个字符串 二.字符数组的初始化 字符数组的初始化. 1.可以通过为每个数组元素指定初值字符来实现。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; char str[ ]={"I am happy"}; 可以省略花括号,如下所示 char str[ ]="I am happy"; char country[10][20]={“china”,”japanese”,……}; 注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的 char str[15]; str="I am happy"; strcpy(str, "I am happy"); 不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。 ‘a’“a”区别 三、字符数组的引用 字符数组的逐个字符引用,与引用数值数组元素类似。 (1)字符数组的输入 除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。 例如: char str[10]; …… for(i=0; i<10; i++) { scanf(\"%c\", &str); fflush(stdin); /*清除键盘输入缓冲区*/ }

C语言数组知识点总结

数组 定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:int a[10]; 元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

c语言编程有关数组的几道例题

实验四一维数组、二维数组 一、实验目的与要求 1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。 2、掌握与数组有关的算法。 二、实验内容 1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。 #include "" #include<> void swap2(int*,int*); void bubble(int a[],int n); int main(void) { int n,a[8]; int i; printf("Enter n(n<=8):"); scanf("%d",&n); printf("Enter a[%d]:", n); for(i=0;i

printf("After sorted,a[%d]=", n); for(i=0;ia[j+1]) swap2(&a[j],&a[j+1]); /*交换*/ } void swap2(int *px,int *py) { int t; t=*px; *px=*py; *py=t; }

单向冒泡排序法: //输入10个整数,按从大到小输出// #include<> void main() { int i,j,t,a[10]; printf("请输入10个整数\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) //10个数要来回做(10-1)趟次// for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较// if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒// {t=a[i];a[i]=a[i-1];a[i-1]=t;} printf("按从大到小排序输出结果是:\n"); for(i=0;i<10;i++) printf("%-3d",a[i]); printf("\n"); } 双向冒泡排序法: //输入10个整数,按从大到小输出// #include<>

c语言第五章 数组算法总结

第五章数组 数组的概念:一组相同类型数据的集合,数组中的所有元素都只能是同一个类型的,数组中的元素在内存中的空间是连续的,数组的定义、数组元素的引用和数组的初始化看书或者课件 容易错的地方: ◆数组的定义语句如:int a[10]是定义了10个整型元素的数组,表示一共有a[0]----a[9]10 个元素,切记Tc中元素的下标是从0开始,所以最后一个元素的下标是9而不是10!!!!! ◆只有定义语句Int a[10] 时,表示定义了一个数组,数组名为a,一共有10个元素, 其他任何地方出现a[i]都表示一个元素的引用!!! (一)一维数组 主要算法: 1.数组元素的遍历:数组元素的输入输出,如果a数组中数组元素有n个,那 么数组元素的引用是从a[0]----a[n-1],我们的思想是通过一个变量i从0循环到n-1,那么a[i]就可以表示a[0]到a[n-1]一共n个元素了 main() { int a[10],i; for(i=0;i<10;i++) /*变量i做下标,取值0~9,分别表示对第一个元素a[0]到最后一个scanf(“%d”,&a[i]);元素a[9]进行赋值*/ printf(“\n”);

for(i=0;i<10;i++) printf(“%5d”,a[i]);/*从头到尾输出数组的每一个元素*/ printf(“\n”); } 2.从一个数组中到处最大值和最小值:算法思想是用一个变量max表示存储 最大值,那么给max赋初值为a[0],即从第一个开始,假设第一个元素是当前最大的,然后遍历数组中的每一个元素,每一个元素都跟max进行比较,如果有比max大的则修改max的值,求最小值的思路跟最大值类似。 main() { int i,n; float a[10],max,min; printf(“input data numbers:”); for(i=0;i<10;i++) scanf(“%f”,&a[i]); max=min=a[0]; /*设最大数和最小数都为a[0]*/ for(i=1;i<10;i++) { if(a[i]>max) max=a[i]; if(a[i]

相关文档
相关文档 最新文档