习题1 C语言基础知识
一、选择题
1.一个C程序由若干个C函数组成,各个函数在文件中的位置为 。 A.任意
B.第一个函数必须是主函数,其他函数任意 C.必须完全按照顺序排列
D.其他函数必须在前,主函数必须在最后 2.下列4个叙述中,正确的是 。 A.C程序中的所有字母都必须小写
B.C程序中的关键字必须小写,其他标识符不区分大小写 C.C程序中的所有字母都不区分大小写 D.C语言中的所有关键字必须小写 3.下列4个叙述中,错误的是 。
A.一个C源程序必须有且只有一个主函数 B.一个C源程序可以含零个或多个子函数 C.在C源程序中注释说明必须位于语句之后 D.C源程序的基本结构是函数
4.下面属于C语言关键字的是 。 A.int B.typedef C.enum D.union 5.以下叙述不正确的是 。 A.分号是C语句的必要组成部分 B.C程序的注释可以写在语句的后面 C.函数是C程序的基本单位
D.主函数的名字不一定用main表示
6.C语言中允许的基本数据类型包括 。 A.整型、实型、逻辑型 B.整型、实型、字符型 C.整型、字符型、逻辑型
D.整型、实型、逻辑型、字符型
7.C语言中能用八进制表示的数据类型为      。 A.字符型、整型                  B.整型、实型 C.字符型、实型、双精度型        D.字符型、整型、实型、双精度型 8.下列属于C语言合法字符常数的是      。 A.'\\97'       B.\          C.'\\t'          D.\9.在C语言中,5种基本数据类型的存储空间长度的排列顺序为       A.char A.0L         B.4962710      C.0412765      D.0xa34b7fe 11.若有以下定义语句char c1='b', c2='e'; printf(\则输出结果是      。  A.2,M B.3,E      C.2,E  D.输出项与相应的格式控制不一致,输出结果不确定 12.以下赋值语句合法的是      。  A.x=y=100     B.d??;          C.x+y          D.c=int(a+b) 13.设变量t为int型,下列选项中不正确的赋值语句是      。  A.++t;       B.n1=(n2=(n3=0));  C.k=i==m;       D.a=b+c=1; 14.在以下一组运算符中,优先级最高的是      。  A.≤         B.==            C.%             D.&& 15.下列能正确表示a≥10或a≤0的关系表达式是      。  A.a≥10 or a≤0                 B.a≥10 | a≤0 C.a≥10 || a≤0                 D.a≥10 && a≤0  16.下列只有当整数x为奇数时,才是逻辑“真”的表达式是      。  A.x%2==0    B.!(x%2==0)     C.(x-x/2*2)==0  D.!(x%2) 17.设a为整型变量,不能正确表达数学关系10 A.1010 && a<15                 D.!(a≤10)&&!(a≥15)  18.已知x=43,ch='A',y=0;则表达式(x≥y&&ch<'B'&&!y)的值是      。  A.0           B.语法错      C.1             D.假 19.表达式17%4/8的值为      。  A.0           B.1           C.2             D.3 20.语句printf(\?2));的输出结果是      。  A.无输出  B.结果不确定    C.?1           D.1 二、填空题 1.若有以下定义语句:int u=010,v=0x10,w=10; printf(\则输出结果是        。  2.下面程序的输出结果是        。  main()  {unsigned a=32768;   printf(\ 3.下面程序的输出结果是        。  main()  {int k=11;    printf(\ 4.若有以下定义语句:int a=5; printf(\则输出结果是        。  5.设x为int型变量,执行以下语句:x=10; x+=x?=x?x;,则x的值为        。 6.若定义x和y为double型变量,则表达式x=1, y=x+3/2的值是        。 7.若t为double型变量,表达式t=1, t+5, t++的值是        。 8.表达式10!=9的值是        。  9.设x,y,z和t均为int型变量,执行以下语句:x=y=z=1; t=++x||++y&&++z; 后t的值为        。  10.若a=1,b=2,c=3,d=4,则表达式a int a=2,b=3;  printf(a>b? \***a=%d\:\###b=%d\,a,b);  12.假定w,x,y,z和m均为int型变量,下面程序执行后m的值为        。  w=1;x=2;y=3;z=4; m=(w   m=(m 13.语句printf(\?hi\\?y\\\\\\bou\\n\的输出结果是        。 14.以下程序的输出结果是        。  main()  {unsigned short a=65536; int b;  printf(\ 15.若有定义int a=10,b=9,c=8; 接着顺序执行下列语句后,变量b的值为        。  c=(a-=b-5);  c=(a)+(b=3);  16.设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为        。 17.语句x++;、++x;、x=x+1;和x=1+x;执行后都使变量x的值增1,请写出一条同一功能的赋值语句(不得与列举相同)        。  18.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是        。 19.设y是int型变量,请写出判断y为奇数的关系表达式        。 20.若定义int a=25,b=14,c=19;以下语句的执行结果是        。  a++<=25&&b  --<=2&&c++<=18?printf(\%d,b=%d,c=%d\\n\ 21.设有以下定义,并赋予了确定的值:char w; int x; float y; double z;则表达式w*x+z?y所求得值的数据类型为        。  22.设有int =11;表达式x++*1/3的值为        。  23.设定义int x=1,y=1; 则表达式(!x||y??)的值是        。  24.若有以下程序段,int c1=1,c2=2,c3; c3=1.0/c2*c1; 执行后,变量c3的值为        。 25.下列程序的输出结果是16.00,请将程序填写完整。  main()  {int a=9,b=2;   float x=        ,y=1.1,z;  z=a/2+b*x/y+1/2;   printf(\ 26.设x和y均为int型变量,且x=10和y=3,则以下语句的输出结果是        。  printf(\ 27.下列程序的输出结果是        。  main()  {int a=-1,b=4;   k=(++a<0)&&!(b--<-0);   printf(\ 28.下列程序的输出结果是        。  main()  {double d=3.2;int x,y;   x=1.2;y=(x+3.8)/5.0;  printf(\ 29.下列程序的输出结果是        。  main()  {double d;float f;long l;int j;  j=f=l=d=20/3;   printf(\ 30.下列程序的输出结果是        。  main()  {int a=1,b=2;   a+=b;b=a-b;a-=b;      printf(\ 习题2  顺序结构  一、选择题  1.下面程序的输出结果是      。  main() {  int k=11;  printf(\}  A.k=11,k=12,k=13      C.k=11,k=013,k=oXb     2.以下合法的C语言赋值语句是      。 A.a=b=58  B.k=int(a+b);  3.以下程序的输出结果是      。  main() {  int x=10,y=3;  printf(\}  B.k=11,k=13,k=13 D.k=11,k=13,k=b C.a=58,b=58     D.?i;  A.0    B.1    C.3    D.不确定  4.若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是      。  A.read (a,b,c);       B.scanf(\C.scanf(\ D.scanf(\5.执行下面程序段后,c3中的值是      。  int c1=1,c2=2,c3; c3=c1/c2;  A.0    B.1/2    C.0.5  6.若执行以下程序段,其输出结果是      。  int a=0,b=0,c=0;  c=(a-=a-5),(a=b,b+3);  printf(\   D.1  A.3,0,?10  B.0,0,5   7.以下程序段的输出结果是      。  float a=57.666;  printf(\  C.?10,3,?10   D.3,0,3  A.*0000057.66*    C.*0000057.67*    8.若有以下说明和语句:  int a=5 a++;        B.* 57.66* D.* 57.67*  此处表达式a++的值是      。 A.7    B.6  9.若有以下语句:    C.5    D.4  char c1='b',c2='e';  printf(\ 则输出结果是      。 A.2,M           B.3,E    C.2,e       10.以下程序的输出结果是      。  main() {   int x=10,y=10;  printf(\}   D.输出结果不确定  A.10   10  B.9    9   C.9    10   D.10   9 11.在C语言中,如果下面的变量都是int类型,则输出结果是      。  sum=pad=5;  pAd=sum++,pAd++,++pAd; printf(\ A.7   B.6   12.以下程序的输出结果是      。  #include  int i=010,j=10;  printf(\}   C.5    D.4  A.11,10   B.9,10  13.以下程序的输出结果是      。  int i=65536  printf(\   C.010,9    D.10,9  A.65535       B.0 C.有语法错误,无输出结果    D.1  14.已知字符A的ASCII码为十进制的65,下面程序的输出结果是      。  main() {  char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';  printf(\}  A.67,D   B.B,C  15.若有以下语句: 则输出结果是      。  A.abcd   B.a  1 2    C.C,D    D.不确定的值  char s[10]; s=\;     C.adcb    D.编译不能通过  16.若有定义:int x,y; char a,b,c; 并输入以下数据(此处 则能给X赋整数值1,给Y赋数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是      。  A.scanf(\ B.scanf(\C.scanf(\ D.scanf(\ 17.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是      。  main() {      int x;  scanf(\ if(x++>5) printf(\else printf(\}  A.7和5  B.6和3   C.7和4   D.6和4 18.若执行下面的程序,从键盘输入3和4,则输出结果是      。  main()  { int a,b,s;  scanf(\s=a;  if (a s=s*s;  printf(\}  A.14   B.16    C.18    D.20 19.设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:  scanf(\ 为了将100和765.12分别赋给i和f,则正确的输入为      。 A.100<空格>765.12<回车>  C.100<回车>765.12<回车>  20.以下程序的输出结果是      。  #include     printf(\}    B.i=100,f=765.12<回车>  D.x=100<回车>,y=765.12<回车>    A.不确定  B.0    C.–1    D.1 二、填空题  1.复合语句在语法上被认为是        ,空语句的形式是        。  2.\表示如果串长      m,则在m列范围内,字符串向     靠,    补空格。 3.如果想输出字符“%”,则应该在“格式控制”字符串中用        表示。 4.printf函数的“格式控制”包括两部分,分别是        和        。 5.符号“&”是        运算符,&a是指        。 6.putchar函数的作用是        。  7.复合语句是由一对        括起来的若干语句组成的。 8.goto语句的主要用途是        和        。 9.getchar 函数的作用是        。  10.将for(表达式1;表达式2;表达式3); 改写为等价的while语句为        。  11.语句标号由标识符表示,由        、        和        组成。第一个字符必须是字母或下划线。  12.函数中的“格式控制”后面应当是        ,而不是        。 13.while语句的特点是        ,do?while语句的特点是        。 14.分析下面的程序:  main()  { int x,y;  x=16;y=(x++)+x; printf(\x=15;printf(\x=20;y=x--+x;printf(\x=13;printf(\}     程序的输出结果是        。  15.下列程序的输出结果是        。  #include \main()  { char  b[]=\   char  *chp=&b[7];    while(--chp>&b[0])      putchar(*chp);    putchar('\\n'); }  三、编程题  1.编写程序,输入两个整数:1 500和350,输出它们的商和余数。  2.编写程序,读入3个整数赋给a、b、c,然后交换它们中的数,将a中原来的值赋给b,b中原来的值赋给c,c中原来的值赋给a,且输出改变的a、b、c的值。  3.输入两个整型变量a、b的值,输出a+b、a-b、a*b、a/b、(float)a/b、a%b的结果,要求连同算式一起输出,每个算式占一行。  例如,a等于10,b等于5,则a+b的结果输出为: 10+5=15  4.输入一个非负数,计算以这个数为半径的圆周长和面积。  5.输入任意一个3位数,将其各位数字反序输出(例如,输入123,输出321)。 6.输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是,则输出“NOT”(要求用条件表达式进行判断,不使用if语句)  7.求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,从大到小的顺序输出这3个字符及其对应的ASCII码值。  习题3  选择结构和循环结构  一、选择题  1.有以下程序:  main() {    int  i;   for(i=0;i<3;i++) switch(i)  {    case 1:printf(\case 2:printf(\default:printf(\} }  执行后输出的结果是      。 A.011122  B.012  2.有以下程序:    C.012020   D.120  main() {  int  i=1,j=1,k=2;     if((j++||k++)&&i++)      printf(\}  执行后输出的结果是      。      A.1,1,2   3.有以下程序:  B.2,2,1    C.2,2,2    D.2,2,3  main()   { int  a=5,b=4,c=3,d=2; if(a>b>c)  printf(\else if((c-1>=d)==1) printf(\else  printf(\}  执行后,输出结果是      。  A.2       C.4       4.有以下程序:  main()  {  int  i=0,s=0;    do {      if(i%2)      { i++;continue;}       i++;       s+=i;      }  while(i<7);   printf(\}      B.3  D.编译时有错,无结果  执行后的输出结果是      。  A.16   B.12   5.以下程序的输出结果是      。   C.28    D.21  main()  { int a=5,b=4,c=6,d;     printf(\}  A.5    B.4    C.6 6.以下程序中,while循环的循环次数是      。  main()  { int i=0;    while(i<10)    { if(i<1) continue;      if(i==5) break;      i++;   } }     D.不确定  A.1        C.6        7.以下程序的输出结果是      。  main()  { int a=0,i;     for(i=1;i<5;i++)   { switch(i)     { case 0:        case 3:a+=2;       case 1:        case 2:a+=3;       default:a+=5;     B.10  D.死循环,不能确定次数        }   }   printf(\}  A.31   B.13   8.以下程序的输出结果是      。  main()   { int a=4,b=5,c=0,d;     d=!a&&!b||!c;      printf(\}   C.10    D.20  A.1    B.0   9.以下程序的输出结果是       。  #include   { int i=0,a=0;    while(i<20)     { for( ; ; )          { if((i)==0) break;           else i--;         }         i+=11;a+=i;     }      printh(\}   C.非0的数   D.?1  A.21   B.32  10.阅读以下程序:      。  main() { int x;  scanf(\ if(x--<5) printf(\else printf(\}    C.33    D.11  程序运行后,如果从键盘上输入5,则输出结果是      。  A.3   B.4    C.5   11.假定w、x、y、z、m均为int型变量,有如下程序段:  w=1;x=2;y=3;z=4;  m=(w  D.6  则该程序运行后,m的值是      。  A.4   B.3   12.以下程序的输出结果是      。  main()  { int a,b;  for(a=1,b=1; a<=100;a++)  { if(b>=10) break; if(b%3==1)  { b+=3;continue;} }  printf(\}   C.2    D.1  A.101   B.6    C.5    D.4 13.若执行以下程序时,从键盘上输入9,则输出的结果是      。  main() { int n;       scanf (\  if(n++<10)        printf(\  else        printf(\}  A.11   B.10 14.有以下程序段:  int k=0 while(k=1) k++;     C.9    D.8  while 循环执行的次数是      。  A.无限次       B.有语法错误,不能执行 C.一次也不执行      D.执行1次 15.以下程序执行后,sum的值是      。  main()  {  int i,sum;     for(i=1;i<6;i++) sum+=i;    printf(\}  A.15   B.14 16.有以下程序段:  int x=3 do  { printf(\while(!(--x));     C.不确定   D.0  其输出结果是      。  A.1   B.3  0    C.1  ?2   D.死循环 17.若变量c为char类型,能正确判断出c为小写字母的表达式是      。  A.'a'<=c<= 'z'  B.(c>= 'a')||(c<= 'z') C.('a'<=C)and ('z'>=c) D.(c>= 'a')&&(c<= 'z')  18.以下程序的输出结果是      。  main()  { int x=0.5;char z='a';  printf(\ A.0   B.1   19.以下程序的输出结果是      。  main()  {  int x=10,y=10,i;  for(i=0;x>8;y=i )  printf(\}   C.2    D.3  A.10 1 9 2  B.9 8 7 6  20.以下程序的输出结果是      。  main() { int i;    for(i=1;i<=6;i++)   {if(i%2)     {printf(\  printf(\   C.10 9 9 0   D.10 10 9 0    }  printf(\}  A.#*#*#*  B.#####  21.以下程序的输出结果是      。   C.*****   D.*#*#*  main() { int i;    for(i='A';i<='I';i++)printf(\  printf(\}  A.编译不通过,无输出   C.acegi       22.以下程序输出结果是      。  main () { int m=5;  if (m>5 print(\else printf(\”,m--); }    B.aceg  D.abcdefghi  A.7   B.6    C.5    D.4  23.运行以下程序后,如果从键盘上输入china#后回车,则输出结果为      。  #include  { int v1=0,v2=0; char ch;  while ((ch=getchar())!='#') switch (ch) {case 'a': case 'h':  default:v1++; case '0':v2++; }  printf(\}  A.2,0   B.5,0  24.设有如下定义:  int a=1,b=2,c=3,d=4,m=2,n=2;    C.5,5    D.2,5  则执行表达式(m=a>b)&&(n=c>d)后,n的值为      。  A.1   B.2    C.3  25.以下程序的输出结果是      。  main()  { int i,j,x=0;    for(i=0;i<2;i++)   {x++;    for(j=0;j<3;j++)       { if(j%2)  continue;        x++;}    x++;  }   printf(\   D.0  A.x=4   B.x=8    C.x=6    D.x=12 26.设x和y均为int型变量,则执行下的循环后,y值为      。  for(y=1,x=1;y<=50;y++)  {if(x==10)}break;   if(x%2==1)     {x+=5;continue;}       x-=3; }  A.2   B.4    C.6    D.8 27.假定a和b为int型变量,则执行以下语句后b的值为      。  a=1;b=10; do  {b-=a;a++;} while(b--<0);  A.9   B.?2    C.?1    D.8 28.设j为int型变量,则下面for循环语句的执行结果是      。  For (j=10;j>3;j--) { if(j%3)  j--;    --j;--j;    printf(\,j); }  A.6 3   B.7 4   29.以下程序的输出结果是      。   C.6 2    D.7 3  main()  { int x,i;     for(i=1;i<=50;i++)      {x=i;        if(x%2==0)         { x++;if(x%3==0)            { x++;if(x%7==0)               { x++;printf(\      } }  A.28   B.27    C.42    D.26 30.假定所有变量均已正确说明,下列程序段运行后x的值是      。  a=b=c=0;x=35; if(!a)x--;  else if(b);if(c)x=3; else x=4;  A.34   二、填空题  1.若有以下程序:  B.4    C.35    D.3  main()  { int p,a=5; if(p=a!=0)  printf(\else  printf(\}  执行后,输出结果是      。 2.若有以下程序:  main()  { int a=4,b=3,c=5,t=0; if(a printf(\}  执行后,输出结果是      。  3.以下程序运行后的输出结果是      。       main()  { int a=1,b=3,c=5;     if(c=a+b) printf(\   else printf(\}  4.以下程序运行后的输出结果是      。  main( )  { int i,m=0,n=0,k=0;    for(i=9;i<=11;i++)    switch(i/10)     { case 0: m++;n++;break;       case 10:n++;break;       default:k++;n++;    }    printf(\  }  5.执行以下程序后,输出'#'号的个数是      。  #include     for(i=1;i<5;i++)     for(j=2;j<=i;j++) putchar('#'); }  6.若从键盘输入58,则以下程序输出的结果是      。  main() { int a;     scanf(\    if(a>50) printf(\   if(a>40) printf(\   if(a>30) printf(\}  7.以下程序输出的结果是      。   main()  { int a=5,b=4,c=3,d;    d=(a>b>c);     printf(\}  8.以下程序的输出结果是      。   main() { int s,i;     for(s=0,i=1;i<3;i++,s+=i);    printf(\}  9.以下程序运行后的输出结果是      。  main()  { int i=10,j=0; do  { j=j+i;i--; }while(i>2);  printf(\}  10.设有以下程序:  main()  { int n1,n2;  scanf(\    while(n2!=0) { n1=n2; n2=n2/10;  printf(\} }  程序运行后,如果从键盘上输入1298,则输出结果为      。 11.下列程序段的输出结果是      。  int n='c'; switch(n++)  { default:printf(\ case 'a':case 'A':case 'b': case 'B':printf(\case 'c':case 'C':printf(\case 'd':case 'D':printf(\}  12.下面程序输出结果是      。  main()  { int x=1,y=0,a=0,b=0;     switch(x)     {case 1:       switch(y)        {case 0:a++;break;        case 1:b++;break;       }      case 2:      a++;b++;break;     }      printf(\}  13.程序执行后的输出结果是        。  main( )  {  int x=0,y=5,z=3;    while(z-->0&&++x<5)  y=y-1;     printf(\}  14.若有int i=5, j=10;则执行完以下语句后,j的值为       。  switch (i){  case 4:j++;  case 5:j--;  case 6:j++;  case 7:j-=2;  default: ;  }  15.有以下程序:  main()  { int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3;  printf (\}  执行后的输出结果是        。  16.执行以下程序后的输出结果是        。  main()      { int a=5,b=4,c=3,d=2;            if(a>b>c)             printf(\       else if((c-1>=d)==1)                 printf(\           else                  printf(\    }  17.当a=1,b=3,c=5,d=4时,执行完下面的一段程序后x的值是      。  if(a   if(c     if(a       if(b 18.下列程序段的输出结果是      。  int k,s;  for(k=0,s=0;k<10;k++)   if (s>k) break;   else s+=k;       printf(\ 19.输入c2470f ?<回车>后,下列程序的输出结果是      。  #include  { char ch;long number=0;     while((ch=getchar())<'0'||ch>'6');    while(ch!='?'&&ch>='0'&&ch<='6')       {       number=number*7+ch-'0';      printf(\     ch=getchar();      } }  20.输入4<回车>后,下列程序的输出结果是        。  #include  { int j,k,n;   float f,s;    scanf(\%d”,&n);   s=0;  f=1;  for(k=1;k<=n;k++) {    for(j=1;j   printf(\%.0f#”,s);     } }          21.下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。  #include  { int i,j;   for(i=0;       ;i++)   { j=i*10+6;       if(      ) continue;      printf(\      } }  22.下面程序的功能是求1!+2!+3!+4!+5!,请填空。  main( )  { int  i,j,f,sum=0;     for(i=1;i<=5;i++)     { f=1;        for(j=1;            ;j++)                      ;      sum=sum+f;     }    printf(\}  23.以下程序可判断输入的一个整数是否能被3或7整除,若能整除,输出“yes”,否则输出“no”,请填空。  #include     printf(\   scanf(\   if                          printf(\   else        printf(\}  24.以下程序将从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入,程序中用i统计大于零的个数,用变量j统计小于零的整数,请填空。    main()    {  int  n,i,j;       printf(\     i=j=0;       scanf (\     while                 {  if (n>0)  i++;       if (n<0)  j++;                   ;     }        printf(\}  25.如果一个数各位数的立方和等于它本身,则这样的数称为水仙花数,求100~999中所有的水仙花数,请填空。  main()  {  int  i,a,b,c;     for(i=100;i<=999;i++)      { a=i/100;         b=       ;          c=i;      if(        )          printf(\ }  }  26.输入一个正整数n,计算并输出s前n项的和,请填空。 S=1-1/2+1/3-1/4+1/5-1/6+…  #include     { int k,flag,n;float s;     flag=1;s=0;      scanf(\       for (k=1;k<=n;k++){        s=s+       ;             ;      }       printf(\ }  27.输出下列图形,请填空。  1  2  3  4  5  6  7  8  9         2  3  4  5  6  7  8  9            3  4  5  6  7  8  9               4  5  6  7  8  9                   5  6  7  8  9                           6  7  8  9 7  8  9 8  9 9  main() int i,j;  for(i=1;i<=     ;i++)  {for(j=       ;j<=9;j++)printf(\ printf(\ 28.下面程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,最后当输入负数时结束输入,请填空。  main()  { float x,amax,amin;    scanf(\  amax=x;  amin=x;    while(                 )  { if(x>amax)  amax=x;     if(x printf(\ }  29.下面程序的功能是计算1~10之间的奇数之和与偶数之和,请填空。  main( )  int a,b,c,i; a=c=0;  for( i=0;i<=10;i+=2) { a+=2;                   ;    c+=b; }  printf(\偶数之和:%d\\n\ printf(\奇数之和:%d\\n\ 30.以下程序用“辗转相除法”求出两个正整数的最大公约数,请填空。若两个数分别放在m和n中,求最大公约数的算法如下:  (1)将两数中最大的放在m中,小的放在n中。 (2)求出m被n除后的余数r。  (3)若余数为0则执行步骤(7);否则执行步骤(4)。 (4)将除数作为新的被除数;将余数作为新的除数。      (5)求出新的余数r。 (6)重复步骤(3)~(5)。 (7)输出n,n即为最大公约数。  main()  {  int r,m,n,t;     printf(\   scanf(\    printf(\   if(m      {t=m;m=n;n=t;}       r=         ;    while (         )    {m=n;n=r;r=       ;}    printf(\}  三、编程题  1.求出100~300内所有百位和个位相加能被3整除的数。 2.编程求S=1/1!+1/2!+1/3!+... +1/n!直到1/n!≤ 1e?6  3.编写程序实现用一元人民币换成一分、两分、五分的硬币共50枚。  4.编写程序,输出从公元1000年~2000年所有闰年的年号。判断闰年的条件是: (1)公元年数如能被4整除,而不能被100整除,则是闰年。 (2)公元年数能被400整除也是闰年。 5.输入一个4位数,求各位数字的平方和。 例如:输入1234,输出30。  6.写出满足不等式1+1/2+1/3+1/4+...+1/N>15最小的N值,并输出各项之和s的值。 7.铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超过50公斤,超过部分每公斤加收0.10元。编写程序完成自动计费工作。  8.相邻两个奇数都为素数的一对数叫双胞胎素数,输出100~200之间的所有双胞胎素数。  9.输入一串字符以“#”结束,如果它是大写字母转换为小写字母输出,如果是小写字母转换为大写字母输出。如果不是字母,则照原样输出。  10.输入一个4位数,要求将它的千位、百位、十位、个位上的数字按由小到大排列,输出一个新数。  例如,输入4287  则输出为 2478。  11.输入两门课的成绩,如果两门成绩都在60分以上。则输出“it is pass.”,只要有一门低于60分就输出“it is not pass.”如果输入的任何一门成绩不在0~100范围内则输出“it is error.”(要求用switch语句来编程)。  12.求任一数字所有因子的组合(仅限两个因子),且不可重复输出。 例如,15=1*15,15=3*5,而15=5*3,15=15*1就不用输出。  13.从键盘输入几个数,以0作为结束标志,判断其正负,并求其平方和。  14.编写一个译码程序,将一个英语句子译成数字代码。译码规则是以数字1代替字母a,数字2代替字母b,??,26代替字母z,以数字27代替字母A,数字28代替字母B,??,42代替字母Z,如遇空格则打印一个星号“*”,英文句子以“.”结束。  15.求所有个位、十位、百位数字能组成一个三角形3边的3位数(注意:三角形任意两边之和大于第三边)。      习题4  函  数  一、选择题  1.建立函数的目的之一是      。 A.提高程序的执行效率    B.提高程序的可读性 C.减少程序的篇幅     D.减少程序文件所占内存 2.以下正确的说法是      。  A.用户若需调用标准函数,调用前必须重新定义  B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C.系统根本不允许用户重新定义标准函数  D.用户若需要调用标准库函数,调用前不必使用预编译命令将该函数所在文件包 括到用户源文件中,系统自动去调用  3.在C语言中,以下说法正确的是      。  A.普通实参和与其对应的形参各占用独立的存储单元 B.实参和与其对应的形参共占用一个存储单元  C.只有当实参和与其对应的形参同名时才共占用存储单元 D.形参是虚拟的,不占用存储单元  4.若调用一个函数,且此函数中没有return语句,则关于该函数正确的说法是      。 A.没有返回值  B.返回若干个系统默认值  C.能返回一个用户所希望的函数值 D.返回一个不确定的值  5.在C语言中以下不正确的说法是      。 A.实参可以是常量、变量、或表达式 B.形参可以是常量、变量或表达式 C.实参可以为任意类型  D.形参应与其对应的实参类型一致  6.以下程序有语法性错误,有关错误原因的正确说法是      。  main()  {  int G=5,k;     void  prt_char();    …       k=prt_char(G);      … }  A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母  C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线  7.有关函数调用,以下错误的描述是      。 A.出现在执行语句中   B.出现在一个表达式中 C.作为一个函数的实参  D.作为一个函数的形参 8.以下正确的说法是      。  A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可嵌套      C.函数的定义和调用均不可以嵌套 D.函数的定义和调用均可以嵌套  9.若使用一维数组名作函数实参,则以下正确的说法是      。 A.必须在主调函数中说明此数组的大小 B.实参数组类型与形参数组类型可以不匹配 C.在被调用函数中,不需要考虑形参数组的大小 D.实参数组名与形参数组名必须一致  10.如果在一个函数中的复合语句中定义了一个变量,则有关该变量说法正确的是       。  A.只在该复合语句中有效 B.在该函数中有效  C.在本程序范围中均有效 D.为非法变量 二、填空题  1.折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值,如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请填空。  binary(int a[10],int m) { int  low=0,high=9,mid;   while(low<=high)     { mid=(low+high)/2;       if(m      else  if(m    return(-1); }  2.以下程序的运行结果是        。  #define  MAX  10 int  a[MAX],i; main()  {  printf(\   sub2()     {int  a[MAX],i,max;     max=5;     for(i=0;i    sub1()     { for(i=0;i    sub3(int  a[ ])    {int i;        for(i=0;i 3.下面程序的运行结果是        。  void  num()  {  extern  int  x,y;    int  a=15,b=10;    x=a-b;  y=a+b;     }  int  x,y; main()  {int  a=7,b=5;   x=a+b;   y=a-b;   num();    printf(\}     4.以下程序的运行结果是        。  main()  {  int  a=2,i;     for(i=0;i<3;i++)     printf(\}    f(int a)  {  int  b=0;static int  c=3;    b++;c++;     return(a+b+c) ; }  5.如果输入的值是-125,以下程序的运行结果是        。  #include   {   int  n;      scanf(\    printf(\     if(n<0) printf(\-\;     n=fabs(n);     fun(n); }    fun(int  n) { int  k,r;    for(k=2;k<=sqrt(n);k++)   {r=n%k;     while(r==0)     {printf(\    n=n/k;      if(n>1)  printf(\    r=n%k;     }   }   if(n!=1) printf(\}  6.以下程序的运行结果是        。   main()   {increment();   increment();   increment();  }     increment()  { int x=0;    x+=1;     printf(\ }          7.以下check函数功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“well done”,否则显示计算后的值。已有函数调用语句check(ponse,value);请填空。  void  check(int  ponse,float  value) { int  val;     val=         ;     printf(\计算后的值:%d\    if(         )  printf(\    else  printf(\}  8.若输入一个整数10,以下程序的运行结果为        。  main()  {int  a,e[10],c,i=0;  scanf(\ while(a!=0)   {c=sub(a);    a=a/2;    e[i]=c;    i++; }   for(;i>0;i--)  printf(\}   sub(int a)   { int c;     c=a%2;      return  c;   }  9.已有函数pow,现要求取消变量i后pow函数的功能不变,请填空。 修改前的pow函数:  pow(int  x, int  y) {int  i,j=1;    for(i=1;i<=y;++i)  j=j*x;   return(j); }  修改后的pow函数:  pow(int  x, int   y) { int  j;       for(         ;                ;                )  j=j*x;    return(j);}  10.以下程序的功能是求3个数的最小公倍数,请填空。  max(int  x, int  y, int  z) {if (x>y &&x.>z)  return(x);  else  if(         )  return(y);  else  return(z);  }   main()   { int  x1,x2,x3,i=1,j,x0;      printf(\    scanf(\    x0=max(x1,x2,x3);     while(1)     {j=x0*i;        if(         )  break;      i=i+1;      }     printf(\ }  11.以下程序的运行结果是        。   main()   {int  x=2,y=3,z=0;    printf(\  add(x,y,z);    printf(\  }       add(int  x,int  y,int  z) {z=x+y;   x=x*x;  y=y*y;   printf(\ }  12.下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π值,请填空。  π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…  double  pi(double  eps)     { double  s,t;   int  n;    for(         ;t>eps;n++)   {s+=t;      t=n*t/(2*n+1);   }     return(         );}  main()  { double  x;    scanf(\   printf(\\neps=%lf, π=%lf\ 13.下面程序运行结果是        。  long  fib( int  g) { switch(g)       {case  0: return  0;        case  1:case 2: return  1;}    return(fib(g-1)+fib(g-2)); }  main() {long  k;  k=fib(7);   printf(\      14.以下程序的运行结果        。  f(int  a[ ]) { int  i=0;     while(a[i]<=10)    {printf(\   i++;}  }  main()  { int  a[]={1,5,10,9,11,7};  f(a+1); }  15.以下程序的运行结果为        。  main()  { int  a[3][3]={1,3,5,7,9,11,13,15,17},sum;    sum=func(a);     printf(\       }     func(int  a[][3])    {int  i,j,sum=0;     for(i=0;i<3;i++)        for(j=0;j<3;j++)          {a[i][j]=i+j;             if(i= =j) sum=sum+a[i][j];     }     return(sum); }  16.已定义一个含有30个元素的数组,函数fav1的功能是按顺序分别赋予各元素从2开始的偶数,函数fav2按顺序每5个元素求一个平均值,并将该值存放在数组w中,请填空。   #define  SIZE  30 fav1(float  s[ ]) { int  k,i;    for(k=2,i=0;i             fav2(float  s[ ],float  w[ ]) {float  sum;int  k,i;      sum=0.0;       for(k=0,i=0;i        if((i+1)%5==0)          { w[k]=sum/5;                           ;            k++;          }        } }   main()  {float  s[SIZE],w[SIZE/5],sum;  int i,k;  fav1(s);  fav2(s,w); }  17.函数del的作用是删除有序数组a中的指定元素x,已有调用语句n=del(a,n,x);其中实参n为删除前数组元素的个数,请填空。  del(int  a[ ],int  n,int  x) {int  p,i;   p=0;    while(x>=a[p]&&p   return  n; }  18.函数swap(int  x, int  y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为              ,原因是                        。  a[0]=1;a[1]=2; swap(a[0],a[1]);     19.以下程序的运行结果为        。  main()  {int  a=1,b=2,c=3;  ++a;  c+=++b;   {int  b=4,c;   c=b*3;   a+=c;    printf(\  a+=c;    printf(\  }   printf(\ }  20.以下程序的运行结果为        。  int  k=1; main()  { int  i=4;    fun(i);     printf(\ }  fun(int  m) { m+=k;k+=m;       {char  k=’B’;       printf(\’A’);      }   printf(\}     21.以下程序的运行结果是        。  int  x1=30,x2=40; main()  { int  x3=10,x4=20;   sub(x3,x4);   sub(x2,x1);    printf(\}    sub(int  x,int  y) {x1=x;x=y;y=x1;}  22.以下程序运的行结果是        。  int  a=5;int  b=7; main()  { int  a=4,b=5,c;   c=plus(a,b);    printf(\}   plus(int  x,int  y) {  int  z;    z=x+y;     return(z);}  23.以下程序的运行结果是        。  int  a=3,b=5; max(a,b) {int  c;    c=a>b?a:b;       return(c); }    main()  { int  a=8;     printf(\ 24.以下程序的运行结果是        。  int   n=1; main()  { static int  x=5;   int  y;     y=n;    printf(\  func();    printf(\  func(); }    func( )  { static  int   x=4;   int  y=10;   x=x+2;   n=n+10;   y=y+n;    printf(\}  25.以下程序的运行结果是        。   main()   {increment();   increment();   increment();   }     increment()  { static  int  x=0;   x+=1;    printf(\}  26.以下程序的运行结果是        。  main( ) { incx( );   incy( );   incx( );   incy( );   incx( );   incy( ); }    incx( )  {  int  x=0;     printf(\incy( )  { static  int  y=0;  printf(\}  27.编写程序输出下列图形:  * ***     ***** ******* ***** *** *  请完成填空。  void  a(int  i) {int  j,k;   for(j=0;j<=7-i;j++)     printf(\;              for(k=0;k<     ;k++)            printf(\           printf(\}    main() {int  j;   for(j=0;j<3;j++)                 ;   for(j=3;j>=0;j--)                 ;  }    三、编程题  1.已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime用来判断一个整型数是否为素数,若是素数,函数返回1,否则返回0。试编写isprime函数。  2.编写程序,将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调用函数中完成复制。  3.从键盘输入一个字符串,然后按要求输出一个新字符串,新串是在原串中,每两个字符之间插入一个空格,如原串为abcd,则新串为abcd。要求在函数insert中完成新串的产生,并在函数中完成所有相应的输入和输出。  4.设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按降序重新排列并输出新的完整数列。进行降序处理时要求使用函数。  5.编写程序,统计从键盘输入的命令行中第二个函数所包含的英文字符个数。  6.编写程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。  7.有10个字符串,在每个字符串中,找出最大字符按一一对应的顺序放入一维数组a中,即第i个字符串中的最大字符放入a[i]中,输出每个字符串中的最大字符,要求用函数实现。  8.把两个已按升序排列的数组合并成一个升序数组,要求用函数实现。  9.下列程序功能是应用下面的近似公式计算e的n次方。函数f1用来计算每项分子的值,函数f2用来计算每项分母的值,试编写两个函数。  ex =1+x+x 2/2!+x 3/3!+?(前两项的和)  float  f2(int  n) {       }  float  f1(int  x, int  n) {       } main( )  {float  exp=1.0;  int  n,x;   scanf(\ printf(\ exp=exp+x;   for(n=2;n<=19;n++)  exp=exp+f1(x,n)/f2(n);      printf(\}  10.设计一个程序,在主函数中实现从键盘输入一个大写英文字母。在自定义函数中要求顺序打印出3个相邻的字母,指定的字母在中间。如指定的字母为Z,则打印YZA;若为A,则打印ZAB。  11.有一数列,该数列的第1、2项分别为0和1,以后每个奇数编号的项是前两项和的绝对值,偶数编号的项是前两项的差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。试编程。  12.从键盘输入若干整数,其值在0~4的范围内,用-1作为输入结束的标志,统计整数的个数。通过函数实现。  13.从键盘输入两个字符串a和b,要求不用strcat把b中的前5个字符连接到a中,如果b的长度小于5,则把b的所有元素都连接到a中。试编程。    习题5  编译预处理  一、选择题  1.宏定义#define PI 31.14159中,宏名PI代替      。 A.单精度  B.双精度   C.常量  2.设有以下宏定义:  #define N 3   #define Y(n)  ((N+1)*n)   D.字符串  执行语句z=2*(N+Y(5+1));后,z的值为      。 A.出错   B.42    C.48   3.以下说法正确的是      。 A.#define和printf都是C语句  B.#define 是C语句,而printf不是 C.printf是C语句,但#define不是 D.#define 和printf都不是C语句  4.宏定义的宏展开是在      阶段完成的。 A.第一遍编译      B.第二遍编译 C.程序执行       D.预编译 5.编译预处理命令以      结尾。 A.;   B..     C.\\     二、填空题  1.程序中有定义:  #define S(r)  r/r int a=4,b=3,area;  D.54  D.回车  则表达式area=S(a+b)的值为        。 2.若有以下宏定义:  #define  STR  \#define  A  97  已知字符a的ASCII码值为97,则语句printf(STR,A,A+2);的输出结果为        。 3.以下程序的输出结果是        。  #define M(x,y,z)  x*y+z main()  {int a=1,b=2,c=3;       printf(\ 4.下列程序执行后的输出结果是        。  #define MA(x)  x*(x-1) main()  { int a=1,b=2;      pirntf(\   5.C语言中,宏定义的有效范围从定义处开始,到本源程序结束处中止。但可以用         来提前解除宏定义的作用。  习题6  数  组  一、选择题  1.若有以下语句:  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?]  2.假设int型变量占两个字节的存储单元,若有定义:  int x[10]={0,2,4};   D.a[?d?-c]  则数组x在内存中所占字节数为      。 A.3    B.6    3.下列合法的数组定义是      。 A.int a[]=\     C.char a=\     4.若给出以下语句:  C.10    D.20  B.int a[5]={0,1,2,3,4,5}; D.char a[]={0,1,2,3,4,5};  char x[]=\ char y[]={'a','b','c','d','e','f','g'};  则正确的叙述为      。 A.数组x和数组y等价    C.数组x的长度大于数组y的长度  5.若定义如下变量和数组      。  int  j;  int x[3][3]={1,2,3,4,5,6,7,8,9};  B.数组x和数组y的长度相同  D.数组y的长度大于数组x的长度  则下面语句的输出结果是      。  For (j=0;j<3;j++)    printf(\ A.1  5  9  B.1  4  7   6.下列程序运行后的输出结果是      。  main()  {int n[3],t,j,k;  for(t=0;t<3;t++)    n[t]=0;    k=2;     for(t=0;t    printf(\ C.3  5  7   D.3  6  9  A.2    7.有以下程序:  main()   B.1    C.0    D.3    { int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\}  执行后的输出结果是      。 A.58   B.56    C.45    D.24 8.以下能正确定义数组并正确赋初值的语句是      。 A.int N=5,b[N][N];     B.int a[1][2]={{1},{3}}; C.int c[2][]= {{1,2},{3,4}};    D.int d[3][2]={{1,2},{34}}; 9.有以下程序:  main()  {int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2;  for(i=0; i<3; i++)     {printf(\}  执行后的输出结果是      。 A.4 5 6   B.2 5 8    C.3 6 9    D.7 8 9 10.以下能正确定义一维数组的选项是      。  A.int num[];       B.#define N 100   int num[N];  C.int num[0..100];     D.int N=100;  int num[N];  11.下列选项中正确的语句是      。  A.char s[8]; s={\  B.char *s; s={\C.char s[8]; s=\   D.char *s; s=\12.有以下程序      。  int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];  b中的值是      。  A.5   B.6 13.有以下程序:     C.8    D.9  main( )  {char a[]=\printf(\}  执行后的输出结果是      。  A.7  7   B.8  8  14.有以下程序:    C.8  10   D.10  10  void swap1(int c[]) { int t;    t=c[0];c[0]=c[1];c[1]=t; }  void swap2(int c0,int c1) { int t;    t=c0;c0=c1;c1=t;} main( )  { int a[2]={3,5},b[2]={3,5};    swap1(a);  swap2(b[0],b[1]);     printf(\}      其输出结果是      。  A.5 3 5 3  B.5 3 3 5 15.有以下程序:    C.3 5 3 5   D.3 5 5 3  int f(int b[][4]) { int i,j,s=0;    for(j=0;j<4;j++)   {i=j;     if(i>2)  i=3-j;       s+=b[i][j];    }    return s; }  main( )  { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};    printf(\}    执行后的输出结果是      。  A.12   B.11  16.有以下程序:    C.18    D.16  void sort(int a[],int n) {  int i,j,t;     for(i=0;i            if(a[i] main()   { int aa[10]={1,2,3,4,5,6,7,8,9,10},i;    sort(aa,10);     for(i=0;i<10;i++)    printf(\   printf(\}  其输出结果是      。  A.1,2,3,4,5,6,7,8,9,10  C.9,2,7,4,5,6,3,8,1,10  17.有以下程序:        B.10,9,8,7,6,5,4,3,2,1 D.1,10,3,8,5,6,7,4,9,2  void f(int a[],int i,int j) {  int t;    if(i    {t=a[i];a[i]=a[j];a[j]=t;     f(a,i+1,j-1);    } }  main( )  {  int i,aa[5]={1,2,3,4,5};    f(aa,0,4);     for(i=0;i<5;i++)   printf(\}  执行后的输出结果是      。  A.5,4,3,2,1,  B.5,2,3,4,1,  18.以下程序的输出结果是      。   C.1,2,3,4,5,   D.1,2,3,4,5,  main()   { char ch[3][5]={\   printf(\    }    A.\ B.\ 19.以下程序的输出结果是      。   C.\ D.\ main()   { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;     for(i=0;i<3;i++)      for(j=i;j<=i;j++) t=t+b[i][b[j][j]];     printf(\}  A.3   20.有以下程序:  B.4    C.1    D.9  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(\}   程序运行后的输出结果是      。  A.11   B.19   21.有以下语句:   C.13    D.20  char s[10],s=\ 则运行结果是      。  A.abcd   B.a    C.ab cd   22.不能把字符串“Hello!”赋给数组b的语句是      。 A.char b[10]={'H','e','l','l','o','!'};  C.char b[10]; strcpy(b,\ 23.若有以下程序:  char str[]=\printf(\  D.编译不通过    B.char b[10];b=\D.char b[10]=\ 该程序段的输出结果是      。  A.3   B.4    C.6    24.函数调用strcat(strcpy(str1,str2),str3)的功能是      。  A.将串str1复制到串str2中后在连接到串str3之后 B.将串str1连接到串str2之后再复制到串str3之后  C.将串str2复制到串str1中后再将串str3连接到串str1之后 D.将串str2连接到串str1中后再将串str1复制到串str3中 25.下列程序的输出结果是      。    main()    { char ch[7]={ \    int j,s=0;      for(j=0;ch[j]>= '0'&&ch[j]<= '9';j+=2)     s=10*s+ch[j]- '0';      printf(\  }  D.12  A.12ba56  B.66521   C.6    D.62  26.设已定义char s[]=\则字符串s所占的字节数是      。  A.19   B.18    C.15    D.14  27.设已定义char c[8]=\和int j则下面的输出函数调用中错误的是      。  A.printf(\    B.for(j=0;j<8;j++) printf(\C.puts(c);       D.for(j=0;j<8;j++) puts(c[j]);      28.设已定义char a[10]和 int j,则下面输入函数调用中错误的是      。  A.scanf(\     B.for(j=0;j<9;j++) scanf(\C.gets(a);       D.for(j=0;j<9;j++) scanf(\29.设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是      。  A.x[8]=\    B.x=\C.x[]=\     D.for(j=0;j<7;j++) x[i]=getchar(); 30.有如下程序:  main()  {int n[5]={0,0,0},j,k=2;   for(j=0;j 该程序的输出结果是      。  A.不确定的值    C.1      二、填空题  1.若有以下程序:      B.2 D.0  main()  { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};   int i, j, s=0;      for (i=0; i<4; i++)    { for (j=0; j<4; j++)        { if (a[i][j] < 0) continue;       if (a[i][j] == 0) break;       s += a[i][j];}       }     printf(\}  执行后输出结果是        。  2.以下程序运行后的输出结果是        。  main()  { int i,n[]={0,0,0,0,0};     for(i=1;i<=4;i++)   { n[i]=n[i-1]*2+1;     printf(\  } }    3.以下程序运行后的输出结果是        。  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(\printf(\} }  4.下面rotate函数的功能是将n行n列的矩阵A转置为A’,例如: 当A?1   2    3    4       则A’?1    5    9    13      5   6    7    8              2    6    10   14      9   10   11   12             3    7    11   15      13  14   15   16             4    8    12   16      请填空。  #define   N   4  void  rotate(int a[][N]) {  int i,j,t;     for(i=0;i    for(____________;j         _______________;         a[j][i]=t;        } }  5.以下程序的输出结果是        。  main()   { char s[]=\  s[3]= '\\0';     printf(\}  6.以下程序的输出结果是        。  main()  { int i, a[10];      for(i=9;i>=0;i--) a[i]=10-i;    printf(\}     7.以下程序的输出结果是        。  main()  { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};     printf(\)  8.以下程序的输出结果是        。  main()  { char st[20]= \    printf(%d %d \\n\}  9.若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝(注:不得使用逗号表达式)。  while([i]){ d[j]=        ;j++;} d[j]=0;  10.以下程序的输出结果是        。  f(int b[],int m,int n)  { int i,s=0;      for(i=m;i<=n;i++) s=s+b[i];    return s;  )  main()   { int x,a[]={1,2,3,4,5,6,7,8,9};    x=f(a,3,7);      printf(\}   11.以下程序的输出结果是        。  main()  { char w[][10]={ \  for(k=1;k<3;k++) printf(\     12.下列程序的输出结果是        。  #include  { char arr[2][4];     strcpy(arr, \   arr[0][3]= '&';     printf(\ 13.若想通过以下输入语句使a中存放字符串“1234”,b中存放字符“5”,则输入数据的形式应该是        。  char a[10],b;  scanf(\ 14.下列程序段的输出结果是        。  main()  { char b[]=\   b[5]=0;     printf(\ 15.以下程序的输出结果是        。  main()  { int j,k,a[10],p[3];    k=5;     for(j=0;j<10;j++) a[j]=j;     for(j=0;j<3;j++) p[j]=a[j*(j+1)];    for(j=0;j<3;j++) k+=p[j]*2;    printf(\}  16.以下程序运行后,输出结果是        。  main()  { int y=18,t=0,j,a[8];   do       { a[t]=y%2;t++;         y=y/2;         }while(y>=1);         for(j=t-1;j>=0;j--) printf(\       printf(\}  三、编程题  1.求出某数组a[5][5]每行元素的平均值。  main()  { int a[5][5],j,t;   float s=0.0,adv[5];   for(j=0;j<5;j++)       for(t=0;t<5;t++)        scanf(\        for(j=0;j<5;j++)                 {for(t=0;t<5;t++)                s=s+a[j][t];                adv[j]=s/4.0;}                         for(j=0;j<5;j++)                         printf(\}    2.将二维数组c[3][4]转换成以为数组[12]。  main()  { int c[3][4],b[12],j,t,k=0;   for(j=0;j<3;j++)     for(t=0;t<4;t++)          scanf(\      for(j=0;j<3;j++)             for(t=0;t<4;t++)            b[k++]=c[j][t];                  for(j=0;j<12;j++)                 printf(\ 3.计算一个3×3矩阵的主对角线的元素之和sum。  main()  { int i,sum=0;     int a[3][3]={{-1,2,3},{6,7,-8}, {9,11,20}};    for (i=0; i<=2;  i++)    sum=sum+a[i][i];    printf(\}  4.将两个字符串连接起来(不用strcat)。  main()  { char   s1[20], s2[20];   int  i=0, j;    gets(s1);    gets(s2);     while( s1[i]!= '\\0')    i++;     for(j=0;str[j]!= '\\0';j++)        { s1[i]=s2[j];  i++;}    s1[i]= '\\0';     puts(s1);  puts(s2);    }  习题7  指  针  一、选择题  1.有以下程序:  void fun(char *a, char *b) { a=b; (*a)++; } main()  { char c1='A',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf(\}  程序运行后的输出结果是      。 A.Ab      B.aa       2.有以下程序:  #include  { printf(\  C.Aa         D.Bb  程序运行后的输出结果是      。 A.0          C.?1          3.已定义以下函数:  fun(int *p) { return *p; }    B.1  D.NULL没定义,出错  该函数的返回值是      。  A.不确定的值                       B.形参p中存放的值    C.形参p所指存储单元中的值      D.形参p的地址值 4.若有定义:int *p[3];,则以下叙述中正确的是      。  A.定义了一个基类型为int的指针变量p,该变量具有3个指针  B.定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int的指针  C.定义了一个名为*p的整型数组,该数组含有3个int类型元素  D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有3个int类型元素 5.以下程序中函数scmp的功能是:返回形参指针s1和s2所指字符串中较小字符串的首地址。  #include  char  *scmp(char *s1, char *s2) { if(strcmp(s1,s2)<0)  return(s1);  else return(s2);  }  main()  { int i; char string[20], str[3][20]; for(i=0;i<3;i++) gets(str[i]);  strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf(\}  若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为      。 A.abcd    B.abba     C.abc     D.abca 6.有以下程序段:  main()  { int a=5, *b, **c; c=&b; b=&a; … }  程序在执行了c=&b;b=&a;语句后,表达式**c的值是      。 A.变量a的地址       B.变量b中的值  C.变量a中的值       D.变量b的地址 7.有以下程序:  #include  { char str[ ][20]={\printf(\}  程序运行后的输出结果是      。 A.0      B.5      8.已定义以下函数:   C.7       D.20  fun(char *p2, char *p1)  { while((*p2=*p1)!='\\0'){ p1++;p2++; } }  函数的功能是      。  A.将p1所指字符串复制到p2所指内存空间 B.将p1所指字符串的地址赋给指针p2  C.对p1和p2两个指针所指字符串进行比较  D.检查p1和p2两个指针所指字符串中是否有'\\0'      9.有以下程序:  main()  { int a[3][3],*p,i; p=&a[0][0];  for(i=0;i<9;i++) p[i]=i+1; printf(\}  程序运行后的输出结果是      。  A.3    B.6    10.有以下程序:   C.9     D.2  main()  { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;} printf(\}  执行后的输出结果是      。  A.58      B.56     11.有以下程序:    C.45        D.24  main()  { char a,b,c,*d; a='\\'; b='\\xbc';  c='\\0xab'; d=\ printf(\}  编译时会出现的错误是      。  A.程序中只有a='\\';语句不正确   B.b='\\xbc';语句不正确  C.d=\语句不正确     D.a='\\';和 c='\\0xab';语句都不正确 12.若有以下定义,则对a数组元素的正确引用是      。  A.*&a[5]     B.a+2         C.*(p+5)        D.*(a+2) 13.有以下程序:   int *f(int *x,int *y)  { if(*x<*y)  return x; else  return y; }  main()  { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);  printf(\}  执行后的输出结果是      。 A.7,8,8       B.7,8,7      14.有以下程序:   C.8,7,7       D.8,7,8  main()  { char *s[]={\p=s[1];  printf(\}  执行后的输出结果是      。  A.n,two           B.t,one     C.w,one   15.有以下程序:       D.o,two  main()  { int x[8]={8,7,6,5,0,0}, *s; s=x+3;  printf(\}  执行后的输出结果是      。  A.随机值   B.0     C.5     D.6 16.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。  #define N 10  void arrin(int x[N]) { int i=0; while(i scanf(\}  在横线处应填入的是      。  A.x+i     B.&x[i+1]    17.有以下程序:   C.x+(i++.     D.&x[++i]  main()  { char  *s=\ printf(\}  执行后的输出结果是      。  A.赋初值的字符串有错   C.5,2       18.阅读以下函数:      B.6,7  D.6,2  fun(char *sl,char *s2) { int i=0;  while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); }  此函数的功能是      。  A.将s2所指字符串赋给s1  B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0  C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为 0  19.有以下程序:  main()  { char str[ ]=\while(*ps) ps++;   for(ps--;ps-str>=0;ps--) puts(ps);}  执行后的输出结果是      。  A.yz<回车>xyz     C.z<回车>yz<回车>xyz   20.有以下程序:      B.z<回车>yz   D.x<回车>xy<回车>xyz  main()  { int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;      pa=a;  for(i=0;i<3;i++)  if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1;  printf(\}  执行后的输出结果是      。  A.7      B.6        C.8         21.有以下程序:  void fun(int *a,int i,int j) { int t; if (i { t=a[i];a[i]=a[j];a[j]=t;  fun(a,++i,--j); } }  main()  { int a[]={1,2,3,4,5,6},i; fun(a,0,5);  for(i=0;i<6;i++) printf(\}  执行后的输出结果是      。  A.6 5 4 3 2 1  B.4 3 2 1 5 6   C.4 5 6 1 2 3     22.有以下程序:  main(int argc,char *argv[]) { int n,i=0;  while(argv[1][i]!='\\0') { n=fun(); i++;}  printf(\ }  int fun()  { static int s=0; s+=1;  return s; }  假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令exam 123〈回车〉  则运行结果为      。  A.6    B.8     C.3     23.下列程序的输出结果是      。  main()   { char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\}  A.非法   B.a[4]的地址  C.5     24.下列程序的运行结果是      。  void fun(int *a, int *b) { int *k;  k=a; a=b; b=k; }  main()  { int a=3, b=6, *x=&a, *y=&b; D.无确定值  D.1 2 3 4 5 6  D.4  D.3        fun(x,y);  printf(\}  A.6 3    B.3 6    25.下面程序的输出结果是      。   C.编译出错   D.0 0  main()  { int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;  printf(\}  A.0    B.1    26.以下程序的输出结果是      。   C.10     D.9  main()  { int i, x[3][3]={1,2,3,4,5,6,7,8,9};  for(i=0;i<3;i++) printf(\}  A.1,5,9   B.1,4,7   27.以下程序的输出结果是      。   C.3,5,7    D.3,6,9  main()  { int a[3][3]={ {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(\}  A.18    B.19     C.20     D.21 28.若有语句:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是      。  A.i=*p;   B.*p=*&j;    C.i=&j;    D.i=**p; 29.以下定义语句中,错误的是      。  A.int a[]={1,2};       B.char *a[3]; C.char s[10]=\     D.int n=5,a[n]; 30.以下程序的输出结果是      。  char cchar(char ch) {  if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch; }  main()  { char s[]=\while(*p)  { *p=cchar(*p); p++; }  printf(\}  A.abc+ABC=DEFdef         C.abcaABCDEFdef          31.以下程序的输出结果是      。  char s[]=\printf (\   B.abc+abc=defdef D.abcabcdefdef  A.9      B.12      C.13    32.以下程序调用findmax函数返回数组中的最大值。  findmax(int *a,int n)     D.14    { int *p,*s;  for(p=a,s=a; p-a main()  { int x[5]={12,21,13,6,18}; printf(\}  在横线处应填入的是      。  A.p>s      B.*p>*s      33.以下程序的输出结果是      。   C.a[p]>a[s]         D.p-a>p-s  main()  { char cf[3][5]={\printf(\}  A.\   B.\       C.\     D.\34.以下不能正确进行字符串赋初值的语句是      。  A.char str[5]=\       B.char str[]=\C.char *str=\        D.char str[5]={'g','o','o','d'}; 35.以下程序的输出结果是      。  f(int  *b , int m,  int n) { int  i,s=0;  for(i=m;i main()  { int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);  printf(\}  A.10      B.18     36.若有以下定义和语句:   int s[4][5],(*ps)[5]; ps=s;    C.8         D.15  则对s数组元素的正确引用形式是      。  A.ps+1      B.*(ps+3)      C.ps[0][2]        37.以下程序的输出结果是      。  #include  { char b1[8]=\while (--pb>=b1) strcpy(b2,pb); printf(\}  D.*(ps+1)+3  A.8    B.3     C.1     D.7 38.若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是      。   A.p=q;          B.*p=*q;       C.n=*q;           D.p=n; 39.有以下程序:  void fun(char *c,int d)  { *c=*c+1;d=d+1;   printf(\}      main()   { char a='A',b='a';   fun(&b,a); printf(\}   程序运行后的输出结果是      。  A.B,a,B,a       C.A,b,A,b       40.有以下程序:    B.a,B,a,B  D.b,B,A,b   main()   { char a[]={'a','b','c','d','e','f','g','h','\\0'}; int i,j;  i=sizeof(a); j=strlen(a);  printf(\}   程序运行后的输出结果是      。   A.9,9    B.8,9     C.1,8     D.9,8 41.以下程序中的reverse函数的功能是将a所指数组中的内容进行逆置。   void reverse(int a[],int n)  { int i,t;   for(i=0;i {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}  }   main()   { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;  reverse(b,8);   for(i=6;i<10;i++) s+=b[i];  printf(\}   程序运行后的输出结果是      。   A.22    B.10    42.有以下程序:    C.34     D.30  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(\}   程序运行后的输出结果是      。   A.11    B.19    43.有以下程序:   #include  { char *p=\printf(\}    C.13     D.20  程序运行后的输出结果是      。   A.12    B.15    44.有以下程序:    C.6    D.5  #include  main(int argc,char *argv[])  { int i,len=0;   for(i=1;i 程序编译连接后生成的可执行文件是ex1.exe。       若运行时输入带参数的命令行是:   ex1 abcd efg 10<回车>   则运行的结果是      。   A.22   B.17 45.有以下程序:     C.12    D.9  int fa(int x)  { return x*x; }  int fb(int x)   { return x*x*x; }   int f(int (*f1)(),int (*f2)(),int x)  { return f2(x)-f1(x); }  main()  { int i;   i=f(fa,fb,2); printf(\}   程序运行后的输出结果是      。   A.-4   B.1   46.有以下程序:   C.4    D.8  void ss(char *s,char t)  { while(*s)   { if(*s==t) *s=t-'a'+'A';  s++;  }  }   main()   { char str1[100]=\ss(str1,c); printf(\}   程序运行后的输出结果是      。   A.ABCDDEFEDBD     C.abcAAfefAbA     47.有以下程序:    B.abcDDfefDbD   D.Abcddfefdbd  #include  main()   { char *p,*q;   p=(char *)malloc(sizeof(char)*20); q=p;  scanf(\}   若从键盘输入:abc def<回车>,则输出结果是      。  A.def def   B.abc def    C.abc d    D.d d 48.以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。   #include  void f(char  (*p) [10], int  n)  { char t[20]; int i,j;  for(i=0;i if(strcmp(p[i],p[j])<0)   { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}  }   main()   { char p[][10]={\f(p,5);  printf(\}       程序运行后的输出结果是      。  A.6   B.4    C.5 二、填空题  1.以下程序运行后的输出结果是        。     D.3  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(\printf(\ }  }  2.以下程序运行后输入:3,abcde<回车>,则输出结果是        。  #include  for(i=n-1;i>0;i--) str[i]=str[i-1]; str[0]=temp; }  main()  { char s[50]; int n, i, z; scanf(\z=strlen(s);  for(i=1; i<=n; i++) move(s, z); printf(\}  3.有以下程序,若输入的字符串是:abc123edf456gh,则执行程序后输出        。  #include  { char  s[80], d[80]; int i,j; gets(s);  for(i=j=0;*(s+i)!='\\0';i++)  if(*(s+i)>='0' && *(s+i)<='9' ) { *(d+j)= *(s+i); j++; }  *(d+j)='\\0'; puts(d); }  4.若有以下程序:  main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0;  for(i=0;i<4;i++) { for(j=0;j<4;j++)  { if(*(*(a+i)+j)<0) continue; if(*(*(a+i)+j ==0) break; s+=*(*(a+i)+j; printf(\} } }  执行后的输出结果是        。  5.以下函数的功能是删除字符串s中的所有数字字符,请填空。  viod dele(char  *s) { int n=0,i;  for(i=0;s[i];i++)      if(      ) s[n++]=s[i]; s[n]=      ; }  6.设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数,请填空。  main()  { int findbig(int,int,int); int (*f)(),x,y,z,big; f=      ;  scanf(\big=(*f)(x,y,z);  printf(\}  7.以下程序通过函数指针p调用函数fun,请在填空栏内,写出定义变量p的语句。  void fun(int *x,int y) { … } main()  { int a=10,b=20;               ; /定义变p */ p=fun; p(&a,&b); … }  8.下列程序的输出结果是        。  void fun(int *n) { while( (*n)--);  printf(\}  main()  { int a=100; fun(&a); }  9.以下程序的输出结果是        。  main()  { int arr[ ]={30,25,20,15,10,5}, *p=arr; p++;  printf(\}  10.以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值,请填空。  #define N 3 #define M 4  void LineMax(int  (*x)[M]) { int i,j,p;  for(i=0; i for(j=1; j if(x[i][p] printf(\} }  main()  { int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};           }      11.设有以下程序:  main()  { int a, b, k=4, m=6, *p1=&k, *p2=&m; a=pl==&m;  b=(*p1)/(*p2)+7; printf(\printf(\}  执行该程序后,a的值为        ,b的值为        。  12.若已定义int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1,请填空。  fun( int a[ ]) { int i;  for(i=1; i<=10; i++)   *(a+i-1) =        ; for(i=0; i<5; i++)        =*(a+i); }  13.以下程序运行后的输出结果是        。  main()  { char s[ ]=\ for ( p=s ; p 14.以下程序的输出结果是        。  main()  { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0; for(i=0;i<3;i++)  for(j=0;j<=i;j++)  t=t+* (* (b+i)+ b[j][j]) }; printf(\}  15.以下程序的输出结果是        。  main()  { char *p=\long *q; q=(long*)p; q++;  r=(char*)q;  printf(\}  16.以下程序的输出结果是        。  main()  { char s[]=\s[3]='\\0';  printf(\}  17.以下程序的输出结果是        。。  main()  { int x=0;  sub(&x,8,1);  printf(\}  sub(int *a,int n,int k) { if(k<=n) sub(a,n/2,2*k); *a+=k; }      18.以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。  #define N 3 #define M 3  select(int a[N][M],int *n) { int i,j,row=1,colum=1; for(i=0;i if(a[i][j]>a[row][colum]){row=i;colum=j;} *n=        ;  return         ; }  main()  { int a[N][M]={9,11,23,6,1,15,9,17,20},max, n; max=select(a,&n);  printf(\}  19.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。  int mystrlen(char *str) { int i;  for(i=0; *(str+i)!=        ;i++); return(        ); }  20.下面程序的运行结果是        。  void swap(int *a,int *B)  { int *t;   t=a;a=b;b=t;  }   main()   { int x=3,y=5,*p=&x,*q=&y;  swap(p,q);   printf(\}  21.设有定义int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。   scanf(\printf(\ 22.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回,请填空。   #include  int fun(int(*a)[N])   { int  row,col,max,min;  for(row=0;row {for(max=a[row][0],col=1;col else if(          ) min=max;  }   return min;  }  23.函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp),请填空。       #include  int sstrcmp(char *s,char *t)  { while(*s&&*t&&*s==          )  {s++;t++; }   return          ;  }  24.下面程序的运行结果是        。  char   a[]=”123456789”,*p; int i=0; p=a;  while(*p)  { if(i%2==0)    * p='#';  p++; i++;   } }  puts(a);  25.下面程序的运行结果是        。  char a[]=\int s=0;  for(p=a;*p!= '\\0';p++) s=10*s+*p-'0'; printf(\ 26.若有定义int a[3][5],i,j;(且0<=i<3,0<=j<5),则a[i][j]的地址可用以下几种形式表示: (1)&a[i][j]             (2)a[i]+j  (3)      +j           (4)&a[0][0]+       (5)a[0]+        27.若有定义char *language[ ]={\则language[2]的值是        。  28.若有定义int (*p)[4],则p是一个指向          的指针。  29.若有定义char *string=\,则*(string+2)的值为        。 30.下面程序段中,for循环的执行次数为        。  char  *s=\for(;*s!= '\\0';s++)    printf(\ 31.下面程序段的运行结果是        。  char  str[]=\printf(\ 32.若有语句:int a[4]={0,1,2,3},*p;  p=&a[1];则++(*p)的值是        。 33.若有定义int a[2][3]={2,4,6,8,10,12};则*(a[1]+2)的值是        ,*(&a[0][0]+5)的值是        。  34.下面程序的运行结果是        。  #include \fun(char  *s) { char  *p=s;  while(*p)  p++; return(p-s);} main()  {char *a=\int i; i=fun(a);  printf(\}  35.下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0,请填空。  #include \fun(char  *s,char  *t)     { int i=0;  while(        &&        )  i++;  if (s[i]== '\\0'&&t[i]== '\\0')  return   1; else    return   0; }  main()  { char  a[20], b[20]; int i;  gets(a);  gets(b); i=fun(a,b); printf(\}  三、编程题(用指针实现)  1.编写程序,输入3个字符串,按从小到大的顺序排列并输出。  2.编写程序,输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符的个数。  3.编写程序,将任意一个字符串从第一个字符开始间隔地输出该串。例如,字符串是abcdef,那么输出ace。  4.编写一个函数,求一个字符串的长度(不能调用strlen函数)。  5.编写程序,将一个长度不超过4个的数字字符串转换成一个整数。如字符串是     “3248”,则转换的整数是3248。