1. void main()

float y=3.667;

printf("*%8.0f*\n",y);

}

结果:*4*

2.void main()

int x=1,y=2;

printf("%d,",x>y?y++:x++);

printf("%d,",x<=y?++y:++x);

printf("%d,%d",x,y);

}

结果:1,3,23

3.void main()

{ int x=0,y=0,z=0;

do

{

switch(y++)

{

case 1:x++;break;

case 3:x+=3;break;

default:x=x%2;continue;

}

z++;

}

while(y<5);

printf("x=%d,y=%d,z=%d\n",x,y,z);

}

结果:x=0, y=5, z=2

4. 若有定义和语句:double x=34213.6894; printf("*%8.2e*\n", x); 则下列说法真确的是:

A. 输出值为*3.42e+04*B. 输出值为*3.42e+004*

C. 输出值为*34.21e+04*D. 输出格式符宽域不够,不能输出值

答案:B

5.void main()

{int a=2,b=5;

printf("a=%%d,b=%%d\n"); 

}

结果为:

A. a=%2b=%5B. a=2b=5

C. a=%%db=%%d D. a=%db=%d

答案:D

 

6. 以下叙述中正确的是
 A)用C程序实现的算法必须要有输入和输出操作
 B)用C程序实现的算法可以没有输出但必须要有输入
 C)用C程序实现的算法可以没有输入但必须要有输出
 D)用C程序实现的算法可以既没有输入也没有输出


7. 结构化程序由三种基本结构组成,三种基本结构组成的算法
 A) 可以完成任何复杂的任务B) 只能完成部分复杂的任务
 C) 只能完成符合结构化的任务    D) 只能完成一些简单的任务


8.以下选项中可作为C语言合法常量的是

 A)-80. B)
-080
 C)-8e1.0 D)-80.0e01 

9.c语言学习书籍中常见十进制转化二进制题目:将十进制数23588转化成二进制:

错:#include <stdio.h>

void main()

{

unsigned long a=23588,n=0;/*数据类型长度可能不够*/

while(a)

{n=10*n+a%2; /*首次a%2可能为0 */ 

a=a/2;

}

while(n)

{printf("%d",n%10);

n=n/10;

}

printf("\n");

}

对:#include <stdio.h>

void main()

{

int a=23588,n=0,b[20];

while(a)

{b[n++]=a%2;

a/=2;

}

for(n--;n>=0;n--)

printf("%d",b[n]);

printf("\n");

}

 

10.设有如下函数:

func(float a)

{printf(“%d\n”,a*a);

}

则函数的类型是:

A.无法确定B.intC.floatD.void

(在C语言中,若对函数类型未加显示地说明,则函数的隐含类型为int型)

 

11.宏定义#define E 2.71828中,宏名“E”代替一个 字符串。

 

12.下面的叙述中,错误的是:

A.#include命令可以包含扩展命名为“.c”的文件

B.#include“test\\test.h”是一个正确的文件包含命令

C.#include<…>中可以包含路径

D.使用#include<…>比#include“…”节约编译时间

(#include命令的包含文件可以带目录,并且目录的书写格式必须符合操作系统的习惯,由于它不是C语言的字符串,不能用“\\”来表示“\”)

 

13.下列程序的结果是:

#include <stdio.h>

#define PR printf

#define NL "\n"

#define D "%d"

#define D1 D NL

#define D2 D D NL

main()

{int a=1,b=2;

PR(D1,a);

PR(D2,a,b);

A.1B. 1C. 1D.程序错误,值为任意值

121212

 

14. 下列程序的结果是:

#include <stdio.h>

#define PR(a) printf("%d\t",(int)(a));

#define PRINT(a) PR(a);printf("ok!")

main()

{int i,a=1;

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

PRINT(a+i);

printf("\n");

}

结果为:123ok!

 

15.以下可以讲char型变量s中的大小写字母进行转化(即大写改小写,小写改大写)的语句是:

A.s=s^32B.s=s&32C.s=s|32D.s=s+32

16.以下程序的输出结果是:

main()

{char a=0xf0,b=03,c;

c=~a&020>>b;

printf("%x\n",c);

}

结果:2(注意运算符优先级高低)

 

17.若有以下定义和语句:

int *p,i=1;

double *w,a=3.5;

p=&i; w=&a;

在执行了p=(int *)w;语句后,*p的值为:

A.4B.3.5C.3D.一个整数

注意:double类型的数据与int类型数据存放的机制不同,因此无法估计此证书的确切值

 

18.已知函数说明语句:void *f();则它的含义是:

A.函数f的返回值是一个通用型指针

B.函数f的返回值可以是任意的数据类型

C.函数f无返回值

D.指针f指向一个函数,该函数无返回值

 

19.已知int a[]={1,2,3,4},y,*p=&a[1]; y=(*--p)++;则y的值是

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

 

20.函数的功能是交换变量x和y的值,且通过正确调用返回交换结果,能正确执行此功能的函数是:

A.funa(int *x,int*y)

{int *p

*p=x;*x=*y;*y=*p;

}

B.funb(int x,int y)

{int t;

t=x;x=y;y=t;

}

C.func(int *x,int *y)

{*x=*x+*y;*y=*x-*y;*x=*x-*y

}

D.fund(int *x,int *y)

{*x=*y;*y=*x; 

}

 

21.设有如下定义

struct sk

{int n;

float x;

}data,*p;

若要使p指向data中n域,真确的赋值语句是:

A.p=&data.n;B.*p=data.n; 

C.p=(struct sk *) &data.n;D.p=( struct sk *) data.n; 

 

22.以下程序的输出结果是 256。

union

{char m[2]; int k;} mk;

main()

{mk.m[0]=0; 

mk.m[1]=1;

printf("%d\n",mk.k);

}

解:char占一个字节,int占两个字节,共用体变量mk的两个成员共占用存储单元,给数组赋值后,存储状况如下图:

spacer.gif

 

23.对于c语言特点有下列叙述中正确的是:

A. C语言中既有逻辑类型也有集合类型

B. C语言中没有逻辑类型但有集合类型

C. C语言中有逻辑类型但没有集合类型

D. C语言中既没有逻辑类型也没有集合类型

 

24.以下程序的输出结果是:

main()

{int p[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i<7&&p[i]%2) k=k+p[i++];

printf("%d\n",k);

}

A.58B.56C.45D.24

 

25.以下程序段中,能过通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元是:

A.int fun(int *p)B.int fun(int **p)

{int s; p=&s;}{int s; *p=&s;}

main()main()

{int *p;{int *p;

fun(p);fun(&p);

}}

C.#include <stdlib.h> D.#include <stdlib.h>

int fun(int **p) int fun(int p)

{*p=(int *)malloc(2);} {p=(int *)malloc(sizeof(int));}

main()main()

{int *p; {int *p;

fun(&p);fun(p);

答案: C