您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第六章 数组程序设计 > 【6.4 思考与练习】

6.4 思考与练习

 

思考与练习

1.选择题

(1)以下程序的输出结果是      。

#include <stdio.h>

#include <string.h>

main()

{

    char str[12]={'s','t','r','i','n','g'};

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

}

A.6                           B.7                            C.11                   D.12

(2)以下语句的输出结果是      。

printf("%d\n",strlen("\t\"\065\xff\n"));

A.5                                                              B.14

C.8                                                               D.输出项不合法,无正常输出

(3)以下程序的功能是:给数组的所有元素输入数据,应填入的正确答案是      。

#include <stdio.h>

main()

{

    int a[10],i=0;

 

    while(i<10)

       scanf("%d",      );

  

        …

}

A.a+(i++)                  B.&a[i+1]                  C.a+i                  D.&a[++i]

(4)设有static char str[]="Beijing";,则执行语句printf("%d\n", strlen(strcpy(str,"China")));后的输出结果为      。

A.5                           B.7                            C.12                   D.14

(5)下面各语句中,能正确进行为字符串赋值操作的是      。

A.char st[4][5]={"ABCDE"};                         B.char s[5]={'A','B','C','D','E'};

C.char *s; s="ABCDE";                                 D.char *s; scanf("%s",s);

(6)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int n[2],i,j,k;

 

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

        n[i]=0;

    k=2;

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

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

            n[j]=n[j]+1;

    printf("%d\n",n[k]);

}

A.不确定的值            B.3                            C.2                     D.1

(7)以下对C语言字符数组的描术中,错误的是      。

A.字符数组可以存放字符串

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

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

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

(8)定义如下变量和数组:

int i;

int 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

(9)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int n[3],i,j,k;

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

        n[i]=0;

    k=2;

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

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

            n[j]=n[i]+1;

    printf("%d\n",n[1]);

}

A.2                           B.1                            C.0                     D.3

(10)不能将字符串:Hello!赋给数组b的语句是      。

A.char b[10]={'H','e','l','l','o','!','\0'};                B.char b[10];b="Hello!";

C.char b[10];strcpy(b,"Hello!");                    D.char b[10]="Hello!";

(11)若有以下定义语句:

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

char c='a',d,g;

则数值为4的表达式是      。

A.a[g-c]                                                     B.a[4]

C.a['d'-'c']                                                   D.a['d'-c]

(12)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char *a="12134211";

    int v1=0,v2=0,v3=0,v4=0,k;

    for(k=0;s[k];k++)

        switch(s[k])

        {

            default: v4++;

            case '1': v1++;

            case '3': v3++;

            case '2': v2++;

        }

    printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);

}

A.v1=4,v2=2,v3=1,v4=1                              B.v1=4,v2=9,v3=3,v4=1

C.v1=5,v2=8,v3=6,v4=1                               D.v1=8,v2=8,v3=8,v4=8

(13)当执行以下程序且输入ABC时,输出结果是      。

#include <stdio.h>

#include <string.h>

main()

{

    char ss[10]="12345";

    strcat(ss,"6789");

    gets(ss);

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

}

A.ABC                           B.ABC9              C.123456ABC     D.ABC456789

(14)以下数组定义中,合法的是      。

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

C.string s="string";                                      D.char a[]={0,1,2,3,4,5};

(15)若有以下定义语句:

char s[10]="abcd";

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

则输出结果是(以下u代表空格)      。

A.abcd                                                        B.a

C.abcduuuuu                                               D.编译不通过

(16)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char *s="121";

    int  k=0,a=0,b=0;

    do

    {

        k++;

        if(k%2==0)

        {

            a=a+s[k]-'0';

            continue;

        } 

        b=b+s[k]-'0';

        a=a+s[k]-'0';

    } while(s[k+1]);

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

}

A.k=3 a=2 b=3         B.k=3 a=3 b=2           C.k=2 a=3 b=2    D.k=2 a=2 b=3

(17)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char w[][10]={"ABCD","EFGH","IJKL","MNOP"},k;

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

    printf("%s\n",&w[k][k]);

}

A.ABCD                                                     B.ABCD

         FGH                                   EFG

         KL                                     IJ

         M

C.EFG                                                        D.FGH

         JK                                     KL

         O

(18)以下程序片段的输出结果是      。

char str[]="ab\n\012\\\"";

printf(%d",strlen(str));

A.3                         B.4                            C.6                     D.12

(19)若有以下定义语句:

char x[]="abcdefg";

char y[]={'a','b','c','d','e','f','g'};

则正确的叙述为      。

A.数组x和数组y等价

B.数组x和数组y的长度相同

C.数组x的长度大于数组y的长度

D.数组x的长度小于数组y的长度

(20)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int i,k,a[10],p[3];

    k=5;

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

        a[i]=i;

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

        p[i]=a[i*(i+1)];

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

        k+=p[i]*2;

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

}

A.20                        B.21                          C.22                   D.23

(21)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char ch[7]="65ab21";

    int  i,s=0;

    for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)

        s=10*s+ch[i]-'0';

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

}

A.2ba56                   B.6521                      C.6                     D.62

(22)执行以下程序时,如果从键盘上输入:

ab<CR>

c <CR>

def<CR>

则输出结果为      。

#include <stdio.h>

main()

{

    char c[N];

    int  i=0;

    for(;i<N;c[i]=getchar(),i++)

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

        putchar(c[i]);

    printf("\n");

}

A.a                          B.a                            C.ab                   D.abcdef

         b                  b                   c

         c                  c                   d

         d                  d

         e

         f

(23)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int y=18,i=0,j,a[8];

    do

    {

        a[i]=y%2; i++;

        y=y/2;

    } while(y>=1);

    for(j=i-1;j>=0;j--)

        printf("%d",a[j];

    printf("\n");

}

A.10000                  B.10010                     C.00110              D.10100

(24)以下描述中,不正确的是      。

A.字符型数组中可以存放字符串

B.可以对字符型数组进行整体输入、输出

C.可以对整型数组进行整体输入、输出

D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值

(25)执行以下程序片段后,变量k的值为      。

int  k=3,s[2];

s[0]=k;k=s[1]*10;

A.不定值                 B.33                          C.30                   D.10

(26)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char arr[2][4];

    strcpy(arr,"you");

    strcpy(arr[1],"me");

    arr[0][3]='&';

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

}

A.you&me               B.you                        C.me                  D.err

(27)若执行下列程序时,输入123<空格>456<空格>789<CR>,则输出结果是      。

#include <stdio.h>

main()

{

    char s[100];

    int  c, i;

    scanf("%c",&c);

    scanf("%d",&i);

    scanf("%s",s);

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

}

A.123,456,789                                            B.1,456,789

C.1,23,456,789                                            D.1,23,456

(28)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int n[5]={0,0,0},i,k=2;

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

        n[i]=n[i]+1;

    printf("%d\n",n[k]);

}

A.不确定的值          B.2                            C.1                     D.0

(29)若有定义语句int t[3][2];,能正确表示t数组元素地址的表达式是      。

A.&t[3][2]               B.*(t+3)                    C.t+1                  D.t[2]

(30)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int a[3][2]={{1,2},{3,4},{5,6}},i,j,s=0;

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

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

            s+=a[i][j];

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

}

A.18                        B.14                          C.20                   D.21

(31)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char w[][10]={"ABCD","EFGH","IJKL","MNOP"},k;

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

    printf("%s\n",w[k]);

}

A.ABCD                  B.ABCD                    C.EFG                D.EFGH

         FGH               EFG                 JK              IJKL

         KL                 IJ                   O

                            M

(32)以下定义语句中,错误的是      。

A.int a[]={1,2};                                                 B.char *a[3];

C.char s[10]="test";                                     D.int n=5,a[n];

(33)设int型变量占用两个字节,如有定义int x[10]={0,2,4};,则数组x在内存中所占的字节数是      。

A.3                         B.6                            C.10                   D.20

(34)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int i,a[10];

    for(i=9;i>=0;i--)

        a[i]=10-i;

    printf("%d%d%d",a[2],a[5],a[8]);

}

A.258                      B.741                        C.852                 D.369

(35)以下数组定义中,不正确的是      。

A.int a[2][3];

B.int b[][3]={0,1,2,3};

C.int c[100][100]={0};

D.int d[3][]={{1,2},{1,2,3},{1,2,3,4}};

(36)以下程序的输出结果是      。

#include <stdio.h>

main()

{

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

    printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);

}

A.0650                                                       B.1470

C.5430                                                       D.不确定的值

(37)以下选项中,不能正确赋值的语句是      。

A.char s1[10];s1="Ctest";                             B.char s2[]={'C', 't', 'e', 's', 't'};

C.char s3[20]="Ctest";                                 D.char *s4="Ctest\n"

(38)以下程序的输出结果      。

#include <stdio.h>

main()

{

    char a[]={'a','b','c','d','e','f','g','h','\0'};

    int i,j;

    i=sizeof(a);

    j=strlen(a);

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

}

A.9,9                       B.8,9                         C.1,8                  D.9,8

(39)以下程序的输出结果是      。

#include <stdio.h>

main()

{

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

    int i,s=0;

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

        s+=aa[i][1];

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

}

A.11                        B.19                          C.13                   D.20

2.填空题

(1)以下程序的输出结果为      。

#include <stdio.h>

main()

{

    int i,j,row,column,m;

    int array[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};

    m=array[0][0];

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

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

            if(array[i][j]<m)

            {

                m=array[i][j];

                row=i,column=j;

            }

    printf("%d,%d,%d\n",m,row,column);

}

(2)以下程序的功能是:统计从键盘输入的字符中大写字母的个数。用#号作为输入结束的标志。

#include <stdio.h>

#include <ctype.h>

main()

{

    int num[26],i;

    char c;

 

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

        num[i]=0;

 

    /*统计从键盘输入的大写字母的个数*/

    while(      != '#')

        if( isupper(c)) num[c-65]+=1;

 

    /*输出大写字母和该字母的个数*/

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

       if(      ) printf("%c:%d\n,C,num[i]);

}

(3)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    int arr[10],i,k=0;

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

        arr[i]=i;

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

        k+=arr[i]=i;

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

}

(4)若有定义语句char s[100],d[100]; int j=0,i=0;,且s中字符串已赋值,以下程序的功能是实现字符串的复制(注:不得使用逗号表达式)。

while(s[i])

{

    d[j]=      ;

    j++;

}

d[j]=0;

(5)以下程序的输出结果是      。

#include <stdio.h>

main()

{

    char s[]="abcdef";

    s[3]='\0';

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

}

(6)以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如,输入的两个字符串分别为abcdef和abceef,则输出结果为-1。

#include <stdio.h>

main()

{

    char str[100],str2[100],c;

    int  i,s;

 

    printf("\n Input string 1:\n");

    gets(str1);

    printf("\n Input string 2:\n");

    gets(str2);

    i=0;

    while((strl[i]==str2[i])&&(str1[i]!=      ))

        i++;

    s=      ;

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

}

(7)以下程序可以把从键盘上输入的十进制数(long型)以二进制和十六进制形式输出。

#include <stdio.h>

main()

{

    char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    int c[64],d,i=0,base;

    long n;

 

    printf("Enter a number:\n");

scanf("%ld",&n);

    printf("Enter a new base:\n");

scanf("%d",&base);

    do

    {

        c[i]=      ;

        i++;

        n=n/base;

    } while(n!=0);

    printf("Transmite the new base:\n");

    for(--i;i>=0;--i)

    {

        d=c[i];

        printf("%c",b      ;

    }

}  

3.上机操作题

(1)有10个整数存放在一个数组中,编写一个程序,求这10个整数的最大值。

(2)有n个学生,每个学生有m门课,编写一个程序,求出每个学生的总分,每门课的平均分。

(3)编写一个程序,实现输入一个字符串时,将字符串中的所有小写字母转换成对应的大写字母。

(4)编写一个程序,删除一个字符串中的所有空格。