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+yy; }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 ).

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 注释行之间填写代码, 所有注释语句都不能删除。

参考代码

#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。

#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串的后面。

#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

#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个数按输入时顺序的逆序进行排列.

#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,按从小到大的顺序输出。(冒泡法或选择法,尝试用来程序设计)

#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()函数中输出。

#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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sillyfoxzero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值