一、单项选择题(每小题2分,共20分)
第一章
D 1.下列说法中错误的是( )。
A、程序的执行总是从主函数开始
B、主函数可以调用任何非主函数的其它函数 C、任何非主函数可以调用其它任何非主函数 D、程序可以从任何非主函数开始执行
C 2.若a=4,b=7,则输出4*7=28的语句是( )。 A、printf(“a*b=%d\\n”a+b); B、 printf(“a*b=%d\\n”,a*b);
C、printf(“%d*%d=%d\\n”,a,b,a*b); D、 printf(“%d*%d=%d\\n”,a+b); 第三章
C 1. C语言中int型数据占2个字节,则long型数据占(C )个字节。
A、1 B、2 C、4 D、8 D 2.若C中int型数据占2个字节,则double型数据占(D )个字节。
A、1 B、2 C、4 D、8 B 3.若a为整型变数,则以下语句(B )。 a=-2L;
printf(“%d\\n”,a);
A、赋值不合法 B、输出-2 C、输出不确定值 D、输出2
D 4. 若int型数据占2个字节,则下列语句的输出为(D )。
int k=-1;
printf(“%d,%u\\n”,k,k); A、-1,-1 B、-1,32767 C、-1,32768 D、-1,65535 B 5. 下列程序的输出是(B )。
 #include
{printf(“%d\\n”,null);}
A、0 B、变量无定义 C、-1 D、1 C 6.若x为float型变数,则以下语句: x=223.82748;
printf(\ 运行结果为(C )。
1
A、223.8 B、223.82 C、223.83 D、223.827 D 7. 设有语句int a=3;则执行语句a+=a-=a*a后,变量a 的值是(D )。
A、3 B、0 C、9 D、-12 第四章
A 1. 执行语句:a=5,b=8;printf(“%d\\n”, c=a/b); 后输出的值为(A )。
A、0 B、0.6 C、0.625 D、0.625000 B 2. 下列语句(B )。
int k=8567;
printf(“|d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567| C 3. 下列语句(C )。
int k=8567;
printf(“|%-06d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567|
C 4. 若ch为字符型,k为整,则执行下列语句后的输出为(C )。 ch=’a’; k=12;
printf(“%x,%o,”,ch,ch,k); printf(“k=%%d\\n”,k)
A、因变量类型与格式描述符的类型不匹配,输出无定值; B、输出项与格式描述符个数不符,输出为0或不定值; C、61,141,k=%d; D、61,141,k= D 5. 若k,g为int型变数,则下列语句的输出为(D )。
k=017; g=111;
printf(“%d,%x\\n”,++k,g++); A、15,6f   B、16,70   C、15,71   D、16,6f B 6.         有以下程序I和II,判断它们的输出(B  )。   I #include
{int a=4,b=7;
printf(“%d\\n”,(a=a+1,b+a,b+1));
2
}
  II #include
{int a=1,b=2;
printf(“%d\\n”,a=a+1,a+b,b+1)); }
 A、I输出5,II输出2    B、I输出8,II输出2  C、I输出5,II输出3    D、I输出8,II输出3 A 7.         下列程序的输出为(A  )。  #include
{int m=7,n=4;
float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(“%f\\n”,x); }
A、27.000000 B、27.500000 C、28.000000 D、28.500000 第五章
D 1. 在C语言中,能代表逻辑值“真”的是(D )。 A、true B、大于0的数 C、非0整数 D、非0的数 C 2. 若给定表达式(M)?(a++):(a--),则其中表达式M(C )。
A、和(M= =0)等价 B、和(M= =1)等价 C、和(M!=0)等价 D、和(M!=1)等价 D 3. 在C语言的if语句中,用作判断的表达式为(D )。
A、关系表达式 B、逻辑表达式 C、算术表达式 D、任意表达式 D 4. 以下程序的输出是(D )。
 #include
{int i,j,k,a=3,b=2;
i=(--a= =b++)?-- a:++b; j=a++;k=b;
printf(“I=%d,j=%d,k=%d\\n”,i,j,k); }
A、i=2,j=1,k=3 B、i=1,j=1,k=2 C、i=4,j=2,k=4 D、i=1,j=1,k=3
3
B 5. 执行下面的程序: main() {int x;
scanf(\
if (x++>5) printf(\ else printf(\ }
若输入5,则输出为(B )。 A、6 B、-6 C、5 D、-5 6. 有程序段: int a,b; a=9; b=10;
则表达式:(++a= =b--)?--a:++b的值为(B )。 A、8 B、9 C、10 D、11 ●7. 假设所有变量都是整型,则表达式: a=2,b=5,a>b?a++:b++,a+b 的值为(B )。
A、7 B、8 C、9 D、2 8. 下面程序的输出为(A )。
 #include
a=10;b=50;c=30; if(a>b) a=b, b=c;c=a;
printf(“a=%d,b=%d,c=%d\\n”,a,b,c); }
A、a=10,b=50,c=10 B、a=10,b=30,c=10 C、a=50,b=30,c=10 D、a=50,b=30,c=50 C 9. 下面程序运行后输出的结果是( )。
main() { int n;
for(n=0;n<3;n++) switch(n)
{ case 1: printf(“%d”, n); case 2: printf(“%d”, n); default: printf(“%d”, n) }
4
}
A、012 B、120 C、011122 D、012020 10. 下面程序的输出是(B )。
#include
{ 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; case 3: a++;b++; }
printf(“a=%d,b=%d\\n”,a,b); }
A、a=1,b=0 B、a=2,b=1 C、a=1,b=1 D、a=2,b=2 第六章
1. 下面循环的执行次数是(4 )次。 n=0;
while(++n<5)
{ printf(\
2. C语言中,用于结构化程序设计的三种基本结构是(A )。
A、顺序结构、选择结构、循环结构; B、if、switch、break; C、for、while、do- while; D、if、goto、continue:
3. 在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0
4. 在C语言中,为了结束do-while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0 5. 若k为整型,则while循环执行(C )。 k=10;
5
while(k=0) k=k-1;
A、10次 B、无限次 C、0次 D、2次 6. 若k为整型,则while循环执行(B )。
k=2;
while(k= =0) printf(“%d”,k),k--; printf(“\\n”);
 A、无限次  B、0次   C、1次   D、2次 7.         下面程序执行后,k的值是(C  )。  #include 
int k=2; while(k==0)
printf(\ printf(\ printf(\}
A、0 B、1 C、2 D、-2 8. 下面程序的输出为(B )。
 #include
{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(\ }
A、x=4 B、x=8 C、x=6 D、x=12 第七章
1. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值,则在下划线处应填入的是(D )。 #define N 10
void arrin(int x[N])
6
{ int k=0;  while(k      scanf (“%d”,          ); }   A、x+k  B、&x[k+1]  C、x+(k++)  D、&x[k++]  2.         以下能正确定义数组并正确赋值的语句是(D  )。  A、int N=5,a[N][N];    B、int b[1][2]={{1},{3}};  C、int c[2][]={{1,2},{3,4}};6  D、int d[3][2]={{1,2},{34}};  3.         不正确的字符串赋值或赋初值方式是(C  )。  A、     char *str; str=”string”; B、     char str[7]={‘s’,’t’,’r’,’i’,’n’,’g’};  C、     char str[10]; str[10]=”string”;  D、    char str1[]=”string”,str2[]=”12345678”; strcpy(str2,str1);  4.         若有以下定义和语句,则输出结果是(C  )。   char s[12]=”a book!”;  printf(“%d”, strlen(s));   A、9   B、8   C、7   D、6  5.         若有以下定义和语句,则输出结果是(B  )。   char s[]=”a book!”;  printf(“%d”, sizeof(s));   A、9   B、8   C、7   D、6 第八章  C  1. C语言可执行程序的开始执行点是(   )。  A、第一条可执行语句   B、第一个函数   C、main函数     D、包含文件中的第一个函数 C2.   C语言中规定,若对函数类型未加显示说明,则函数的隐含类型为(  )。   A、void  B、double   C、int    D、char C  3.  C语言程序中,当调用函数时(  )。(不确定) A、实参和形参各占一个独立的存储单元 B、实参和形参可以共享存储单元 C、可以由用户指定是否共享存储单元  D、由计算机系统自动确定是否共享存储单元    C  4. 下面程序的输出结果为(  )。  #include    7   void  main()  {int f();   int  i=2,k;   k=f(i,++i);    printf(\}   int  f(int a,int b)  {int  c;  c=a;   if(a>b)  c=1;   else  if(a==b)  c=0;  else  c=-1;  return(c); }  A、2   B、1   C、-1   D、0  A    5. 下面程序的输出结果是( )。  #include  {int func(int a,int b);  int k=4,m=1,p;  p=func(k,m);   printf(\ p=func(k,m);   printf(\ }   int func(int a,int b)  {static int m,n=2;   n+=m+1;   m=n+a+b;   return(m);  }   A、8,17   B、8,16   C、8,20   D、8,8 第九章    C   1.以下叙述正确的是( )。  A、在程序的一行上可以出现多个预处理命令行 B、预处理行是C的合法语句  C、被包含的檔不一定以 .h 作为后缀    8  D、在以下定义中C R是称为“宏名”的标识符    #define fc 4566  CR   B    2. 在“檔包含”预处理语句的使用形式中,当#include后面的文件名用“”(双引号)括起时,寻找被包含檔的方式是( )。  A、直接按系统设定的标准方式搜索目录  B、先在源程序所在目录搜索,再按系统设定的标准方式搜索 C、仅仅搜索源程序所在目录 D、仅仅搜索当前目录  C   3.以下叙述中不正确的是(  )。 A、预处理命令行都必需以#开始  B、在程序中凡是以#号开始的语句行都是预处理命令行 C、程序在执行过程中对预处理命令行进行处理 D、在下是正确的宏定义  #define  IBM_PC  C   4. 以下程序的运行结果是(  )。  #define PT 3.5   #define S(x) PT*x*x  main()  {  int a=1,b=2;     printf(“%4.1f\\n”,S(a+b));   3.5*a+b*a+b   }   A、14.0   B、31.5   C、7.5   D、10.5 C  5.下面程序运行后输出的结果  )。  #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() {   int a,b,c;  a=10,b=20;  c=8*MIN(a,b);  printf(\}  A、10    B、20    C、80    D、120 A   6.下面程序运行后输出的结果是()。 #include\ 9    #define MIN(x,y) (x)<(y)?(x):(y) main() {     int a,b,c;  a=10,b=20;    c=8*MIN(a,b)-5;  printf(\} A、75   B、15   C、20   D、155 C  7.下面程序运行后输出的结果是(  )。  #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() {   int a,b,c;  a=10,b=20;   c=MIN(a+b,a-b)*8;  printf(\} A、10    B、20    C、-80    D、-10 第十章  1.若有以下定义和语句,且0≤i≤10,则对数组元素的错误引用是(C  )。   A、*(a+i)  B、a[p-a]  C、p+i   D、p[i]  2. 若有以下定义和语句,且0≤i≤10,则对数组元素的正确引用是(D  )。   A、&(a+1)  B、a++   C、&p   D、&p[i] 3.以下程序的输出结果是(A  )。  char *alpha[6]=  {“ABCD”,”EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWXYZ”};  char **p;  main()  {int k;  p=alpha;   for(k=0;k<4;k++) printf(“%c”,*(p[k]));  printf(“\\n”);  }   A、AEIM  B、BFJN  C、ABCD  D、DHLP    10  4.下面程序的输出结果是(D  )。   #include   {int a[]={1,2,3,4,5,6},*p;    p=a; *(p+3)+=2;     printf(“%d,%d\\n”, *p, *(p+3));                                }   A、0,5   B、1,5   C、0,6   D、1,6 D  5.若由以下说明和语句,那么对C数组元素的正确引用是(   )。  int  c[4][5],  (*cp)[5];  cp = c;  A、cp+1    B、(cp+3)   C、*(cp+1)+3   D、*(*cp+2)      第十一章  1. 共享体变数中起作用的成员是(C  )。     A、 第一次存放的成员;   B、 中间存放的成员;     C、 最后一次存放的成员;  D、 所有的成员。 2. 若有以下程序段,则值为101的表达式是(C  )。  struct wc  {int a;     int *b;  }*p;   int x0[]={11,12},x1[]={31,32};  struct wc x[2]={100,x0,300,x1};  p=x;   A、*p->b B、p->a   C、++p->a  D、(p++)->a  D    3.如果在C程序中有main( float argc, char *argv[]),那么类型定义错误的参数是(   )。      A、argv        B、argv[]        C、argc,argv[]       D、argc  B   4.若程序中由下面的说明和定义:  struct stt  {  int x;   char  b; } struct  stt  a1, a2; 则会发生的情况是(   )。    11  A、程序将顺利编译、连接、执行   B、编译出错   C、能顺利通过编译、连接,但不能执行  D、能顺利通过编译,但连接出错  C   5.下面程序的输出是(    )。   #include  {   unsigned int a=32,b=66;      printf(“%c\\n”,a|b);  }  A、66    B、98    C、b    D、B    第十二章  1.下面程序的输出是(D  )。   #include {unsigned int a=3,b=10;  printf(\}   A、1   B、5   C、12    D、13  3. 若int型是2个字节,下面程序运行后,输入331,则输出结果为(C  )。  #include  unsigned a,b,c,d;   printf(\ scanf(\ b=a>>4;   c=~(~0<<4);  d=b&c;   printf(\}  A、331,217  B、13,15  C、15,13  D、217,331 4.若int型是2个字节,下面程序段运行后,若输入:a=157653,n=3,则输出的值为(A  )。  main() {   unsigned a,b,c,d;    12  int   n;  scanf(\b=a<<(16-n); c=a>>n; d=c|b;  printf(\}  A、75765  B、35765  C、13765  D、30000 D  5.  表达式11&10的结果用二进制表示为(   )。 A、11      B、3       C、1      D、10 B  6.表达式9|5 的结果十进制表示为(   )。 A、12      B、13      C、14    D、15           第十三章  1. C语言中,文件由(D  )。   A、记录组成    B、由数据行组成   C、由数据块组成    D、由字符(字节)序列组成 2. C语言中的文件类型只有(B  )。   A、索引文件和文本文件  B、ASCII文件和二进制文件两种  C、文本文件一种    D、二进制文件一种 3. C语言中档的存取方式(C  )。   A、只能顺序存取     B、只能随机存取  C、可以顺序存取,也可以随机存取 D、只能从檔开头进行存取  二、程序填空题 第三章  1.要使下面程序的输出形式为:12+10=22,-24+10=-14,请填空。 #include   int a,b,c,d;  unsigned u;   a=12;b=-24;u=10;  c=a+u;d=b+u;   printf(\【1】+【2】=%d,【3】+【4】=%d\\n\【5】); }    13         选择答案:【1】%d 【2】%d  【3】%d  【4】%d  【5】b,u,d 第四章  2.         下面程序不借助任务中间变量把a,b的值进行交换。请填空。   #include   printf(“Input a,b:”);    scanf(“%d,%d”, 【1】 &a,&b     );    a+=【2】 b     ;b=a- 【3】 b     ;a- = 【4】 b     ;   printf(“a=%d,b=%d\\n”, 【5】 a,b     );  } 第五章  3.         下面程序输入一个学生的生日(年:y0,月:m0,日:d0),并输入当前日期(年:y1,月:m1,日:d1)。求出该学生的实足年龄。请填空。   #include   {int   age,y0,m0,d0,y1,m1,d1;     printf(\输入生日日期(年、月、日)\    scanf(\【1】 &y0,&m0,&d0     );    printf(\输入当前日期(年、月、日)\    scanf(\【2】 &y1,&m1,&d1     );    age=y1-y0;     if(m0 【3】 >     m1) age--;    if ((m0 【4】 = =      m1)&&( 【5】 d0 > d1     )) age--;    printf(\  }  4.       下面程序输出乘法九九表。  #include    for(i=1;i<【1】 10    ;i++)     printf(\   printf(\  for(i=1;i<【2】 10    ;i++)     for(j=1;j<10;j++)    14        printf((j= =【3】 9  )?\【4】\\n  \【5】i*j  );  } 第六章  5.         下面程序从读入的整数据中,统计大于0的整数个数i和小于0的整数个数j,当输入0时,程序运行结束。请填空。  #include  {【1】 int      n,i,j;   printf(“Input int numbers,with 0 to end:”);  i=j=0;    scanf (“%d”,&n);  while (【2】 n!=0     ) { if (n>0) i=【3】 i+1     ;  if (n<0) j=【4】 j+1     ;  【5】 scanf (“%d”, &n)     ; }  printf(“i=%d,j=%d\\n”,i,j );  }  第七章  1.         设数组a和数组b中分别有an和bn个有序数,程序把数组a和数组b按由小到大的顺序合并到数组c中。请填空。 #include {int a[10]={1,2,5,8,9,10},an=5;  int b[10]={1,3,4,8,12,18},bn=5;  int i,j,k,c[20],max=9999;   /*在a,b数组的后面都放上一个max(大于数组中所有的数),作为结束标志*/   a[an+1]=b[bn+1]=【1】 max     ;  i=j=k=0;   /*若a[i],b[j]中有一个不等于max,则尚有数未合并到c数组中,循环继续进行*/   while((a[i]!=max)||(b[j]!=max))  if(a[i] /*如果a[i] for(i=0;i   15    rintf(\printf(\}  2.         从键盘输入一个3行4列矩阵的数据,然后求其最大数。请填空: main()  { int 【1】 i,j     , max, a[3][4];    for(i=0;i<3;i++)      for(j=0;j<4;j++)          scanf(\【2】 &a[i][j] )     ;   【3】 max=a[0][0]     ;    for(i=0;i<3;i++)       for(j=0;j<4;j++)           if( max 3.         下面程序求出数组a中所有素数的和。请填空。   #include  #include 【1】   {int isprime(int x);   int i,a[10],sum=0;    printf (\:\   for(i=0;i<10;i++) scanf(\【2】 &a[i])    ;    for(i=0;i<10;i++)     if(isprime( 【3】 a[i]     )= =1)       {printf(\       sum+=a[i];       }     printf(\  }    int isprime(int x)   {int i,k;    k=sqrt(x);     for(i=2;i<=k;i++)      if(x%i= =0) break;    if( 【4】 x>=2     &&(i>=k+1)) return 【5】 1    ;    16    else return  0  ;  }    第十章  4.         下面程序建立一个主次对角在线的元素为1,其余元素为0的5阶方阵并输出。请选择填空。  #include  {int a[5][5]={0},*p[5],i,j;  for(i=0;i<5;i++) p[i]=【1】 &a[i][0]    ; /*使指针数组p指向二维数组每行首地址*/     for(i=0;i<5;i++)     {*(p[i]+【2】 i     )=1; /*使主对角在线元素为1*/     *(p[i]+5-【3】 (i+1)    )=1;/*使次对角在线元素为1*/     }     for(i=0;i<5;i++)     { for(j=0;j<5;j++)      printf(\【4】 p[i][j]     );       【5】 printf(\   }  }   [1] A、&a[i][0] B、&a[i][1]  C、&p[i]   D、 &a[0][i]   [2] A、0  B、1   C、i    D、(i+1)  [3] A、0  B、1   C、i    D、(i+1)  [4] A、a[i][i] B、a[j][j]   C、p[i][i]  D、p[i][j]   [5] A、putchar(“\\n”);    B、putchar(‘\\n’);   C、putchar(‘\\0’);    D、printf(“’\\n’);  5.         下面程序交换a,b的值,请填空  #include \ void swap(int *p1,int *p2)  {int temp ;   【1】 temp     =*p1;  *p1=*p2;   *p2=【2】 temp     ;    17  }  void main() {int a,b;  int *p_1,*p_2;   printf(\ scanf(\  p_1=【3】 &a     ; p_2=【4】 &b     ;   if(a 6.         若一个字符串顺读和倒读都一样,则此字符串是“回文”,如LEVEL,下面程序判断输入的字符串是否是“回文”。请填空。  #include  char s[81],*pi,*pj;  int n;   gets(s);n=strlen(s);   pi=【1】 s    ;pj=【2】 s+n-1    ; /*pi指向串首,*pj指向串尾*/   while(*pi= =' ') 【3】 pi++    ;    /*跳过字符串的前导空格*/   while(*pj= =' ') 【4】 pj--     ;  /*跳过字符串最后面的空格*/   while((【5】 pi  if(pi  }   第十三章  7.         从键盘输入一些字符存贮到磁盘文件中,直到输入一个\为止。   #include  \ main()   {FILE  *fp;    18     char  ch, filename[10];    scanf(\   if((fp=【1】 fopen     (filename, 【2】 \=NULL)         {printf (\        exit(0);       }       ch=【3】 getchar(fp)     ;       while(ch!=【4】 '#'     )      {fputc (ch, fp);        ch=getchar(fp);      }         【5】 fclose(fp)     ;      }  8.         从磁盘文件E:\\D.txt中顺序读入字符,并显示在屏幕上。  #include   FILE   【1】 *fp  ;  char ch;   fp=fopen(\【2】 E:\\\\D.txt\ ch=fgetc(fp);   while(ch!= 【3】 EOF  )  {    putchar(ch);    ch=【4】 fgetc(fp)  ;  }    printf(\   【5】 fclose(fp )  ; }     三、判断题 第一章  1.         √C语言可以直接访问物理位元元址。  2.         √C语言既可以用来写系统软件,也可以用来写应用软件。    19  3.         √C中的变量必须“先定义,后使用”,函数也不例外。  4.         √一个C源程序只能有一个main()函数。  5.         √一个C源程序可以由一个main()函数和若干个其它函数组成。  6.         ×C程序中和每一行就是一个语句。    第三章  7.         ×min和id-s都是合法的标识符。 8.         √在某种意义上,char和int通用。  9.         √若a=2,b=-4;则执行a||b++ 后,b为-4。 10.     √在C程序中“%”是只能用于整数运算的运算符,而“/”是既可以用于整数运算又可以用于实数运算的运算符。 11.     ×用户标识符中可以出现下划线和中划线(减号)。 12.     ×在C中 变量不定义也可以使用。  13.     √表达式 ’a’ 和 “a” 是不同的,前者长度为1,后者长度为2。  14.     √自增自减运算符++,--可以用于int型、float型和double型资料。  15.     √在某种意义上,char和int通用。  16.     ×自增运算符和自减运算符的结合方向也是“自左向右”。   第四章  17.     ×格式字符%md中的m只能为正,不能为负。 第五章  18.     ×在C的if语句中,用作判断的表达式只能是关系表达式或逻辑表达式。  19.     ×若有int a,b; 则a=(b*b>b)的值是1。 20.    ×若a=2,b=-4; 则执行a||b++ 后,b为-3。 21.     √若a=7,b=5; 则执行a&&b++ 后,b为6。 22.     √在C中能代表逻辑值“假”的是0。  23.     ×若有int x,y,z; x=y=z=1;则执行++x&&++y&&++z后,x,y,z的值分别为2,1,1。   第六章  24.     ×continue语句可用于switch语句,也可用于for、while和do循环语句中。    20  25.     √break语句可用于switch语句,也可用于for、while和do循环语句中。 第七章  26.     √数组类型不是C的基本数据类型,而是一种构造类型 。 27.     √数组名代表数组的起始地址。  28.     ×若有int a[10]={1,2,3,4,5,6,7,8,9,10}; a=a+1; 则这时a代表元素2的位元元址。   第八章  29.     ×C程序中,当调用函数时,由实参把值传递给形参,调用结束后,再由形参把值传回给实参。 30.     √用数组名作为实参时,把实参数组的起始地址传递给形参数组,因此形参数组和实参数组占用同一段内存单元,改变形参数组的值,也就改变了实参数组的值。  31.     √若有static  int  a[10]; 则a数组的10个元素的值都是0。  32.     ×全局变量的作用域一定比局部变量的作用域范围大。 33.     ×函数的实参可以传递给形参,形参也可以传递给实参。   第九章  34.     √#define命令是在编译之前处理的。  35.     ×一个包含命令include可以包含几个头檔。   第十章  36.     √若定义char  *str;则str=\是正确的。  37.     ×若定义char  str[]; 则str=\是正确的。 38.     √数组名是指标常量,不需要也不能为其赋值;指针是变量,使用前需对其赋值。  39.     ×C中*&a是取变量a的地址。   第十一章  40.     √可以用typedef声明各种类型名,但不能用它来定义变量。  41.     ×结构类型变量所占内存长度等于成员的长度;而共享体类型变量所占用的内存长度是各成员的内存长度之和,每个成员分别占用其自己的内存单元。   第十二章    21  42.     √有unsigned int a=16;a=a>>2;则a的值是4。 43.     √有unsigned int a=16;a=a<<2;则a的值是64。 44.     ×一个无符号整数各数字往左移动2位后,一定是原数的4倍。   第十三章  45.    ×C语言中,feof函数用来判断即将读入的是否是文件结束标志,它可用于二进制文件,但不能用于文本文件。 46.     ×C语言的文件存取方式只能是顺序存取,不能随机存取。 47.     √C语言中rewind函数使位置指针回到文件的开头位置,而fseek函数使位置指针移到指定的位置。   四、填空题  1. Turboc2中,程序运行后,按下 alt+F5键可以看到运行结果。 2. 做任何事情都有一定的步骤。为解决一个问题而采取的方法和步 骤,就称为  算法    。  3. 算法的特性中包含有      0或多个输入        输入和有一个或 多个输出。  4. C语言中,二维数组中的元素在内存中的排列优先级是:行优先。 5. 若想对一个存储单元清零,只要找一个二进制数,其中各个位符合以下条件:原来的数中为1的位新数中相应的数为0。然后使二者进行&运算,即可达到清零目。 6. 连接(linker):将目标模块和其它一些必要的功能模块装配在一起,生成可执行档,执行程  序文件后缀为 exe 。  7. 具体说,采取以下方法来保证得到结构化的程序:自顶向下,逐步 细化 ,模块化设计,结构化编码。 8. 071∧052 =  19        。(071  052 是8进制数)  9. 有一数01010100, 想把其中左面第3,4,5,7,8位保留下来,运算如下:  01010100(84) & 00111011(59)       = 00010000(16)    |a|?bc10. 写出数学表达式的C语言表达式。   a?bsqrt(fabs(a)+b*c)/(a+b)            。    22      第一章  1.C程序总是从(主函数开始  )执行的,而不管其在程序的前面、中间或后面。  2.一个C源程序可以由一个(main  )函数和若干个其它函数组成。    3.76U表示76是(无符号整数  ),而3F表示3是(浮点数  )。 4.若'a' 的ASCII码是97,则字符'D'的ASCII码是(68  )。 5.若int型是2个字节,unsigned a=65535,b;b=a+1;则按“%u”格式输出b的值为(0 )。  6.将一个字符常量放到一个字符变量中去,实际上并不是把该字符本身放到内存单元中去,而是把该字符的(ASCII码  )放到存储单元中。  7.C规定了各种运算符的结合方向,(自左至右  )的结合方向称为左结合性,(自右至左 )的结合方向称为右结合性。  8.逗号表达式:表达式1,表达式2,的求解过程是:(先求解表达式1,再求解表达式2  ),整个表达式的值是(表达式2 )的值。   第四章  9. putchar('b'+'M'-'m')的值是(’B’  )。 10.对字符变量,可以用格式符(%c  )按字符输出,也可用(%d  )按整数输出。   第五章  1.对逻辑表达式a&&b&&c,只要a为(假  ),就不必判别b和c,如果a为(真  ), b为(假  ),就不必判别c 。   第六章  2.下面循环的执行次数是(4  )次。  n=0;   while(++n<5)   { printf(\第七章    23  9.对字符数组,可以用格式符(%c  )将字符逐个输入输出,用格式符(%s  )将整个字符串一次输入输出。  10.用语句scanf(“%s”,str); 输入字符串,(不能  )接收空格字符。  11.用语句gets(str )输入字符串,(能够  )接收空格字符。 12. C语言中,数组名代表数组的(起始地址  ),如果在scanf函数中的输入项是字符数组名,则(不能 )在数组名前加地址运算符&。  13.函数strcat(str1,str2)的作用是(把字符串str2连接到字符串str1的后面  ),结果存放在字符数组(str1  )中。 14. char str[]=”abc”,则strlen(str)的值是(3  ),sizeof(str)的值是(4  )。  15. char str[]=”abc\\0def”,则strlen(str)的值是(3  ),sizeof(str)的值是(8  )。   第八章  16.调用函数时,才给形参(分配  )存储单元,调用结束后,形参单元被(释放   ),而实参单元仍保留原值。  17.在C中调用函数前,对被调用的函数要作类型说明,但如果函数的类型是(整型  ), 则可以不加说明。   第十章  18.一个变量的(地址  )称为变量的指针,一个变量专门用来存放另一个变量的(地址  ),则称该变量为指针变量。  19.若有char  *a=”Computer”,则a中存放的是(   字符串的起始地址   )。   第十一章  20.有下面的定义:  struct   student  {char  name[8];    char   sex;    int   age;     }stu1,  stu2;  则,sex占(1  )个字节, stu1占(11  )个字节。   第十二章  21. C语言中,2^4的值是(6  )。    24  第十三章 22. feof函数可用于(二进制  )文件和(ASCII码  )檔,它用来判断即将读入的是否为文件(结束  )标志,若是,函数值为真。   五、写出程序程序运行后的结果(每小题4分,共20分) 1.写出下面程序输出的结果 main()  {int n=0;    while(n++<=1)        printf(\  printf(\}  结果:1 2 3  2. 写出下面程序运行后的结果 main()  {int  i,s; s=0;  for(i=1;i<=10;i=i+2)      s+=i;  printf(\}  结果:s=25  3.写出下面程序运行后的结果 main()  {int a,b,i;   a=1;   b=0;    for(i=1;i<=5;i++)   {a*=i;  b+=a; }    printf(\}  结果:a=120,b=153   第七章  4.写出下面程序运行后的结果: main()   {int i,j,t;    25     static int a[6]={1,3,4,5,2,6};    for(i=0, j=5; i }   结果:6  2  5  4  3  1 5.写出下面程序运行后的结果: void px(int a[],int n) { int i,j,k,t;   for(i=0;i      for(j=i+1;j           t=a[k];a[k]=a[i];a[i]=t;   } }    void main()    { int a[5]={1,4,-3,5,-8},i;      px(a,5);    for(i=0;i<5;i++)    printf(\  printf(\}  结果:-8  –3  1  4  5 6.写出下面程序运行后的结果: #include  void  main() {int i, j;   static  int  a[4][4]={{3,5,6},{2,1,4},{8,7,1}};  for(i=0; i<3; i++)     for(j=0; j<3; j++)       {a[i ][3]+=a[i][j];        a[3][j ]+=a[i][j];        a[3][3]+=a[i][j];       }     for(i=0; i<4; i++)  26          {for(j=0; j<4; j++)           printf(\       printf(\          }    }   结果:  3    5    6   14       2    1    4   7  8    7    1   16 13  13  11  37  7.写出下面程序运行后的结果:  main()   {int i, j, max, row, col;     static int a[3][3]={{7,5,6},{2,9,4},{4,1,3}};    for(i=0; i<3; i++)        { max=a[i][0]; row=i; col=0;          for(j=1; j<3; j++)             if(a[i][j]>max)                  {max=a[i][j];  row=i; col=j; }         printf(\      }  }   结果:  a[0][1]=7  a[1][1]=9  a[2][0]=4    第十章  8.写出下面程序运行后的结果: #include \ void cp_str(char *q1,char *q2) { while(*q1) q1++;  while(*q2)    *q1++=*q2++;  *q1='\\0'; }  void main() { char a[80]=\  char b[]=\   27    char *p1,*p2;   p1=a;   p2=b;    cp_str(p1,p2);     printf(\}  结果:   a=TeacherStudent  b=Student    第十一章  9.写出下面程序运行后的结果:  #include w.c[0]='A';w.c[1]='a'; printf(\}  解:上面结构如下图:      ‘a’(97)       ‘A’(65)  01100001      01000001 w.c[1]           w.c[0]        w.a  w.a是整型,占2个字节,其值为:01100001  01000001 从右往左3位一节,转换为八进制数,结果为:60501 10.写出下面程序运行后的结果:   #include  {  enum team{qiaut,cubs=4,pick,dodger=qiaut-2};    printf(“%d,%d,%d,%d\\n”,qiaut,cubs,pick,dodger);  }  结果:0,4,5,-2       28  第十二章  11.写出下面程序的输出结果。   #include  {char a=9,b=020;    printf(“%o\\n”, ~a&b<<1);  }  结果:040  12.阅读以下程序,给出正确的运行结果:  #i nclude  {int  x;  int  y; }in; int a; int b; }e; e.a=1; e.b=2;  e.in.x=e.a*e.b; e.in.y=e.a+e.b;  printf(\printf(\}  该程序的运行结果是:4,8  4,4   六、编程序题 1.编一程序,求a=123,b=456的和sum,输出形式为:123+456=579。 main()  {int a,b,sum;  a=123;  b=456;  sum=a+b;   printf(\}     29    2. 编一程序从键盘输入一个时间t,求h=1/2gt的值。输出格式2 为:t=?,h=?。要求保留一位小数。  #include  {float t,h;    printf(“Input t:”);   scanf(“%f”, &t);   h=1.0/2*G*t*t;    printf(“t=%.1f, h=%.1f\\n”,t,h);  } 3.编一程序求1!+3!+5!+7!+9!。 #include int i,j,t,s; s=0;  for(i=1;i<=9;i=i+2) {  t=1;   for(j=1;j<=i;j++)  t=t*j;  s=s+t; }  printf(\}  4.编一程序求1+(1+2)+(1+2+3)+?+(1+2+3+?10)。解法1:  #include int i,j,t,s; s=0;  for(i=1;i<=10;i++) {  t=0;  30         for(j=1;j<=i;j++)   t=t+j;  s=s+t;  }     printf(\}  解法2:  #include int i,t,s; s=0;  for(i=1;i<=10;i++) {   t=t+j; s=s+t; }  printf(\}  5.一个三位的素数,若其个位和百位数字相同,则这个数叫做回文数,打印这些回文数。 解法1:不用函数 #include int n,i,j,x,y,z,loop; for(n=101;n<=999;n++) {  x=n/100;  y=(n-x*100)/10; z=n; j=sqrt(n);  for(i=2;i<=j;i++)  if(n%i==0) break;  if(i>=j+1) loop=1;  else loop=0;   if( (x= =z)&&loop= =1 ) printf(\   31  }  printf(\ }  解法2:用函数 #include int ZS(int n) /*判素数的函数*/ {  int z,i,j=sqrt(n),temp;  for(i=2;i<=j;i++)    if(n%i==0) break;   if(i>=j+1) temp=1;  else temp=0; return temp; }  int HWS(int n) /*判回文数的函数*/ {  int x,y,z,loop,c; x=n/100;  y=(n-x*100)/10; z=n; c=ZS(n);  if( (x= =z)&& c ) loop=1; else loop=0; return loop; }  main() {  int n;  for(n=100;n<=999;n++)  if(HWS(n)) printf(\printf(\} 6.用递归方法编程序求解习题6.10—猴子吃桃子问题。#include  32         {   int c;   if(n==1) c=1;   else c=2*(num(n-1)+1);  return c; }  void main() {   printf(\}  7.用选择法,对十个整数按从小到大的顺序排列(排序用函数实现)。   void sort(int a[],int n) {   int i,j,k,t;   for(i=0;i   k=i;    for(j=i+1;j  void main()  {     int i,a[10]={1,3,2,4,5,6,9,0,8,7};   sort(a,10);     for(i=0;i<10;i++)      printf(\  printf(\}    8.编一程序,查找输入的N个字符串中最长的那个字符串。  #include   33  {char str[N][81],*sp;  int k;   for(k=0;k  for(k=1;k  printf(\最长的那个字符串是:\\n%s\\n\  printf(\最长的那个字符串的长度是:%d\\n\}    9.编程序,设二进制数a=00101101,编程序使a的高4位取反,低4位不变,求出这个结果 。  #include  main()   {unsigned int a=055,b,c,d,e;     b=~0<<4;     c=a^b;     d=~(~0<<8);    e=c&d;    printf(\ }  10.函数原型说明为int mystrlen(char *s);,其功能是测试字符串s的长度,编制该函数并用相应主函数对其进行测试。  #include {  int mystrlen(char *s);    char str[80];    gets(str);      printf(“%d\\n”, mystrlen(str));  }  int mystrlen(char *s) {  int len=0;      while (*s++)    len++;    return  len;  }       34  七、程序分析题 1. 程序1如下:  #include  { int i,j,k,t,a[10];      printf(\     for(i=0;i<10;i++)  scanf(\  for(i=0;i<10;i++)  { k=i;   【1】    for(j=i+1;j<10;j++)      if(a[j]>a[k])    k=j;        【2】    if(k!=i)  {  t=a[i];   a[i]=a[k];   a[k]=t;  }     【3】   }   for(i=0;i<10;i++)  printf(\ printf(\}  语句【1】的所用是:假设无序序列中最大的数的下标为第一个数,其下标为i  语句【2】的所用是:找出无序序列中最大的数的下标   语句【3】的所用是:把最大的数与无序序列的第一个数交换  2. 程序2如下:  #include \void main() { int i;   int f[20]={1,1};【4】   for(i=2;i<20;i++)  f[i]=f[i-2]+f[i-1]; 【5】  for(i=0;i<20;i++)   { if(i%5==0)   printf(\  printf(\ }  【6】   printf(\}  语句【4】的所用是:初始化Fibonacci数列的前两个数为1 语句【5】指的for语句的所用是:循环求出Fibonacci数列的   35  每一项  语句【6】指的for语句的所用是:以每行5个整数每个整数占12格的格式输出Fibonacci数列  3. 程序3如下:  #include {  int  a,b,  temp;  【7】     printf(“input the data a and b:”); scanf(“%d %d”,&a,&b);  printf(“ %d %d”,a,b);【8】 printf(“change a and b: ”); temp=a;  a=b;   b=temp;  printf(“input the data a and b:”); printf(“%d %d”,a,b); 【9】 printf(“\\n”); }  【7】变数temp的所用是:中间变数           语句【8】和语句【9】的结果一样吗?:不一样           为什么?:因为8是原样输出9是在它们被交换了之后的输出      4. 程序4如下:  #include \ void funstr(char *q1,char *q2) { while(*q1) q1++;  【10】       while(*q2)  *q1++=*q2++; 【11】      *q1='\\0'; 【12】 }  void main() { char a[80]=\ char b[]=\  char *p1,*p2;   p1=a;  p2=b;   funstr(p1,p2);    printf(\【13】 }  语句【10】的所用是: 令q1指向字符串a的末尾     36  语句【11】的所用是: 把b字符串连接到a字符串后面     语句【12】的所用是:在连接后的字符串末尾加上结束符      语句【13】输出的结果是: a=Teacher.Student.                          b=Student.         5. 阅读程序,根据要求分析程序。  #include \void main()  { int a,b,c,x;     scanf ( “%d” , &x );   { a=x/100; 【1】      b=(x-a*100)/10; 【2】   c=x;【3】    }   printf(\}        语句【1】的所用是:  把x百位及以上的数赋值给a    语句【2】的所用是:   把x十位上的数赋给b    语句【3】的所用是:   把个位上的数赋给c    6. 阅读程序,根据要求分析程序。  #include \void main()  { int a[11];     int i,j,t;   printf(\ for (i=1;  i<11;  i++)  scanf (\ printf(\ for(j=1;j<=9;j++)    for(i=1;i<=10-j;i++)     if(a[i]>a[i+1])   {  t=a[i];   a[i]=a[i+1];   a[i+1]=t;  }【4】  printf(\  for(i=1;i<11;i++)  printf(\【5】  printf(\ getch(); }  语句【4】的作用是:   如果相邻两数前一个大于后一个则交换   37  它们    语句【5】输出的结果和输入数组a的有什么不同:  输出之后的数组是有序的     7. 阅读程序,根据要求分析程序。  #include { char str1[80],str2[80];  int i,j;   printf(\输入字符串 str1: \gets(str1);  printf(\输入字符串 str2: \gets(str2);  i=0,j=strlen(str1);    while(str2[i]!='\\0')   str1[j++]=str2[i++];【6】   str1[j]='\\0';【7】  puts(str1);【8】 }  语句【6】的所用是:把str2连接到str1的后面    语句【7】的所用是:  在连接后的字符串末尾加上结束符           语句【8】的所用是: 输出连接后的字符串       8. 阅读程序,根据要求分析程序。  #include {   int b[N],x,k,r,i;   printf(\ k=-1;   do {  r=x%2;  b[++k]=r;  x/=2; }  while (x!=0);  【9】  for ( i=k; i>=0; i-- )     printf(\b[i]  【10】  );   printf(\}  【9】语句所指的整个do循环的含义是: 把十进制数x转化为2进制储存在b数组中     【10】语句中数组b的值为:  x 的二进制数        38    9. 阅读程序,根据要求分析程序。  #include   printf(\输入文件名:\【11】  if ( ( fp = fopen (filename,\  { printf(\ exit(0); }  【12】   printf(\输入一行字符\ ch=getchar();   while(ch!='#')    { fputc(ch,fp);  putchar(ch);  ch=getchar(); } 【13】   printf(\ fclose(fp);   }  【11】语句所指的整个if语句的含义是:判断檔打开是否成功    【12】语句中的含义结果为:输出文件无法打开的提示,退出程序    【13】语句所指的整个while循环的含义是:把从键盘上输入的字符写入文件 当输入为‘#‘时结束     39