第7章 数组1
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<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。
解答:#include<stdio。
h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");for(i=0;i〈n/2;i++){temp=a[i];a[i]=a[n—1—i];a[n-1—i]=temp;}for(i=0;i〈n;i++)printf("%d ”,a[i]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>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〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
《C语言程序设计基础与实训教程》第7章:数组

/webnew/
7.1.4 一维数组的应用举例
例7.5 将数组中的数按颠倒的顺序重新存放。要求,在操 作时只能借助一个临时存储单元而不能另外开辟数组。 分析:题目要求是按颠倒的顺序重新存放数据,而不是按 逆序输出。 可以使用两个变量i和j,i和j的初值分别为0和9,将a[i] 与a[j]对调,然后i++,j--,接着再将a[i]与a[j]对调。如些 重复操作,直到i>=j时,对调完成。 程序
分析:该数组元素的值是有规律的序列, ( 从 开始算起 开始算起) 分析 : 该数组元素的值是有规律的序列 , 第 i(i从0开始算起) 个 元素的值为: 元素的值为:10+2*i。 。 输出该数组时,由于该数组有30个元素,在一行中输出不太美观, 输出该数组时,由于该数组有 个元素,在一行中输出不太美观, 个元素 所以,这里我们选择每行输出6个元素。 所以,这里我们选择每行输出 个元素。 个元素
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
/webnew/
7.1.3 一维数组元素的引用
注意: (1)数组元素的引用方式与数组说明符的形式非常相近,都是 “数组名[表达式]”形式,但两者的意义完全不同。 出现的位置不同。定义数组时,“数组名[表达式]”出现在 定义语句中,表示的是定义了一个名为“数组名”的数组,表达式的值 表示该数组中所包含元素的个数。作为数组元素的引用方式时,“数组 名[表达式]”出现在其它执行语句中,表示是数组中的下标为“表达式” 值的那个元素。 表达式的格式不同。定义数组时,“表达式”必须为常量表 达式。作为数组元素的引用方式时,表达式可以变量、常量或函数构成 的合法C表达式。 (2)在C语言中,起始下标规定为0,最大值应为:数组长度-1。 如果发生了下标越界的现象,可能破坏了其它存储单元的数据,甚至破 坏程序代码。 (3)下标必须是整型表达式,若为小数,则自动取整。如a[2.6] 系统自动默认为a[2]。
第七章 数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。
南昌大学第七章数组答案

A.int a[]="string";B.int a[5]={0,1,2,3,4,5};C.char a="string";D.char a[]={0,1,2,3,4,5};A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. B.C. D.A. B.C. D.A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1) 确定A. a[0][2*1]B. a[l][3]C. a[4-2][0]D. a[0][4]A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1 确定A. B.C. D.A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. if(s1>s2)B. if(strcmp(s1,s2))C. if(strcmp(s2,s1)>O)D. if(strcmp(s1A. B.C. D.A. int a[3][ ];B. float a(3C. double a[1][4];D. float a(3)(4);A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1)A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A BC DA BC DA BC DA BC DA BD C整体赋值A BC DA BC DA BC DA BC DA BC DA BCD 值A B C DA B C DA B C DA B C DA) abcdefA) abcdA) abcdA) abcdef确定[C] 教师批改:36、给出以下定义:char x[ ]="abcdefg";char y[ ]={…a…,…b…,…c…,…d…,…e…,…f…,…g…};则正确的叙述为A)数组X和数组Y等价B)数组x和数组Y的长度相同C)数组X的长度大于数组Y的长度D)数组X的长度小于数组Y的长度确定[C] 教师批改:37、设有static char str[ ]="Beijing";则执行printf("%d\n", strlen(strcpy(str,"China")));后的输出结果为A) 5 B) 7C) 12 D) 14确定[A] 教师批改:38、请选出以下程序段的输出结果#include<stdio.h>main(){ char sl[10], s2[10], s3[10], s4[10];scanf("%s%s",s1,s2); gets(s3); gets(s4);puts(s1); puts(s2); puts(s3); puts(s4);}输入数据如下:(此处<CR>代表回车符)aaaa bbbb<CR>A bbbbB bbbbC) aaaa bbbbD ccccA BC DA不可以直接用数组名对数组进行整体输入或输出BC数组元素的下标超出所定义的下标范围时,系统将给出DA BC DA B C DA B C DA B C DA BC DA B C D。
第7章 一维数组应用

第七章 数组
但是不能简写为: 但是不能简写为: static int a[10] = {0*10}; 注意:当程序不给数组指定初始值时, 注意:当程序不给数组指定初始值时, 编译器作如下处理: 编译器作如下处理: (1)编译器自动把静态数组的各元素初 始化为0 始化为0。 (2)编译器不为动态数组自动指定初始 值。
第七章 数组
特别强调:
1.
2.
3. 4.
在运行C语言程序过程中,系统并不自动检验 并不自动检验数组元 在运行 C 语言程序过程中,系统 并不自动检验数组元 素的下标是否越界 因此在编写程序时, 越界。 素的下标是否越界。因此在编写程序时,保证数组下 标不越界是十分重要的。 标不越界是十分重要的。 个数组元素,实质上就是1个变量, 1 个数组元素 , 实质上就是1 个变量 ,它具有 和相同 类型简单变量一样的属性, 类型简单变量一样的属性,可以对它进行赋值和参与 各种运算。 各种运算。 语言中,数组作为1个整体,不能参加数据运算, 在C语言中,数组作为1个整体,不能参加数据运算, 单个的元素进行处理 只能对单个的元素进行处理。 只能对单个的元素进行处理。 通常用数组和循环配合使用,来引用数组元素。 通常用数组和循环配合使用,来引用数组元素。
数组定义的一般形式: 数组定义的一般形式:
数组名[整型常量表达式 整型常量表达式] 类型说明符 数组名 整型常量表达式 例: int a[10]
第七章 数组
表示以下信息: int a[10] 表示以下信息: 定义一个数组,数组名a 10个元素 个元素, 定义一个数组,数组名a,有10个元素,每个元素的类型均为 int。 int。 10个元素分别是 a[0]、a[1]、....、a[8]、a[9]。 个元素分别是: 这10个元素分别是:a[0]、a[1]、....、a[8]、a[9]。 各个数组元素是排成一行 的一组下标变量, 排成一行的一组下标变量 各个数组元素是 排成一行 的一组下标变量 , 用一个统一的 数组名来标识,用一个下标来指示其在数组中的位置。 数组名来标识,用一个下标来指示其在数组中的位置。 说明: 说明: 数组下标从0开始。 数组a的第1个元素是a[0] a[0], 1)数组下标从0开始。如:数组a的第1个元素是a[0],数组 的第8个元素是a[7]数组a[n] 中的元素从a[0]到 a[n-1]共 的第8个元素是a[7]数组a[n] 中的元素从a[0]到 a[n-1]共 a[7]数组 a[0] n个。 2)C语言不允许对数组的大小做动态定义,如: 语言不允许对数组的大小做动态定义, int n; scanf("%d",&n); int a[n]; 因为在编译时, 编译器根据已知数组大小分配内存 编译器根据已知数组大小分配内存, 因为在编译时,C编译器根据已知数组大小分配内存,以后 不再动态调整。 不再动态调整。
大学课件C语言数组

第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);
C语言(第七章数组)

对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
第7章 一维数组应用 1

第七章 数组
4、程序设计 、 功能:求小于lim的所有素数并放在 数组中, 的所有素数并放在aa数组中 功能:求小于 的所有素数并放在 数组中,该函数返回 所求出素数的个数。 所求出素数的个数。 # include <stdio.h> # inculde <conio.h> # define MAX 100 int fun (int lim,int aa[MAX]) { int n=0,i,j; /***************program**************/
第七章 数组
一维数组的应用: 一维数组的应用:
1、读程序写结果: 、读程序写结果:
一维数组的应用即对元素的引用有哪些? 一维数组的应用即对元素的引用有哪些? void main () 1、通常与 循环结合使用。 循环结合使用。 、通常与for循环结合使用 {、一维数组的输出。 int x,y,z; 2、一维数组的输出。 int ( ]={-4,0,10,2,7,-1,19,-22,33,0}; a[ 正序、逆序) 正序、逆序) 3、数组元素赋值。 、数组元素赋值。 x=y=z=0; 通过键盘赋值, for通过键盘赋值, (i=0;i<10;i++) 通过程序运行中获取值 { if (a[i]<0) 利用rand()函数获取值,等办法。 ()函数获取值 利用 ()函数获取值,等办法。
第七章 数组
3、程序 、 题目:函数main()首先从键盘接受 个整数,依次放在数组 首先从键盘接受10个整数 题目:函数 首先从键盘接受 个整数, a中;其次,调用 函数在这10个整数中找出第一个奇数 中 其次,调用fun()函数在这 个整数中找出第一个奇数, 函数在这 个整数中找出第一个奇数, 并返回该数的下标值,如果在这10个数中无奇数 则返回-1 个数中无奇数, 并返回该数的下标值,如果在这 个数中无奇数,则返回 第三,如果fun()函数返回值不等于 ,则把找到的数与第 函数返回值不等于-1, ;第三,如果 函数返回值不等于 一个数交换。 一个数交换。 # include <stdio.h> # define N 20 int fun (int a[20]) { int i; for (i=0;i<10;i++) {/*************FOUND***************/ (a[i]%2==1)或(a[i]%2) 或 if (a[i]&1==0) break;} /***************FOUND***************/ i if (i<10) return 1; else return -1; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章数组一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。
)7.1 若有说明 int a[3][4];则a数组元素的非法引用是A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]正确答案:D7.2 在C语言中,引用数组元素时,其数组下标的数据类型允许是A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式正确答案:C7.3 执行下面的程序段后,变量k中的值为int k=3, s[2];s[0]=k; k=s[1]*10;A)不定值B)33 C)30 D)10正确答案:A7.4 定义如下变量和数组:int k;int a[3][3]={9,8,7,6,5,4,3,2,1};则下面语句的输出结果是for(k=0;k<3;k++)printf("%d",a[k][k]);A)7 5 3 B)9 5 1 C)9 6 3 D)7 4 1正确答案:B7.5 下列程序执行后的输出结果是main(){char arr[2][4];strcpy(arr[0],"you");strcpy(arr[1],"me");arr[0][3]=‘&’;printf("%s\n",arr[0]);}A)you&me B)you C)me D)err正确答案:A7.6 设有数组定义: char array[]="China"; 则数组 array所占的空间为A)4个字节B)5个字节C)6个字节D)7个字节正确答案:C7.7 以下不正确的定义语句是A)double x[5]={2.0,4.0,6.0,8.0,10.0};B)int y[5]={0,1,3,5,7,9};C)char c1[]={‘1’,’2’,’3’,’4’,’5’};D)char c2[]={‘\x10’,’\xa’,’\x8’};正确答案:B7.8 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是A)2 B)3 C)4 D)无确定值正确答案:B7.9 对以下说明语句的正确理解是int a[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5]B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确正确答案:B7.10 若有说明:int a[][4]={0,0};则下面不正确的叙述是A)数组a的每个元素都可得到初值0B)二维数组a的第一维大小为1C)当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D)只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值正确答案:D7.11 有以下程序main(){char a[]={‘a’, ‘b’, ‘c’,’d’, ‘e’, ‘f’, ‘g’,’h’,’\0’};int i,j;i=sizeof(a);j=strlen(a);printf("%d,%d\b",i,j);}程序运行后的输出结果是A)9,9 B)8,9 C)1,8 D)9,8正确答案:D7.12 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A)3 B)6 C)10 D)20正确答案:D7.13 以下能对二维数组c进行正确的初始化的语句是A)int c[3][]={{3},{3},{4}};B)int c[][3]={{3},{3},{4}};C)int c[3][2]={{3},{3},{4},{5}};D)int c[][3]={{3},{},{3}};正确答案:B7.14 在C语言中,一维数组的定义方法为类型说明符数组名A)[常量表达式] B)[整型常量]C)[整型变量] D)[整型常量]或[整型表达式]正确答案:A7.15 若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为 (假设a[0][0]位于数组的第一个位置上)A)i*m+j B)j*m+I C)i*m+j-1 D)i*m+j+1正确答案:A7.16 下面程序输出的结果是main(){int i;int a[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf("%d ",a[2-i][i]);}A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1正确答案:B7.17 以下不能对二维数组a进行正确初始化的语句是A)int a[2][3]={0};B)int a[][3]={{1,2},{0}};C)int a[2][3]={{1,2},{3,4},{5,6}};D)int a[][3]={1,2,3,4,5,6};正确答案:C7.18 阅读下面程序,则程序段的功能是#include "stdio.h"main(){int c[]={23,1,56,234,7,0,34},i,j,t;for(i=1;i<7;i++){t=c[i];j=i-1;while(j>=0 && t>c[j]){c[j+1]=c[j];j--;}c[j+1]=t;}for(i=0;i<7;i++)printf("%d ",c[i]);putchar('\n');}A)对数组元素的升序排列B)对数组元素的降序排列C)对数组元素的倒序排列D)对数组元素的随机排列正确答案:B7.19 下列选项中错误的说明语句是A)char a[]={'t','o','y','o','u','\0'};B)char a[]={"toyou\0"};C)char a[]="toyou\0";D)char a[]=‘toyou\0’;正确答案:D7.20 下述对C语言字符数组的描述中错误的是A)字符数组的下标从0开始B)字符数组中的字符串可以进行整体输入/输出C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值D)字符数组可以存放字符串正确答案:C7.21 阅读下列程序,则在执行后,程序的运行结果为#include "stdio.h"#include "string.h"main(){char a[30]="nice to meet you!";strcpy(a+strlen(a)/2,"you");printf("%s\n",a);}A)nice to meet you you B)nice toC)meet you you D)nice to you正确答案:D7.22 现有如下程序段#include "stdio.h"main(){int k[30]={12,324,45,6,768,98,21,34,453,456};int count=0,i=0;while(k[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}printf("%d,%d\n",count,i);}则程序段的输出结果为A)7,8 B)8,8 C)7,10 D)8,10正确答案:D7.23 有如下定义语句:int aa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为A)3,2 B)3,1 C)2,2 D)2,1正确答案:C7.24 现在有如下程序#include "stdio.h"main(){char s[80];int i,j;gets(s);for(i=j=0;s[i]!=‘\0’;i++)if(s[i]!=‘H’______)s[j]=‘\0’;puts(s);}这个程序段的功能是删除输入的字符串中字符’H’,则空线上应当添入的是A)s[j++]=s[i];j++; B)s[j]=s[i++];j++;C)s[j++]=s[i]; D)s[j]=s[i];正确答案:C7.25 以下二维数组c的定义形式是A)int c[3][] B)float c[3,4]C)double c[3][4] D)float c(3)(4)正确答案:C7.26 已知:int c[3][4];则对数组元素引用正确的是A)c[1][4] B)c[1.5][0] C)c[1+0][0] D)以上表达都错误正确答案:C7.27 若有以下语句,则正确的描述是char a[]="toyou";char b[]={‘t’,’o’,’y’,’o’,’u’};A)a数组和b数组的长度相同B)a数组长度小于b数组长度C)a数组长度大于b数组长度D)a数组等价于b数组正确答案:C7.28 已知:char a[15],b[15]={"I love china"};则在程序中能将字符串I love china 赋给数组a的正确语句是A)a="I love china"; B)strcpy(b,a);C)a=b; D)strcpy(a,b);正确答案:D7.29 已知:char a[20]= "abc",b[20]= "defghi";则执行下列语句后的输出结果为printf("%d",strlen(strcpy(a,b)));A)11 B)6 C)5 D)以上答案都不正确正确答案:B7.30 阅读如下程序段,则程序在先后输入love和china后,输出结果是#include "stdio.h"#include "string.h"main(){char a[30],b[30];int k;gets(a);gets(b);k=strcmp(a,b);if(k>0) puts(a);else if(k<0) puts(b);}A)love B)china C)lovechina D)没有输出结果正确答案:A二、填空题(请将每一个空的正确答案写在答题卡相应序号后。