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 str[10]="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 st[10]; 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",&a[i][j]);

3【参考答案】sum=sum+a[i][i]; sum+=a[i][i];

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【参考答案】 s[sl-i-1] s[strlen(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 a[10];合法的数组元素的最小下标值为(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 w[3][4]={{0,1},{2,4},{5,8}}; int (*p)[4]=w;

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

A、w[1]+1 B、p[1][1] C、p++,(p+1) D、w[2][2]

二.判断

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 a[10], *p; 则下列的语句是等价的. p=&a[0]; 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,num[6];

【参考答案】scanf("%d",&num[i]);【参考答案】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 a[10];已正确定义,以下语句中不能从键盘上给a数组的
所有元素输入值的语句是(A)。

A、for(i=0;i<10;i++)a[i]=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];则以下表达式中不能代表数组元素aa[1]的地址的是(C)。

A、&aa[1] B、&aa[0]+1 C、&aa[0]++ 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 score[10],aver; float aver,score[10];

【参考答案】scanf("%f", &score[i]); 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 a[3][4];则数组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 a[10]={6,7,8,9,10}; 的正确理解是(B)。

A、将5个初值依次赋给a[6]至a[10]B、将5个初值依次赋给a[0]至a[4]

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

如果在一个函数中的复合语句中定义了一个变量,以下正确的说法是(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 a[10]={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 a[3][4]={{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=arr[0];

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

if(pt1< (arr+i))) *pt1=arr[i]; if(*pt1<arr[i]) *pt1=arr[i];

【参考答案】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

【参考答案】a[k]>a[j] a[j]<a[k]【参考答案】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,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d,",x[i][2-i]);}

A、1,5,9 , B、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,str2[10];选择正确的输入语句(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 x[5],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 s[8]; s={"Beijing"};

C、char *s; s="Beijing";D、char s[8]; 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若有以下整型数组aa[10],其值为 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、a[5*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,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3 数组元素a[3]的值是_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",&a[i][j]); scanf("%d",(*(a+i)+j));

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

【参考答案】t=a[i][j]; 【参考答案】a[j][i]=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【参考答案】a[k]>a[j] a[j]<a[k]

【参考答案】 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 a[10]={}; B、int a[]={0}; C、int a[10]={10*1}; D、int a[10]=(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=arr[0];

【参考答案】if(arr[i]>*pt1) *pt1=arr[i];【参考答案】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【参考答案】a[i][j]【参考答案】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 a[5],*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 str[81]="abcdef";后,字符串str结束标志存储在数组元素str[6 _] 中.

5设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是 16_。 union stud { char num[6]; float s[4]; 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--)

【参考答案】a[i+1]=a[i];【参考答案】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、有元素a[0][0]和a[0][1]可得到初值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 a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。
【参考答案】 正确
7 函数的返回值可以通过函数中的return语句获得。 正确
8 包含文件是可以嵌套的. 正确
9 假设有int a[10], p;则p=&a[0]与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 若有以下整型数组aa[10],其值为 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(a[j]<a[j+1])
{ t=a[j]; a[j]=a[j+1];a[j+1]=t ; }
} }
/
******** End /
}
void main( )
{ int i=0;
int a[N]={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",a[i] );
printf("\n");
if((OUT=fopen("out.dat","w"))NULL)
printf("写入文件失败!");
for(i=0;i<=9;i++)
fprintf(OUT,"%d\n",a[i]);
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 s[81],p=s;
gets(s);
while(*p)
{ *p=fun§;
/ERROR /
puts(*p);
p++;
}
putchar('\n');
}
【参考答案】 char fun(char c)【参考答案】return c;
【参考答案】char s[81],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 a[10]; for(i=0;i<10;i++)___
;...}
A、scanf("%s", a[i]); B、scanf("%s", &a[i]); C、scanf("%c", &a[i]); 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 c[4]="abc",d[4]="abc";等价于 char c[4]=d[4]="abc";
B、char str[10]={"china"};等价于char str[10];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 a[6]={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 s[100], t1[100], t2[100], w[100];
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 str[10]="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 st[10]; 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 a[3][3]={{1,2,3},{4,5,6},{7,8,9}};其中a[1][2]的值为__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=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();
} fclose(OUT);}
【程序改错】先从键盘上输入一个3行3列矩阵的各个元素的值,然后输
出主对角线上的元素之和sum。
#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();}
【参考答案】sum=0;【参考答案】scanf("%d",&a[i][j]);
【参考答案】sum=sum+a[i][i];【参考答案】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 a[3][4];则对a数组元素的正确引用是(C)。
A、a[1,3] B、a[2][4] C、a[1+1][0] 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 a[10]; 给数组a的所有元素分别赋值为1、2、3、......的语句是(D)。

A、for(i=1;i<11;i++)a[i]=i; B、for(i=1;i<11;i++)a[0]=1;

C、for(i=1;i<11;i++)a[i+1]=i; D、for(i=1;i<11;i++)a[i-1]=i;

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

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

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

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

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

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

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

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

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

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+=x[j];
xa=xa/n;
printf("ave=%f\n",xa);
/ERROR /
for(j=0;j<=n;j++)
if(x[j]<=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 a[3][ ] B、float a(3,4) C、float a(3)(4) D、double a[1][4]

以下程序的输出结果是(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 str[N];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; ptr[i]!='\0';i++)

if(ptr[i]<='z'&& ptr[i]>='a'|| ptr[i]<='Z' && ptr[i]>='A')

{ ptr[j]= ptr[i];

j++;}

ptr[j]='\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 str[81];
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 a[2]中的所有元素是a[0]和a[1]

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

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

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

void main()

{ char str[N]; 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; ptr[i]!='\0';i++)
if(ptr[i]<='z'&& ptr[i]>='a'|| ptr[i]<='Z' && ptr[i]>='A')
{ptr[j]= ptr[i];j++;}
ptr[j]='\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,a[8],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″,a[x]); }
【参考答案】m<1000【参考答案】(m-x
100) /10【参考答案】a[i]=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 s[10]="abcdefg";

C、char s[10];s="abcdefg"; D、char s[10];strcpy(s,"abcdefg");

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

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

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

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

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

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

A、元素a[5]的值 B、元素a[6]的值 C、元素a[6]的地址 D、元素a[5]的地址

在一个源程序中,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 a[10]={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 s1[80],s2[80];
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(s1[i]= ='\0') i++;
/ERROR /
while(s2[j]= ='\0')
{ /ERROR /
s2[j]=s1[i]; i++; j++; }
/ERROR /
s2[j]='\0';}
【参考答案】while(s1[i]!='\0')i++;【参考答案】while(s2[j]!='\0')
【参考答案】s1[i]=s2[j];【参考答案】s1[i]='\0';
【程序填空】求一个二维数组中每行的最大值和每行的和,b数组放最大值,c数组和值。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得
出正确的结果。
#include "stdio.h"#include "stdlib.h"
void main()
{ int a[5][5],b[5],c[5],i,j,k,s;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=(int)(10.0
rand()/(RAND_MAX+1.0)); //产生10以内的随机数
for(i=0;i<5;i++)
{ /FILL /
k=a[i][0]; _____ ; for(j=0;j<5;j++)
{ /FILL /
if(k<a[i][j]) _____ ; s=s+a[i][j];
} b[i]=k;
/FILL /
_____ ;
}
for(i=0;i<5;i++)
{ for(j=0;j<5;j++)
/FILL /
printf("%5d", _____ ); printf("%5d%5d",b[i],c[i]);
printf("\n"); }}
【参考答案】s=0【参考答案】k=a[i][j]【参考答案】c[i]=s【参考答案】a[i][j]
第十七套
设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 a[10]={6,7,8,9,10}; 的正确理解是(B)。
A、将5个初值依次赋给a[6]至a[10]B、将5个初值依次赋给a[0]至a[4]
C、因为数组长度与初值的个数不相同,所以此语句不正确D、将5个初值依次赋给a[1]至a[5]
下面叙述中正确的是(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+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();}
第十八套
以下正确的指数表示方法是(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 string[10];)使得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 array[5] ,*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 array[3][3])

{ /Begin */

【参考代码】

int i,j,t;

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

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

{ t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t; }

/********** End *********/
}
main()
{ int i,j;
void NONO();
int array[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
for (i=0; i < 3; i++)
{ for (j=0; j < 3; j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for (i=0; i < 3; i++)
{ for (j=0; j < 3; j++)
printf("%7d",array[i][j]);
printf("\n");
} NONO(); }
【程序改错】功能:求一个3行4列矩阵的外围元素之和。
注意:矩阵四个角上的元素不能重复加。
例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,
四框元素值之和应为65。
#include "stdio.h"
int fun(int a[3][4],int m,int n)
{ /ERROR /
int i,j,s,s1=s2=s3=s4=0;
for(j=0;j<n;j++)
{ s1=s1+a[0][j];
/ERROR /
s2=s2+a[m][j];
} /ERROR /
for(i=0;i<m;i++)
{ s3=s3+a[i][0];
s4=s4+a[i][n-1];
}
/ERROR /
s=s1-s2-s3-s4;
return s;
}
main()
{ int a[3][4]={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+a[m-1][j];
【参考答案】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);

若有以下数组aa[10],其值为 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=x[0];

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

if(x[i]<min) min=x[i];

return min;

/********** End ***/
}
void main()
{ void TestFunc();
int a[10],i,min;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%3d",a[i]);
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(s[i] =0)
{ if (s[i]>0)
{ sum+=s[i]; c++; } i++; }
/ERROR /
sum=c;
/ERROR /
return c;}
main()
{ int x[1000];int i=0;
do
{ scanf("%d",&x[i]);} while(x[i++]!=0) printf("%f\n",fun(x));}
【参考答案】double sum=0.0;【参考答案】while(s[i]!=0)while(!s[i]0)while(!0s[i])
【参考答案】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 a[2][3]={{1,2},{3,4},{5,6}}; B、int a[][3]={{1,2},{0}};

C、int a[2][3]={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++) a[i ]=*p++; printf("%d\n",a[2]);}

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=&a[1];,则执行y=( --p)++后,y的值是2. 错误

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

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

【参考答案】10 ,6

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

【程序设计】功能:求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=tarr[i][j];
return(t);
/
********* 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;
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%4d",a[i][j]); printf("\n"); }
printf("The sum is %f\n",mul(a)); TestFunc();}
【程序改错】功能:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换,输出数组元素。
#include "stdio.h"
void main ( )
{ int a[10];
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",arr[i]);
}
void max_min(int arr[],int n)
{ int max,min,t,i;
min=max=0;
for(i=1;i<n;i++)
/ERROR /
if(arr[i]<arr[max])
max=i;
else if(arr[i]<arr[min]) min=i;
t=arr[0]; arr[0]=arr[min];arr[min]=t;
/ERROR /
if(max=0) max=min;
t=arr[n-1];
arr[n-1]=arr[max];
arr[max]=t;
}
void output(int arr[],int n)
{ int i;
printf("The changed array is:\n");
/ERROR /
while(i=0;i<n;i++)
printf("%3d",arr[i]);
printf("\n");
}【参考答案】scanf("%d",arr[i]);【参考答案】if(arr[i]>arr[max])
【参考答案】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 s[10]; 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 array[5] , *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 str1[80],str2[80]; gets(str1); scanf("%d",&m);

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

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

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

相关推荐
Dream_Snowar18 分钟前
速通Python 第三节
开发语言·python
XH华37 分钟前
初识C语言之二维数组(下)
c语言·算法
南宫生1 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_1 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
高山我梦口香糖1 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
落魄君子1 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
菜鸡中的奋斗鸡→挣扎鸡1 小时前
滑动窗口 + 算法复习
数据结构·算法
信号处理学渣2 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客2 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
Lenyiin2 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin