文档库 最新最全的文档下载
当前位置:文档库 › C语言数组和指针练习题

C语言数组和指针练习题

C语言数组和指针练习题
C语言数组和指针练习题

若当堂没做完,下周四之前上交也可。

用户名和密码:stu

C语言程序设计练习题——数组

一、选择题

77、以下对一维数组a的正确说明是_d ___

A、char a(10);

B、int a[ ];

C、int k=5,a[k];

D、char a[ ]={'a' , 'b' , 'c'};

78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___

A、a[0][3]

B、a[0][4]

C、a[2][2]

D、a[2][2+1]

79、以下能对二维数组y进行初始化的语句是_b__

A、static int y[2][ ]={{1,0,1}, {5,2,3}};

B、static int y[ ][3]={{1,2,3}, {4,5,6}};

C、static int y[2][4]={{1,2,3}, {4,5} , {6}};

D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};

80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___

A、数组y的每个元素都可得初值0

B、二维数组y的行数为1

C、该说明等价于int y[ ][4]={0};

D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0

81、以下各组选项中,均能正确定义二维实型数组s的选项是_c___

A、float s[3][4];

B、float s(3,4);

float s[ ][4]; float s[ ][ ]={{0};{0}};

float s[3][ ]={{1},{0}}; float s[3][4];

C、 float s[3][4];

D、float s[3][4];

static float s[ ][4]={{0},{0}}; float s[3][ ];

auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];

82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__

A、3

B、2

C、无确定值

D、1

83、若二维数组y有m列,则在y[i][j]前的元素个数为_B___

A、j*m+i

B、i*m+j

C、i*m+j-1

D、i*m+j+1

84、下面程序中有错误的行是__D__

1、 main( )

2、 {

3、 int x[3]={1};

4、 int k;

5、 scanf("%d", &x);

6、 for (k=1; k<3; k++)

7、 x[0]=x[0]+x[i];

8、 printf("x[0]=%d\n", x[0]);

9、 }

A、3

B、6

C、7

D、5

85、若有以下语句,则正确的描述是__b__

char x[ ]="12345";

char y[ ]={'1', '2', '3', '4', '5'};

A、x数组与y数组的长度相同

B、x数组长度大于y数组长度

C、x数组长度小于y数组长度

D、x数组等价于y数组

86、以下不正确的数组定义语句是__b__

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 ch1[ ]={'1', '2', '3', '4', '5'};

D、char ch2[ ]={'\x10', '\xa', '\x8'};

87、以下正确的数组定义语句是_c___

A、char a[5]={'1', '2', '3', '4', '5', '\0'};

B、int b[2][ ]={{1}, {2}};

C、float c[ ][3]={1, 2, 3, 4, 5};

D、char d[5]="CHINA";

88、判断字符串str1是否大于字符串str2,应当使用__d__

A、if (str1>str2)

B、if (strcmp(str1, str2))

C、if (strcmp(str2, str1)>0)

D、if (strcmp(str1, str2)>0)

89、下面程序段的运行结果是_c___

char x[5]={'a', 'b', '\0', 'c', '\0'};

printf("%s", x);

A、'a''b'

B、ab

C、ab└┘c

D、abc

90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___

A、gets(a, b);

B、scanf("%s%s", &a, &b);

C、getchar(a); getchar(b);

D、gets(a); gets(b);

91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_

A、puts(s1, s2)

B、printf("%s, %s", s1, s2);

C、putchar(s1, s2);

D、puts(s1), puts(s2);

92、以下程序段的运行结果是_c___

char a[7]="abcdef";

char b[4]="ABC";

strcpy(a, b);

printf("%c", a[5]);

A、└┘

B、\0

C、e

D、f

93、以下描述正确的是_d___

A、两个字符串所包含的字符个数相同时,才能比较字符串

B、字符个数多的字符串比字符个数少的字符串大

C、字符串"STOP└┘"与"STOP"相等

D、字符串"That"小于字符串"The"

94、以下对字符数组的描述中错误的是_c___

A、字符数组中可以存放字符串

B、字符数组中的字符串可以整体输入、输出

C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

D、不可以用关系运算符对字符数组中的字符串进行比较

95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___

A、s1={"books"};

B、strcpy(s1, s2);

C、s1=s2;

D、strcpy(s2, s1);

96、以下printf语句的输出结果是__A__

printf("%d\n", strlen("school");

A、7

B、6

C、存在语法错误

D、不定值

97、下面程序的功能是将字符串s中所有的字符c删除。请选择填空。____

#include

main( )

{ char s[80];

int i, j ;

gets(s);

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

if (s[i]!='c') _a ___

s[j]='\0';

puts(s);

}

A 、s[j++]=s[i]

B 、s[++j]=s[i]

C 、s[j]=s[i];

D 、s[j]=s[i];

98、当运行以下程序时候,从键盘输入:

ab<回车>

c<回车>

def<回车>

则下面程序的运行结果是_d _

#include ```

#define N 6

main( )

{ char ch1[N];

int k=0;

for ( ; k

for (k=0; k

}

99、下面程序的运行结果是_b ___

#include

#include

main( )

{ char x[80]="AB", y[80]="LMNP";

(98题答案:)

int n=0;

strcat(x, y);

while (x[n++]!='\0')

y[n]=x[n];

puts(y);

}

A 、L

B B 、ABLMNP

C 、AB

D 、LBLMNP

二、填空题

50、在C 语言中,二维数组元素在内存中的存放顺序是_按行储存_______。

51、若有定义:double x[3][5];,则x 数组中行下标的下限为_2___,列下标的上限为__4__。 A 、abcdef B 、 a C 、 b D 、

ab

b c c

c d d

d

e

f

52、若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为_i*m+j+1_______。(设a[0][0]是数组的第一个元素)

53、若有定义:int a[3][4]={{1, 2}, {0}, {4, 6, 8, 10}};,则初始化后,a[1][2]得到的初值是__0__,a[2][1]得到的初值是__6__。

54、若有说明:char s[20];,如果想从键盘上把字符串:This is a book. 输入到数组s中,应当调用的函数是_gets()_____,函数调用语句的形式是__gets(s)_____。

55、请写出下面各printf语句的结果。

①、printf("%s\n", strcat("school", "student"));

__schoolstudent__________

②、printf("%d\n", strlen("CHINA")+strlen("C"));

__6__

③、printf("%d\n", strcmp("The", "The"));

__0__

56、根据下面说明和要求,完成对应的填空。

①、若有:char str1[10],str2[ ]={"student"};能把str2中的字符串赋给str1的串函数调用语句是____strncpy(str1,str2)___________

②、若有:char str1[20]={"a good"}, str2[ ]=

{"student"};能把str2中的字符串接到str1中的字符串后面的串函数调用语句是_strncat__

57、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。

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");

}

}

58、下面程序可求出矩阵a的两条对角线上的元素之和。请填空。

main( )

{ static int a[3][3]={1, 3, 6, 7, 9, 11, 14, 15, 17};

int sum1=0, sum2=0, i, j;

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

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

if (i= =j)

sum1+=a[i][j];

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

for (_j=3___;_j>=0___; j--)

if (i+j= =2)

sum2+=a[i][j];

printf("sum1=%d, sum2=%d\n", sum1, sum2);

}

59、下面程序的功能是将二维数组a 中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一个二维数组b 中,并按矩阵形式输出a 和b 。请填空。例如:

321654

=a 213546=b

main( )

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

int b[2][3], i, j ;

printf("array a:\n");

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

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

{ printf("%5d", a[i][j]);

If(j<=1)b[i][j+1]=a[i][j]____________;

}

printf("\n");

}

for (i=0____; i<=2____; i++)

b[i][0]=a[i][2];

printf("array b:\n");

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

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

printf("%5d", b[i][j]);

_if(j=3)printf(“\n”)_______;

}

}

60、下面程序的功能是检查一个二维数组是否对称(即对所有的a[i][j]=a[j][i])。请填空。

main( )

{ static int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};

int i, j, found=0;

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

for (i=0____; i<4; i++)

if (a[i][j]!=a[j][i])

{ found=1______;

break ;

}

if (found)

printf("No");

else

printf("Yes");

}

61、下面程序段将输出computer ,请填空。

char c[ ]="It's a computer";

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

{ if(i<=8)continue ______;

printf("%c", c[j]);

}

62、以下程序的功能是对从键盘输入的两个字符串进行比较,并输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为these和there,则输出是1。请填空。

#include

main( )

{ char s1[100], s2[100];

int x, y;

printf("\nInput string1:\n");

gets(s1);

printf("\nInput string2:\n");

gets(s2);

x=0;

while ((s1[x]= =s2[x])&&(s1[x]!=‘\n’ ____))

x++;

y=s1[x]-s2[x]________;

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

}

63、以下程序的输出结果是_1110___

main( )

{ int x[6], a=0, b, c=14;

do

{ x[a]=c%2;

a++;

c=c/2;

}while(c>=1);

for (b=a-1; b>=0; b--)

printf("%d", x[b]);

printf("\n");

}

64、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。

#include

#include

main( )

{ char c='a', t[50];

int n, k, j;

gets(t);

n=_strlen(t)_____;

for (k=0; k

if (_t[k]=_____)

{ j=k; break; }

else j=-1;

printf("%d", j);

}

65、下面程序的功能是把以下给定的字符按其矩阵格式读入数组str1中,并输出行列号之和是3的数组元素。请填空。

main( )

{ char str1[4][3]={'A', 'b', 'C', 'd', 'E', 'f', 'G', 'h', 'I', 'j', 'K', 'l'};

int x, y, z;

for (x=0; x<4; x++)

for (y=0;_y<3___; y++)

{ z=x+y;

if (___z==3___)

printf("%c\n", str[x][y]);

}

}

66、下面程序的功能是输出两个字符串中较短串的长度。请填空。

#include

main( )

{ char str1[20], str2[20];

int i, k, num;

gets(str1); gets(str2);

i=strlen(str1); k=strlen(str2);

num=_i>=k_____?_k___: _i___;

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

}

67、下面程序的功能是在三个字符串中找出最小的串。

#include

#include

main( )

{ char s[20], str[3][20];

int i;

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

gets(str[i]);

strcpy(s, __strcmp(str1,str0)<0?str1:str0_____________);

if (strcmp(str[2], s)<0)

strcpy(s, str[2]);

printf("%s\n", _s___);

}

68、当运行以下程序时,从键盘输入:

GOOD<回车>

TEACH<回车>

SET<回车>

ROOM<回车>

则程序的运行结果是_SETCHter_____

#include

#include

main( )

{ int i;

char str[10], temp[10]="Computer";

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

{ gets(str);

if (strcmp(temp, str)<0)

strcpy(temp, str);

}

puts(temp);

}

C语言程序设计练习题——指针

一、选择题

133、设有定义:int a=1, *p=&a; float b=2.0; char c='A';,以下不合法的运算是__a__

A、p++;

B、a--;

C、b++;

D、c--;

134、以下程序执行后a的值为____

main( )

{ int a, m=2, k=1, *p=&k;

a=p==&m;

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

}

A、-1

B、0

C、1

D、2

135、以下对指针变量的操作中,不正确的是_d__

A、int p, *q; q=&p;

B、int *p, *q; q=p=NULL;

C、int a=5, *p; *p=a;

D、int a=5, *p, *q=&a; *p=*q;

136、以下对指针变量的操作中,不正确的是_d__

A、int a, *p, *q; p=q=&a;

B、int a=6, *p, *q=&a; p=q;

C、int a=b=6, *p; p=&a; b=*p;

D、int a, *p, *q; q=&a; p=*q;

137、设有语句:int k=1, *p1=&k, *p2=&k;,以下不能正确执行的赋值语句是_a___

A、p1=k

B、p1=p2

C、*p1=*p2

D、k=*p1+*p2

138、若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是_c___

A、a, p, &*a

B、*&a, &a, *p

C、&a, p, &*p

D、*&p, *p, &a

139、设已有说明语句:int i=5, *q;,若要建立如图所示的存储结构,以下正确的赋值语句是____(无图)

A、q=i;

B、*q=i;

C、q=&i;

D、*q=&i;

140、若有说明语句:char c='9', *sp1, *sp2;,以下均正确的一组赋值语句是_a___

A、sp1=&c; sp2=sp1;

B、sp1=&c; sp2=&sp1;

C、sp1=&c; sp2=*sp1;

D、sp1=&c; *sp2=*sp1;

141、以下判断正确的是_c___

A、char *s="string";等价于char *s; *s="string";

B、char str[10]={"string"};等价于:char str[10]; str={"string"};

C、char *s="string";等价于char *s; s="string";

D、char str[10]={"string"};等价:char str[10]; *str={"string"};

142、以下能正确进行字符串赋值操作的是__d__

A、char s[5]={"ABCDE"};

B、char s[5]={'A', 'B', 'C', 'D', 'E'};

C、char *s; *s="ABCDE";

D、char *s="ABCDE";

143、下面程序段的运行结果是__d__

char *s="abcde";

s+=1;

printf("%d", s);

A、bcde

B、字符'b'的地址

C、字符'c'的地址

D、字符'b'的ASCII值

144、以下能正确读入字符串的程序段是___c_

A、char *p; scanf("%s", p);

B、char str[10]; scanf("%s", &str);

C、char str[10], *p; p=str; scanf("%s", p);

D、char str[10], *p=str; scanf("%s", p[1]);

145、设有说明语句:

char *str="\t\'c\\Language\n";,则指针str所指字符串的长度为___a_

A、13

B、15

C、17

D、说明语句不合法

146、以下运算正确的程序段是_c___

A、char str1[ ]="12345", str2[ ]="abcdef";strcpy(str1, str2);

B、char str[10], *st="abcde"; strcat(str, st);

C、char *st1="12345", *st2="abcde"; strcat(st1,st2);

D、char str[10]="", *st="abcde"; strcat(str, st);

147、下面程序段的运行结果是__c__

char str[ ]="xyz", *p=str;

printf("%d\n", *(p+3) );

A、字符'z'的地址

B、0

C、字符'z'的ASCII码

D、字符'z' 148、以下程序段的运行结果是__c__

char a[ ]="program", *p;

p=a;

while (*p!='g')

{ printf("%c", *p-32); p++; }

A、PROgram

B、PROGRAM

C、PRO

D、proGRAM

149、下面程序段的运行结果是__b__

main( )

{ char c1, c2;

c1='A'+'5'-'3';

c2='A'+'6'-'3';

printf("%d, %c\n", c1, c2);

}

A、C,D

B、67,D

C、无确定值

D、B,C

150、以下程序段的运行结果是___a_

char b[ ]="Basic", *p;

for (p=b; p

printf("%s\n", p);

A Basic

B B

C C

D Basic

asic a Ic

sic s sic

ic i asic

c c Basic

151、若有语句:char s1[ ]="Beijing", s2[8],

*s3, *s4="Shanghai";

则对库函数strcpy调用正确的是____

A、strcpy(s1, s4);

B、strcpy(s2, s4);

C、strcpy(s3, s1);

D、strcpy(s4, s1);

152、以下与库函数strcpy(char *s1, char *s2)功能不相等的程序段是__c__

A、strcpy1(char *s1, char *s2)

{ while ((*s1++=*s2++)!='\0') ; }

B、strcpy2(char *s1, char *s2)

{ while (*s2)

*s1++=*s2++; }

C、strcpy3(char *s1, char *s2)

{ while (*s1++=*s2++) ; }

D、strcpy4(char *s1, char *s2)

{ while ((*s1=*s2)!='\0')

{ s1++; s2++; } }

153、以下程序段的输出结果是__b__

char a[ ]="Program", *ptr;

ptr=a;

for ( ; ptr

putchar(*ptr);

A、Program

B、Porm

C、有语法错

D、Por

154、以下语句不正确的是___d_

A、char a[6]="test";

B、char a[6], *p=a; p="test";

C、char *a; a="test";

D、char a[6], *p; p=a="test";

155、下面程序段的运行结果是__b__

char st[8]="output";

printf("\"%s\"\n", st);

A、output

B、"output"

C、\"output\"

D、编译出错

156、以下程序段的输出结果是___b_

char a[ ]="language", *ptr=a;

while (*ptr)

{ printf("%c", *ptr-32);

ptr++; }

A、LANGUAGE

B、陷入死循环

C、有语法错

D、language

157、若有定义:int b[5];,则以下对b数组元素的正确引用是__a__

A、*&b[5]

B、b+2

C、*(*(b+2))

D、*(b+2)

158、若有以下语句,则对x数组元素引用不正确的是__c__

int x[ ]={1, 2, 3, 4, 5, 6}, *ptr;

ptr=x;

A、*(--ptr)

B、*(ptr--)

C、*(ptr++)

D、*(++ptr)

159、若有定义:int c[5], *p=c;,则以下对c数组元素地址的正确引用是___d_

A、p+5

B、c++

C、&c+1

D、&c[0]

160、若有说明语句:int a[2][3], m, n;且0≤m≤1,0≤n≤2,则以下对数组元素的正确引用形式是__d

A、a[m]+n

B、(a+m)[n]

C、*(a+m)+n

D、*(*(a+m)+m)

161、若有定义:int a[2][3];,则以下对a数组元素地址的正确表示为_d___

A、*(a+1)

B、*(a[1]+2)

C、a[1]+3

D、a[0][0]

162、若有定义:int (*p)[3];,则以下叙述正确的是_c___

A、p是一个指针数组名

B、p是一个指针,它可以指向一个一维数组中的任意元素

C、p是一个指针,它可以指向一个含有3个整型元素的一维数组

D、(*p)[3]等价于*p[3]

163、若有以下定义和语句,则对m数组元素地址的正确引用是_d___int m[2][3], (*p)[3];

p=m;

A、p[2]

B、p[0]+1

C、*(p+2)

D、(p+1)+2

164、若有定义:int x[5], *p=x;,则不能代表x数组首地址的是___c_

A、x

B、&x[0]

C、&x

D、p

165、若有以下定义和语句,则对a数组元素的正确引用是__a__

int a[2][3], (*p)[3];

p=a;

A、(p+1)[0]

B、*(*(p+2)+1)

C、*(p[1]+1)

D、p[1]+2

166、若有定义:int i, x[3][4];,则不能将x[1][1]的值赋给变量i的语句是__d__

A、i=x[1][1]

B、i=*(*(x+1))

C、i=*(*(x+1)+1)

D、i=*(x[1]+1)

167、若有以下定义和赋值语句,且0≤i≤1,0≤j≤2,则以下对s数组元素地址的正确引用形式是___c_

int s[2][3]={0}, (*p)[3], i, j;

p=s;

A、(*(p+i))[j]

B、*(p[i]+j)

C、*(p+i)+j

D、(p+i)+j

168、设用以下程序段建立了sp与str的关系,则以下对字符串的引用不正确的是_a___

char str[4][8]={"str1","str2","str3","str4"}, *sp[4];

int n;

for (n=0; n<4; n++)

sp[n]=str[n];

A、sp

B、*sp

C、sp[0]

D、*(sp+1)

169、若有定义:int x[10], *p=x;,则*(p+5)表示_b___

A、数组元素x[5]的地址

B、数组元素x[5]的值

C、数组元素x[6]的地址

D、数组元素x[6]的值

170、若有定义语句:int s[4][6], t[6][4], (*p)[6];,则以下正确的赋值语句是___b_

A、p=t;

B、p=s;

C、p=s[2];

D、p=t[3];

171、若要对变量a进行--运算,则a应具有的说明是_d___

A、int p[3]; int *a=p;

B、int k; int *a=&k;

C、char *a[3];

D、int b[10]; int *a=b+1;

172、若有定义语句:int x[5]={0, 1, 2, 3, 4}, *p;,则以下数值不为2的表达式是_c___

A、p=x+1, ++(*p)

B、p=x+2, *p++

C、p=x+1, *(p++)

D、p=x+1, *++p

173、执行以下程序段后,y的值是__c__

int a[ ]={1, 3, 5, 7, 9}

int x=0, y=1, *ptr;

ptr=&a[1];

while (!x)

{ y+=*(ptr+x); x++; }

A、1

B、2

C、4

D、24

174、执行以下程序段后,m的值是____

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

int m, *ptr;

ptr=&a[0][0];

m=(*ptr)*(*ptr+2)*(*ptr+4);

A、15

B、48

C、24

D、无定值

175、设有以下定义:char *ch[2]={"abc", "xyz"};,则以下正确的叙述是_c___

A、数组ch的两个元素中分别存放了字符串"abc"和"xyz"的首地址

B、数组ch的两个元素分别存放的是含有3个字符的一维字符数组的首地址

C、ch是指针变量,它指向含有两个数组元素的字符型一维数组

D、数组ch的两个元素的值分别是"abc"和"xyz"

176、下面程序的运行结果是____

main( )

{ int x[5]={1, 2, 3, 4, 5}, *p=x, **q;

q=&p;

printf("%d, ", *(p++) );

printf("%d\n", **q);

}

A、1, 1

B、1, 2

C、2, 2

D、2, 3

177、下面程序的运行结果是____

#include "stdio.h"

fun(int **a, int p[2][3])

{ **a=p[1][1]; }

main( )

{ int x[2][3]={2, 4, 6, 8, 10, 12}, *p;

p=(int *)malloc(sizeof(int));

fun(&p, x);

printf("%d\n", *p);

}

A、2

B、6

C、8

D、10

179、若有说明:char *pc[ ]={"aaa", "bbb", "ccc", "ddd"};,则以下叙述正确的是____

A、*pc[0]代表的是字符串"aaa"

B、*pc[0]代表的是字符'a'

C、pc[0]代表的是字符串"aaa"

D、pc[0]代表的是字符'a'

180、以下程序的运行结果是____

void sub(int x, int y, int *z)

{ *z=y-x;}

main( )

{ int a, b, c;

sub(10, 15, &a);

sub(6, a, &b);

sub(a, b, &c);

printf("%d, %d, %d\n", a, b, c);

}

A、5, 1, 6

B、-5, -11, -6

C、-5, 11, 6

D、5, -1, -6

181、设有变量定义和函数调用语句:int a=20; print_value(&a);,下面函数的输出结果是____

void print_value(int *x)

{ printf("%d\n", ++*x); }

A、20

B、21

C、变量a的地址

D、随机值

182、语句int (*ptr)( );的含义是____

A、ptr是指向一维数组的指针变量

B、ptr是指向int 型数据的指针变量

C、ptr是指向函数的指针,该函数返回一个int 型数据

D、ptr是一个函数名,该函数的返回值是指向int 型数据的指针

183、若有函数max (a ,b) ,并且已使函数指针变量p 指向函数 max ,则利用函数指针调用 max 函数的正确形式是____

A、(*p ) max (a , b)

B、*p max(a, b)

C、p-> max (a, b)

D、 ( *p ) (a, b )

184、若有定义:int (*p)( );,则指针p___

A、代表函数的返回值

B、指向函数的入口地址

C、表示函数的类型

D、表示函数返回值的类型

185、下面程序的运行结果是____

main( )

{ int b[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int *q=b;

printf("%d\n", *(q+2) );

}

A、1

B、2

C、3

D、4

187、下面程序的运行结果是____

#include

#include

main()

{ int a[3][3]={{2},{4},{6}};

int k,*q=&a[0][0];

for(k=0;k<2;k++)

{ if(k= =0)

a[k][k+1]=*q+1;

else ++q;

printf(“%d”,*q);

}

}

A、26

B、23

C、36

D、33

188、下面程序的运行结果是____

void prt(int *a)

{printf(“%d\n”,++*a);}

main()

{ int b=25;

prt(&b);

}

A、26

B、24

C、25

D、23

189、下面程序的运行结果是____

main( )

{ int a[3][4]={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};

int (*q)[4]=a, i, j, n=0;

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

for (j=0; j<2; j++)

n=n+*(*(q+1)+j);

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

}

A、68

B、99

C、60

D、108

190、下面程序的运行结果是____

#include

#include

main()

{ char a="AbCdEf", *b="aB";

a++;

b++;

printf("%d\n", strcmp(a,b) );

}

A、零

B、正数

C、负数

D、无确定值

191、若运行以下程序时,从键盘上输入OPEN THE DOOR<回车>,则程序的运行结果是____

#include

char f(char *ch)

{ if(*ch<='Z'&&*ch>='A')

*ch-='A'-'a';

return *ch; }

main()

{ char s1[81],*q=s1;

gets(s1);

while(*q)

{ *q=f(q);

putchar(*q);

q++;

}

putchar('\n');

}

A、oPEN tHE dOOR

B、OPEN THE DOOR

C、open the door

D、Open The Door

192、下列程序的运行结果是____

#include

void f (float *q1, float *q2, float *a)

{ a=(float *)calloc(1, sizeof(float));

*a=*q1+*(q2++);

}

main()

{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;

f(a, b, s);

printf("%f\n", *s);

}

A、1.100000

B、11.100000

C、12.100000

D、21.100000

193、下列程序的运行结果是____

#include

#include

void f (char *s, int n)

{ char a,*q1,*q2;

q1=s; q2=s+n-1;

while (q1

{ a=*q1++; *q1=*q2--; *q2=a; }

}

main()

{ char b[ ]=”ABCDEFG”;

f(b, strlen(b) );

puts(b);

}

A、GAGGAGA

B、AGAAGAG

C、GFEDCBA

D、AGADAGA

194、以下程序的运行结果是____

main ( )

{ char *q ="Is it";

printf ("%3s, %0.4s\n", q , q );

}

A、Is , Is i

B、Is , Is it

C、Is It , Is it

D、Is it , Is

195、下面程序的功能是从输入的十个字符串中找出最长的那个串。请选择正确内容填空。

# include

# include

# define N 10

main ( )

{ char str[N][81], *sp;

int i ;

for (i=0 ; i

gets ( str[i] );

sp=__①__;

for ( i=1 ; i

if ( strlen (sp )

sp=__②__;

printf ("sp=%d , %s\n", strlen(sp) ,sp );

}

① A、str[i] B、&str[i][0]

C、str[0]

D、str[N]

② A、str[i] B、str[i][0]

C、str

D、str[N]

196、下面程序的功能是将八进制正整数组成的字符串转换为十进制整数。请选择正确内容填空。

# include

main ( )

{ char *p , s[6] ; int n ;

p=s;

gets (p ) ;

n=__①__;

while (__②__!='\0' )

n=n*8+ *p –'0';

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

}

①、A、0 B、*p

C、*p-'0'

D、*p+'0'

②、A、*p B、*p++

C、*(++p)

D、p

197、函数count 的功能是统计子串substr 在主串str 中出现的次数。请选择填空。

count(char *str,char *substr)

{ int i,j,k,num=0;

for(i=0;__①__; i++)

for(__②__,k=0;substr[k]= =str[j];k++,j++)

if(substr[__③__ ]= ='\0' )

{ num++; break; }

return(num);

}

① A、str[i]= =substr[i] B、str[i]!='\0'

C、str[i]= ='\0'

D、str[i]>substr[i]

② A、j=i+1 B、j=i C、j=0 D、j=1

③ A、k B、k++ C、k+1 D、++k

198、下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如串“oalne”。请选择填空。

# include

main ( )

{ char str[80], *p, max, *q ;

p=str ;

gets (p);

max=*(p++) ;

while ( *p!='\0' )

{ if ( max<*p )

{ max=*p ;__①__; }

p++;

}

p=q ;

while (__②__)

{ *p=*( p-1 ) ;__③__; }

*p=max ;

puts ( p );

}

① A、p++ B、p=q C、q=p D、q++

② A、p>str B、p>=str

C、*p>str[0]

D、*p>=str[0]

③ A、p++ B、str-- C、p-- D、i--

199、函数DelSpace的功能是删除指针p所指向的字符串中的所有空格(包括TAB符,回车符,换行符),请选择填空。

DelSpace (char *p)

{ int i,t; char c[80];

for(i=0,t=0;__①__;i++)

if(! isspace(__②__))

c[t++]=p[i];

c[t]='\0';

strcpy(p,c);

}

① A、p[i] B、!p[i]

C、p[i]='\0'

D、p[i]= ='\0'

② A、p+i B、*c[i]

C、*(p+i)

D、*(c+i)

200、下面程序的功能是利用递归算法将字符串s中的内容按逆序输出,但不改变串中的内容,请选择填空。

# include

main ( )

{ char s[10]="hello" ;

inverp(s);

}

inverp (char *a)

{ if(__①__) return 0;

inverp(a+1);

printf("%c", __②__);

}

① A、*a!='\0' B、*a!=NULL

C、!*a

D、!a*= =0

② A、*(a-1) B、*a

C、*(a+1)

D、*(a--)

201、下面程序的功能是用递归算法将一个整数按逆序存放一个字符数组中。如123存放成“321”,请选择填空。

# include

void convert(char *a,int n)

{ int i;

if((i=n/10)!=0)

convert(__①__,i);

*a=__②__;

}

main()

{ int number;

char str[10]="";

scanf("%d",&number);

convert(str,number);

puts(str);

}

① A、a++ B、a+1

C、a--

D、a-1

② A、n/10 B、n%10

C、n/10+'0'

D、n%10+'0'

202、下面程序的功能是用递归法将一个整数转换成字符形式输出。例如输入386,应输出字符串“386”。请选择填空。

# include

void convert(int n)

{ int i;

if((__①__)!=0)

convert(i);

putchar(__②__+'0');

}

main()

{ int number;

scanf("%d",&number);

if(number<0)

{ putchar('-');

number= -number;}

convert(number);

}

① A、i=n/10 B、i=n%10

C、i=n--

D、i=--n

② A、n B、n/10

C、n%10

D、i%10

203、下面程序的功能是:调用函数sss(),按字典顺序比较存放在a、b数组中两个字符串的大小,如果a大于b则i 为正值,a等于b则i为0,a小于b则i为负值。请选择填空。

# include "stdio.h"

sss(char *s,char *t)

{ for(;*s= =*t;__①__)

if(*s= ='\0') return(0);

return(*s-*t);

}

main()

{ char a[20],b[20]; int i;

scanf("%s%s",a,b);

i=sss(__②__);

printf("%d",i);

}

① A、s++ B、t++

C、s++;t++

D、t++,s++

② A、a,b B、*a,*b

C、&a,&b

D、a[ ],b[ ]

204、下面程序的功能是从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。请选择填空。

# include

# include

main()

{ char string[100],*p,*q,*r,c;

printf("Please input a string:");

gets(string);

for(p=string;*p;p++)

{ for(q=r=p;*q;q++)

if(__①__) r=q;

if(__②__)

{ c=*r;*r=*p;*p=c;}

}

for(p=string;*p;p++)

{ for(q=p;*p= =*q;q++)

strcpy(__③__,q);

}

printf("result:%s\n",string);

}

① A、*r>*q B、*r>*p

C、r>q

D、r>p

② A、r= =q B、r!=q

C、p!=q

D、r!=p

③ A、p++ B、p

C、p-1

D、p+1

205、下面程序的功能是将字符串a分段传送到字符串b中。要求在每五个字符后插入一个逗号,以示分段。例如字符串a为"abcdefg12345",则字符串b为"abcde,fg123,45",请选择填空。

# include

main()

{ int i,k=0;

char a[80],b[80],*p;

p=a;

gets(p);

while(*p)

{ for(i=1;__①__;p++,k++,i++)

b[k]=*p;

if(__②__)

{ b[k]=',' ; k++;}

}

b[k]='\0';

puts(b);

}

① A、i<5 B、i<=5

C、i<5&&*p!='\0'

D、i<=5&&*p

② A、i= =6 B、*P= ='\0'

C、!*p

D、i!=6

206、当运行以下程序时,若从键盘输入Sorry!<回车>,则下面程序的运行结果是____

# include

# include

main()

{ char str[10],*p=str;

gets(p);

printf("%d\n",stre(p));

}

stre(char str[ ])

{ int num=0;

while(*(str+num)!='\0')

num++;

return(num);

}

A、7

B、6

C、5

D、10

207、下面程序的运行结果是____

# include

main()

{ static char a[ ]="Language",

b[ ]="programe";

char *p1,*p2;

int k;

p1=a; p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)= =*(p2+k) )

printf("%c", *(p1+k));

}

A、gae

B、ga

C、Language

D、有语法错

208、下面程序的运行结果为____

# include

# include

main ( )

{ char *aa="then",*bb="than";

aa+=2; bb+=2;

printf("%d\n",strcmp(aa,bb));

}

A、有语法错

B、大于零

C、等于零

D、小于零

209、下面程序的运行结果是____

# include

main()

{ int a=28,b;

char s[10],*p;

p=s;

do { b= a%16;

if(b<10) *p= b+48;

else *p= b+55;

p++;

a= a/5;

} while(a>0);

*p='\0';

puts(s);

}

A、10

B、C2

C、C51

D、\0

210、下面程序的运行结果是____

# include

void select(char *s)

{ int i,j; char *t;

t=s;

for(i=0,j=0;*(t+i)!='\0';i++)

1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。 n k=0; m t=0; //用于记录出列顺序 while(t #include <> void main() { int i,j,a[6][6]; for(i=0;i<=5;i++) { a[i][i]=1; a[i][0]=1; } for(i=2;i<=5;i++) { for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0;i<=5;i++) { for(j=0;j<=i;j++) { printf("%4d",a[i][j]); } printf("\n"); } } 5、编写程序,把下面的数据输入一个二维数组中。

25 36 78 13 12 26 88 93 75 18 22 32 56 44 36 58 然后执行以下操作: ①输出矩阵两个对角线上的数; ②分别输出各行和各列的和; ③交换第一行和第三行的位置; ④交换第二列和第四列的位置; ⑤输出处理后的数组。 #include<> #define SIZE 4 void main() { int a[SIZE][SIZE]={{25,36,78,13},{12,26,88,93},{75,18,22,32},{56,44,36,58}}; int i,j,t,sum; //输出二维数组 printf("二维数组:\n"); for(i=0;i

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

数组练习解答 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}; 规定,定义字符型数组时不允许直接使用 "字符常量"的方式赋初值,所以备选答案②也就是错误的。 备选答案③符合题意。【答案】③ 6定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句就是() ① char s[]={ '1','2','3',' \0 '}; ② char s 「」={"123"}; ③ char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度 ,所以每个元素都赋了初值,共计4个元素,初值依次为T '3'、’ \0',最后一个元素的值为字符串结束标记 ,所以数组S 中存放的就是字符串"123",该答案不符合 题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组 s 的长度为4,其中的初值就是字符串 "123",不符合题意(即正确的);备选答案③中也就是给数组 s 赋予字符串的初值,但就是字符串不就是 方法三: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 较,小者调上;该操作反复执行 n- k 次。现在假设有 则利用"冒泡排序法"执行第2步后的结果就是 【分析】开始排序前的排列执行第 4 1 - 3 : (不能直接赋予字符常量,必须用花括号括住),所 步。其中第k 步的任务就是:自下而上,相邻两数比 4个数据:4、l 、3、2要排序,假定4为上、2为下, O 1步后的排列执行第 2步后的排列 1 2 4 2 【答案】l 、2、4、 3 4用"选择排序法"对n 个数据排序,需要进行n-1 据中寻找最小数,与第k 个数据交换。现在假设有 行第2步后的结果就是 ____________________ 【分析】 开始排序前的排列为: 4 执行第1步后的排列为: 执行第2步后的排列为: 【答案】1、2、3、4 5下列数组定义语句中,正确的就是() ① int a[][]={1,2,3,4,5,6}; ② char a[2] ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][] 【分析】C 语言规定,二维数组定义时不允许省略第二维的长度 步。其中第k 步的任务就是:在第k 个数据到第n 个数 4个数据:4、 1、 3、2要排序,则利用"冒泡排序法"执 「3] = 'a','b'; ={{1,2,3},{4,5,6}}; ,所以备选答案①④就是错误 C 语言还 显然 、'2'、

实验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

6.1.1 Fibonacci数列 /* Fibonacci数列递推求解 */ main() {int k,n; long s,f[50]; printf("求数列的第n项与前n项和,请输入n:"); scanf("%d",&n); f[1]=1;f[2]=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k<=n;k++) {f[k]=f[k-1]+f[k-2]; /* 实施递推 */ s+=f[k];} /* 实施求和 */ printf("F数列第%d项为:%ld\n",n,f[n]); printf("F数前%d项之和为:%ld\n",n,s); } 6.1.2 幂序列 /* 幂序列程序 */ main() {int k,n; long a,b,s,f[100]; printf("求数列的第n项与前n项和,请输入n:"); scanf("%d",&n); a=2;b=3;s=0; for(k=1;k<=n;k++) {if(a

else {f[k]=b;b=b*3;} /* 用3的幂给f[k]赋值 */ s+=f[k];} printf("数列的第%d项为:%ld\n",n,f[n]); printf("数列的前%d项之和为:%ld\n",n,s); } 6.1.3 双关系递推数列 /* 双关系2x+1,3x+1递推 */ main() {int n,i,j,h,m[1500]; m[1]=1; scanf("%d",&n); for(i=1;i<=n;i++) {m[2*i]=2*m[i]+1;m[2*i+1]=3*m[i]+1; for(j=i+2;j<=2*i+1;j++) {if(m[i+1]>m[j]) /* m(i+1)与m(j)比较 */ {h=m[j]; m[j]=m[i+1];m[i+1]=h;} /* 交换,使m(i +1)最小 */ if(m[i+1]==m[j]) m[j]=20000+j;}} /* 置m(j)为一出界大数,以避免重复 */ for(i=1;i<=n;i++) {printf(" %4d",m[i]);

#include int prime(int c) { inta,b=1; for(a=2;a int *hs(int a[3][2]) {inti,j,s[3],*p=s; s[0]=a[0][0];s[1]=s[2]=1; for(i=0;i<3;i++) for(j=0;j<2;j++) {if(s[0]

return 0; } 3.源代码为: #include voidhanshu(char *s) { while(*s) { if(*s>='A'&&*s<='Z') *s+=32; else if(*s>='a'&&*s<='z') *s-=32; *s++; } } void main() { char s[]="shaHUAHDJhhduahNBUahujJAWDhuwh8u"; hanshu(s); printf("改写后的字符串为:\n"); puts(s); } 4.源代码为: #include int add(int n) { int s=0; if(n==0) return 0; if(n==1) s=1; else s=n+add(n-1); return s; } void main() { intk,i; printf("输入一个整数:\n"); scanf("%d",&i); k=add(i); printf("%d累加的结果为:%d\n",i,k); } 测试数据为:4 运行结果为:10

一.选择题(2*20) 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】以下对一维整型数组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]; 【题3】若有说明:int a[10];则对a 数组元素的正确引用是。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题4】在C 语言中,一维数组的定义方式为:类型说明符数组名; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题5】以下能对一维数组a 进行正确初始化的语句是。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题6】以下对二维数组a 的正确说明是。 A)int a[3][]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); 【题7】若有说明:int a[3][4];则对a 数组元素的正确引用是。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 【题8】若有说明:int a[3][4];则对a 数组元素的非法引用是。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] 【题9】以下能对二维数组a 进行正确初始化的语句是。 A)int a[2][]={{1,0,1},{5,2,3}}; B)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}}; 【题10】以下不能对二维数组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};

数组练习解答 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步后的排列 41 1 14 2 32 4 23 3 【答案】l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为:413 2 执行第1步后的排列为:143 2 执行第2步后的排列为:123 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'};

231页; 本节设计程序完成一个简单的学籍; 3管理系统的案例,学生的基本信息:学号,姓名,年龄,c 语言成绩。假设班级有10名学生,能实现以下功能: (1)输入10名学生的基本信息。 (2)输出10名学生的基本信息。 (3)输入学号、姓名,输出该学生的基本信息。 (4)按学号年龄对学生进行排序(升序),按c 语言成绩降序排序。 (5)统计优 良 不及格。 1.数据结构分析 此案例是一位数组,二维数组的综合运用。10名学生的学号,年龄,c 语言成绩可分别用长度为10的一位数组sno (long ),sage (int 型),cs (float 型)存储;10名学生的姓名可用元素长度为20个字符的一位数组,既字符型二维数组sname 存储。 2算法分析 使用模块化设计思想,进入系统主界面时有六个主要模块,输入学生的基本信息,输出学生的信息,查找学生 的基本信息,排序,统计,退出。学籍管理系统的机构功能框架,如图 5-28 所示。 图 5-28 学生管理系统的结构功能框架 5.5.2 奇数阶魔方矩阵 本节将实现技术矩魔方矩阵。 项目任务:用数组实现N 阶魔方矩阵(N 为奇数)。所谓的N 阶魔方矩阵是指把1~N*N 自然数按一定的方法排列成N*N 的矩阵,使得:任意行、任意列以及两个对角线上的数之和都为65。 5阶魔方如下: 17 24 1 8 15 输 入 学 生 的 基 本 信 息 输 出 学 生 的 信 息 查 找 学 生 的 基 本 信 息 排 序 统 计 退 出 学籍管理系统

23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 本章习题: 1.设数组int a【N】的元素全部不相等,求a中最大元素和次大元素。 2.求有10个整数的数组a中奇数的个数和平均值,以及偶数个数和平均值。 3.统计输入的一串字符(“假设以‘\n’结束”)中,大写字母A,B...Z各出现的次数。 4.数组a:“1,7,9,11,13,15,17,19”;数组b:“2,4,6,8,10”两个数组合并为数组c;按升序排列。 5.输入10个数,将10个整数按升序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1,则输出:1 3 5 7 8 2 4 6 8 10 (编程提示、;可利用两个数组变量,一个用来存放输入的整数,输入后,对该数组进行排序,然后将数据复制到另一个数组中,先复制奇数再复制偶数)。 6.定义一个有10个元素的一位数组count ,从键盘上输入8个整数,将其按从大到小的顺序排列,并将排列后的数组输出。 7.求数组int a【M】【N】每行元素的平均值和平均最大的行号。 8.求A【M】【N】与B【M】【N】两矩阵的和矩阵C【M】【N】和差矩阵D【M】【N】(矩阵的值由键盘输入)。 9.有n个学生,每人考m门课。 (1)找出成绩最高的学生的学号和课程号 (2)找出有不及格课程的学生的学号及其各门课的全部成绩。 (3)求全部学生全部课程的平均分。

实验六数组程序设计 【实验目的】 1、掌握使用一维数组编程方法 2、掌握使用二维数组进行程序设计 【实验内容】 一、上机验证程序,并分析结果 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。1、#include int main() { int a[ ]={1,2,3,4,5} , i, j, s=0 ; j = 1; for ( i = 4 ; i>=0 ; i--) { s = s+ a[i] * j ; j = j * 10 ; } printf(" s= %d \n" , s ); return 0; } 二、程序改错题 1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。源代码如下,程序中存在错误,请将其改正。 #include int main()

{ int a(10);/*定义数组*/ int count,i;/* i循环变量 count 正数个数*/ for(i=0;i<=10;i++) {/*循环输入*/ scanf("%d",a[i]); } count=1; for(i=0;i<=10;i++) {/*查找正数*/ if(a(i)>0) count++; } printf("数组中正数有:%d个\n",count); return 0; } 三编写程序 1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。#include #define N 30 int main() { float score[N],sum=0,aver; int i; for(i=0;i<30;i++) { scanf("%f",&score[i]); sum=sum+score[i]; } aver=sum/30; printf("平均分为:%.2f\n",aver); for(i=0;iaver) printf("%.2f ",score[i]); printf("\n");

第7章数组习题A卷 1. 单项选择题 (1) int a[4]={5,3,8,9};其中 a[3]的值为(D )。 D A. 5 B. 3 C. 8 D. 9 (2) 以下 4 个字符串函数中,( A)所在的头文件与其他 3 个不同。 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)); 的输出是( B)。 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. int a[2][3]={0,1,2,3,4,5,6}; D. int a[2][3]={0,1,2,3,4,5}; (12) 下列定义的字符数组中,输出 printf("%s\n", str[2]) ;的输出是 (C )。 static str[3][20] ={ "basic", "foxpro", "windows"}; A. basic B. foxpro C. windows D. 输出语句出错 (14) 下列各语句定义了数组,其中哪一个是不正确的( C)。 A. char a[3][10]={"China","American","Asia"}; B. int x[2][2]={1,2,3,4}; C. float x[2][ ]={1,2,4,6,8,10}; D. int m[][3]={1,2,3,4,5,6};

实验四一维数组、二维数组 一、实验目的与要求 1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。 2、掌握与数组有关的算法。 二、实验内容 1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。 #include "stdafx.h" #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;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];

第七章数组 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}; C)int a[ ][3]={1,2,3,4,5,6};D)int a[2,3]={1,2,3,4,5,6}; 8.以下对二维数组a进行初始化正确的是() A)int a[2][ ]={{1,0,1},{5,2,3}}; B)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}}; 9.以下不能对二维数组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}; 10.若有定义:int a[3][4];则正确引用数组a元素的是() A)a[2][4] B)a[3][3] C)a[0][0] D)a[3][4]

第7章数组习题 A卷1. 单项选择题 (1) int a[4]={5,3,8,9};其中a[3]的值为(D )。 D A. 5 B. 3 C. 8 D. 9 (2) 以下4 个字符串函数中,( A)所在的头文件与其他3 个不同。 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

C程序设计(数组)12.23 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是 C 。 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】C语言中,数组名代表B A.数组全部元素的值B.数组首地址 C.数组第一个元素的值D.数组元素的个数【题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】合法的数组定义是D 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}; 【题5】若有定义和语句:char s[10]; s=”abcd”; printf(“%s\n”,s); 则结果是(以下u代表空格)D A.输出abcd B.输出a C.输出abcd u u u u u D.编译不通过 【题6】有以下语句,则下面是正确的描述B

static char x [ ]=“12345”;static char y[ ]={‘1’,‘2’,‘3’,‘4’,‘5’}; A.x数组和y数组的长度相同。A B.x数组长度大于y数组长度。 C.x数组长度小于y数组长度 D.x数组等价于y数组。 【题7】若有说明:int a[10];则对a 数组元素的正确引用是 D 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题8】在C 语言中,一维数组的定义方式为:类型说明符数组名C ; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题9】以下能对一维数组a 进行正确初始化的语句是C。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题10】对以下说明语句的正确理解是 B 。 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)因为数组长度与初值的个数不相同,所以此语句不正确【题11】若已定义数组:float a[8];则下列对数组元素引用正确的是 A 。

1、以下定义语句中,错误的是________。 A) int a[]={1,2}; B) char a[]={"test"}; C) char s[10]={"test"}; D) int n=5,a[n]; D 一维数组的定义方式:类型说明符数组名[常量表达式] 常量表达式中可以包括常量和符号常量,但不能包含变量。 2、以下对一维数组a进行正确初始化的是__________。 A) int a[10]=(0,0,0,0,0); B) int a[10]={ }; C) int a[ ]={0}; D) int a[10]={ 10*2}; C 1.在定义数组时对数组元素赋以初值。 2. 可以只给一部分元素赋值。 3. 如果想使一个数组中全部元素值为0,可以写成:int a[10]={0,0,0,0,0,0,0,0,0,0}; 或int a[10]={0}; 4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度,系统根据后面花括号里的数据决定数组的长度。 3、以下对二维数组a进行正确初始化的是__________。 A) int a[2][3]={ {1,2},{3,4},{5,6} }; B) int a[ ][3]={1,2,3,4,5,6 }; C) int a[2][ ]={1,2,3,4,5,6}; D) int a[2][ ]={ { 1,2},{3,4}}; B 4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。 可以用下面4种方法对二维数组初始化: 1.分行给二维数组赋初值。 2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。 3.可以对部分元素赋初值。 4、在定义int a[5][4]; 之后,对a的引用正确的是________。 A) a[2][4] B) a[1,3] C) a[4][3] D) a[5][0] C 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。 5、以下给字符数组str定义和赋值正确的是________。 A) char str[10]; str={"China!"}; B) char str[ ]={"China!"}; C) char str[10]; strcpy( str,"abcdefghijkl"); D) char str[10]={"abcdefghijkl"}; B 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。 只能用strcpy函数将一个字符串复制到另一个字符数组中去。strcpy(字符数组1,字符串2) 字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。

C语言程序设计实验教学(6) 【实验目的】数组的应用是很重要的一章。通过实验掌握一维数组的主要应用,并理解数组的存储。对二维数组的处理要比较熟悉。 【实验要求】一维数组的题目要求全面掌握,应用循环结构完成一维数组的输入、处理和输出。二维数组能够完成简单的数据处理和应用。 【实验课时】8.0 【实验内容】 一维数组: 1、定义一个可以存放10个元素的int数组a,输入10个数,并逆序输出。 #include #include void main( ) {int a[10], i; clrscr(); printf("Please input array a :"); for(i=0;i<10;i++) scanf("%d", &a[i]);/* 由键盘逐次输入值赋予数组各元素*/ for(i=9;i>=0;i--) /* 变量i递减控制着数组元素倒序输出*/ printf("%5d", a[i]); } 2、用数组来保存Fibonacci数列前20项数值,以每5个数据为一行进行 输出。 #include #include void main( ) {int i; long f[20]; clrscr(); f[0]=1;f[1]=1; for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2]; for(i=0;i<20;i++) {if(i%5==0) printf("\n"); printf("%10ld",f[i]); } } 3、统计具有10个元素的自然数数组num中的奇数个数。 #include #include void main( ) {int i,num[10],count=0; clrscr(); for(i=0;i<10;i++) {printf("enter NO %d : ",i+1);/*给予输入提示*/ scanf("%d",&num[i]); if(num[i]%2!=0) count++;} printf("Count is:%d\n",count ); } 4、计算整数数组a中的最大值及其所在的下标。 #include #include void main( ) {int i,max,p,a[10]; clrscr(); printf("please enter 10 data:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0];p=0; for(i=1;i<10;i++)

相关文档