C语言真题20套

第一套

一.选择题

1.下列正确的标识符是(C ).

A、a+b B、6a C、_do D、%y

2.执行以下程序段后,输出结果和a的值是(B)。

int a=10; printf("%d",a++);

A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10

3.以下不正确的if语句形式是(B)。

A、if(x<y) {x++;y++;} B、if(x!=y) scanf("%d",&x) else scanf("%d",&y);

C、if(x>y&&x!=y); D、if(x==y) x+=y;

4.int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c;则a的值为(C)。

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

5.对for(表达式1; ;表达式3)可以理解为(C ).

A、for(表达式1;表达式3;表达式3) B、for(表达式1;表达式1;表达式3)

C、for(表达式1;1;表达式3) D、for(表达式1;0;表达式3)

6.运行结果是" 11 12"的程序段是:请在A处填写正确内容(B )。

for(i=1;i<=2;i++) A

A、for(j=1;j<=2;j++)printf("%3d",10i+j);break;
B、{for(j=1;j<=2;j++)printf("%3d",10
i+j);break;}

C、for(j=1;j<=2;j++)printf("%3d",10i+j);continue;
D、{for(j=1;j<=2;j++)printf("%3d",10
i+j);continue;}

7.static char str10="China";数组元素个数为(D)。

A、6 B、9 C、5 D、10

8.以下程序的输出结果是:(C ).

fun(int x, int y, int z){ z=xx+y y; }main( )

{ int a=31; fun(5,2,a); printf("%d", a);}

A、无定值 B、29 C、31 D、0

9.文件包含中,被包含文件(B ).

A、可以是可执行文件. B、可以嵌套其它文件.

C、可以是目标文件或源文件. D、必须用".h"为后缀.

10.下列程序段的输出结果是:(C ).

c 复制代码
void  fun( int *x,  int *y){ printf("%d %d",*x,*y);*x=3;*y=4;}
main( ){ int  x=1, y=2;fun(&y, &x); printf("%d  %d", x, y);}

A、2 1 1 2 B、1 2 3 4 C、2 1 4 3 D、1 2 1 2

二.判断题

1.在C程序中,main函数必须位于程序的最前面 错误
2.表达式 (j=3, j++) 的值是4 . 错误
3.已知a=3,b=4,c=5,则逻辑表达式a||b+c && b-c的值为0 .【参考答案】错误
4.循环结构中的continue语句是使整个循环终止执行 【参考答案】错误
5 在实际编程中,do-while循环完全可以用for循环替换. 【参考答案】正确
6 引用数组元素时,数组元素下标必须是整型常量. 【参考答案】错误
7 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准正确
8 带参数的宏定义不是进行简单的字符串替换,还要进行参数替换 .【答案】正确
9 下列的初始化的方式是正确的吗? char st10; st="string"; 【答案】错误
10 在定义结构体变量时不允许对它赋初值. 【参考答案】错误

三.填空题

1.设i,j,k均为int型变量,则执行完下面的for循环后,k的值为 10_ .

for(i=0,j=10;i<=j;i++,j--) k=i+j;

2.结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体 类型 ___,再说明结构体变量.

四.程序设计题

功能 :将主函数中输入的字符串反序存放。例如:输入字符串"abcdefg",则应输出"gfedcba"。
注意: 请在Begin 和 End 注释行之间填写代码, 所有注释语句都不能删除。

参考代码

c 复制代码
#include "stdio.h"  #include "string.h"
#include "conio.h"   #define N 81
void fun(char str[],int n)
{ /*********Begin**********/
 int i,j;
 char c;
for(i=0,j=n-1;i<j;i++,j--)            
 { c=str[i];
str[i]=str[j];
str[j]=c;}
/**********  End  **********/
}
void main()
{ void TestFunc(); char s [N]; int l; printf("input a string:");gets(s);
  l=strlen(s); fun(s,l); printf("The new string is :");puts(s);TestFunc();}

五.程序改错题

功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输
出主对角线上的元素之和sum。

c 复制代码
#include "stdio.h"
int fun()
{  int a[3][3],sum;int i,j;
  /**********ERROR**********/
  a=0;
  for(i=0;i<3;i++)
    for(j=0;j<3;j++)
      /**********ERROR**********/
      scanf("%d",a[i][j]);
  for(i=0;i<3;i++)
    /**********ERROR**********/
    sum=sum+a[i][j];
    /**********ERROR**********/
  printf("sum=%f\n",sum);
}
void main()
{fun();}

1【参考答案】sum=0;

2【参考答案】scanf("%d",&aij);

3【参考答案】sum=sum+aii; sum+=aii;

4【参考答案】printf("sum=%d\n",sum);

六.程序填空

先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。

c 复制代码
#include "stdio.h"  #include "string.h"
void fun (char s[], char t[])
{   int i, sl;
  /***********FILL***********/
  sl = _____;  
 for(i=0; i<sl; i++)
    t[i] = s[i];
  for (i=0; i<sl; i++)
    /***********FILL***********/
    t[sl+i] = _____; 
  /***********FILL***********/
  t[sl+i]=_____; 
}
void main()
{  char s[100], t[100];
  /***********FILL***********/
  printf("\nPlease enter string s:"); _____("%s",s);   fun(s, t);
  printf("The result is: %s\n", t);}

1【参考答案】 strlen(s)

2【参考答案】 ssl-i-1 sstrlen(s)-i-1

3【参考答案】 '\0' 0

4【参考答案】 scanf

第二套

一.选择题

若变量均已正确定义并赋值,以下合法的C语言赋值语句是(C )。

A、x+n=I; B、x==5; C、x=n/2.5; D、5=x=4+1;

用scanf函数输入数据,使得x=9.6,y=81.73选择正确的输入语句(D ).

A、scanf("x=%3f",x); scanf("y=%5f",&y); B、scanf("x=%f",&x); scanf("y=%f",y);

C、scanf("x=%3.1f",&x); scanf("y=%f",&y); D、scanf("x=%f",&x); scanf("y=%f",&y);

int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为(C)。

A、1 B、3 C、2 D、不一定

为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与(A)配对。

A、其之前最近的未配对的if B、其之后最近的if C、同一行上的if D、缩排位置相同的if

存在多层嵌套循环时,下列说法正确的是(D ).

A、continue语句可以中止所有循环B、break语句可以中止所有循环

C、continue语句能够中止包含该语句的最内层循

D、break语句能够中止包含该语句的最内层循环

下面程序正确的运行结果是(B ).(答案中用大写字母U代表空格)
main()

{ int num=0; while(num<=2)

{ num++; printf("%3d",num);}}

A、UU 1 B、UU1UU2UU3 C、UU1UU2UU3UU4 D、UU1UU2

int a10;合法的数组元素的最小下标值为(D)。

A、10 B、9 C、1 D、0

下面叙述中错误的是( B)。

A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量

设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为(B ).

A、3 B、2 C、12 D、8

设有以下定义:

int w34={{0,1},{2,4},{5,8}}; int (*p)4=w;

则数值为4的表达式是(B ).

A、w1+1 B、p11 C、p++,(p+1) D、w22

二.判断

1 .printf 函数的一般格式为:printf (格式控制,输出表列). 【参考答案】 正确

2在C程序中,%是只能用于整数运算的运算符【参考答案】正确

3逻辑表达式4>2&&1||5<3-!0的值为1.【参考答案】正确

4continue语句对于while和do-while循环来说,意味着转去计算While表达式.

【参考答案】正确

5do-while循环由do开始,while结束,在while(表达式)后面不能加分号.

【参考答案】错误

6对任何一个二维数组的元素,都可以用数组名和两个下标唯一地加以确定. 【正确

7每次调用函数时,都要对静态局部变量重新进行初始化.【参考答案】错误

8若有 #define S(a,b) a*b 则语句 area=S(3,2); area的值为6。【参考答案】正确

9设有定义 : int a10, *p; 则下列的语句是等价的. p=&a0; p=a; 正确

10共用体变量在引用时不能只用共用体变量名,必须使用某个成员名.【答案】正确

三.填空

1已知a=13,b=6, a%b的十进制数值为__1___.

2当a=3,b=2,c=1;时,执行以下程序段后 b=1_. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;

3若输入字符串:abcde<回车>,则以下while循环体将执行 0 _ 次.

while((ch=getchar())=='e') printf("*");

4求字符串长度的库函数是_strlen____,只写函数名即可.

5 feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为_非0值_, 否则为__0__.

四【程序设计】

功能:对任意输入的 x,用下式计算并输出 y 的值。(还可以尝试用case语句)

-1 x<0

y= 0 x=0

1 x>0

c 复制代码
#include "stdio.h"
int fun(int n)
{   /*********Begin**********/
    int m;
    if(n<0)
      m=-1;
    else 
      if(n==0) m=0;
    else m=1;
return m;
 /**********  End  **********/
}
void main ()
{    void TestFunc();
    int  x,y;
    printf("enter x:");
    scanf("%d",&x);
    y=fun(x);
    printf("x=%d,y=%d\n",x,y);
    TestFunc();
}

五.改错

改错-功能:将6个数按输入时顺序的逆序进行排列.

c 复制代码
#include "stdio.h"
void sort(char *p,int m)
{   int i;   char change,*p1,*p2;
  for(i=0;i<m/2;i++)
  {    /***********ERROR***********/
    *p1=p+i; *p2=p+(m-1-i);  change=*p1;
    *p1=*p2;  *p2=change;}}
main( )
{  int i;
 /***********ERROR***********/
  char  p,num[6]; 
  for(i=0;i<=5;i++) 
    /***********ERROR***********/
    scanf("%d",num[i]);
  p=&num[0];
  /***********ERROR***********/
  sort(*p,6);
  for(i=0;i<=5;i++)  
    printf("%d",num[i]);
}

【参考答案】p1=p+i; p2=p+(m-1-i);【参考答案】char *p,num6;

【参考答案】scanf("%d",&numi);【参考答案】sort(p,6);

六.程序填空

功能:输入3个数a,b,c,按从小到大的顺序输出。(冒泡法或选择法,尝试用来程序设计)

c 复制代码
#include "stdio.h"
main()
{  void swap(int *p1, int *p2);
  int n1,n2,n3;
  int *pointer1,*pointer2,*pointer3;
  printf("please input 3 number:n1,n2,n3:");
  scanf("%d,%d,%d",&n1,&n2,&n3);
  pointer1=&n1;
  pointer2=&n2;
  pointer3=&n3;
  /***********FILL***********/
  if(_____) swap(pointer1,pointer2);
  /***********FILL***********/
  if(_____) swap(pointer1,pointer3);
  /***********FILL***********/
  if(_____) swap(pointer2,pointer3);
  printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3);
}
/***********FILL***********/
void swap(_____)
int *p1,*p2;
{  int p;  p=*p1;*p1=*p2;*p2=p;}

【参考答案】n1>n2 n2<n1 *pointer1>*pointer2 *pointer2<*pointer1

【参考答案】n1>n3 n3<n1 *pointer1>*pointer3 *pointer3<*pointer1

【参考答案】n2>n3 n3<n2 *pointer2>*pointer3 *pointer3<*pointer2

【参考答案】p1,p2

第三套

一.填空

若x,i,j,k 都是int型变量,则计算x=(i=4,j=16,k=32)后,x的值为:( D).

A、52 B、16 C、4 D、32

执行以下程序段后,输出结果和a的值是(B)。

int a=10; printf("%d",a++);A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10

以下程序的输出结果是:(A )

main() {int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--); }

A、6 B、5 C、7 D、4

执行下面程序段后,i的值是( A).

int i=10; switch(i)

{case 9: i+=1; case 10: i--;case 11: i*=3;case 12: ++i;}

A、28 B、10 C、9 D、27

下面有关 for 循环的正确描述是(C )。

A、for 循环是先执行循环体语句,后判断表达式B、在 for 循环中,不能用 break 语句跳出循环体C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

D、for 循环只能用于循环次数已经确定的情况

若char a10;已正确定义,以下语句中不能从键盘上给a数组的
所有元素输入值的语句是(A)。

A、for(i=0;i<10;i++)ai=getchar(); B、scanf("%s",a);C、gets(a);D、a=getchar();

下面叙述中错误的是(B )。

A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量

file1.c中有命令,#include <file2.c>,若file2.c中有全局静态变量a,则(B ).

A、a在file1.c中应用extern说明.B、a在file1.c中有效,不必用extern说明.

C、a在file1.c中不生效D、a在file1.c和file2.c中均不生效.

若有定义:int aa 8;则以下表达式中不能代表数组元素aa1的地址的是(C)。

A、&aa1 B、&aa0+1 C、&aa0++ D、aa+1

二.选择

1.在C程序中,main函数必须位于程序的最前面 【参考答案】错误
2若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变

【参考答案】正确
3逻辑表达式4>2&&1||5<3-!0的值为1 . 正确
4 break语句不能终止正在进行的多层循环. 【参考答案】正确
5 C语言中三种基本结构:顺序选择循环,其结构内的每个部分都会被执行到. 【答案】错误
6数值型数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素.

【参考答案】正确
7 在C语言中,函数名代表函数的入口地址. 【参考答案】正确
8宏名有类型,其参数也有类型. 【参考答案】错误
9数组名与指针变量是相互等价的. 错误
10 一个共用体变量中不能同时存放其所有成员.【参考答案】 正确

三.填空

三1int x=2;z=++x+1; 则x的值为__3__.

2当a=1,b=2,c=3时,执行以下程序段后c=2 . if (a>c) b=a; a=c; c=b;

3设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是__3___.

for (x=0,y=0;y!=123&&x<3;x++) scanf ("%d",&y);

4.字符串比较的库函数是_____,只写函数名即可. strcmp

5调用 fopen 函数打开一文本文件,在"使用方式"这一项中, 为追加而打开需填入

a 或 a+

四.程序设计

【程序设计】在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和,并在fun()函数中输出。

c 复制代码
#include "stdio.h"
  void main()
{  int i,j,s,a[3][3];
  int fun(int a[3][3]);
  void TestFunc();
  for(i=0;i<3;i++)
  {    for(j=0;j<3;j++) scanf("%d",&a[i][j]);}
  s=fun(a);printf("Sum=%d\n",s);  TestFunc();}
int fun(int a[3][3])
{  /*********Begin**********/
  【参考代码】
int sum=0,i;
for(i=0;i<3;i++)
 sum=sum+a[i][i]*a[i][i];
 return sum;
 /**********  End  **********/ 
}

【程序改错】

功能:输入10个数,要求输出这10个数的平均值

c 复制代码
#include "stdio.h"
float average(float array[10])
{int i;  float aver,sum=array[0];
  /***********ERROR***********/
  for(i=0;i<10;i++)
    sum=sum+array[i];
  aver=sum/10.0;
  return(aver);
}
void main( )
{     /***********ERROR***********/    
  int score[10],aver ;
  int i;
  printf("input 10 scores:\n");
  for(i=0;i<10;i++)
    /***********ERROR***********/
    scanf("%f", score);
  printf("\n");
  /***********ERROR***********/
  aver=average(score[10]);
  printf("average score is %5.2f",aver);
}

【参考答案】for(i=1;i<10;i++) for(i=1;i<=9;i++

【参考答案】float score10,aver; float aver,score10;

【参考答案】scanf("%f", &scorei); scanf("%f", score+i);

【参考答案】aver=average(score);

【程序填空】

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来 第几号的那位。

c 复制代码
#include "stdio.h"	#define nmax 50
void main()
{  int i,k,m,n,num[nmax],*p;
  printf("please input the total of numbers:");
  scanf("%d",&n);
  p=num;
  /***********FILL***********/
  for(i=0;_____;i++)
   /***********FILL***********/
  *(p+i)=_____;
  i=0;  k=0;  m=0;
  while(m<n-1)
  {    /***********FILL***********/
    if(_____!=0) k++;
    if(k==3)
    {      *(p+i)=0; k=0; m++; }
    i++;if(i==n) i=0;
  }
  /***********FILL***********/
  while(_____) p++; printf("%d is left\n",*p);}

【参考答案】 ii【参考答案】i+1【参考答案】*(p+i)【参考答案】*p==0

第四套

填空

若有说明:int a34;则数组a中各元素(A)。

A、不能得到确定的初值B、可在程序的编译阶段得到初值0

C、可在程序的运行阶段得到初值0D、可在程序的编译或运行阶段得到初值0

已定义float a; int i;选择正确的输入语句(C ).

A、scanf("%6.2f%3d", &a,&i);B、scanf("%f%s", &a,&i);

C、scanf("%6f%3d",&a,&i);D、scanf("%f%d", a,i);

执行下面程序段后,k的值是:(B )

int k=2; switch(k+1)

{case 3:k+=1;case 4:k--;break; case 5:k*=3;case 6:++k;}

A、10 B、2 C、28 D、27

执行下列语句后的输出为(B)

int j=-1; if(j<=1) printf("****\n"); else printf("%%%%\n");

A、%%%% B、****C、有错,执行不正确D、%%%%c

以下程序段中,能够正确地执行循环的是(B )

A、int s=6; m:if(s<100) exit(0); else s-=2; goto m:

B、int s=6; do s-=2; while(s);C、for(i=1;i>10;i++) D、static int a; while(a)

运行结果是" 11 12"的程序段是:请在A处填写正确内容(B )。

for(i=1;i<=2;i++) A

A、for(j=1;j<=2;j++)printf("%3d",10i+j);break;
B、{for(j=1;j<=2;j++)printf("%3d",10
i+j);break;}

C、for(j=1;j<=2;j++)printf("%3d",10i+j);continue;
D、{for(j=1;j<=2;j++)printf("%3d",10
i+j);continue;}

对以下说明语句 int a10={6,7,8,9,10}; 的正确理解是(B)。

A、将5个初值依次赋给a6至a10B、将5个初值依次赋给a0至a4

C、因为数组长度与初值的个数不相同,所以此语句不正确D、将5个初值依次赋给a1至a5

如果在一个函数中的复合语句中定义了一个变量,以下正确的说法是(C ).

A、该变量在本程序范围内均有效B、该变量在主函数中有效

C、该变量只在该复合语句中有效D、该变量在该函数中有效

设有宏定义#define PI 3.14 和#define S® PIrr,则S(2)的值为(B ).

A、6.28B、12.56C、3.14D、9.42

设有以下定义:

int a10={1,2,3,4,5,6,7,8,9,10};int *p=a;

则数值为6的表达式是(D ).

A、p+5 B、p+6 C、(p+6) D、*p+=5

判断

1.C程序的每行中只能写一条语句 错误

2.在C语言中,各种类型的整型数据在内存中都占2个字节。错误

3.条件表达式x?'a':'b'中,若x=0时,表达式的值为'b'. 正确

4.while和do...while循环不论什么条件下它们的结果都是相同的. 错误

5.for循环体中遇到continue语句,会转向执行for语句中的条件判断(语句2). 错误

  1. int a34={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。正确

7.函数的返回值可以通过函数中的return语句获得。正确

8.若有 #define S(a,b) a*b 则语句 area=S(3,2); area的值为6。正确

9.指向某一变量的指针,就是该变量的内存地址.正确

10.对于不同类型的数据,若想合成一个有机的整体,可以引用结构体进行定义。正确

三填空

1.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量c中的值是 9___ .

c 复制代码
c=(a-=(b-5)); c=(a%11)+(b=3);

2.当a=3,b=2,c=1;时,执行以下程序段后 b=_____.

c 复制代码
 if(a>b)  a=b;  if(b>c) b=c; else c=b; c=a;

3.以下程序的输出结果为_10____,

c 复制代码
#include "stdio.h"   void main()
{int a;for(a=0;a<10;a++);printf("%d",a);}

4.若有fp=fopen("a1.dat","rb+")打开文件语句,这个文件的数据是以_____的形式存放在内存中,该文件的使用方式为读/_____。【参考答案】二进制【参考答案】

【程序设计】

题目:用函数求一个N阶方阵右下三角元素的和(包括副对角线上的元素)。

c 复制代码
#include "stdlib.h"#include "stdio.h"#define N 3
int sum(int a[][N])
{ /*********Begin**********/
  【参考代码】
int i,j,k=0;
 for(i=0;i<N;i++)
  for(j=N-1-i;j<N;j++)
    k=k+a[i][j];
 return(k);	
 /**********  End  **********/}
void main()
{  int a[N][N],i,j;
  void TestFunc();
  for(i=0;i<N;i++)
  {    for(j=0;j<N;j++)
    {      a[i][j]=rand()%10+10;  //rand函数的功能是产生一个随机整数
      printf("%3d",a[i][j]);
    }    printf("\n");
  }  printf("===================\n");
  printf("sum=%5d\n",sum(a));
  TestFunc();
}【程序改错】
功能:用指针作函数参数,编程序求一维数组中的最大和最小的元素值.
#include "stdio.h"#define N 10
/***********ERROR***********/
void maxmin(int arr[ ],int *pt1, *pt2, n)
{  int i;
  /***********ERROR***********/
  *pt1=*pt2=&arr[0];
  for(i=1;i<n;i++)
  {    /***********ERROR***********/
    if(arr[i]<*pt1)  *pt1=arr[i];
    if(arr[i]<*pt2)  *pt2=arr[i];
  }
}
main( )
{   int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
  /***********ERROR***********/
  *p1=&a;*p2=&b;
  maxmin(array,p1,p2,N);
  printf("max=%d,min=%d",a,b);
}

【参考答案】void maxmin(int arr ,int *pt1,int *pt2,int n)【参考答案】*pt1=*pt2=arr0;

【参考答案】if(arri>*pt1) pt1=arri; if( (arr+i)>*pt1)) *pt1=arri;

if(pt1< (arr+i))) *pt1=arri; if(*pt1<arri) *pt1=arri;

【参考答案】p1=&a;p2=&b;

【程序填空】

功能:产生10个30,90区间上的随机整数,然后对其用选择法

进行由小到大的排序。

c 复制代码
#include "stdio.h"#include "stdlib.h"
void main()
{  /***********FILL***********/
  _____;
   int i,j,k;
   int a[10];
   for(i=0;i<10;i++)
     a[i]=rand()%61+30; //产生[30,90]区间上的随机整数
   for(i=0;i<9;i++)
   {/***********FILL***********/ _____;
      for(j=i+1;j<10;j++) /***********FILL***********/
      if(_____) k=j; if(k!=i) 
      { t=a[k];a[k]=a[i]; a[i]=t;}
   } 
   /***********FILL***********/
   for(_____ )
     printf("%5d",a[i]);printf("\n");
}

【参考答案】int t【参考答案】k=i

【参考答案】ak>aj aj<ak【参考答案】i=0;i<10;i++ i=0;10>i;i++ i=0;i<=9;i+=1

第五套

1假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(C)。

A、2 B、6 C、8 D、7

2已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j

的值为2、k的值为3,以下选项中正确的输入语句是©。

A、scanf("%d %d %d",&i,&j,&k);B、scanf("%2d%2d%2d",&i,&j,&k);

C、scanf("%d,%d,%d",&i,&j,&k);D、scanf("i=%d,j=%d,k=%d",&i,&j,&k);

3 int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c;则a的值为(C)。

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

4 main()

{int x=1,a=0,b=0; switch (x){ case 0: b++; case 1: a++;case 2: a++;b++; }

printf("a=%d,b=%d",a,b);}

该程序的输出结果是(D )

A、a=1,b=1B、a=1,b=0C、a=2,b=2D、a=2,b=1

5 以下能计算1×2×3×┈×10的程序段是(C ).

A、do{ i=1;s=1;s=si;i++;}while(i>=10) ;B、do{ i=1;s=1;s=s i;i++;}while(i<=10) ;

C、i=1;s=1;do {s=si; i++; }while(i<=10) ;D、i=1;s=1; do { s=si; i++;}while(i>=10) ;

6针对下列程序段回答问题(B ).

for(t=1;t<=100;t++) {scanf("%d",&x); if(x<0) continue; printf("%3d",t);}

A、x>=0时什么也不输出B、最多允许输出100个非负整数

C、printf函数永远也不执行D、当x<0时整个循环结束

7 以下程序的运行结果是(B ).

main( ){int i,x33={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d,",xi2-i);}

A、1,5,9 , B、3,5,7, C、3,6,9, D、1,4,7,

8 以下不正确的说法是:C语言规定(C)。

A、实参可以是常量,变量或表达式 B、实参可以为任何类型

C、形参可以是常量,变量或表达式 D、形参应与其对应的实参类型一致

9 在执行"文件包含"命令时,下列说法正确的是(A ).

A、作为一个源程序编译,得到一个目标文件.B、一个 include 命令可指定多个被包含文件.

C、在编译时作为两个文件联结. D、被包含的文件可以是源文件或目标文件.

10 已定义char str1,str210;选择正确的输入语句(C ).

A、scanf("%c%s", str1,str2); B、scanf("%c%s",&str1,&str2);

C、scanf("%c%s", &str1,str2); D、scanf("%c%s", str1,&str2);

选择

1在C程序中,注释说明只能位于一条语句的后面错误

2.x*=y+8 等价于 x=x*(y+8)。正确

3.设o=1,p=2,q=3,则逻辑表达式!(o<p)||!q&&1的值为0.正确

4.在do-while循环中,当while表达式为"假"时,循环就停止了.正确

5 C语言中三种基本结构:顺序、选择、循环都只有一个入口. 正确

6 定义 int x5,n;则x=x+n;或x++;都是不正确的. 正确

7在一个函数中定义的静态局部变量可以被另一个函数调用. 错误

8如果被包含文件中有全局静态变量,它们在用#include命令的源文件中有效. 正确

9指向某一变量的指针,就是该变量的内存地址. 正确

10 结构体变量的地址与其各成员具有相同的地址. 错误

填空

1.已知 i=5;写出语句 i+=012; 执行后整型变量 i 的十进制值是_15____.

2当a=1,b=2,c=3时,执行以下程序段后a=3 _. if (a>c) b=a; a=c; c=b;

3 若输入字符串:abcde<回车>,则以下while循环体将执行 0 _ 次.

4 while((ch=getchar())=='e') printf("*");

5 数组在内存中占一段连续的存储区,由_____代表它的首地址. 数组名

6 C语言中调用_____函数来关闭文件. fclose

【程序设计】功能:对任意输入的 x,用下式计算并输出 y 的值。

复制代码
        5      x<10
  y=    0      x=10
       -5      x>10
c 复制代码
#include "stdio.h"
int fun(int n)
{  /*********Begin**********/
  int m;
    if(n<10) m=5;
    else  if(n==10) m=0;
    else m=-5;return m;
 /**********  End  **********/
  }
void main ()
{
    int  x,y; void TestFunc();printf("enter x:");
    scanf("%d",&x); y=fun(x);
    printf("x=%d,y=%d\n",x,y);TestFunc();
}

【程序改错】计算正整数num的各位上的数字之积。例如:输入252,则输出应该是20。

c 复制代码
#include "stdio.h"
long fun (long num)
{/**********ERROR**********/
  long k;
  do
  {    k*=num%10;
    /**********ERROR**********/
    num\=10;
  }while (num);
  return k;
}
main()
{ong n;
  printf("\nPlease enter a number:");
  /**********ERROR**********/
  scanf("%ld", n);
  /**********ERROR**********/
  printf("\n%ld\n",fun(long n));
}

【参考答案】long k=1;【参考答案】 num/=10; num=num/10;

【参考答案】 scanf("%ld",&n);【参考答案】printf("\n%ld\n",fun(n));

【程序填空】功能:以下程序是用选择法对10个整数按升序排序。

c 复制代码
#include "stdio.h"
/***********FILL***********/
_____
void main()
{   int i,j,k,t,a[N]; for(i=0;i<=N-1;i++)
   scanf("%d",&a[i]); for(i=0;i<N-1;i++)
   {     /***********FILL***********/
     _____;
     /***********FILL***********/
     for(j=i+1; _____;j++)
       if(a[j]<a[k]) k=j;
     /***********FILL***********/
     if(_____)
     {       t=a[i]; a[i]=a[k];   a[k]=t;}  }
  printf("output the sorted array:\n");  for(i=0;i<=N-1;i++)
 printf("%5d",a[i]);printf("\n");}

【参考答案】#define N 10【参考答案】k=i【参考答案】j=j【参考答案】k!=i i!=k

第六套

选择

以下叙述中不正确的是(A)。

A、在C程序中,赋值运算符的优先级最低B、在C程序中,j++;是一条赋值语句

C、C程序中的#include和#define均不是C语句D、一个好的程序应该有详尽的注释

若变量已正确定义,执行语句scanf("%d,%d,%d ",&k1,&k2,&k3);时,正确输入是(A )。

A、20,30,40B、2030,40C、20, 30 40D、20 30 40

int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为(C)。

A、1 B、3 C、2 D、不一定

C语言的if语句中,用作判断的表达式为(A )。

A、任意表达式B、算术表达式C、逻辑表达式D、关系表达式

while(fabs(t)<1e-5) if(!(s/10))break; 循环结束的条件是(B )。

A、s/10==0 B、t>=1e-5 ||t<=-1e-5 && s>-10 && s<10

C、fabs(t)<1e-5 && !(s/10)D、fabs(t)<1e-5

若有语句char x ="12345",y ={'1','2','3','4','5'};则正确的描述是(D ).

A、x数组和y数组的长度相同. B、x数组的长度小于y数组的长度.

C、x数组等价于y数组. D、x数组的长度大于y数组的长度.

设函数的调用形式如下: f((x1, x2),(y1,y2,y3)),则函数有 (A )个形参.

A、2 B、4 C、3 D、5

设有宏定义#define SUB(x,y) (x)*y,且a=3,b=4,则 SUB(a++,b++) 的值为(D ).

A、13 B、16 C、20 D、12

下列选项中正确的语句组是(C)。

A、char *s; s={"Beijing"};B、char s8; s={"Beijing"};

C、char *s; s="Beijing";D、char s8; s="Beijing";

判断

1一个C程序只能由一个主函数组成 错误

2 表达式 (j=3, j++) 的值是4. 错误

3 若float x=2.0,y=1.0; , 则条件表达式x>y?1:1.5的值为1.0. 正确

4 continue语句用于终止循环体的本次执行. 正确

5 在循环嵌套中,使用break语句只可以跳出所在循环. 正确

6 引用数组元素时,下标可以是整型表达式或整型常量. 正确

7在主调函数中,必须要对被调用函数进行类型说明,否则在编译时会出现错误. 错误

8静态局部变量在整个程序运行期间都不释放. 正确

9下列的定义和赋值是正确的. int x=10,y=20,*p; p=&x; 正确

10共用体类型可以出现在结构体类型定义中,但结构体类型不能出现在共用体类型定义中.错误

填空

1int x=2;z=++x+1; 则x的值为__3___.

2 当a=1,b=2,c=3时,执行以下程序段后c=2 . if (a>c) b=a; a=c; c=b;
3若输入字符串:abcde<回车>,则以下while循环体将执行 0
__ 次.

while((ch=getchar())=='e') printf("*");

4 C语言中,数组元素的下标下限为__0___.

5若有以下整型数组aa10,其值为 9 4 12 8 2 10 7 5 1 3 该数组可用的最小下标值是___0__.

【程序设计】功能:计算并输出给定整数n的所有因子之和(不包括1与自身)。

注意:n的值不大于1000。例如:n的值为855时,应输出704。

c 复制代码
#include "stdio.h"
int fun(int n)
{/**********  End  **********/
【参考代码】
int s=0,i;
   for(i=2;i<n;i++)
    if(n%i==0)s=s+i;
     return s;
*******Begin**********/
}
void main()
{void TestFunc(); printf("s=%d\n",fun(855));  TestFunc();}
void TestFunc()
{  FILE *IN,*OUT; int iIN,iOUT,i; IN=fopen("in.dat","r"); if(IN==NULL)
  {    printf("Please Verify The Currernt Dir..It May Be Changed");
  }
  OUT=fopen("out.dat","w"); if(OUT==NULL)
  {    printf("Please Verify The Current Dir.. It May Be Changed");
  }
  for(i=0;i<5;i++)
  {    fscanf(IN,"%d",&iIN); iOUT=fun(iIN);  fprintf(OUT,"%d\n",iOUT); }
  fclose(IN); fclose(OUT);
}

程序改错

功能:求如下表达式:

复制代码
           1       1                     1
  S = 1 + --   + ----- + ...... +   ------------- 
          1+2    1+2+3             1+2+3+......+n  
c 复制代码
#include "stdio.h"
void main()
{  int n;
  float fun();
  printf("Please input a number:");
  /**********ERROR**********/
  print("%d",n) ;                              
  printf("%10.6f\n",fun(n));
}
/**********ERROR**********/
fun(int n)                                   
{  int i,j,t;float s;  s=0;
/**********ERROR**********/
  while(i=1;i<=n;i++);                            
  {    t=0; for(j=1;j<=i;j++) t=t+j;
    /**********ERROR**********/
    =s+1/t; }                                   
  return s;}

【参考答案】scanf("%d",&n);【参考答案】float fun(int n)

【参考答案】for(i=1;i<=n;i++) for(i=1;n>=i;i++)【参考答案】s+=1.0/t; s=s+1.0/(float)t; s=s+1.0/t;

【程序填空】功能:百马百担问题:有100匹马,驮100担货,大马驮三担,中

复制代码
马驮2担,两匹小马驮一担,求大、中、小马各多少匹?
c 复制代码
#include "stdio.h"
main()
{  int hb,hm,hl,n=0;
  /***********FILL***********/
  for(hb=0;hb<=100;hb+=_____)
    /***********FILL***********/
    for(hm=0;hm<=100-hb;hm+=_____)
    {      /***********FILL***********/
      hl=100-hb-_____;
      /***********FILL***********/
      if(hb/3+hm/2+2*_____==100)
      {        n++;
        printf("hb=%d,hm=%d,hl=%d\n",hb/3,hm/2,2*hl);
      }    }  printf("n=%d\n",n);
}

【参考答案】3【参考答案】2【参考答案】hm【参考答案】hl

第七套

选择

1 在C语言中,要求运算对象必须是整型的运算符是(B)。

A、++ B、% C、!= D、/

3 在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式(C)。

A、只能用逻辑表达式或关系表达式B、只能用关系表达式

C、可用任意表达式D、只能用逻辑表达式

4 C语言的switch语句中case后(C )。

A、可为任何量或表达式B、可为常量或表达式或有确定值的变量及表达式

C、只能为常量或常量表达式D、只能为常量

5 t为int类型,进人下面的循环之前,t的值为0

while( t=1 ) { ......} 则以下叙述中正确的是( C)。

A、循环控制表达式的值为0 B、循环控制表达式不合法

C、循环控制表达式的值为1 D、以上说法都不对

6 下面有关 for 循环的正确描述是(C )。

A、for 循环是先执行循环体语句,后判断表达式

B、在 for 循环中,不能用 break 语句跳出循环体

C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

D、for 循环只能用于循环次数已经确定的情况

7 char a\[\]="This is a program.";输出前5个字符的语句是(B)。

A、puts(a); B、printf("%5s",a); C、printf("%s",a); D、a5\*2=0;puts(a);

判断

8 下列说法中错误的是(A )。

A、如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,多余的数组元素会被自动初始化为最后一个给定元素的值B、一个数组只允许存储同种类型的变量

C、数组的名称其实是数组在内存中的首地址

D、当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改

9 下列形式,不属于编译预处理命令的是(D ).

A、#ifdef M B、#undef M C、#if (M>1) D、while (M>1)

10 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是(C ). A、p1=p2; B、k=p1(*p2); C、p2=k; D、k=*p1-*p2;

判断

1 一个C程序的执行是从本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

错误

2 整型变量在可输出字符范围内,可以和字符型数据相互转化. 正确

3 设f=1,m=2,n=3,则逻辑表达式!(fn)&&(fm)&&0的值为0. 正确

4 do-while循环由do开始,while结束,循环体可能一次也不做。 错误

5 因为程序包含循环结构,所以程序算法可以包含无限的操作步骤. 错误

6 对静态数组的初始化是在编译阶段完成的. 正确

7 若一个函数中没有return语句,则意味着该函数没有返回值. 错误

8 若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的。

【参考答案】错误

9用指针取值比用数组名取值速度要快.正确

10 在定义结构体变量时,不允许对其整体赋初值. 正确

填空

1 设x的值为15,n的值为2,则表达式x%=(n+=3)运算后x的值是0_____.

2 当a=1,b=2,c=3时,执行以下程序段后c=2_____. if (a>c) b=a; a=c; c=b;

3 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为_10____.

for(i=0,j=10;i<=j;i++,j--) k=i+j;

4若有以下数组a,数组元素:a0~a9,其值为 9 4 12 8 2 10 7 5 1 3 数组元素a3的值是_8____.

5从函数的形式上看,函数分为无参函数和_____两种类型. 有参函数

【程序设计】功能:求x到y之间的奇数和(包括x和y)。

c 复制代码
#include "stdio.h"
int fun(int x,int y)
{ /*********Begin**********/
 【参考代码】
 int i,s=0;
  for(i=x;i<=y;i++)
     if(i%2!=0) s=s+i;
  return s;
  /**********  End  **********/
}
main()
{   int s;
  s=fun(1,1999);
  printf("s=%d\n",s);
  TestFunc();
}

【程序改错】功能:实现3行3列矩阵的转置,即行列互换。

c 复制代码
#include "stdio.h"
void fun(int a[3][3],int n)
{   int i,j,t;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
      /**********ERROR**********/
      scanf("%d",a[i][j]);
  for(i=0;i<n;i++)
  {    for(j=0;j<n;j++)
      printf("%4d",a[i][j]);
    printf("\n");
  }
  for(i=0;i<n;i++)
    /**********ERROR**********/
    for(j=0;j<n;j++)
    {      /**********ERROR**********/
      a[i][j]=t;
      a[i][j]=a[j][i];
      /**********ERROR**********/
      t=a[j][i];
    }  for(i=0;i<n;i++)
  {    for(j=0;j<n;j++)
    printf("%4d",a[i][j]);
       printf("\n");
  }
}
void main()
{  int b[3][3];fun(b,3);}

【参考答案】scanf("%d",&aij); scanf("%d",(*(a+i)+j));

【参考答案】 for(j=0;j<i;j++) for(j=0;i>j;j++)

【参考答案】t=aij; 【参考答案】aji=t;

【程序填空】功能:产生10个30,90区间上的随机整数,然后对其用选择法进行由小到大的排序。

c 复制代码
#include "stdio.h"#include "stdlib.h"
void main()
{  /***********FILL***********/
  _____;
   int i,j,k;
   int a[10];
   for(i=0;i<10;i++)
     a[i]=rand()%61+30; //产生[30,90]区间上的随机整数
   for(i=0;i<9;i++)
   {      /***********FILL***********/
      _____;
      for(j=i+1;j<10;j++)
        /***********FILL***********/
      if(_____) k=j;
      if(k!=i) 
      {           t=a[k];a[k]=a[i];   a[i]=t; }
   } 
   /***********FILL***********/
   for(_____ )  printf("%5d",a[i]); printf("\n");}

【参考答案】int t【参考答案】k=i【参考答案】ak>aj aj<ak

【参考答案】 i=0;i<10;i++ i=0;10>i;i++

第八套

选择

若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是(B)。

A、6 B、-12 C、9 D、-3

求平方根函数的函数名为(C)。

A、abs B、pow C、sqrt D、cos

int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(C)。

A、3 B、2 C、1 D、不一定

执行下面程序段后,f的值是:( A)

int f=5; switch(f)

{case 5:f+=1; case 6:f--; case 7:f*=3;break; case 8:++f;}

A、15 B、10 C、28 D、9

在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的表达式是(B )。

A、(E>0||E<0) B、(E== 0 ) C、(!E==0) D、(E!=0)

能够完成求出两个正整数a,b最小公倍数max的程序段.请在下划线处填写正确内容(D )。

if(a>=b) t=a; else t=b;

for(i=t; ;i++) if(i%a== 0 &&i%b==0) ___________

printf("%d",max);

A、{max=i;continue;} B、max=i;break; C、max=i;continue; D、{max=i;break;}

以下能对一维数组a进行正确初始化的语句是(B)。

A、int a10={}; B、int a\[\]={0}; C、int a10={10*1}; D、int a10=(0,0,0,0,0)

以下只有在使用时才为该类型变量分配内存的存储类说明是(D)。

A、auto和 static B、register和 static C、extern和 register D、auto和 register

file1.c中有命令,#include <file2.c>,若file2.c中有全局静态变量a,则(B ).

A、a在file1.c中应用extern说明.B、a在file1.c中有效,不必用extern说明.

C、a在file1.c中不生效 D、a在file1.c和file2.c中均不生效.

在说明语句:int *f();中,标识符f代表的是(A)。

A、一个返回值为指针型的函数名B、一个用于指向函数的指针变量

C、一个用于指向一维数组的行指针D、一个用于指向整型数据的指针变量

判断

1 一个C程序只能由一个主函数组成 错误

2 语句scanf("%7.2f",&a);是合法的。 错误

3 设u=1,v=2,w=3,则逻辑表达式u||v-w&&v+w的值为0. 错误

4 对于for(表达式1;表达式2;表达式3)语句来说,continue语句意味着转去执行表达式2.错误

5 在循环嵌套中,使用break语句可以跳出所有循环. 错误

6 定义一维数组的形式为:类型说明数组名表达式,其中表达式可以是正整型常量表达式、字符常量表达式. 正确

7 数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值. 错误

8 计算机编译系统对宏定义在编译时进行语法检查. 错误

9 任何一个地址前缀*运算符后都等同于一个变量. 正确

10 typedef可以定义生成新的数据类型. 错误

填空 1在C语言中,字符的比较就是对它们的_____进行比较。ASCII

2 当a=1,b=2,c=3时,执行以下程序段后a=3 _. if (a>c) b=a; a=c; c=b;

3 以下程序的输出结果为_10____,

#include "stdio.h" void main() {int a;for(a=0;a<10;a++);printf("%d",a);}

4 字符串比较的库函数是_____,只写函数名即可. strcmp

5 函数的_____调用是一个函数直接或间接地调用它自身. 递归

【程序设计】功能:实现两个整数的交换。

例如:给a和b分别输入:60和65,输出为:a=65 b=60

c 复制代码
#include "stdio.h"
#include "conio.h"
void fun(int *a,int *b)
{ /*********Begin**********/
 【参考代码】
 int t;
 t=*a;*a=*b;*b=t;
  /**********  End  **********/
} 
main()
{  int a,b;
  void TestFunc();
  printf("Enter a,b:");
  scanf("%d%d",&a,&b);
  fun(&a,&b);
  printf("a=%d b=%d\n",a,b);
  TestFunc();
}

【程序改错】用指针作函数参数,编程序求一维数组中的最大和最小的 元素值.

c 复制代码
#include "stdio.h"
#define N 10
/***********ERROR***********/
void maxmin(int arr[ ],int *pt1, *pt2, n)
{  int i;
  /***********ERROR***********/
  *pt1=*pt2=&arr[0];
  for(i=1;i<n;i++)
  {    /***********ERROR***********/
    if(arr[i]<*pt1)  *pt1=arr[i];
    if(arr[i]<*pt2)  *pt2=arr[i];
  }
}
main( )
{  int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
  /***********ERROR***********/
  *p1=&a;*p2=&b;
  maxmin(array,p1,p2,N);
  printf("max=%d,min=%d",a,b);
}

【参考答案】void maxmin(int arr ,int *pt1,int *pt2,int n)【参考答案】*pt1=*pt2=arr0;

【参考答案】if(arri>*pt1) *pt1=arri;【参考答案】p1=&a;p2=&b;

【程序填空】

复制代码
*****
 *****
  *****
   *****
    *****
c 复制代码
#include "stdio.h" 
void main ( )
{  char a[5][9]={"     "};
  int i,j;
  for (i=0;i<5;i++)
  /***********FILL***********/
  for(j=i; _____;j++)
    a[i][j]='*';
  /***********FILL***********/
  for(_____;i<5;i++)
  {    for(j=0;j<9;j++)
    /***********FILL***********/
    printf("%c", _____ );
    /***********FILL***********/
    _____;
   }
 }

【参考答案】j<i+5 i+5>j【参考答案】i=0【参考答案】aij【参考答案】printf("\n")

第九套

选择

已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是(A)。

A、字符A B、字符a C、字符e D、非法的常量

下面程序的 正确输出结果是(A ).(规定用U表示空格)

main()

{ float x=5.783,y= -10.2345; printf ("x=%-8.2f ,y=%-8.2f \n", x,y);}

A、x=5.78UUUU,y=-10.23UUB、x=5.78,y=-10.23

C、5.78,-10.23D、x=UUUU5.78,y=UU-10.23

执行下面程序段后,i的值是(A ).

int i=10;switch(i){case 9: i+=1;case 10: i--; case 11: i*=3; case 12: ++i;}

A、28 B、10 C、9 D、27

请写出下面程序的运行结果( D)。

#include "stdio.h"

void main()

{ int k=0;char c='A';

do {

switch(c++){ case 'A':k++;break; case 'B':k--;default:k=k/3; } k++;

} while(c<'C');}

A、k=0 B、k=2 C、k=4 D、k=1

以下程序的执行结果是(B )。

void main() { int x = 0, s = 0; while( !x != 0 ) s += ++x; printf( "%d ",s ); }

A、语法错误 B、1 C、0 D、.无限循环

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

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

用户定义的函数不可以调用的函数是(D)。

A、本文件外的 B、本函数下面定义的 C、非整型返回值的 D、main函数

以下叙述正确的是(C)。

A、可以把if定义为用户标识符,但不能把define定义为用户标识符

B、define和if都不能定义为用户标识符

C、可以把define定义为用户标识符,但不能把if定义为用户标识符

D、可以把define和if定义为用户标识符

下面选择中正确的赋值语句是(设char a5,*p=a;)(A)。

A、p="abcd";B、a="abcd";C、*a="abcd";D、*p="abcd";

判断

1 一个C程序的执行是从本程序的main函数开始,到本程序文件的最后一个函数结束

错误

2 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变

正确

3 已知a=3,b=4,c=5,则逻辑表达式!(a+b)+c-1 && b+c/2的值为0. 错误

4 在do-while循环中,任何情况下都不能省略while. 正确

5 do-while循环中,根据情况可以省略while. 错误

6 设有数组定义: char array ="hello"; 则数组 array所占的内存空间为5字节.

错误

7 数组名作为函数调用时的实参,实际上传递给形参的是数组全部元素的值. 错误

8 如果字符串与宏名相同,则不管其是否在双括号内,都要进行宏替换. 错误

9 定义 int d ={1,2,3,4},x,*m=d;,则执行x=*m++后,x的值是2. 错误

10 共用体变量所占的内存长度是各成员占的内存长度之和. 错误

填空

1设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为_1____.

2当a=3,b=2,c=1;时,执行以下程序段后 c=2 _. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;

3以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则下划线处应填写_____. ch=getchar(); while(ch ____ 'Y' ch=getchar(); 【参考答案】==

4 执行语句char str81="abcdef";后,字符串str结束标志存储在数组元素str**6** _ 中.

5设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是 16_。 union stud { char num6; float s4; double ave; } a,*p;

【程序设计】编写函数fun求一个字符串的长度,在main函数 输入字符串,并输出其长度。

c 复制代码
#include "stdio.h"
int fun(char p[])
{/*********Begin**********/
 【参考代码】
int n=0;
while(p[n]!='\0') n++;
return n;
 /**********  End  **********/
}
void main()
{  char a[20];
  void TestFunc();
  int len;
  printf("please input a string:\n");
  gets(a);
  len=fun(a);
  printf("The string's length is:%d\n",len);
  TestFunc();
}

【程序改错】在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。

c 复制代码
#include "stdio.h"#define N 11
void main()
{  int i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156};
  printf("please enter an integer to insert in the array:\n");
  /**********ERROR**********/
  scanf("%d",&number) 
  printf("The original array:\n");
  for(i=0;i<N-1;i++)
    printf("%5d",a[i]);
  printf("\n");
  /**********ERROR**********/
  for(i=N-1;i>=0;i--)
    if(number<=a[i])
  /**********ERROR**********/
    a[i]=a[i-1];
  else
  {    a[i+1]=number;
    /**********ERROR**********/
    exit;
  }
  if(number<a[0]) a[0]=number;printf("The result array:\n");
  for(i=0;i<N;i++)  printf("%5d",a[i]);  printf("\n");}

【参考答案】scanf("%d",&number);【参考答案】for(i=N-2;i>=0;i--)

【参考答案】ai+1=ai;【参考答案】break;

【程序填空】利用全局变量计算长方体的体积及三个面的面积。

c 复制代码
#include "stdio.h"
int s1,s2,s3;
int vs(int a,int b,int c)
{  int v;
  /***********FILL***********/
  v=_____;
  s1=a*b;
  /***********FILL***********/
  s2=_____; s3=a*c;  return  v;
}
main()
{  int v,l,w,h;
  printf("\ninput length,width and height: ");
  /***********FILL***********/
  scanf("%d%d%d",_____,&w,&h);
  /***********FILL***********/
  v=_____;
  printf("v=%d    s1=%d    s2=%d    s3=%d\n",v,s1,s2,s3);}

【参考答案】abc 【参考答案】b*c【参考答案】 &l【参考答案】vs(l,w,h)

第十套

以下不正确的叙述是(B)。

A、在C程序中所用的变量必须先定义后使用

B、当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值

C、程序中,APH和aph是两个不同的变量

D、若a和b类型相同,在执行了赋值语句a=b;后b中的值将放入a中,b中的值不变

设:long w=65535,t=7654321;根据下面的输出结果,正确的程序段是(C ).

w=65535,t=7654321 end

A、printf("w=%5d,t=%7d\n",w,t);printf("%s","end');

B、printf("w=%5ld,t=%7ld",w,t);printf("%c","end");

C、printf("w=%5ld,t=%7ld\n",w,t);printf("%s","end");

D、printf("w=%5u,t=%7u\n",w,t);printf( "end");

不合法的if语句是:(D )

A、if(表达式) 语句1 else 语句2B、if(表达式) 语句

C、if(表达式1) 语句1 else if(表达式2)语句2 else 语句3

D、if 关系表达式 语句1 else 语句2

在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式(C)。

A、只能用逻辑表达式或关系表达式B、只能用关系表达式

C、可用任意表达式 D、只能用逻辑表达式

以下语句中,循环次数不为10次的语句是(A )。

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

B、i=1;do{i++;}while(i<=10);

C、i=10;do{i- -;}while(i>0);

D、i=10;while(i>0){--i;}

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

#include "stdio.h"

void main()

{ int a=1,b=10;

do{ a++; b-=a; }while(b-->0);

printf("a=%d,b=%d",a,b);}

A、a=4,b=-2 B、a=4,b=-1 C、a=2,b=-1 D、a=2,b=-2

若有说明: int a\[\]4={0,0};则下面不正确的叙述是(A)。

A、有元素a00和a01可得到初值0,其余元素均得不到初值0

B、数组a的每个元素都可得到初值0 C、二维数组a的第一维大小为1

D、因为二维数组a中第二维大小的值除经初值个数的商为1,故数组a的行数为1

以下错误的描述是:函数调用可以(D)。

A、出现在执行语句中B、做为一个函数的实参

C、出现在一个表达式中D、做为一个函数的形参

下列说法中正确的是(B ).

A、函数调用不占运行时间,只占编译时间. B、宏替换不占运行时间,只占编译时间.

C、有参数的宏定义,就是函数. D、在定义宏时,宏名与带参数的括弧之间可以加空格.

与实际参数为实型数组名相对应的形式参数不可以定义为(C)。

A、float a; B、float (a)3; C、float a; D、float a\[\];
判断1一个C程序的执行是从本程序的main函数开始,到main函数结束 正确
2 关系运算符<= 与 == 的优先级相同。 错误
3 已知x=2,y=2, 执行分支语句 if(x==y) y=1; else y=-1;后结果为-1. 错误
4 break语句能够终止当前进行的多层循环. 错误
5 C语言中三种基本结构:顺序、选择、循环都只有一个出口. 正确
6 int a34={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。
【参考答案】 正确
7 函数的返回值可以通过函数中的return语句获得。 正确
8 包含文件是可以嵌套的. 正确
9 假设有int a10, p;则p=&a0与p=a等价 正确
10共同体变量所占的内存长度等于最长的成员的长度。 正确
填空 1 若a是int型变量,则计算表达式 a=25/3%3 后a的值为__2___.
2当a=3,b=2,c=1;时,执行以下程序段后 a=2 . if(a>b) a=b; if(b>c) b=c; else c=b; c=a;
3 以下do-while语句中循环体的执行次数是
__.
a=10; b=0; do { b+=2; a-=2+b; } while (a>=0);
4 数组在内存中占一段连续的存储区,由_____代表它的首地址. 数组名
5 若有以下整型数组aa10,其值为 9 4 12 8 2 10 7 5 1 3 该数组的元素中,数值最小的元素的下标值是___8__.
【程序设计】
请写一函数fun,该函数的功能是:把数组a中的数按从大到小的顺序排列。数组的值从主函数中输入,排序结果也在主函数中输出。
#include <stdio.h>
#define N 10
void fun(int a , int n)
{ /Begin
/
int i,j,t;
for (i=0;i<n-1;i++)
{ for(j=0;j<n-1-i;j++)
{if(aj<aj+1)
{ t=aj; aj=aj+1;aj+1=t ; }
} }
/
******** End /
}
void main( )
{ int i=0;
int aN={45,34,78,38,87,98,23,67,76,56};
FILE OUT;
fun(a,10);
printf("\n排序后的结果为:\n");
for(i=0;i<=9;i++)
printf("%5d",ai );
printf("\n");
if((OUT=fopen("out.dat","w"))NULL)
printf("写入文件失败!");
for(i=0;i<=9;i++)
fprintf(OUT,"%d\n",ai);
fclose(OUT);
}
【程序改错】功能:将一个字符串中的大写字母转换成小写字母。
例如:输入aSdFG输出为asdfg。
#include "stdio.h"
/ERROR /
bool fun(char *c)
{ if(*c<='Z'&&*c>='A')*c-='A'-'a';
/ERROR /
fun= c;
}main()
{ /ERROR /
char s81,p=s;
gets(s);
while(*p)
{ *p=fun§;
/ERROR /
puts(*p);
p++;
}
putchar('\n');
}
【参考答案】 char fun(char c)【参考答案】return c;
【参考答案】char s81,p=s;【参考答案】putchar(p); printf("%c",p);
【程序填空】
功能:求两个非负整数的最大公约数和最小公倍数。
#include "stdio.h"
main()
{ int m,n,r,p,gcd,lcm;
scanf("%d%d",&m,&n);
if(m<n) {p=m,m=n;n=p;}
p=m
n;
r=m%n;
/FILL /
while(_____ )
{ /FILL /
m=n;n=r; ;
}
/FILL /
gcd=
;
lcm=p/gcd;
/FILL /
printf("gcd=%d,lcm=%d\n", _____);
}
【参考答案】r!=0 r【参考答案】 r=m%n r=m-m/n
n
【参考答案】 n【参考答案】gcd,lcm n,lcm
第十一套
若定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3
(int)(x+y)%2/4的值是:( D).
A、2.750000 B、0.000000 C、3.500000 D、2.500000
语句printf("a\bre'hi'y\\bou\n");的输出结果是(B)(说明:'\b'是退格符)。
A、a\bre'hi'y\\bou B、re'hi'you C、a\bre'hi'y\bou D、abre'hi'y\bou
已知键盘输入a=4,b=3,下面程序输出的结果是(C ).
main()
{ int a,b,s;
scanf("a=%d,b=%d",&a,&b);
s=a; if(a<b) s=b; s=s
s; printf("%d\n",s);
}
A、9 B、13 C、16 D、15
执行下面程序段后,i的值是(A ).
int i=10;switch(i){case 9: i+=1;case 10: i--; case 11: i
=3; case 12: ++i;}
A、28 B、10 C、9 D、27
从键盘输入的整数中找出最小值min,输入0时结束.请在A处填写正确语句( D)。
#include "stdio.h"
main()
{ int min=0,a;
do{
scanf("%d",&a);if(min>a) min=a; }while(A ); printf("%d",min);}
A、a=0 B、a0 C、a>0&&a<0 D、a!=0
下面程序的运行结果是:(B )。
#include "stdio.h"
void main()
{ int x,i; for(i=1;i<=100;i++)
{ x=i;if(++x%20) if(++x%30) if(++x%7==0) printf("%d",x); }}
A、4284 B、2870 C、3981 D、2668
与下面程序段对应的正确输入语句是(C ).
void main()
{int i;
char a10; for(i=0;i<10;i++)___
;...}
A、scanf("%s", ai); B、scanf("%s", &ai); C、scanf("%c", &ai); D、scanf("%c", a);
以下函数的类型是(C )。
fff(float x)
{ return 5;}
A、void 类型B、与参数x的类型相同C、int类型D、无法确定
设有以下宏定义: #define M 4 #define T(t) ((M+1)t)
则执行语句:y=2
(M+T(4+1));后,y的值为(B ).
A、28 B、50 C、出错 D、58
下面判断正确的是(D)。
A、char c4="abc",d4="abc";等价于 char c4=d4="abc";
B、char str10={"china"};等价于char str10;str\[\]={"china"};
C、char *a="china";等价于 char *a;*a="china";D、char *s="china";等价于 char *s;s="china";
判断
c程序总是从程序的第一条语句开始执行. 错误
在C语言中,各种类型的整型数据在内存中都占2个字节。错误
条件表达式x?'a':'b'中,若x=0时,表达式的值为'b'. 正确
在do-while循环中,根据情况可以省略while. 错误
对于continue 和break这两条语句,均可用来实现循环体的中止. 错误
数组的首地址不一定是第一个数组元素的地址. 错误
函数调用时,要求实参与形参的个数必须一致,对应类型一致. 正确
被包含文件是在编译时先单独生成目标文件,然后连接到可执行文件中去. 错误
数组名与指针变量是相互等价的. 错误
结构体变量的成员可以象普通变量一样进行各种运算. 正确
填空
1 若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量c中的值是 9
. c=(a-=(b-5)); c=(a%11)+(b=3);
2 当a=1,b=2,c=3时,执行以下程序段后a=3_____. if (a>c) b=a; a=c; c=b;
3 若所用变量均已正确定义,则执行下面程序段执行后,输出的值是_____.
for(i=0 ; i<2 ; i++ ) printf("YES"); printf("YES"); YESYESYES
4 若有定义:int a6={2,4,6,8,10,12};,则
(a+1)的值是__4___.
5 如果函数不要求返回值,可用_____来定义函数为空类型. void
【程序设计】
题目:用while语句求1~n的累计和。
#include <stdio.h>
void TestFunc();
int fun(int n)
{/Begin
/
【参考代码】
int i=1,sum=0;
while(i<=n)
{ sum=sum+i; i++; }
return sum;
/
** * End **********/

}

void main()

{ int sum = 0;

sum=fun(100);

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

TestFunc();

}

void TestFunc()

{ FILE *IN,*OUT;

int i;

int iIN,iOUT;

IN=fopen("in.dat","r");

if(INNULL)
{ printf("Please Verify The Currernt Dir...It May Be Changed"); }
OUT=fopen("out.dat","w");
if(OUTNULL)

{ printf("Please Verify The Current Dir... It May Be Changed");

}

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

{ fscanf(IN,"%d",&iIN);

iOUT=fun(iIN);

fprintf(OUT,"%d\n",iOUT);

} fclose(IN);

fclose(OUT);}

【程序改错】功能:将字符串s中最后一次出现的子字符串t1替换成字符串t2,

所形成的新串放在w所指的数组中,在此处,要求t1和t2 所指字符串的长度相同。

例如:当s所指字符串中的内容为"abcdabfabc",t1中的内容为"ab",t2中的内容为"99"时,结果w所指数组中的内容应为"abcdabf99c"。

#include "conio.h"#include "stdio.h" #include "string.h"

int fun (char *s, char *t1, char *t2 , char *w)

{ int i; char *p , r, a;
strcpy( w, s );
/ERROR /
while ( w )
{ p = w; r = t1;
while ( r )
/ERROR /
if ( r = p )
{r++; p++; }
else break;
/ERROR /
if ( r == '/0' ) a = w; w++; }
r = t2;
while ( r )
{ /ERROR /
a = r; a++; r++; }}
main()
{ char s100, t1100, t2100, w100;
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)strlen(t2) )
{ fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w); }
else printf("\nError : strlen(t1) != strlen(t2)\n");}
【参考答案】while (*w) while (*w!=0) for (;*w!='\0'😉【参考答案】if (*r
p)
【参考答案】 if (r=='\0') a=w; if (r0 ) a=w; if(!*r) a=w;【参考答案】*a=*r;
第十二套
下列正确的标识符是(C ).
A、a+b B、6a C、_do D、%y
执行以下程序段后,输出结果和a的值是(B)。
int a=10; printf("%d",a++);
A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10
以下不正确的if语句形式是(B)。
A、if(x<y) {x++;y++;} B、if(x!=y) scanf("%d",&x) else scanf("%d",&y);
C、if(x>y&&x!=y); D、if(xy) x+=y;
int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c; 则a的值为(C)。
A、1 B、0 C、2 D、3
对for(表达式1; ;表达式3)可以理解为(C ).
A、for(表达式1;表达式3;表达式3) B、for(表达式1;表达式1;表达式3)
C、for(表达式1;1;表达式3) D、for(表达式1;0;表达式3)
运行结果是" 11 12"的程序段是:请在A处填写正确内容(B )。
for(i=1;i<=2;i++) A
A、for(j=1;j<=2;j++)printf("%3d",10
i+j);break;
B、{for(j=1;j<=2;j++)printf("%3d",10
i+j);break;}
C、for(j=1;j<=2;j++)printf("%3d",10
i+j);continue;
D、{for(j=1;j<=2;j++)printf("%3d",10
i+j);continue;}
static char str10="China";数组元素个数为(D)。
A、6 B、9 C、5 D、10
以下程序的输出结果是:( C).
fun(int x, int y, int z)
{ z=x
x+y
y; }main( )
{ int a=31;fun(5,2,a); printf("%d", a);}
A、无定值 B、29 C、31 D、0
文件包含中,被包含文件(B ).
A、可以是可执行文件.B、可以嵌套其它文件.
C、可以是目标文件或源文件.D、必须用".h"为后缀.
下列程序段的输出结果是:(C ).
void fun( int x, int y)
{ printf("%d %d",x,y);x=3;y=4;}
main( )
{ int x=1, y=2; fun(&y, &x);printf("%d %d", x, y);}
A、2 1 1 2 B、1 2 3 4 C、2 1 4 3 D、1 2 1 2
判断
在C程序中,main函数必须位于程序的最前面 错误
表达式 (j=3, j++) 的值是4. 错误
已知a=3,b=4,c=5,则逻辑表达式a||b+c && b-c的值为0. 错误
循环结构中的continue语句是使整个循环终止执行 错误
在实际编程中,do-while循环完全可以用for循环替换. 正确
引用数组元素时,数组元素下标必须是整型常量. 错误
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。正确
带参数的宏定义不是进行简单的字符串替换,还要进行参数替换. 正确
下列的初始化的方式是正确的吗?char st10; st="string"; 错误
在定义结构体变量时不允许对它赋初值. 错误
填空
1int a=1,b=2,c=3; 执行语句a=b=c;后a的值是_3____.
2当a=3,b=2,c=1;时,执行以下程序段后 c=2_____. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;
3设i,j,k均为int型变量,则执行完下面的for循环后,k的值为_10____.
4 for(i=0,j=10;i<=j;i++,j--) k=i+j;
5 static int a33={{1,2,3},{4,5,6},{7,8,9}};其中a12的值为__6___.
6 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体_____,再说明结构体变量. 类型
【程序设计】将主函数中输入的字符串反序存放。例如:输入字符串"abcdefg",则应输出"gfedcba"。
#include "stdio.h"
#include "string.h"
#include "conio.h"
#define N 81
void fun(char str\[\],int n)
{ /Begin
/
【参考代码】
int i,j;
char c;
for(i=0,j=n-1;i<j;i++,j--) {
c=stri;
stri=strj;
strj=c;
} /
** End *********/}
void main()
{ void TestFunc();
char s N;
int l;
printf("input a string:");gets(s);
l=strlen(s);
fun(s,l);
printf("The new string is :");puts(s);
TestFunc();
} fclose(OUT);}
【程序改错】先从键盘上输入一个3行3列矩阵的各个元素的值,然后输
出主对角线上的元素之和sum。
#include "stdio.h"
int fun()
{ int a33,sum;
int i,j;
/ERROR /
a=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/ERROR /
scanf("%d",aij);
for(i=0;i<3;i++)
/ERROR /
sum=sum+aij;
/ERROR /
printf("sum=%f\n",sum);
}
void main()
{ fun();}
【参考答案】sum=0;【参考答案】scanf("%d",&aij);
【参考答案】sum=sum+aii;【参考答案】printf("sum=%d\n",sum);
第十三套
以下运算符中优先级最低的是(C)。
A、&& B、| C、|| D、&
已定义两个字符数组a,b,则以下正确的输入格式是( B )。
A、scanf("%s%s", &a, &b) ; B、scanf("%s%s", a, b); C、get(a, b); D、gets("a"),gets("b");
C语言的if语句中,用作判断的表达式为(A )。
A、任意表达式B、算术表达式C、逻辑表达式D、关系表达式
不合法的if语句是:(D )
A、if(表达式) 语句1 else 语句2 B、if(表达式) 语句
C、if(表达式1) 语句1 else if(表达式2)语句2 else 语句3
D、if 关系表达式 语句1 else 语句2
以下不是无限循环的语句为(D )。
A、while(1){x++;} B、for(;;x++=i);
C、for(i=10;;i--) sum+=i; D、for(y=0,x=1;x>++y;x=i++) i=x;
语句while(!E);中的表达式!E等价于( D)。
A、E1 B、E!=0 C、E!=1 D、E0
若有说明 int a34;则对a数组元素的正确引用是(C)。
A、a1,3 B、a24 C、a1+10 D、a(2)(1)
本类型变量做函数参数, 实参和对应的形参(B ).
A、不占用存储单元B、各自占用独立的存储单元
C、同名时才能共用存储单元D、共占用一个存储单元
已知有宏定义#define F(a) a
(a+2),则F(4+3)的值为(D ).

A、24 B、15 C、63 D、31

int a10; 给数组a的所有元素分别赋值为1、2、3、......的语句是(D)。

A、for(i=1;i<11;i++)ai=i; B、for(i=1;i<11;i++)a0=1;

C、for(i=1;i<11;i++)ai+1=i; D、for(i=1;i<11;i++)ai-1=i;

C程序的每行中只能写一条语句 错误

若有 int i=10,j=2;则执行完i*=j+8;后ⅰ的值为28。 错误 错误

do-while的循环体不能是复合语句. 错误

continue能够终止当前进行的多层循环. 错误

若有定义 int a10;则 for (i=0;i<=10;i++) ai=i;编译时无语法错误. 正确

C语言中,若对函数的类型未加显示说明,则函数的类型是不确定的. 错误

C程序中有调用关系的所有函数必须放在同一个源程序文件中。 错误

设有定义: int a ={5,8,7,6,2,7,3}; int p=&a1;则 表达式 ( --p)++等同于a0++. 正确

不能直接整体引用结构体变量,而只能引用结构体最底层成员变量. 正确

1 表达式 a+=b 相当于表达式_____.a=a+b

2 当a=3,b=2,c=1;时,执行以下程序段后 c=2 _. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;

3 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是_3____.

for (x=0,y=0;y!=123&&x<3;x++) scanf ("%d",&y);

4 连接字符串的函数是_____,只写函数名即可. strcat

下面语句的功能是从一文本文件中读入一个数据(数据保存格式为:XXXX)到一整型变量i中,请填空,(fp," ",&i); fscanf %4d

【程序设计】

功能:从键盘输入一个大于3的整数,调用函数fun判断其是否素数,然后在main函数中输出相应的结论 信息。例如:7是素数,8不是素数。请编写fun函数。素数是 仅能被1和自身整除的数。

#include "stdio.h"

#include "math.h"

int fun(int n)

{ /Begin */

int i;int j;j= 1;

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

{if(n%i0) j= 0;}
return j;
/********** End **********/
}
void main()
{ void TestFunc();
int m,flag;
printf("input an integer:");
scanf("%d",&m);
flag=fun(m);
if(flag)
printf("%d is a prime.\n",m);
else
printf("%d is not a prime.\n",m);
TestFunc();
}
【程序改错】
功能:给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数。例如:n=6时,输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值为40.828335,在平均值以下的实数个数应为3。
#include "stdio.h"
int fun(float x\[\],int n)
{ int j,c=0;
/ERROR /
float j=0;
/ERROR /
for(j=0;j<=n;j++)
xa+=xj;
xa=xa/n;
printf("ave=%f\n",xa);
/ERROR /
for(j=0;j<=n;j++)
if(xj<=xa) c++;
/ERROR /
return xa;
}
void main()
{ float x\[\]={23.5,45.67,12.1,6.4,58.9,98.4};
printf("%d\n",fun(x,6));
}
【参考答案】float xa=0;【参考答案】for(j=0;j<n;j++)
【参考答案】for(j=0;j<n;j++)【参考答案】return c;
【程序填空】功能:分别求出一批非零整数中的偶数、奇数的平均值,用零作为终止标记。
#include "stdio.h"
main()
{ int x,i=0,j=0;
float s1=0,s2=0,av1,av2;
scanf("%d",&x);
/FILL /
while(_____)
{ if(x%20) {s1=s1+x;i++;}

/FILL /


{ s2=s2+x;j++;}

/FILL /

_____;

}

if(i!=0) av1=s1/i;

else av1=0;

if(j!=0)

/FILL /

_____ ;

else av2=0;

printf("oushujunzhi:%7.2f,jishujunzhi:%7.2f\n",av1,av2);}

【参考答案】x!=0【参考答案】else else if(x%2==1)

【参考答案】scanf("%d",&x)【参考答案】av2=s2/j

第十四套

已知字母A的ASCII码为十进制数65,且c为字符型,则执行语句c='A'+'6'-'3';后,c中的值为:( D).

A、c B、不确定的值 C、d D、D

已知下面的程序段,若使得i=10,j=15,x=9.6,y=81.73正确的输入语句是(D ).

main()

{int i,j;float x,y;

A、scanf("%d,%d",&i,&j);scanf("%f,%5.2f",&x,&y);

B、scanf("%d,%d",&i,&j);scanf("%e,%5.2f",&x,&y);

C、scanf("%d,%d",i,j);scanf("%f,%f",&x,&y);

D、scanf("%d,%d",&i,&j);scanf("%f,%f",&x,&y);

为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与(A)配对。

A、其之前最近的未配对的ifB、其之后最近的if

C、同一行上的if D、缩排位置相同的if

C语言的if语句中,用作判断的表达式为( A)。

A、任意表达式B、算术表达式C、逻辑表达式D、关系表达式

以下正确的描述是(A ).

A、只能用continue语句来终止本次循环B、switch语句中不能出现continue语句

C、在循环中break语句不能独立出现D、goto语句只能用于退出多层循环

从循环体内某一层跳出,继续执行循环外的语句是(C )。

A、continue语句B、空语句C、break语句D、return语句

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

A、int a3 B、float a(3,4) C、float a(3)(4) D、double a14

以下程序的输出结果是(C ).

void fun(int a, int b, int c)

{ a=456; b=567; c=678; }

main()

{ int x=10, y=20, z=30;fun(x, y, z);printf("%d,%d,%d\n", z, y, x);}

A、10,20,30 B、678567456 C、30,20,10 D、456567678

关于宏的下列说法正确的是(D ).

A、宏名必须用大写字母表示.B、宏定义是特殊的C语句,应在行末加分号.

C、在#define R 4.5中,R代替了常量4.5.D、可以用#undef命令终止宏定义的作用域.

若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是(A)。

A、p= &j; B、i=*p; C、i=p; D、i=&j;
C程序的基本组成单位是函数 正确
x
=y+8 等价于 x=x
(y+8)。 正确

已知a=1,b=2,c=3,d=4,则条件表达式a>b?a:(c>d?c:d)的值为4. 正确

无论哪种循环语句,都必须给出循环结束条件. 正确

continue语句只能用于循环语句中. 正确

对静态变量的初始化不是在编译阶段完成的. 错误

在C语言中,函数名仅仅代表函数的名称,没有任何含义. 错误

如果字符串与宏名相同,则不管其是否在双括号内,都要进行宏替换. 错误

若 p 为指针变量,a 为数组名,则 a-p是合法的表达式. 正确

共用体类型可以出现在结构体类型定义中,但结构体类型不能出现在共用体类型定义中.错误

执行下列语句后,z 的值是_30____.int x=4,y=25,z=5; z=y/xz;
当a=3,b=2,c=1;时,执行以下程序段后 c=2 . if(a>b) a=b; if(b>c) b=c; else c=b; c=a;
程序段int k=10; while(k=0) k=k-1;循环体语句执行__0___次.
C语言中,数组名是一个不可变的_____量,不能对它进行加减和赋值运算. 常量
若a=1,b=2,c=3,d=4,则表达式a>b?a:c>d? c:d的值是_4
_。
【程序设计】功能:输入一个字符串,过滤此串,只保留串中的字母字
符,并统计新生成串中包含的字母个数。
例如:输入的字符串为ab234$df4,新生成的串为abdf 。
#include "stdio.h"
#include "conio.h"
#define N 80
void main()
{char strN;int fun(char ptr );
void TestFunc();
int s;
printf("input a string:");gets(str);
printf("The original string is :"); puts(str);
s=fun(str);
printf("The new string is :");puts(str);
printf("There are %d char in the new string.",s);
TestFunc();
}
int fun(char ptr )
{ /Begin
/

【参考代码】

int i,j;

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

if(ptri<='z'&& ptri>='a'|| ptri<='Z' && ptri>='A')

{ ptrj= ptri;

j++;}

ptrj='\0';

return(j);

/********** End *********/}
【程序改错】
功能:输入一行英文文本,将每一个单词的第一个字母变成大 写。
例如:输入"This is a C program.",输出为"This Is A C Program."。
#include "stdlib.h"#include "string.h"#include "stdio.h"#include "conio.h"
/ERROR /
fun(char p)
{ int k=0;
/ERROR /
do while(p=='\0')
{ if(k0&&*p!=' ')
{ *p=toupper(*p);
/ERROR / k=0; }
else if(*p!=' ') k=1;
else k=0;
/ERROR /
*p+; }}
main()
{ char str81;
printf("please input a English text line:");
gets(str);
printf("The original text line is :");
puts(str);
fun(str);
printf("The new text line is :");
puts(str);
}
【参考答案】fun(char *p)【参考答案】while(p!='\0')【参考答案】k=1;【参考答案p++;
【程序填空】功能:计算并输出500以内最大的10个能被13或17整除的自然数之和。
#include "stdio.h"
/FILL /
int fun(_____ )
{ int m=0, mc=0, j, n;
/FILL /
while (k >= 2 && _____)
{ /FILL /
if (k%13 == 0 || _____)
{ m=m+k; mc++; } k--; }
/FILL /
_____;
}
void main ( )
{ printf("%d\n", fun (500));}
【参考答案】int k【参考答案】mc < 10【参考答案】k%17 == 0【参考答案】return m
第十五套
下列不正确的C语言语句是(B ).
A、x++; B、y=int(x); C、x=1,y=2; D、x=y=5;
关于%-m.nf格式符,下列描述中正确的是(A ).
A、字符"-"表示输出字符靠左对齐.B、字符"-"表示在输出字符前面加上字符"-" .
C、字符"-"表示输出字符靠右对齐.D、字符"-"表示在输出字符最后加上字符"-" .
已知键入a=4,b=3,执行下面程序输出的结果是(B ).
main()
{ int a,b,s; scanf("a=%d,b=%d",&a,&b); s=a; if(a>b) s=b; s=s
s; printf("%d\n", s);}
A、13 B、9 C、16 D、15
下面程序的功能是计算1~100中所有9的倍数的数值之和,请在A处填写正确语句.( D)。
#include "stdio.h"void main()
{ int i,sum=0; for (i=1; i<=100 ; i++)
if (i%9!=0 ) _A else sum=sum+i; printf ("sum=%d", sum);}
A、i--; B、break; C、goto; D、continue;
下列是能够完成求出两个正整数a,b最大公约数max的程序段.请在下划线处填写内容正确内容(B )。if(a>=b) t=b;else t=a;
for(i=1;i<=t;i++) _______________ max=i;printf("%d",max);
A、if(a%i0||b%i0) B、if(a%i0&&b%i==0)
C、if(a%i!=0&&b%i!=0) D、if(a%i!=0||b%i!=0)
在C语言中,一维数组的定义方式为:类型说明符 数组名(B)。
A、整型常量整型表达式 B、正整型常量表达式
C、整型表达式 D、常量表达式
如果在一个函数中的复合语句中定义了一个变量,以下正确的说法是( C ).
A、该变量在本程序范围内均有效 B、该变量在主函数中有效
C、该变量只在该复合语句中有效 D、该变量在该函数中有效
已知有宏定义#define SQR(a) 2
a
a,则SQR(3+4)的值为A( ).

A、22 B、32 C、98 D、18

若有int i=3,*p;p=&i;下列语句中输出结果为3的是(A)。

A、printf("%d",*p); B、printf("%d",*i); C、printf("%d",p); D、printf("%d",&p);

从本程序的main函数开始,到main函数结束 正确

若 a=3,b=2,c=1 则关系表达式"(a>b)==c" 的值为"真"。 正确

已知a=4,b=2,c=3,d=5,表达式a>b?a:c<d?c:d的值为3. 错误

continue语句能够终止包含该语句的最内层循环. 错误

for循环语句不能用于循环次数未知的情况下. 错误

数组整体可以参加各种数学运算,数组元素也可以参加各种数学运算. 错误

C语言中,通过函数调用只能获得一个返回值. 错误

一个include 命令只能指定1个被包含的文件。 正确

如果需要向函数内传递多个值,用数组和用指针效果是一样的. 正确

结构体类型数据由多个成员构成,这些成员的类型可以不同,它们共同描述一个对象.

正确

设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为__2。5___.

当a=1,b=2,c=3时,执行以下程序段后b=2 _. if (a>c) b=a; a=c; c=b;

以下程序的输出结果为__10___,#include "stdio.h"

void main(){int a;for(a=0;a<10;a++);printf("%d",a);}

按内存排列顺序, 数组char a2中的所有元素是a0和a1

在C语言中,文件的存取是以_____为单位的,这种文件被称为_____文件.字符 流式

【程序设计】功能:输入一个字符串,过滤此串,只保留串中的字母字符,并统计新生成串中包含的字母个数。例如:输入的字符串为ab234$df4,新生成的串为abdf 。

#include "stdio.h"#include "conio.h"#define N 80

void main()

{ char strN; int fun(char ptr );void TestFunc();

int s;

printf("input a string:");gets(str);

printf("The original string is :"); puts(str);

s=fun(str);

printf("The new string is :");puts(str);

printf("There are %d char in the new string.",s);

TestFunc();

}int fun(char ptr )

{ /Begin */

/********** End /
}【参考代码】
int i,j;
for(i=0,j=0; ptri!='\0';i++)
if(ptri<='z'&& ptri>='a'|| ptri<='Z' && ptri>='A')
{ptrj= ptri;j++;}
ptrj='\0';return(j);
【程序改错】功能:求出两个非零正整数的最大公约数,并作为函数值返回。
例如:若给num1和num2分别输入49和21,则输出的最大公约数为7。
#include "stdio.h"int fun(int a,int b)
{ int r,t;if(a<b)
{t=a;
/ERROR /
b=a;
/ERROR /
a=t; }
r=a%b;
while(r!=0)
{ a=b; b=r;
/ERROR /
r=a/b;
}
/ERROR /
return a;}
void main()
{ int num1,num2,a;
scanf("%d%d",&num1,&num2);
a=fun(num1,num2);
printf("the maximum common divisor is %d\n\n",a);
}【参考答案】a=b;【参考答案】b=t;【参考答案】r=a%b;【参考答案】return b;
【程序填空】以下程序可求出所有的水仙花数。(所谓水仙花数是指一个三位正整数,
其各位数字的立方之和等于该正整数。
例如;407=4×4×4+0×0×0+7×7×7,故407是一个水仙花数。)
#include <stdio.h>
void main()
{ int x,y,z,a8,m,i=0;
printf(″The special numbers are:\n″);
/FILL /
for (m=100;; m++)
{ x=m/100;
/FILL /
y=
;
z=m%10;
if (x
100+y
10+z==x
x
x+y
y
y+z
z
z)
/FILL /
{_____;i++;}
}
for (x=0;x<i;x++)
printf(″%6d″,ax); }
【参考答案】m<1000【参考答案】(m-x
100) /10【参考答案】ai=m
第十六套
设有说明语句:char a='\72';则变量a(c)。
A、说明不合法B、包含3个字符C、包含1个字符D、包含2个字符
已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'.执行语句printf("%d,%d",c1,c2-2);后,输出结果是(A )。
A、65,66 B、65,68 C、A,68 D、A,B
已知键盘输入a=4,b=3,下面程序输出的结果是( C).
main()
{ int a,b,s;scanf("a=%d,b=%d",&a,&b);
s=a; if(a<b) s=b; s=s
s; printf("%d\n",s);}

A、9 B、1 3 C、16 D、15

以下程序的执行结果是(B )。

main() { int num = 0; while( num <= 2 ) { num++; printf( "%d,",num ); } }

A、0,1,2 B、1,2,3, C、1,2,3,4, D、1,2,

C语言中 while 和 do-while 循环的主要区别是(A )。A、do-while 的循环体至少无条件执行一次 B、do-while 的循环体不能是复合语句C、do-while 允许从外部转到循环体内 D、while的循环控制条件比 do-while的循环控制条件更严格

以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是(C)。

A、char t\[\]="abcdefg",*s=t; B、char s10="abcdefg";

C、char s10;s="abcdefg"; D、char s10;strcpy(s,"abcdefg");

在所有函数之前,定义一个外部变量的形式为static int x; 那么错误的叙述是(A ).

A、x的值不可以永久保留 B、将变量存放在静态存储区

C、使变量x可以由系统自动初始化为0 D、使x只能被本文件中的函数引用

C程序中的宏展开是在(C)。

A、编辑时进行的 B、编译时进行的 C、编译前预处理时进行的 D、程序执行时进行的

若有定义int a10,*p=a;,则p+5表示(D )。

A、元素a5的值 B、元素a6的值 C、元素a6的地址 D、元素a5的地址

在一个源程序中,main函数的位置可以任意 正确

a=(b=4)+(c=6) 是一个合法的赋值表达式。 正确

已知x=3,y=1,执行分支语句 if(x>y){t=x;x=y;y=t;} else printf("error!");后,结果为error!. 错误

for循环语句的三个表达式不能同时省略. 错误

执行continue语句并不能使整个循环终止. 正确

C语言中引用数组元素的方括号可以用花括号代替. 错误

在C语言中,程序总是从第一个函数开始执行,最后一个函数结束. 错误

宏定义不是C语句,不必在行末加分号. 正确

有如下说明:int a10={1,2,3,4,5,6,7,8,9,10},p=a; 则数值为9的表达式是 (P+8). 正确
在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。 正确
若有以下定义,则计算表达式y+=y-=m
=y后的y值是_-16____. int m=5,y=2;
C程序在执行过程中,不检查数组下标是否_____. 越界
若有fp=fopen("a1.dat","a+")打开文件语句,这个文件的数据是以_____的形式存放在内存中,该文件的使用方式为_____。 文本文件 读写
(设计)位数的正整数a、b合并形成一个整数放在 c中。合并的方式是:将a数的十位和个位数依次放 在c数的百位和个位上,数的十位和个位数依次放 在c数的十位和千位上。
#include "stdio.h"
long fun(int a, int b)
{ /Begin
/

【参考代码】

long c;

int i,j,k,t;

i=a/10;

j=a%10;

k=b/10;

t=b%10;

c=t1000+100 i+10k+j;
return c;
/
********* End /
}
void main()
{ int a,b; long c;
void NONO ( );
printf("Input a, b:");
scanf("%d%d", &a, &b);
c=fun(a,b);
printf("The result is: %ld\n", c);
NONO();
}
【程序改错】功能:实现两个字符串的连接。
例如:输入dfdfqe和12345时,则输出dfdfqe12345.
#include "stdio.h"
void main()
{ char s180,s280;
void scat(char s1\[\],char s2\[\]);
gets(s1);
gets(s2);
scat(s1,s2);
puts(s1);
}
void scat (char s1\[\],char s2\[\])
{ int i=0,j=0;
/ERROR /
while(s1i= ='\0') i++;
/ERROR /
while(s2j= ='\0')
{ /ERROR /
s2j=s1i; i++; j++; }
/ERROR /
s2j='\0';}
【参考答案】while(s1i!='\0')i++;【参考答案】while(s2j!='\0')
【参考答案】s1i=s2j;【参考答案】s1i='\0';
【程序填空】求一个二维数组中每行的最大值和每行的和,b数组放最大值,c数组和值。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得
出正确的结果。
#include "stdio.h"#include "stdlib.h"
void main()
{ int a55,b5,c5,i,j,k,s;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
aij=(int)(10.0
rand()/(RAND_MAX+1.0)); //产生10以内的随机数
for(i=0;i<5;i++)
{ /FILL /
k=ai0; _____ ; for(j=0;j<5;j++)
{ /FILL /
if(k<aij) _____ ; s=s+aij;
} bi=k;
/FILL /
_____ ;
}
for(i=0;i<5;i++)
{ for(j=0;j<5;j++)
/FILL /
printf("%5d", _____ ); printf("%5d%5d",bi,ci);
printf("\n"); }}
【参考答案】s=0【参考答案】k=aij【参考答案】ci=s【参考答案】aij
第十七套
设a=12,且a定义为整型变量。执行语句a+=a-=a
=a;后a的值为(A)。
A、0 B、144 C、132 D、12
设变量定义为"int a, b;",执行下列语句时,输入(A ),则a和b的值都是10.
scanf("a=%d, b=%d",&a, &b);
A、a=10, b=10 B、a=10 b=10 C、10, 10 D、10 10
main(){int x=1,a=0,b=0;
switch (x) { case 0: b++;case 1: a++ case 2: a++;b++; }
printf("a=%d,b=%d",a,b);}该程序的输出结果是(D )
A、a=1,b=1 B、a=1,b=0 C、a=2,b=2 D、a=2,b=1
以下正确的描述是( A).
A、只能在循环体内和switch语句内使用break语句
B、continue语句的作用是终止整个循环的执行
C、从多层嵌套的外层循环中退出时,只能使用goto语句
D、在循环体内使用break和continue语句的作用相同
设有如下程序段:
int k=10;while(k==0) k--;则下述说明中正确的是A( ).
A、循环体一次也不执行B、循环体执行一次C、死循环D、循环体执行10次
对以下说明语句 int a10={6,7,8,9,10}; 的正确理解是(B)。
A、将5个初值依次赋给a6至a10B、将5个初值依次赋给a0至a4
C、因为数组长度与初值的个数不相同,所以此语句不正确D、将5个初值依次赋给a1至a5
下面叙述中正确的是(D )。
A、空函数不完成任何操作,不符合c语言语法规则。B、对于用户自己定义的函数,在使用前必须加以声明C、声明函数时不必明确其参数类型和返回类型
D、函数可以返回一个值,也可以什么值也不返回
若有#define S® PI
r
r,则S(a+b)展开后的形式为( B).
A、PI
a
a+PI
b
b B、PI
a+b
a+b C、PI*(a+b)(a+b) D、PI rr (a+b)

若有说明:int *p,m=5,n;以下正确的程序段是(D)。

A、scanf("%d",&n);*p=n; B、p=&n;scanf("%d",*p) C、p=&n;scanf("%d",&p); D、p=&n;p=m;
一个C程序的执行是从本程序文件的第一个函数开始,到本程序main函数结束 错误
C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线 正确
已知a=3,b=4,c=5.则逻辑表达式a+b>c && b==c值为0. 正确
for循环可以用于循环次数不确定而给出循环条件的情况下. 正确
在while循环中允许使用嵌套循环,但只能是嵌套while循环. 错误
如果不对静态数组赋初值,则计算机默认静态数组初始值为0. 正确
某些情况下,在主调函数中可以缺省对被调用函数的说明. 正确
宏替换在运行程序时进行,占用运行时间. 错误
在C语言中 "
"是仅用于指针的运算符; 错误

结构体变量所占的内存长度等于最长的成员的长度. 错误

若a是int型变量,且a的初值为6,则计算表达式 a+=a-=aa 后a的值为____-60
程序段int k=10; while(k=0) k=k-1;循环体语句执行___0__次.
【程序设计】-题目:用函数求一个N阶方阵右下三角元素的和(包括副对角线上的元素)。
#include "stdlib.h"
#include "stdio.h"
#define N 3
int sum(int a\[\]N)
{ /Begin
/

【参考代码】

int i,j,k=0;

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

for(j=N-1-i;j<N;j++)

k=k+aij;

return(k);

/********** End **********/
}
void main()
{ int aNN,i,j;
void TestFunc();
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
{ aij=rand()%10+10; //rand函数的功能是产生一个随机整数
printf("%3d",aij); }
printf("\n"); }
printf("===================\n"); printf("sum=%5d\n",sum(a)); TestFunc();}
第十八套
以下正确的指数表示方法是(A )。
A、1.23e11 B、4.5e-5.6 C、8.5e4288 D、e-32
以下程序的输出结果是:(A )
main(){int m=5;if(m++>5) printf("%d\n",m); else printf("%d\n",m--); }
A、6 B、5 C、7 D、4
以下程序段的输出结果为( C)。
for(i=4;i>1;i--) for(j=1;j<i;j++) putchar('#');
A、无 B、# C、###### D、###
针对for循环语句,for(表达式1;表达式2;表达式3),下列说法正确的是(B ).
A、break语句可以一次性跳出多层嵌套循环B、break语句只能跳出最内层循环
C、continue语句可以一次性跳出多层嵌套循环D、continue语句不能跳出最外层循环
选择正确的输入语句(B ).
(其中:char string10;)使得string的内容为"Hello".
A、scanf("%c", &string); B、scanf("%s", string);
C、scanf("%c", string); D、scanf("%s", &string);
在C语言中,调用函数除函数名外,还必须有(A)。
A、( ) B、函数预说明 C、形式参数 D、函数返回值
设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=MAX(24,3 4)的值为(C ).

A、8 B、2 C、12 D、3

int (*p)6; 它的含义为(C)。

A、指向6个整数中的一个的地址 B、具有6个元素的一维数组

C、定义了一个指向具有6个元素的一维数组的指针变量 D、指向整型指针变量

一个C源程序必须包含一个main函数 正确

关系运算符<= 与 == 的优先级相同。 错误

下面程序段的输出结果为A。

int i=20;switch(i/10){case 2:printf("A");case 1:printf("B");} 错误

for语句的循环体至少执行一次.错误

for循环体中遇到continue语句,会转向执行for语句中的条件判断(语句2). 错误

定义一维数组的形式为:类型说明数组名表达式,其中表达式必须是整型常量.错误

在定义宏时,在宏名与带参数的括弧之间不应加空格.正确

若定义 int array5 ,*p=array;则赋值语句 p=&array;是正确的. 错误

在引用结构体成员时,只能对最低级的成员进行赋值或存取操作及计算. 正确

设有int x=11,则表达式(x++ * 1/3)的值是__3___。

设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是__3___.

for (x=0,y=0;y!=123&&x<3;x++) scanf ("%d",&y);

C语言中调用_____函数来打开文件. fopen

【程序设计】

功能:编写程序,实现矩阵(3行3列)的转置(即行列互换)

例如:输入下面的矩阵:

100 200 300

400 500 600

700 800 900

程序输出:

100 400 700

200 500 800

300 600 900

#include "stdio.h"

void fun(int array33)

{ /Begin */

【参考代码】

int i,j,t;

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

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

{ t=arrayij;

arrayij=arrayji;

arrayji=t; }

/********** End *********/
}
main()
{ int i,j;
void NONO();
int array33={{100,200,300},
{400,500,600},
{700,800,900}};
for (i=0; i < 3; i++)
{ for (j=0; j < 3; j++)
printf("%7d",arrayij);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for (i=0; i < 3; i++)
{ for (j=0; j < 3; j++)
printf("%7d",arrayij);
printf("\n");
} NONO(); }
【程序改错】功能:求一个3行4列矩阵的外围元素之和。
注意:矩阵四个角上的元素不能重复加。
例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,
四框元素值之和应为65。
#include "stdio.h"
int fun(int a34,int m,int n)
{ /ERROR /
int i,j,s,s1=s2=s3=s4=0;
for(j=0;j<n;j++)
{ s1=s1+a0j;
/ERROR /
s2=s2+amj;
} /ERROR /
for(i=0;i<m;i++)
{ s3=s3+ai0;
s4=s4+ain-1;
}
/ERROR /
s=s1-s2-s3-s4;
return s;
}
main()
{ int a34={1,2,3,4,5,6,7,8,9,10,11,12};
printf("total=%d\n",fun(a,3,4));
}【参考答案】int i,j,s,s1=0,s2=0,s3=0,s4=0;【参考答案】s2=s2+am-1j;
【参考答案】for(i=1;i<m-1;i++)【参考答案】s=s1+s2+s3+s4;
【程序填空】功能:在歌星大奖赛中,有10个评委为参赛的选手打分,分数为
1~100分。选手最后得分为:去掉一个最高分和一个最低分
后其余8个分数的平均值。请编写一个程序实现。
#include "stdio.h"
void main()
{ int score,i,max,min,sum;
max=-32768;
min=32767;
sum=0;
for(i=1;i<=10;i++)
{ printf("Input number %d=",i);
/FILL /
scanf("%d",);
sum+=score;
/FILL /
if(
) max=score;
/FILL /
if() min=score;
}
printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);
/FILL /
printf("Average score:%f\n",
);
}
【参考答案】&score【参考答案】score>max
【参考答案】score<min【参考答案】(sum-max-min)/8.0
第十九套
对于赋值语句char cx='\037';判断正确的是:( D).
A、cx的值是四个字符B、不合法,不能赋值
C、cx的值是三个字符D、cx的值是一个字符
根据下面的程序,正确的输出形式是(A );
#include "stdio.h"void main()
{ int i=5,j=10; printf ("i=%d,", i); printf ("j=%d ", j);}
A、i=5, j=10 B、10,5 C、5,10 D、i=5Uj=10
执行下面程序段后,k的值是:( B)
int k=2; switch(k+1){case 3:k+=1; case 4:k--;break;case 5:k
=3;case 6:++k;}

A、10 B、2 C、28 D、27

假定所有变量均已正确定义,下列程序段运行后x的值是(A)。

k1=1;k2=2;k3=3;x=15;if(!k1) x--;else if(k2) x=4; else x=3;

A、4 B、1 5 C、3 D、14

有以下程序段

int n=0,p;do

{scanf("%d",&p);n++;}while(p!=12345&&n<3);此处do-while循环的结束条件是( A)。

A、p的值等于12345或者n的值大于等于3B、p的值等于12345并且n的值大于等于3

C、p的值不等于12345并且n的值小于3D、p的值不等于12345或者n的值小于3

以下能计算1+2+3+┈+10的程序段是(B ).

A、do { i=1;s=0;s=s+i; i++;} while(i<=10) ;B、i=1;s=0;while(i<=10){s=s+i; i++;}

C、i=1;s=0; do { s=s+i;i++;} while(i>=10) ;D、i=1;s=0;while(i>=10) {s=s+i;i++;}

在C语言中,变量的隐含存储类别是(D)。

A、无存储类别 B、auto C、static D、extern

以下叙述中正确的是(A)。

A、宏替换不占用运行时间,只占编译时

B、使用带参数的宏时,参数的类型应与宏定义时的一致

C、在程序的一行上可以出现多个有效的预处理命令行

D、在以下定义中 C R 是称为"宏名"的标识符 #define C R 045

下列程序的输出结果是(A ).

#include "stdio.h" sub(int x, int y, int *z)

{*z=y-x; } main()

{int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%d,%d,%d",a,b,c); }

A、-5,-12,-7 B、5,-2,-7 C、5,2,3 D、-5,-12,-17

C语言本身没有输入输出语句 正确

设g=1,h=2,k=3,则逻辑表达式k+g||!h&&k-h的值为0 错误

while循环的循环体至少执行一次,而不论while表达式的值是"真"或"假". 错误

循环体如果包含一个以上的语句,应该用圆括号括起来,以复合语句形式出现. 错误

C语言中数组元素的方括号不可以用花括号代替. 正确

字符处理函数strcpy(str1,str2)的功能是把字符串1接到字符串2的后面. 错误

被包含文件与其所在的文件(即用#include命令的源文件),在预编译后,成为同一个文件.正确

int i,*p=&i;是正确的C说明。 正确

使几个不同的变量共占同一段内存的结构,称为"结构体"类型.错误

以下do-while语句中循环体的执行次数是_3____.

a=10; b=0; do { b+=2; a-=2+b; } while (a>=0);

若有以下数组aa10,其值为 9 4 12 8 2 10 7 5 1 3 该数组的元素中,数值最大的元素的下标值是____2_.

【程序设计】

功能:从键盘为一维整型数组输入10个整数,调用fun

函数找出其中最小的数,并在main函数中输出。

请编写fun函数。

#include "stdio.h"

int fun(int x\[\],int n)

{ /Begin */

【参考代码】

int min,i;

min=x0;

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

if(xi<min) min=xi;

return min;

/********** End ***/
}
void main()
{ void TestFunc();
int a10,i,min;
for(i=0;i<10;i++)
scanf("%d",&ai);
for(i=0;i<10;i++)
printf("%3d",ai);
printf("\n");
min=fun(a,10);
printf("%d\n",min);
TestFunc();
}
【程序改错】功能:计算数组元素中值为正数的平均值(不包括0)。
例如:数组中元素的值依次为39,-47,21,2,-8,15,0,
则程序的运行结果为19.250000。
double fun(int s\[\])
{ /ERROR /
int sum=0.0;
int c=0,i=0;
/ERROR /
while(si =0)
{ if (si>0)
{ sum+=si; c++; } i++; }
/ERROR /
sum=c;
/ERROR /
return c;}
main()
{ int x1000;int i=0;
do
{ scanf("%d",&xi);} while(xi++!=0) printf("%f\n",fun(x));}
【参考答案】double sum=0.0;【参考答案】while(si!=0)while(!si0)while(!0si)
【参考答案】sum/=c;sum=sum/c;【参考答案】return sum;
【程序填空】
功能:编程求任意给定的n个数中的奇数的连乘积,偶数的平方和
以及0的个数,n通过scanf()函数输入。
#include "stdio.h"
void main()
{ int r=1,s=0,t=0,n,a,i;
printf("n=");scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("a=");
/FILL /
scanf("%d",);
/FILL /
if(
!=0)
/FILL /
=a;
else if(a!=0)
/FILL /
s+=
;
else t++;
}
printf("r=%d,s=%d,t=%d\n",r,s,t);}
【参考答案】&a【参考答案】a%2【参考答案】r
【参考答案】a
a
第二十套
下列程序段的输出结果为(C)。float x=213.82631; printf("%3d",(int)x);
A、213.82 B、213.83 C、213 D、3.8
a,b为整型变量,二者均不为0,以下关系表达式中恒成立的是(A)。
A、a/b
b+a%b==a B、a/b
b==a C、a
b/a
b==1 D、a/b
b/a1
int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(C)。
A、3 B、2 C、1 D、不一定
设j和k都是int类型,则下面的for循环语句(D )。
for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k);
A、最多执行9次 B、是无限循环 C、循环体一次也不执行 D、最多执行10次
以下程序中,while循环的循环次数是(C ).
main()
{ int i=0;while(i<10) { if(i<1) continue; if(i5) break; i++; }}

A、1 B、6 C、死循环,不能确定次数 D、4

以下不能对二维数组a进行正确初始化的语句是(A)。

A、int a23={{1,2},{3,4},{5,6}}; B、int a\[\]3={{1,2},{0}};

C、int a23={0}; D、int a\[\]3={1,2,3,4,5,6};

下面函数调用语句中,fun含有实参的个数为( D). fun((x,y),(x+y,z,x/y));

A、1 B、4 C、5 D、2

在"文件包含"的预处理中,被包含的文件应是(A ).

A、源文件 B、可执行文件 C、目标文件 D、批处理文件

以下程序的输出结果是( B ).

#include<stdio.h> void main( )

{int a ={2,4,6,8},*p=a,i;for(i=0;i<4;i++) ai =*p++; printf("%d\n",a2);}

A、2 B、6 C、8 D、4

printf 函数的一般格式为:printf (格式控制,输出表列). 正确

若 a=3,b=2,c=1 则关系表达式"(a>b)==c" 的值为"真"。 正确

语句if(a>b) printf("%d",a); else printf("%d",b);可以用条件表达式a>b?a:b取代. 错误

若有说明int c;则while(c=getchar());没有语法错误。 正确

C语言中三种基本结构:顺序、选择、循环,其结构内的每个部分都会被执行到... 错误

数值型数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素.

正确

没有初始化的数值型静态局部变量的初值是不确定的值. 错误

一个include 命令可以指定多个被包含的文件。 错误

定义 int a ={1,2,3,4},y,p=&a1;,则执行y=( --p)++后,y的值是2. 错误

共用体变量使用过程中,可在同一内存段中存放几种不同类型的成员. 正确

若x和n均是int型变量,且x和n的初值均为5,则计算表达式 x+=n++ 后x的值为 ,n的值为 .

【参考答案】10 ,6

设有以下共用体类型说明和变量定义,则变量d在内存所占字节数是 12 _。 union stud { short int num; char name8;float score3; double ave; } d,stu3;

【程序设计】功能:求n阶方阵主、副对角线上的元素之积。

#define N 4

#include "stdlib.h"

#include "stdio.h"

float mul(int arr\[\]N)

{/Begin */

【参考代码】

int i,j;

float t=1;

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

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

if(ij||i+jN-1)

t=tarrij;
return(t);
/
********* End */
}
void main()
{ int aNN,i,j;
void TestFunc();
for(i=0;i<N;i++)
for(j=0;j<N;j++)
aij=rand()%10;
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%4d",aij); printf("\n"); }
printf("The sum is %f\n",mul(a)); TestFunc();}
【程序改错】功能:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换,输出数组元素。
#include "stdio.h"
void main ( )
{ int a10;
void input();
void output();
void max_min();
input(a,10);
max_min(a,10);
output(a,10);
}
void input(int arr\[\],int n)
{ int i;
printf("please enter 10 integers:\n");
for(i=0;i<n;i++)
/ERROR /
scanf("%d",arri);
}
void max_min(int arr\[\],int n)
{ int max,min,t,i;
min=max=0;
for(i=1;i<n;i++)
/ERROR /
if(arri<arrmax)
max=i;
else if(arri<arrmin) min=i;
t=arr0; arr0=arrmin;arrmin=t;
/ERROR /
if(max=0) max=min;
t=arrn-1;
arrn-1=arrmax;
arrmax=t;
}
void output(int arr\[\],int n)
{ int i;
printf("The changed array is:\n");
/ERROR /
while(i=0;i<n;i++)
printf("%3d",arri);
printf("\n");
}【参考答案】scanf("%d",arri);【参考答案】if(arri>arrmax)
【参考答案】if(max==0)【参考答案】for(i=0;i<n;i++)for(i=0;n>i;i++)
【程序填空】
功能:以下程序的功能如(图1)。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得
出正确的结果。
#include "stdio.h"
/FILL /
double f(_____)
{ /FILL /
;
/FILL /
if (
) y=2.0
x
x+3.0
x+4.0;
else y=-2.0
x
x+3.0
x-4.0;
/FILL /
_____;
}
void main ( )
{ printf("%f\n", f(f(-1.0)+f(5.0)));}
【参考答案】float x double x【参考答案】double y float y
【参考答案】x<=2 2>=x【参考答案】 return y
第二十一套
若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是(A)。
A、2.0B、2.5C、1D、2
执行下面程序中的输出语句后,输出的值是:(A ),
main(){int a=5; printf("%d\n",(a=3
5,a
4,a+5));}
A、20 B、65 C、10 D、15
以下不正确的if语句形式是(B)。
A、if(x<y) {x++;y++;}B、if(x!=y) scanf("%d",&x) else scanf("%d",&y);
C、if(x>y&&x!=y);D、if(x==y) x+=y;
执行下面程序段后,s的值是( C )。
int s=5;switch(++s){case 6: case 7:s+=2;case 8: case 9:s+=2;}
A、8 B、C、10 D、6
下面程序段运行的结果是( A).
x=-1;do{ x=x
x; }while (!x);

A、循环执行一次B、有语法错误C、死循环D、循环执行两次

程序main( ){char s10; s="abcd";printf("%s\n",s);}的运行结果(以下U代表空格)是(C ).

A、输出abcdB、输出abcdUUUUUC、编译不通过D、输出a

函数的形式参数系统默认存储类型说明是(D)。

A、static B、extern C、register D、auto

若file1中包含file2,file2中要用到file3,若file2中不用 #include "file3.h",则在file1.c中应进

行如下定义( D).

A、#include "file2.h" 和 #include "file3.h" B、#include "file2.h , file3.h"

C、#include "file2.h" , "file3.h" D、#include "file3.h" 和 #include "file2.h"

若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是(C)。

A、*p=*q;B、n=*q;C、p=n;D、p=q;

设i=1,j=2,k=3,则逻辑表达式!(i>j)||!k&&1的值为0. 错误

若定义 int array5 , *p; 则赋值语句 p=array;是正确的.正确

函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));中,含有的实参个数是5.错误

用一个#include命令可以同时指定数个被包含文件.错误

下列的语句是正确的:int **p;正确

两个类型相同的结构体变量,可以互相赋值.正确

已知:int i=8,j=10,m,n;m=++i;n=j++;问语句执行后m=,n=

【参考答案】9 10

将file_point定义为文件指针的语句为_____,写出应包含的头文件语句_____。

FILE *file_point; #include <stdio.h>

【程序设计】:从键盘输入一个大于3的整数,调用函数fun判断 其是否素数,然后在main函数中输出相应的结论 信息。

#include "stdio.h"#include "math.h"

int fun(int n)

{【参考代码】

int i;int j;j= 1;for(i=2;i<n;i++)

{if(n%i0) j= 0;}
return j;}
void main()
{ void TestFunc();
int m,flag; printf("input an integer:");
scanf("%d",&m); flag=fun(m);
if(flag) printf("%d is a prime.\n",m);
else printf("%d is not a prime.\n",m);
TestFunc();}
【程序改错】功能:找出大于m的最小素数,并将其作为函数值返回。
#include "math.h"
#include "stdio.h"
int fun( int m)
{ int i,k;
for(i=m+1;;i++)
{ /ERROR /
for(k=1;k<i;k++)
/ERROR /
if(i%k!=0) break;
/ERROR /
if(k<i)
/ERROR /
return k; }}
void main()
{ int n; scanf("%d",&n); printf("%d\n",fun(n));}
【参考答案】for(k=2;k<i;k++)【参考答案】if(i%k0) break;

【参考答案】if(i<=k)【参考答案】return i;

【程序填空】将一个字符串中下标为m的字符开始的全部字符复制成为另一个字符串。

#include "stdio.h"void strcopy(char *str1,char *str2,int m)

{ char *p1,*p2;

/FILL /

_____;

p2=str2; while(*p1)

/FILL / _____;

/FILL / _____;}

main()

{int i,m;char str180,str280; gets(str1); scanf("%d",&m);

/FILL _____; puts(str1);puts(str2);}

【参考答案】p1=str1+m 【参考答案】*p2++=*p1++

【参考答案】*p2='\0' *p2=0【参考答案】strcopy(str1,str2,m)

相关推荐
南境十里·墨染春水2 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
@insist1232 小时前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
JosieBook4 小时前
【数据库】时序预测能力的分级进化:TimechoAI如何让每一类用户都能精准预见未来
java·开发语言·数据库
加号34 小时前
【C#】 文件与目录管理:创建、删除操作的技术解析
开发语言·c#
diving deep4 小时前
脚本速览-python
开发语言·python
一生了无挂5 小时前
Java处理JSON技巧教学(从基础到高阶实战全覆盖)
java·开发语言·json
swordbob5 小时前
Spring 单例 Bean 是线程安全的吗?
java·开发语言
2601_951643776 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势
小小编程路6 小时前
C++ 异常 完整讲解
开发语言·c++