搜档网
当前位置:搜档网 › C语言——第七章数组

C语言——第七章数组

C语言——第七章数组
C语言——第七章数组

一维数组定义方式:

类型说明符数组名[数组大小] (数组名与变量名定义规则相同)

如:char c[20];

数组大小代表数组中元素个数,需要注意的是,数组下标从0开始,因此数组大小20的数组中最后一个元素为19。

注意:C语言不允许对数组大小进行动态定义。

一维数组的引用:

数组名[下标]

如:a[3]

下标可以是常量或者表达式。如:a[3]、a[2*5]。

一维数组初始化:

在定义数组是进行赋值:int a[5]={1,2,3,4,5};

只给一部分元素赋值:int a[5]={1,2,3};该情况下后两个元素为0。

使一个数组中全部元素为0:int a[5]={0,0,0,0,0}; 或int a[5]={0};

若对全部元素赋值,可不指定数组长度:int a[]={1,2,3,4,5,};

利用数组解决fibonacci数列:

关键部分即利用数组构建fibonacci数列,但不能动态定义数列大小,如下:

int i,a[20];

a[0]=a[1]=0;

for(i=2;i

a[i]=a[i-1]+a[i-2];

“起泡法”对数组中数列进行排序:

思路:将相邻两个数进行比较,将小的调到前面。

具体操作:对n个数进行比较,共有需要比较n-1次,第一次比较时有n-1个相邻比较组合,将最大的数送至最后的位置,第二次比较时有n-2个相邻比较组合,将次大的数送至倒数第二个位置,以此类推,直至找到最小的数,放在最前面的位置。

#include

void main()

{int i,j,a[10],t;

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

{ printf("请输入第%d个数字:",i+1);

scanf("%d",&a[i]); }

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;

}

}

printf("排序后的结果为:");

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

}

二维数组的定义:

类型说明符数组名[一维大小][二维大小]

如:char c[2][4];(注:最大元素为c[1][3])

引用方法同一维数组。

二维数组初始化:

分行赋值:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

将所有元素放一块赋值:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(若大括号内元素小于数组最大元素值,则对数组中剩下的元素赋0)

部分赋值:int a[3][4]={{1},{2},{3}}

在对全部元素赋值时,可省略第一维大小,但不能省略二维大小:int

a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

或使用分行赋值的方法:int a[][4]={{1,2,},{5},{9,10,11,12}};

具体可用以下算法检验二维数组赋值情况,放入VC++6.0编译器中使用:

#include

void main()

{int i,j,a[][4]={按要求使用具体的赋值形式};

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

{ for(j=0;j<4;j++)

printf("\n");

}

}

字符数组:

字符数组元素赋值时需要加上单引号!!!!

如:a[2][3]='a';

用字符数组存储字符串:

C语言中规定以'\0'作为字符串的结束符。

字符串可直接存储与字符数组中,方法为:char c[]={"I am happy"}; 或 char c[]="I am happy"; 系统会在最后自动加上'\0',而对字符数组中元素一个个赋值的方式,即:char c[]={'a','b','c','d'};则不会在最后加上'\0'。

char c[]="I am happy";等价于char c[]={'I','a','m',' ','h','a','p','p','y','\0'};

而不等价于char c[]={'I','a','m',' ','h','a','p','p','y'};

只有当存储字符串是才需要使用'\0'

字符数组的输入输出:

方法一:逐个输出数组中的字符,用循环语句结合%c格式符。

方法二:将整个字符串输出,用%s格式符。注:使用%s输出字符串时,必须使用数组名,而非数组元素名,即:printf("%s",c);

当字符数组中包含多个'\0'时,遇到第一个'\0'就输出。

可以使用scanf方法输入字符串至字符数组:scanf('%s',str);str为字符数组名,且str前不用加上&,因为C语言中数组名直接代表数组起始地址。当输入遇到空格或回车时即结束输入。

总结一下,对字符数组赋值方法有一下几种方法:

1.在定义时初始化,输入各个元素对应的字母,如:{'A','b','c'}

2.在定义事初始化,输入完整字符串,如:{"I am happy"}

3.在程序运行时进行赋值,利用循环语句结合scanf语句进行逐个字母的输入,利用%c格式符。

4.在程序运行时进行赋值,利用scanf语句进行字符串输入,利用%s格式符,不可输入空格。

5.在程序运行时进行赋值,利用gets函数输入,可输入空格。

字符处理函数:

puts函数:用于输出一个保存字符串的字符数组,用法为:puts(str);

gets函数:用于输入一个字符串,用法为:gets(str)注:该方法可输入空格;

strcat函数:用于连接两个字符串str1,str2,将str2放在str1后面,并将最终结果存储与str1中,用法为:strcat(str1,str2);

strcpy函数:用于将字符串str2复制到str1中,用法为:strcpy(str1,str2)或者strcpy (str1,“字符串常量”),其中str1应足够长。(使用该函数的原因是,字符数组不能使用数组名直接赋值)

strncpy函数:用于将字符串str2中的n个字符复制到str1中,用法为:strncpy(str1,str2,n);n不大于str2中原有字符数。

strcmp函数:用于比较两个字符串,可以是字符数组,也可以是字符串常量,用法为:strcmp (str1,str2),若str1>str2则函数值>0,若str1

strlen函数:用于测量字符数组或字符串常量的实际长度(不包括'\0')。

strlwr和strupr函数:用于大小写转换。

判断字符串中单词数量的程序:

书本上P150列7.8的算法同样可用

#include

void main()

{ int i,num=0;

char c[100];

printf("请输入一个字符串:");

gets(c);

for(i=0;c[i]!='\0';i++)

if(c[i]!=' '&&(c[i+1]==' '||c[i+1]=='\0'))

num++;

printf("字符串包含单词数为:%d\n",num);

}

C语言复习题及答案 第七章 数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式] ; (1) (1)数组名后必须用方括弧[ ] ,用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标] //下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围; 如int a[10] ; //可以引用的数组元素为a[0]……a[9] , a[10] 不是本数组元素; 3、一维数组的初始化: (1) (1)可以在定义数组后,立刻赋值;如int a [3] = { 1,3, 5} ; 但下面这样是错误的: int a[3] ; a = { 1,3, 5} ; (2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, …?, float 0.0 ; 如int a [3]= {1,3 } ; //a[0] =1 ; a[1]= 3 ; a[2]= 0 ; (3) 在对数组全部元素赋初值时,可以不指定元素个数; (4) 可以在循环控制下,给数组各元素赋值; 如:int a[10] ; for ( i=0 ; i <10 ;i ++ ) a [ i ] = i ; 基础训练(A) 一、选择题 1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 2、要说明一个有10个int元素的数组,应当选择语句()。 A) int a[10]; B) int a(10); C) int a[9] D) int a[11] 3、以下对数组的正确定义是:()。 A) float b[5.0] B) float b[5] C) float b(5) D) float b[] 4、对以下说明语句的正确理解是()。 int a[10]={6,7,8,9,10}; A)将5个初值依次赋给a[1]至a[5]

C语言复习题及答案 第七章 数组教程文件

C语言复习题及答案第七章数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ; (1) (1)数组名后必须用方括弧 [ ] ,用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] //下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围; 如 int a[10] ; //可以引用的数组元素为a[0]……a[9] , a[10] 不是本数组元素; 3、一维数组的初始化: (1) (1)可以在定义数组后,立刻赋值;如 int a [3] = { 1,3, 5} ; 但下面这样是错误的: int a[3] ; a = { 1,3, 5} ; (2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ‘’, float 0.0 ; 如 int a [3]= {1,3 } ; //a[0] =1 ; a[1]= 3 ; a[2]= 0 ; (3) 在对数组全部元素赋初值时,可以不指定元素个数; (4) 可以在循环控制下,给数组各元素赋值; 如:int a[10] ; for ( i=0 ; i <10 ;i ++ ) a [ i ] = i ; 基础训练(A) 一、选择题 1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。

《C语言程序设计》第7章 数组

第7章数组 第1次课:2学时 一、教学内容 1、一维数组的定义和引用 2、二维数组的定义和引用 二、教学目标 1.了解一维数组、二维数组的基本概念; 2.掌握数组的定义与引用; 3.掌握数组元素的引用 三、教学重点及难点 重点:数组的定义和引用 难点:数组的定义和引用 四、教学方法 多媒体教学,案例驱动,实例演示,提问。 五、教学过程设计 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 7.1 一维数组的定义和引用 7.1.1 一维数组的定义方式 在C语言中使用数组必须先进行定义。 一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型;数组名是用户定义的数组标识符;方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 对于数组类型说明应注意以下几点: (1) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 (2) 数组名的书写规则应符合标识符的书写规定。 (3) 数组名不能与其它变量名相同。 (4) 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。但是其下标从0 开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 (5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。

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'};

☆C语言实验五(第七章一维数组:排序综合题)

【2008春上机编程题_C07】 【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”

形式、一行五个数据将满足条件的数据输出到屏幕: 【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。 参考程序: 简单起泡排序法:(参考教科书P134)

{ 双向起泡排序法:(参考上机指导书P54例、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k 个整数从大到小排序。排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。”

选择排序法:(参考上机指导书P50例)

课堂练习空余时间或课后业余时间练习知识题 【软件第七章】 选择: 1,下列一维数组的声明中,正确的是____(22)_____。 , A. int a[]; B. int n=10,a[n]; C. int a[10+1]={0}; D. int a[3]={1,2,3,4}; 5.以下程序运行后的输出结果是_____(25)___。 main() { char a[7]="a0\0a0\0";int i,j; i=sizeof(a);j=strlen(a); printf("%d %d",i,j); } 2 B.7 2 C.7 5 2 8.以下声明中错误的是_____(27)_____。 A. int a[2]; B. int a[]={0,1}; C. int a[3]=0; D. nt a[3][4]={0}; ¥ 11. 已知有声明"int m[]={5,4,3,2,1}, i=0;",下列对数组元素的引用中,错误的是_____(27)_____。 A. m[++i] B. m[5] C. m[2*2] D. m[m[4]] 参考资料:数制变换 输入一个十进制数,输出为二进制数形式的一维整型数组

C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组

第7章数组 【练习7-1】将例7-3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答: 当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因 此程序输出会有变化。当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。 【练习7-2】将数组中的数逆序存放。输入一个正整数n(1 int main(void) { int i,n,temp; int a[10]; printf("Input n:"); scanf("%d",&n); 页脚内容1

printf("Input %d integer:",n); for(i=0;i 页脚内容2

int main(void) { int i,index,n; int a[10]; printf("Enter n:"); scanf("%d",&n); printf("Enter %d integrs:",n); for(i=0;i=0;i++) printf("%d ",a[i]); return 0; } 【练习7-4】找出不是两个数组共有的元素。输入一个正整数n (1<n≤10),再输入n 个整数,存入第1个数组中;然后输入一个正整数m(1

C语言第七章数组部分复习题

数组复习题 一.选择题 1.若有以下定义语句:int a[]={1,2,3,4,5,6,7,8,9,10}; 则值为5 的表达式是:() a) a[5] b) a[a[4]] c) a[a[3]] d) a[a[5]] 2.要求定义具有80个、char类型元素的一维数组,错误的定义语句是:() a) #define N 80 b) int N=80; char s[N]; char s[N]; c) #define N 40 d) char s[40+40]; char s[2*N]; 3. 若有以下定义语句:int a[10]={1,2,3,4,5,6,7,8,9,10}; 则对a 数组元素正确的引用是:() a) a[10] b) a[a[3]-5] c) a[a[9]] d) a[a[4]+4] 4. 若有以下定义语句:float a[11]={0,1,2,3,4,5,6,7,8,9,10}; 则以下叙述中错误的是:() a) a数组在内存中占44个字节 b) a数组的最后一个元素为a[10] c) a数组的第一个元素为a[0] d) 以上定义语句给a数组所赋初值是整数,不能正确赋值 5. 若有以下定义语句:double a[5]; int i=0; 能正确给a数组元素输入数据的语句是:()

a) scanf(“%lf%lf%lf%lf%lf”,a); b) for(i=0 ;i<=5 ;i++) scanf(“%lf”,a+i); c) while(i<5) scanf(“%lf”,&a[i++]); d) while(i<5) scanf(“%lf”,a+i); 6. 以下关于数组的描述正确的是:() a) 数组的大小是固定的,但可以有不同数据类型的数组元素 b)数组的大小是可变的,但所有数组元素的数据类型须相同 c) 数组的大小是固定的,且所有数组元素的数据类型须相同 d) 数组的大小是可变的,且可以有不同数据类型的数组元素 7. 若有说明:int a[10];,则对a数组元素引用不正确的是:() a) a[5+5] b) a[5.5] c) a[10-10] d) a[5] 8. 执行int a[ ][3]={1,2,3,4,5,6,7};语句后,a[1][0]的值是:() a) 1 b) 3 c) 5 d) 4 9. 若有说明:int k[ ][4]={1,2,3,4,5,6,7,8,9,10,11};,则k数组的第一维长度是:() a) 3 b) 2 c) 1 d) 无确定值 10. 若有以下程序: void main() { int k[9]={19,16,17,15,13,11,10,9}, i=1,s=0; while(i<9 && k[i]%3) s=s+k[i++];

相关主题