文档库 最新最全的文档下载
当前位置:文档库 › c语言第七章数组课后练习题答案

c语言第七章数组课后练习题答案

c语言第七章数组课后练习题答案

第七章数组

学习目的与要求:

1 、重点掌握一维数组的定义和引用;

、基本掌握二维数组的定义和引用;

、重点掌握字符型数组的定义与引用;

、能正确使用字符串处理函数;

、学会使用数组解决实际问题。

重点:

1 、一维数组的定义与引用;

、二维数组的定义与引用;

、字符数组的定义与引用;

第1讲

知识归纳:

1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ;

数组名后必须用方括弧 [ ] ,用其他括弧均错误;

方括弧中的常量表达式表示数组的元素个数;

方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;

2、一维数组的引用:

数组名[ 下标 ] //下标从0

如 int a[10] ;

//可以引用的数组元素为不是本数组元素;

3、一维数组的初始化:

int a[3] ;

a = { 1,3,} ;

可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ??, float 0.0 ;

如 int a [3]= {1,} ; //a[0] =1 ; a[1]= ; a[2]= 0 ;

在对数组全部元素赋初值时,可以不指定元素个数;

可以在循环控制下,给数组各元素赋值;

如:int a[10] ;

for

a [ i ] = i ;

基础训练

一、选择题

1、在c语言中,引用数组元素时,其数组下标的数据类型允许是。

A)整型常量 B)整型表达式 )整型常量或整型表达式

D)任何类型的表达式

2、要说明一个有10个int元素的数组,应当选择语句。 ) int a[10]; B) int a; C) int a[9] D) int a[11]

3、以下对数组的正确定义是:。

A) float b[5.0] ) float b[5] C) float b D) float b[]

4、对以下说明语句的正确理解是。

int a[10]={6,7,8,9,10};

A)将5个初值依次赋给a[1]至a[5]

C语言复习题

)将5个初值依次赋给a[0]至a[4]

C)将5个初值依次赋给a[6]至a[10]

D)因为数组长度与初值的个数不相同,所以此语句不正确

5、已知:int a[10];则对a数组元素的正确引用是。

A) a[10] B) a[3.5] C) a ) a[10-10]

6、以下能对一维数组a进行正确初始化的语句是。

A) int a[10]=; B)int a[10]={} ) int a[]={0}; D) int a[10]={10*1};

7、以下能对一维数组a进行正确初始化的语句是。

A) A) int a[5]; B)int a[3];

a={0,1,2,3,4}; for

scanf;

C) int a[3]={0,1,2,3};) int a[5];

for

scanf;

二、填空题

1、构成数组的各个元素必须具有相同的类型。C语言中数组的下标必须是整正数、0或整型表达式。如果一维数组的长度为n ,则数组下标的最小值为,最大值为。

2、在C语言中,一维数组的定义方式为:类型说说明符数组名。

3、已知数组b定义为int b[ ]={9,6,3};,则b的各元素的值分别是,

最小下标是

4、在C

5、已知数组T为一有10T中的10个元素的值的语句为:

for

{

int a[3]={3*0};

int i;

for scanf;

for a[0]=a[0]+a[i];

printf;

}

2、下面程序,请指出存在错误的行号

1 1 main

{

int a[3];

int i;

scanf;

for a[0]=a[0]+a[i];

printf;

}

3、下面程序,请指出存在错误的行号

1 1 main

{

int a[3];

int i;

for scanf;

for a[0]=a[0]+a[i]);

printf;

C语言复习题

}

第2讲

知识归纳:

1、二维数组的定义:

类型说明符数组名[ 常量表达式 1 ][常量表达式2] ;

常量表达式1------可以形象理解为行数;

常量表达式2-----可以形象理解为列数;

二维数组中元素存放顺序是:先存放第一行的元素,再存放第二行的元素,依次类推;

2、二维数组的引用:

数组名[ 下标 ] [ 下标 ]

//下标从0开始,可以是整型常量或整型表达式;

注意:数组元素引用时,不要超出数组范围;

如 int a[] [4] ;

//可以引用的数组元素为a[0][0]……a[2][3] , a[3][4]不是本数组元素;

可以在循环控制下,给二维数组各元素赋值;

如:int a[3] [4];

for

for

a [ i ] = i * j;

3、二维数组的初始化:

可以在定义数组后,立刻赋值;如 int a [3][4] = { 1,3,,7,9,11} ;

但下面这样是错误的:

int a[3][4] ;

a = { 1,3,,7,9,11} ;

可以给数组的部分元素赋值默认值为int 0, char, ??, float 0.0 ;

基础练习

一、选择题

1、在C )。)按行存放 B)按列存放

C)由用户自己定义 D)由编译器决定

2、以下对二维数组a的正确说明是。

A)int a[3][] B) float a ) double a[1][4] D) float a

3、已知:int a[3][4];则对数组元素引用正确的是。 A)a[2][4] B)a[1,3] ) a[2][0] D) a

4、已知:int a[3][4]={0};则下面正确的叙述是。

A)只有元素a[0][0]可得到初值0

B)此说明语句是错误的

C)数组a中的每个元素都可得到初值,但其值不一定为0 )数组a中的每个元素均可得到初值0

5、以下正确的语句是。

A)int a[1][4]={1,2,3,4,5}; B) float x[3][]={{1},{2},{3}};

C) long b[2][3]={{1},{1,2},{1,2,3}}; ) double y[][3]={0};

6、以下能对二维数组元素a进行正确初始化的语句是。

A)int a[2][]={{1,0,1},{5,2,3}}; ) int a[][3]={1,2,3},{4,5,6}};

C) int a[2][4]={{1,2,3},{4,5},{6}};

D) int a[][3]={{1,0,1},{},{1,1}};

二、填空题

C语言复习题

下面的程序是求出数组a的两条对角线上的元素之和。

#include “stdio.h”

main

{ int a[3][3]={{1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0 ,i,j;

for

for

if sum1=sum1+a[i][j];

for

for

if

sum2=sum2+a[i][j];

printf;

}

三、编程题

1、在一个二维数组中形成并输出如下矩阵: 1

1

1 1 1

main

{ int a[5][5],i,j;

printf;

for

for

scanf;

for

{ for

printf;

printf;

}

}

2、有一个3*4

main

{ int a[3][4],i,j,max;

for

for

scanf;

max=a[0][0];

for

for

if max=a[i][j];

printf;

}

第3讲

知识归纳:

1、字符数组的定义与引用:

类型说明符数组名[ 常量表达式 ] ;

与一维数组、二维数组定义、引用相同,只是类型说明符固定为:char

2、字符数组的初始化:

逐字符赋值

如 char c1 [10] = { ?W?,?e?,?l?,?c?,?o?,?m?,?e?} ;

但下面这样是错误的:

char c1 [10] ;

C语言复习题

c1 = { ?W?,?e?,?l?,?c?,?o?,?m?,?e?} ;

字符串赋值和字符串结束标志

如char c1[10 ] = “ Welcome ” ;

但下面这样是错误的:

char c1 [10] ;

c1 = “ Welcome ” ;

注意:系统会自动在字符串末尾加一个结束标志?\0? , 所以,定义字符数组时需要在字符个数基础上,多定义一个字节存储空间,存放结束标子;

3、字符数组的输入输出:

逐个字符输入输出。用格式符%c 输入或输出一个字符;往往与循环结合使用;如: char c1[10] ;

for scanf ;

…….

for printf;

将整个字符串一次输入输出,用格式符%s ;

如: char c1[10] ;

scanf ; //数组名代表数组的首地址

……

printf;

基础练习

一、选择题

1、要使字符数组str存放一个字符串”ABCDEFGH”,

正确的定义语句是。

A) char str[8]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,

’H’};

B) char str[8]=“ABCDEFGH”;

C) char str[ ]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’} char str[ ]=“ABCDEFGH”;

2、下面是对数组s。

A)C) char s[5]=““;、对两个数组a和bchar a[]=“ABCDEF”;

char b[]={‘A’,’B’,’C’,’D’,’E’,’F’};

则以下叙述正确的是。

A) a与b数组完全相同 B) a与b长度相同

C) a和b中都存放字符串 ) a数组比b数组长度长

4、下面程序的运行结果是。

char c[5]={‘a’,’b’,’\0’,’c’,’\0’};

printf;

A) ‘a’’b’ ) ab C) ab c D) 以上三个答案均有错误

二、填空题

1、字符数组是用来存放的数组。字符数组中一个元素

存放个字符。

2、在C语言中存放字符’A’需要占用个字节,存放字符串”A”需要占用个字节。

3、以下语句的输出结果是。

printf;

三、程序填空

1、下列程序最多从键盘上输入99个字符,遇到’\n’后则退出,遇到空格则换成字符’ # ‘,对其他字符依次原样送入数组c中。

#include “stdio.h”

main

{ int i;

第七章数组

一、选择题:

1- A、A、D、C、C -10 B、D、D、B、A 11-15D、D、

D、D、A 16-20 A、C、C、D、B1-C、D、C、C、D

二、填空题:

1、标识符、常量、符号常量、变量、m-1、n-1、字符数组5、数组名

6、s[j++]=s[i]、C1!=C2&&C1= =′′

三、阅读程序,写出结果

1、 1,2,3,、2,3,、 f 、 -0

5、1 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 1

四、编程题:

1、#include

#include

#define N 10

void main

{

int a[N],i,max,min,m,n,t; clrscr;

for

scanf;

for

printf;

printf;

max=min=a[0];

m=n=0;

for

if

{max=a[i];

}

else if

{min=a[i];

n=i;

}

t=a[m];

a[m]=a[n];

a[n]=t;

for

printf;

}

2、#include

#include

#define M 10

#define N

void main

{ float score[M][N],sum,i,j; clrscr;

for

for

scanf;

{sum=0;

for

sum+=score[i][j];

score[i][N-1]=sum/;

}

printf;

printf;

for

{for

printf;

printf;

}

}

3、

#include

#include

#define M

#define N

void main

{int a[M][N],i,j,sum=0; for

scanf;

for

{ for

printf;

printf;

}

for

for

if sum+=a[i][j]; for

for

a[i][j]--;

for

for

a[i][j]++;

printf;

for

{ for

printf;

printf;

}

printf;

}

4、#include

#include

#define M0

void main

{int i,n=0;

long f[M]={1,1};

clrscr;

for

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

for

{printf;

n++;

if printf;

}

}

5、#include

#define M 10

void main

{

static int

a[M]={122,107,96,87,80,56,40,10,8,-20}; int x,low,mid,high,found;

clrscr;

low=0;

high=M-1;

found=0;

printf;

scanf;

while

{

mid=/2;

if

{

found=1;

break;

}

else if

low=mid+1;

else

high=mid-1;

}

if

printf;

else

printf;

}

6、#include

#include

#include

void main

{char s[80];

int i;

clrscr;

gets;

for/2;i++)

if-1-i]) break;

if/2) printf; else printf;

}

7、#include

#include

#define M

#define N

void main

{int a[M][N],i,j,k,row,colum,flag=0;

c语言 第7章 数组习题

第7章数组习题 A卷 1. 单项选择题 (1) int a[4]={5,3,8,9};其中a[3]的值为( )。D A. 5 B. 3 C. 8 D. 9 (2) 以下4 个字符串函数中,( )所在的头文件与其他3 个不同。A A. gets B. strcpy C. strlen D. strcmp (3) 以下4 个数组定义中,( )是错误的。D A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,( )形式是错误。B A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123"; (5) 在数组中,数组名表示( )。A A. 数组第1 个元素的首地址 B.数组第2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后1 个元素的首地址 (6) 若有以下数组说明,则数值最小的和最大的元素下标分别是( )。B int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12 (7) 若有以下说明,则数值为4 的表达式是( )。 D int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=?a?, d, g ; A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] (8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( )。A A. 6 B. 7 C. 11 D. 12 (9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( )。D A. 6 B. 7 C. 11 D. 12 (10) 合法的数组定义是( )。A A. char 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} (11) 合法的数组定义是( )。D A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4};

C语言数组练习及答案

第四部分数组 4.1 选择题 1. 以下关于数组的描述正确的是(c )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 页脚内容1

4. 以下对一维数组m进行正确初始化的是(c )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是(c )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是(d ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。 #include main() { int a[10],i=0; while(i<10) scanf("%d",________ ); 页脚内容2

C语言 第七章 数组期末测试习题与答案

C语言第七章数组期末测试习题与答案 1、以下对一维整型数组a的正确说明是 ( )。 A.#define SIZE 10 int a[SIZE]; B.int a(10); C.int n=10,a[n]; D.int n; scanf(“%d”,&n); int a[n]; 参考答案:A 2、以下能对一维数组a进行正确初始化的语句是 ( )。 A.int a[10]={ }; B.int a[10]={10*1}; C.int a[10]=(0,0,0,0,0); D.int a[ ]={0}; 参考答案:B 3、不是给数组的第一个元素赋值的语句是 ( )。 A.a[1]=1; B.int a[2]={1,0}; C.int a[2];scanf (“%d”,&a[0]); D.int a[2]={1}; 参考答案:A 4、下面程序的运行结果是 ( )。 main() {int a[6],i; for(i=1;i<6;i++) { a[i]=6*(i-2+4*(i>3))%5; printf("%2d",a[i]); } }

A.-1 0 4 0 3 B.-1 0 1 4 3 C.-1 0 1 4 2 D.-1 0 1 1 2 参考答案:D 5、下列定义正确的是 ( )。 A.int b[3]={2,5} B.int 4e[4] C. static int a[2]={1,2,3,4,5} D.int a(10) 参考答案:A 6、设有char str[10],下列语句正确的是 ( )。 A.printf("%s",str); B.scanf("%s",&str); C.printf("%c",str); D.printf("%s",str[0]); 参考答案:B 7、下列说法正确的是 ( )。 A.在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数 B.在C语言中,数组元素的数据类型可以不一致 C.在C语言中,数组元素的个数可以不确定,允许随机变动 D.在C语言中,可以使用动态内存分配技术定义元素个数可变的数组 参考答案:D 8、假设array是一个有10个元素的整型数组,则下列写法中正确的是 A.array[-1]=0;

第七章C语言谭浩强答案

7.1用筛法求100之内的素数。 解:所谓“筛法”指的是“Eratosthenes筛法”。Eratosthenes是古希腊的著名数学家。他采用的方法是:在一张纸上写下1~1000之间的全部整数,然后逐个判断它们是否素数,找出一个非素数就把它挖掉,最后剩下的就是素数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 … 具体做法如下: 先将1挖掉(因为1不是素数)。 用2去除它后面的各个数,把能被2整除的数(如4,6,8…)挖掉,即把2的倍数挖掉。用3去除它后面各数,把3的倍数挖掉。 分别用4,5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如在上表中1~50范围内的素数,要一直进行到除数为47为止。事实 上,这一过程可以简化。如果需要找1~n 数)即可。例如对1~50,只需进行到将7 上面的算法可表示为: 挖去1; 用刚才被挖去的数的下一个数p去除p后面的各数,把p的倍数挖掉; 检查p n=1000,则检查p<31否),如果是,则返回(2)继续执行,否则就结束; 纸上剩下的就是素数。 解题的基本思路有了,但要变成计算机的操作,还要作进一步的分析。如怎样判断一个数是否已被“挖掉”,怎样找出某一个数p的倍数,怎样打印出未被挖掉的数。可以设一个数组a,a[1]到a[100]的值分别是1,2,3,…100。然后用上述方法将非素数“挖去”。如果一个数被认为是非素数,就将它的值变为零,最后将不为零的数组元素输出,就是所求的素数表。程序如下: #include main ( ) { int i,j,n,a[101]; for (i=1;i<=100;i++) a[i] =i; for (i=2;i

c语言第七章数组课后练习题答案

c语言第七章数组课后练习题答案 第七章数组 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 、基本掌握二维数组的定义和引用; 、重点掌握字符型数组的定义与引用; 、能正确使用字符串处理函数; 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 、二维数组的定义与引用; 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ; 数组名后必须用方括弧 [ ] ,用其他括弧均错误; 方括弧中的常量表达式表示数组的元素个数; 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] //下标从0

如 int a[10] ; //可以引用的数组元素为不是本数组元素; 3、一维数组的初始化: int a[3] ; a = { 1,3,} ; 可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ??, float 0.0 ; 如 int a [3]= {1,} ; //a[0] =1 ; a[1]= ; a[2]= 0 ; 在对数组全部元素赋初值时,可以不指定元素个数; 可以在循环控制下,给数组各元素赋值; 如:int a[10] ; for a [ i ] = i ; 基础训练 一、选择题 1、在c语言中,引用数组元素时,其数组下标的数据类型允许是。 A)整型常量 B)整型表达式 )整型常量或整型表达式 D)任何类型的表达式 2、要说明一个有10个int元素的数组,应当选择语句。 ) int a[10]; B) int a; C) int a[9] D) int a[11] 3、以下对数组的正确定义是:。

C语言第7章 数组

第7章数组 17. 以下能正确定义二维数组的是____。 A、int a[][3]; B、int a[][3]={2*3}; C、int a[][3]={}; D、int a[2][3]={{1},{2},{3,4}}; 答案:B 难易程度:初级 章节:7.3.2 二维数组的定义 21. s1和s2已正确定义并分别指向两个字符串。若要求:当s1 所指串大于 s2所指串时,执行语句S; 则以下选项中正确的是____。 A、if(s1>s2)S; B、if(strcmp(s1,s2))S); C、if(strcmp(s2,s1)>0)S; D、if(strcmp(s1,s2)>0)S; 答案:D 难易程度:初级 章节:7.4 字符数组 60. 有以下程序 main( ) { char a[]="abcdefg",b[10]="abcdefg"; printf("%d %d\n",sizeof(a),sizeof(b)); } 执行后输出结果是____。 A、7 7 B、8 8 C、8 10 D、10 10 答案:C 难易程度:初级 章节:7.4字符数组 64. 有以下定义 #include char a[10],*b=a;

不能给a数组输入字符串的语句是____。 A、gets(a) B、gets(a[0]) C、gets(&a[0]); D、gets(b); 答案:B 难易程度:初级 章节:7.5 字符数组 73. 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是____。 A、char s[10]="abcdefg"; B、char t[]="abcdefg",*s=t; C、char s[10];s="abcdefg"; D、char s[10];strcpy(s,"abcdefg"); 答案:C 难易程度:初级 章节:7.5 字符数组 101. 以下不能正确定义二维数组的选项是____。 A、int a[2][2]={{1},{2}}; B、int a[][2]={1,2,3,4}; C、int a[2][2]={{1},2,3}; D、int a[2][]={{1,2},{3,4}}; 答案:D 难易程度:初级 章节:7.3二维数组的定义及初始化 103. 以下能正确定义一维数组的选项是____。 A、int num[]; B、#define N 100 int num[N]; C、int num[0..100]; D、int N=100; int num[N]; 答案:B 难易程度:初级 章节:7.1.1 一维数组的定义 104. 下列选项中正确的语句组是____。

C语言习题答案-7

【习题7】 一、选择题 1. B 提供了一种直接操作内存地址的变量。 A.结构B.指针C.数组D.变量 2.下面声明一个指向整型变量x的指针p的语句,正确的是 C 。 A.int *p,x; B.int *p,x; C.int *p,x; D.int *p,x; p=x; p=*x; p=&x; *p=&x; 3.若定义:int a=511, *b=&a;,则printf("%d\n",*b);的输出结果为 D 。 A.无确定值B.a的地址C.512 D.511 4.若有以下程序段: char arr[]="abcde",*p=arr; for(;p

c语言课后习题答案

第一章概述 习题1.5 编写一个C语言程序,要求输出以下信息: *************** How are you ! *************** #include int main() { printf(“***************\n”); printf(“How are you !\n”); printf(“***************\n”); return 0; } 习题1.6 编写一个C语言程序,从键盘输入x,y,z三个变量,并输出其中的最小值。#include int main() { /* 定义整型变量*/ int x,y,z,min; /* 输入*/ printf(“请输入x,y,x:”); scanf(“%d,%d,%d”,&x,&y,&z); /* 判断最小值*/ min=x; if(y

return 0; } 第三章算法和基本程序设计 习题3.4 编写程序,输入三角形的3个边长a,b,c,求三角形的面积area。其中,S=(a+b+c)/2。 #include #include int main() { float a,b,c,area,s; printf("请输入a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); s =(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("面积:%f\n",area); return 0; } 习题3.5 编写程序,输入四个数,并求出它们的平均值。 #include int main() { int a,b,c,d; float average; printf(“请输入a,b,c,d :”); scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); average =(a+b+c+d)/4.0;

C语言数组练习及答案

第四部分数组 4.1选择题 1.以下关于数组的描述正确的是(c} A.数组的大小是固定的,但可以有不同的类型的数组元素 B.数组的大小是可变的,但所有数组元素的类型必须相同 C.数组的大小是固定的,所有数组元素的类型必须相同 D.数组的大小是可变的,可以有不同的类型的数组元素 2.以下对一维整型数组a的正确说明是(d)。 A.inta(10); C.intn; scanf("%d",&n); inta[n]; B.intn=10,a[n]; D.#defineSIZE10inta[SIZE]; 3.在C语言中,引用数组元素时,其数组下标的数据类型允许是(c)。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 页脚内容1

4.以下对一维数组m进行正确初始化的是(c)。 A.intm[10]=(0,0,0,0); B.intm[10]={}; C.intm[]={0}; D.intm[10]={10*2}; 5.若有定义:intbb[8];。则以下表达式中不能代表数组元bb[1的地址的是(c> A.&bb[0]+1 B.&bb[1] C.&bb[0]++ D.bb+1 6.假定int类型变量占用两个字节,具有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是(d) A.3 B.6 C.10 D.20 7.若有以下说明: inta[12]={1,2,3,4,5,6,7,8,9,10,11,12}; charc='a',d,g; 则数值为4的表达式是(d) A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c] 8.以下程序段给数组所有的元素输入数据,请选择正确答案填入(a)。 #includemain() { inta[10],i=0; while(i<10)scanf("%d",); 页脚内容2 ) A.a+(i++) B.&a[i+1] C.a+i D.&a[++i] 9.执行下面的程序段后,变量k中的值为(a)。 intk=3,s[2];

c语言数组练习题及答案

c语言数组练习题及答案 第一题:在数组a中,存放有n个学生的成绩.试编一函数:将低于平均分的学生人数m由函数值返回,将低于平均分的分数由数组b带回. int fun(int a[],int n,int b[]) { int i,m=0,aver=0; for(i=0;i

data=m+1; n=0; while(n

C语言(数组与函数)习题与答案

1、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是()。 A.42 B.56 C.60 D.45 正确答案:D 2、以下叙述中错误的是()。 A.数组名代表的是数组所占存储区的首地址,其值不可改变 B.只有double类型数组,不可以直接用数组名对数组进行整体输入或输出 C.可以通过赋初值的方式确定数组元素的个数 D.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 正确答案:B 3、以下能正确定义一维数组的选项是()。 A.int a[5]={0,1,2,3,4,5}; B.int a[5]="0123"; C.char a[]={0,1,2,3,4,5}; D.char a={'A','B','C'}; 正确答案:C

解析: D、不加[ ],a只能被看作是一个字符变量,只能接收一个字符 4、有以下程序 main() { char p[ ]={‘a’,’b’,’c’},q[ ] =”abc”; printf("%d %d\n",sizeof(p),sizeof(q)); }; 程序运行后的输出结果是()。 A.4 4 B.3 3 C.3 4 D.4 3 正确答案:C 解析: C、p[] 只能认作字符数组,不会有字符串的结束标志,所以只有3个字符q[] 是字符串,末尾还会有字符串的结束标志,所以有4个字符 5、以下程序运行后的输出结果是()。 main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ", a[i][j]); printf("\n"); } } A.1 2 3 0 5 6 0 0 9

C语言第七章习题答案

7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 hcf(u,v) int u,v; { int a,b,t,r; if(u>v) { t=u;u=v;v=t; } a=u;b=v; while((r=b%a)!=0) { b=a;a=r; } return(a); } lcd(u,v,h) int u,v,h; { int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%dn",h); l=lcd(u,v,h); printf("L.C.d=%dn",l); return(u*v/h); } #include

void main() { int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%dn",h); l=lcd(u,v,h); printf("L.C.D=%dn",l); } 7.2 求方程根 float x1,x2,disc,p,q; greater_than_zero(a,b) float a,b; { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); } equal_to_zero(a,b) float a,b; { x1=x2=(-b)/(2*a);} smaller_than_zero(a,b) float a,b; { p=-b/(2*a);

q=sqrt(disc)/(2*a); } main() { float a,b,c; printf("n输入方程的系数a,b,c:n"); scanf("%f,%f,%f",&a,&b,&c); printf("n 方程是:% 5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c); disc=b*b-4*a*c; printf("方程的解是:n"); if(disc>0) { great_than_zero(a,b); printf("X1=%5.2ftX2=%5.2fnn",x1,x2); } else if(disc==0) { zero(a,b); printf("X1=%5.2ftX2=%5.2fnn",x1,x2); } else { small_than_zero(a,b,c); printf("X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin",p,q,p,q);

C语言第七章数组期末测试习题与答案

C 语言第七章数组期末测试习题与答案 1、以下对一维整型数组a 的正确说明是( ) 。 A.#define SIZE 10 int a[SIZE]; B.int a(10); C.int n=10,a[n]; D.int n; scanf( “%d” ,&n); int a[n]; 参考答案:A 2、以下能对一维数组a 进行正确初始化的语句是( ) A.int a[10]={ }; B.int a[10]={10*1}; C.int a[10]=(0,0,0,0,0); D.int a[ ]={0}; 参考答案:B 3、不是给数组的第一个元素赋值的语句是( ) 。 A.a[1]=1; B.int a[2]={1,0}; C.int a[2];scanf ( “ %d” ,&a[0]); D.int a[2]={1}; 参考答案:A 4、下面程序的运行结果是( ) 。 main() {int a[6],i; for(i=1;i<6;i++) { a[i]=6*(i-2+4*(i>3))%5; printf("%2d",a[i]); } A.-1 0 4 0 3 B.-1 0 1 4 3 C.-1 0 1 4 2 D.-1 0 1 1 2 参考答案:D 5、下列定义正确的是( ) 。 }

A.int b[3]={2,5} B.int 4e[4] C.static int a[2]={1,2,3,4,5} D.int a(10) 参考答案:A 6 、设有char str[10] ,下列语句正确的是( ) 。 A.printf("%s",str); B.scanf("%s",&str); C.printf("%c",str); D.printf("%s",str[0]); 参考答案:B 7、下列说法正确的是( ) 。 A.在C 语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数 B.在C 语言中,数组元素的数据类型可以不一致 C.在C 语言中,数组元素的个数可以不确定,允许随机变动 D.在C 语言中,可以使用动态内存分配技术定义元素个数可变的数组参 考答案:D 8、假设array 是一个有10 个元素的整型数组,则下列写法中正确的是 A.array[-1]=0;

C语言第七章习题带答案

选择题 1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。 A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:int a, x;,则正确的赋值语句是( C )。 A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good"; 3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。 A.scanf("%d", &a); B.scanf("%d", p); C.printf("%d", a); D.scanf("%d", *p); 4.已知:char *p, *q;,选择正确的语句( C )。 A.p*=3; B.p/=q; C.p+=3; D.p+=q; 5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。 A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;

一、选择题 1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。 A.M个指向整型变量的指针 B.指向M个整型变量的函数指针 C.一个指向具有M列的二维数组的一行的指针 D.具有M个指针元素的一维数组的指针 2.已知:double *p[6];,它的含义是( C )。 A.p是指向double型变量的指针B.p是double型数组 C.p是指针数组D.p是数组指针 3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。 A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0]; 4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。 A.s[i+10] B.*(s+i) C.*(i+s) D.*((s++)+i) 5.已知:char b[5], *p=b;,则正确的赋值语句是( C )。 A.b="abcd"; B.*b="abcd"; C.p="abcd"; D.*p="abcd"; 6.下列对字符串的定义中,错误的是( A )。 A.char str[7]="FORTRAN"; B.char str[]="FORTRAN"; C.char *str="FORTRAN"; D.char str[]={'F', 'O', 'R', 'T', 'R','A','N',0}; 7.已知:char s[20]="programming", *ps=s;,则不能引用字母o的表达式是( A )。 A.ps+2 B.s[2] C.ps[2] D.ps+=2,*ps 8.已知:char **s;,正确的语句是( B )。 A.s="computer"; B.*s="computer"; C.**s="computer"; D.*s='A'; 9.已知:char c[8]="beijing", *s=c; int i;,则下面的输出语句中,错误的是( B )。 A.printf("%s\n", s); B.printf("%s\n", *s); C.for (i=0; i<7; i++) D.for(i=0; i<7; i++) printf("%c", c[i]); printf("%c", s[i]); 10.已知:char *aa[2]={"abcd", "ABCD"};,则以下说法正确的是( D )。 A.aa数组元素的值分别是"abcd"序列和"ABCD"序列 B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 11.已知:int a[3][4], *p=&a[0][0]; p+=6;,那么*p和( D )的值相同。 A.*(a+6) B.*(&a[0]+6) C.*a[1]+2 D.a[1][2] 12.已知:int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p=a;,则值为3的表达式是( A )。 A.p+=2, *(p++) B.p+=2, *++p C.p+=3, *p++ D.*(&a[0][0]+6) 13.已知:int **p;,则变量p是( B )。 A.指向int的指针B.指向指针的指针 C.int型变量D.以上三种说法均是错误的 14.已知:int a[]={1, 2, 3, 4}, y, *p=&a[1];,则执行语句y=(*--p)++;之后,变量y的值为( A )。

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 步后的排列 411 142 324 233 答案】l 、 2 、4、 3 4用"选择排序法”对n个数据排序,需要进行n—1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要 排序,则利用"冒泡排序法"执行第2步后的结果是 【分析】开始排序前的排列为:4132 执行第 1 步后的排列为:1432 执行第 2 步后的排列为:1234 【答案】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语言程序设计(第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,index,n; int a[10];

最新C语言---数-组练习题

最新C语言---数-组练习题 第七章数组 1.在C语言中引用数组元素时,下面关于数组下表数据类型的说法错误的是()A)整型常量B)整型表达式 C) 整型常量或整型表达式D) 任何类型的表达式 2.以下能正确定义一维数组a的选项是() A)int a=[5]={0,1,2,3,4,5};B) char a[ ]={0,1,2,3,4,5}; C)char a={ 'A','B','C',};D) int a[5]= "0,1,2,3" 3.以下能正确定义一维数组a的选项是() A) int a(10);B) int n=10, a[n]; C) int n;D) #define SIZE 10 scanf("%d",&n);int a[SIZE]; int a[n]; 4.若有定义:int a[10];则正确引用数组a元素的是() A) a[10] B) a[3] C) a[5] D) a[-10] 5.以下不正确的数组定义是() 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'}; 6.以下叙述中错误的是() A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D)可以通过赋初值的方式确定数组元素的个数 7.以下正确的二维数组定义是() A)int a[ ] [ ]={1,2,3,4,5,6};B)int a[2][ ]={1,2,3,4,5,6};

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