文档库 最新最全的文档下载
当前位置:文档库 › C语言第五章习题

C语言第五章习题

练习5-1

一、选择题

1.合法的数组说明语句是( )。

A.int a[]="string"; B.int a[]={0,1,2,3,4,5};

C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'}; 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.以下对一维数组a进行正确初始化的语句是( )。

A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};

C.int a[]={0}; D.int a[2]={10, 9, 8};

5.对以下说明语句的正确理解是( )。

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.因为数组长度与初值的个数不相同,所以此语句不正确

二、填空题

6.求所有不超过200的N值,N的平方是具有对称性质的回文数。所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。

例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。

#include

main()

{int m[16], n, i, t, count=0;

long a, k;

printf("Result is:\n");

for (n=10; n<200; n++)

{ k=0;

t=1;

a=n*n;

for (i=1; a!=0; i++)

{ ①;

a/=10;

}

for (; i>1; i--)

{ k+=m[i-1]*t;

②;

}

if ( ③) printf("%2d:%10d %10d\n", ++count, n, n*n);

}

}

则①为( )、②为( ; )、③为( )。

7.设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。则①是( )、②是( )、

③是( )。

main()

{int a[10], b[10], i;

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

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

for ( ①; i<10; i++) ②

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

{ printf("%3d", b[i]);

if ( ③==0) printf("\n");

}

}

8.下面程序用“顺序查找法”查找数组a中是否存在某一关键字。则①是( )、②是()。

main()

{int a[8]={25, 57, 48, 37, 12, 92, 86, 33};

int i, x;

scanf("%d", &x);

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

if (x==a[i])

{ printf("Found! The index is:%d\n", i+1);

①;

}

if ( ②) printf("Can't found!");

}

三、读程序,写结果

9.若有以下输入(代表回车),则下面程序的运行结果是( )。

52

main()

{int a[8]={6, 12, 18, 42, 44, 52, 67, 94};

int low=0, mid, high=7, found, x;

found=0;

scanf("%d", &x);

while ((low<=high)&&(found==0))

{ mid=(low+high)/2;

if (x>a[mid]) low=mid+1;

else if (x

else { found=1; break; }

}

if (found==1) printf("Search Successful! The index is:%d\n", mid); else printf("Can't search!\n");

}

练习5-2

一、选择题

1.已知:int i, x[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};,则下面语句的输出结果是( )。

for (i=0; i<3; i++) printf("%d", x[i][2-i]);

A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 9

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

A.int a[3][]; B.float a(3,4); C.double a[1][4]; D.float a(3)(4); 3.已知:int a[3][4];,则对数组元素引用正确的是( )。

A.a[2][4] B.a[1, 3] C.a[1+1][0] D.a(2)(1)

4.已知:int a[3][4];,则对数组元素的非法引用是( )。

A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4]

5.以下能对二维数组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}}; 6.以下不能对二维数组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};

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

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

B.此说明语句是错误的

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

D.数组a中每个元素均可得到初值0

8.若有说明:int a[][3]={1, 2, 3, 4, 5, 6, 7};,则a数组第一维的大小是( )。

A.2 B.3 C.4 D.无确定值

9.若二维数组a有m列,则在a[i][j]前的元素个数为( )。

A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1

二、填空题

10.下面的程序是求出数组a矩阵的两条对角线上的元素之和,则①是( )、②是( )。

#include

main()

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

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

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

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

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

for( ①; ②; j--)

if (i+j==2) sum2=sum2+a[i][j];

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

}

11.从键盘上输入若干(不超过1000个)学生的成绩,计算出平均成绩,并输出低于平均分的学生的成绩,用输入负数结束输入。则①是( )、②是( )、③是( )、

④是( )。

#include

main()

{ float x[1000], sum=0, ave, a;

int n=0, i;

printf("Enter mark: ");

scanf("%f", &a);

while (a>0&&n<1000)

{ sum+=①;

x[n]=②;

n++;

scanf("%f", &a);

}

ave=③;

printf("Output:\n");

printf("ave=%f\n", ave);

for (i=0; i

if ( ④) printf("%f\n", x[i]);

}

12.下面程序将二维数组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;

{ for (j=0; ①; j++)

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

②;

}

printf("\n");

}

printf("array b:\n");

for (i=0; ③; i++)

{ for (j=0; j<=1; j++) printf("%5d", b[i][j]);

printf("\n");

}

}

13.下面程序的功能是检查二维数组是否对称(即:对所有i和j都有a[i][j]=a[j][i])。

请填空,①是( )、②是( )。

main()

{ 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<4; i++)

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

{ ②; break; }

if (found) printf("No");

else printf("Yes");

}

练习5-3

一、选择题

1.为了判断两个字符串s1和s2是否相等,应当使用( )。

A.if (s1==s2) B.if (s1=s2)

C.if (strcpy(s1, s2)) D.if (strcmpy(s1, s2)==0)

2.调用strlen("abcd\0ef\0g")的返回值是( )。

A.4 B.5 C.8 D.9

3.已知:char str1[10], str2[10]={"books"};,则在程序中能够将字符串"books"赋给数组str1的正确语句是( )。

A.str1={"books"}; B.strcpy(str1, str2); C.str1=str2; D.strcpy(str2, str1); 4.下面程序段的运行结果是( )。(注:□代表空格)

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

printf("%s", c);

A.'a''b' B.ab C.ab□c D.ab□

5.下面程序段的运行结果是( )。(注:□代表空格)

char a[7]="abcdef";

char b[4]="ABC";

strcpy(a, b);

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

A.□B.\0 C.e D.f

二、填空题

6.以下程序是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不同字符的ASCII码之差。例如:输入的两个字符串分别为"abcdefg"和"abceef",则第一个不同字符为'd'和'e',输出为-1.请填空,①是( )、②是( )。

#include

main()

{char str1[100], str2[100], c;

int i, s;

printf("Enter string 1:");

gets(str1);

printf("Enter string 2:");

gets(str2);

i=0;

while ((str1[i]==str2[i]&&str1[i]!=①)) i++;

s=②;

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

}

7.下面程序的功能是在三个字符串中找出最小的。请填空,①是( )、②是( )。

#include

#include

main()

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

int i;

for (i=0; i<3; i++) gets(str[i]);

strcpy(s, ①);

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

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

}

8.下面程序的功能是在任意的字符串a中将与字符'c'相等的所有元素的下标值分别存放在整型数组b中,请填空,①是( )、②是( )。

#include

main()

{char a[80];

int i, b[80], k=0;

gets(a);

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

if ( ①) { b[k]=i; ②; }

for (i=0; i

}

三、读程序,写结果

9.当运行以下程序时,从键盘输入:AhaMA□Aha(□代表空格,代表回车),则下面程序的运行结果是( )。

#include

main()

{char s[80], c='a';

int i=0;

scanf("%s", s);

while (s[i]!='\0')

{ if (s[i]==c) s[i]=s[i]-32;

else if (s[i]==c-32) s[i]=s[i]+32;

i++;

}

puts(s);

}

10.下面程序的运行结果是( )。

#include

main()

{ char str[]="SSSWLIA", c;

int k;

for (k=2; (c=str[k])!='\0'; k++)

{ switch (c)

{ case 'I':++k; break;

case 'L': continue;

default: putchar(c); continue;

}

putchar('*');

}

}

11.下面程序段的运行结果是( )。

char ch[]="600";

int a, s=0;

for (a=0; ch[a]>='0'&&ch[a]<='9'; a++) s=10*s+ch[a]-'0';

printf("%d", s);

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