C语言试题及答案(2)

C语言试题及答案(2),第1张

main()

{ int k, a[10]={1,2,3,4,5}

for(k=1k<3k++) fun(a)

for(k=0k<5k++) printf("%d", a[k])

}

上面程序的输出结果是

A.34756

B.23445

C.35743

D.12345

(40) 请读程序:

#include

#define SUB(X,Y) (X)*Y

main()

{ int a=3, b=4

printf("%d", SUB(a++, b++))

}

上面程序的输出结果是

A.12

B.15

C.16

D.20(41) 请读程序:

#include

main()

{ int mun=0

while(num<=2)

{ num++printf("%d\n",num)}

}

上面程序的输出结果是

A.1

B.1

C.1

D.1

2 2 2

3 3

4

(42) 请读程序:

#include

main()

{ float x,y

scan("%f",&x)

if(x<0.0) y=0.0

else if((x<5.0)&&(x!=2.0))

y=1.0/(x+2.0)

else if (x<10.0) y=1.0/x

else y=10.0

printf("%f\n",y)

}

若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是

A.0.000000

B.0.250000

C.0.500000

D.1.000000

(43) 请读程序:

#include

main()

{ int x=1, y=0, a=0, b=0

switch(x)

{ case 1:

switch(y)

{ case 0: a++break

case 1: b++break

}

case 2:

a++b++break

}

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

B.

}

上面程序的输出结果是

A.a=2, b=1

B.a=1, b=1

C.a=1, b=0

D.a=2, b=2

(44) 若有下面的程序片段:

int a[12]={0}, *p[3], **pp, i

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

p[i]=&a[i*4]

pp=p

则对数组元素的错误引用是

A.pp[0][1]

B.a[10]

C.p[3][1]

D.*(*(p+2)+2)

(45) 请读程序:

#include

#include

main()

{ float x,y,z

scan("%f%f",&x,&y)

z=x/y

while(1)

{ if(fabs(z)>1.0)

{ x=yy=zz=x/y

}

else break

}

printf("%f\n",y)

}

若运行时从键盘上输入3.6 2.4(表示回车),则输出的结果是

A.1.500000

B.1.600000

C.2.000000

D.2.400000

(46) 请读程序:

#include

f(in b[], int n)

{ int i, r

r=1

for(i=0i<=ni++) r=r*b[i]

return r

}

main()

{ int x, a[]={ 2,3,4,5,6,7,8,9}

x=f(a, 3)

printf("%d\n",x)

}

上面程序的输出结果是

A.720

B.120

C.24

D.6

(47) 请读程序:

#include

#include

void fun( char *s)

{ char a[10]

strcpy( a, "STRING")

s=a

}

main()

{ char *p

fun(p)

x=f(a, 3)

printf("%s\n",p)

}

上面程序的输出结果是(└┘表示空格)

A.STRING└┘└┘└┘└┘

B.STRING

C.STRING└┘└┘└┘

D.不确定的值

(48) 若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是

A.s->next=NULLp=p->nextp->next=s

B.p=p->nexts->next=p->nextp->next=s

C.p=p->nexts->next=pp->next=s

D.p=(*p).next(*s).next=(*p).next(*p).next=s

(49) 请读程序:

#include

void fun(float *pl, float *p2, float *s)

{ s=( float * )calloc( 1, sizeof(float))

*s=*p1+ *(p2++)

}

main()

{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a

fun(a, b, s)

printf("%f\n",*s)

}

上面程序的输出结果是

A.11.100000

B.12.100000

C.21.100000

D.1.100000

(50) 请读程序:

#include

#include

void fun( char *w, int m)

{ char s, *p1, *p2

p1=wp2=w+m-1

while (p1{ s=*p1++*p1=*p2--*p2=s}

}

main()

{ char a[]="ABCDEFG"

fun( a, strlen(a))

puts(a)

}

上面程序的输出结果是

A.GFEDCBA

B.AGADAGA

C.AGAAGAG

D.GAGGAGA

二、填空题(每空2分,共40分)

请将每空的正确答案写在答题卡上【1】-【20】序号后的横线上,答在试卷上不得分。

(1) DOS命令分为内部命令与外部命令,XCOPY命令是 【1】 命令

(2) 为了列出当前盘当前目录中所有第三个字符为C的文件名的有关信息,应该用命令 【2】 。

(3) 设当前盘为A盘,当前目录为\X\Y,A盘上的一个文件QR.C在当前目录下的子目录W中。现已将A盘的当前目录改为\D\XY,当前盘改为C盘,如需指定A盘上该文件应写成 【3】 。

(4) 用十六进制给存储器中的字节地址进行编号,其地址编号是从0000到FFFF,则该存储器的容量是【4】KB。

(5) 设有两个八位二进制数00010101与01000111相加,其结果的十进制表示为 【5】 。

(6) 数学式子 写成C语言表达式是 【6】 。

(7) 下面程序的输出结果是 【7】 。

#include

main()

{ static char b[]="Goodbye"

char *chp=&b[7]

while( --chp >=&b[0]) putchar( *chp)

putchar(’\n’)

}

(8) 下面程序的输出结果是 【8】 。

#include

void as( int x, int y, int *cp, int *dp)

{ *cp=x+y

*dp=x-y

}

main()

{ int a=4, b=3, c, d

as( a, b, &c, &d)

printf( ’%d %d\n", c, d)

}

(9) 请读程序:

#include

main( int argc, char *argv[])

{ int i

printf( ’%d\n", argc)

for( i=0i<=argc+1i++) printf( "%s ", argv[i])

printf("\n")

}

若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行

abc file1 file2(表示回车)

程序执行后的输出结果是 【9】 。

(10) 条件“20(11) 设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是 【11】 。

(12) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【12】 。

union aa

{ float x, y

char c[6]

}

struct st { union aa vfloat w[5]double ave} w

(13) 下面程序的输出结果是 【13】 。

#include

#define N 5

fun( char *s, char a, int n)

{ int j

*s=aj=n

while( ereturn j

}

main()

{ char s[N+1]

int k, p

for( k=1k<=Nk++)

s[k]=’A’+k+1

printf( "%d\n", fun(s, ’E’, N))

}(14) 下面程序的输出结果是 【14】 。

#include

void fun( char *a1, char *a2, int n)

{ int k

for( k=0ka2[k]=( a1[k]-’A’-3+26)&+’A’

a2[n]=’\0’

}

main()

{ char s1[5]="ABCD", s2[5]

fun( s1, s2, 4)

puts( s2)

}

(15) 下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。

findmax( int s[], int t)

{ int k, p

for( p=0, k=ppif( s[p]>s[k]) 【15】 。

return k

}

(16) 下面程序的输出结果是 【16】 。

#include

fun( int x)

{ int p

if( x==0||x==1) return(3)

p=x-fun( x-2)

return p

}

main()

{ printf( "%d\n", fun(9))}

(17) 下面程序的输出结果是 【17】 。

#include

funa( int a, int b)

{ return a+b}

funb( int a, int b)

{ return a-b}

sub( int (*t)(), int x, int y)

{ return((*t)( x,y))}

main()

{ int x, (*p)()

p=funa

x=sub(p,9,3)

x+=sub(funb, 8, 3)

printf("%d\n", x)

}

(18) 下面程序的输出结果是 【18】 。

#include

main()

{ char *p[]={ "BOOL", "OPK", "H", "SP"}

int i

for(i=3i>=0i--,i--) printf( "%c", *p[i])

printf("\n")

}

(19) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是向结点的指针域),请填空。

data next

struct link { char data【19】 } node

(20) 下面的程序用来统计文件中字符的个数,请填空。

#include

main()

{ FILE *fp

long num=0

if(( fp=fopen("fname.dat","r"))==NULL)

{ printf( "Can’t open file! \n")exit(0)}

while 【20】

{ fgetc(fp)num++}

printf("num=%d\n", num)

fclose(fp)

}

参考答案

一`选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分)

(1)C (2)A (3)B (4)D (5)D (6)A (7)C (8)B (9)D (10)C

(11)B (12)D (13)A (14)C (15)B (16)A (17)B (18)A (19)C (20)C

(21)D (22)B (23)B (24)A (25)C (26)D (27)D (28)B (29)C (30)A

(31)B (32)B (33)D (34)C (35)A (36)C (37)A (38)B (39)C (40)A

(41)C (42)C (43)A (44)C (45)B (46)B (47)D (48)C (49)D (50)C

二` 填空题(每空2分,共40分)

(第(2)`(3)空允许小写或大小写混合使用,其它空均须与答案一样)

(1) 外部

(2) DIR ?? C*.*

(3) A:\X\Y\W\QR.C

(4) 64

(5) 92

(6) pow(sin(x),2) * (a+b)/(a-b) 或 sit(x) * sit(x) * (a+b)/(a-b)

(7) eybdooG

(8) 7 1

(9) 3 abc.exe file1 file2 (注:两个答案,每个1分)

(10) ((20 (11) 11110000

(12) 34

(13) 3

(14) XYZA

(15) k=p

(16) 7

(17) 17

(18) SO

(19) struct link *next

(20) (!feof(fp))或(feof(fp)==0)

(1)一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、c、D、E依次入栈,然后再依次出栈,则元素出棱的顺序是( )。

A.12345ABCDE

B.EDCBA54321

C.ABCDEl2345

D.54321EDCBA

(2)下列叙述中正确的是( )。

A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D.循环队列中元素的个数是由队头指针和队尾指针共同决定的

(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。

A.0(n)

B.D(n2)

C.O(1092n)

D.0(nl092n)

(4)下列叙述中正确的是( )。

A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C.顺序存储结构能存储有序表,链式存储结构不能存储有序表

D.链式存储结构比顺序存储结构节省存储空间

(5)数据流图中带有箭头的线段表示的是( )。

A.控制流

B.事件驱动

C.模块调用

D.数据流

(6)在软件开发中,需求分析阶段可以使用的工具是( )。

A.N—s图

B.DFD图

C.PAD图

D.程序流程图

(7)在面向对象方法中,不属于“对象”基本特点的是( )。

A.一致性

B.分类性

C.多态性

D.标识唯一性

(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。

A.一对一

B.一对多

C.多对一

D.多对多

(9)在数据管理技术发展的三个阶段中,数据共享最好的是( )。

A.人工管理阶段

B.文件系统阶段

C.数据库系统阶段

D.三个阶段相同

(10)有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为( )。

A.笛卡尔积

B.交

C.并

D.自然连接

(11)下列叙述中错误的是( )。

A.C程序可以由多个程序文件组成

B.一个c语言程序只能实现一种算法

C.c程序可以由一个或多个函数组成,

D.一个C函数可以单独作为一个C程序文件存在(12)以下选项中,能用作数据常量的是( )。

A.115L

B.0118

C.1.5el.5

D.0115

(13)按照c语言规定的用户标识符命名规则,不能出现在标识符中的是( )。

A.大写字母

B.下划线

C.数字字符

D.连接符

(14)设变量已正确定义并赋值,以下正确的表达式是( )。

A.X=Y+z+5,++Y

B.int(15.8%5)

C.X=Y*5=X+Z

D.X=25%5.0

(15)设有定义:int X=2,以下表达式中,值不为6的是( )。

A.2*x.x+=2

B.x++,2*x

C.x*=(1+x)

D.x*!x+1

(16)有以下程序:

程序运行后的输出结果是( )。

A.2,3,3

B.2,3,2

C.2,3,1

D.2,2,1

(17)有以下程序:

已知字母A的ASCIl码为65,程序运行后的输出结果是( )。

A)E.68B.

B)D,69

C.E,D

D.输出无定值

(18)若有定义int x,y并已正确给变量赋值,则以下选项中与表达式(x—y)?(x++):(y++)中的条件表达式(x—Y)等价的是( )。

A.(x—Y<01Ix—Y>O)

B.(x—y<0)

C.(x—Y>0)

D.(x—Y==0)

(19)有以下程序:

程序运行后的输出结果是( )。

A.3

B.2

C.1

D.0

(20)若有定义:float x=1.5int a=1,b=3,c=2则正确的switch语句是( )。

判断题

1.C程序中最基本的单位是函数()。正确 程序时由函数构成的

2.a-2是一个正确的标识符( )。 错误 -非法字符

3.1/2的值是0.500000()。错误 0

4.fabs(-5)的值是25( )。错误 5

5.(i+2)++是正确的表达式( )。 错误 ++要求是变量

6.3&&4的值为1()。 正确

7.在C语言中表达式ch=”abcdef”是正确的( )。错误 字符串不能直接赋值

8.经过编译后,但未链接的文件扩展名为obj( )。正确

9.在C语言中是区分大小写的( )。 正确

10.一个C程序可以有多个文件构成()。 正确

二、填空题(38分,共8小题,1~5每小题4分,6~8每小题6分,把正确答案按题号填入表格内)

1.在C程序设计中,把编辑好的源程序进行编译后成为目标(obj) 文件,进行链接后成为可执行(exe) 文件。

2.有一字符ch,写出判断ch为大写字母的表达式。

ch>='A'&&ch<='Z'

3.已有定义:int x=4,y

y=x++

请写出y的值。 y的值为4

4.已有定义:int x=012要求输出为:**** x=10 &&

请写出用x表示的printf语句。

printf("**** x=%d &&",x);

5.已有定义:int x,yx、y的值从键盘输入,键盘输入形式为:20,30,其中20赋给x,30赋给y,请写出用scanf表示的输入语句。

scanf("%d,%d",&x,&y)

6.有循环语句:

y=0

x=10

while(x<=20)

{

y=y+x

x++

}

写出与它等价的for语句。

for(x=10,y=0x<=20y+=x,x++)

从键盘输入一个整数n,调用函数sum求s=1/1+1/2+1/3+1/4+…+1/n,在main函数中输出结果,请填空。

#include<stdio.h>

double sum( int a)

{

int i

double s=0

for(i=1i<=ai++)

s+=1/i

return s

}

int main()

{

int n

double ss

scanf("%d",&n)

ss=sum(n)

printf("ss=%lf\n",ss)

}

定义一结构体

struct kk

{

int a

char s[20]

}

定义一个结构体数组struct kk x[5]从键盘输入结构体数组,输出数组中最大成员a及s。

#include<stdio.h>

struct kk

{

int a

char s[20]

}

int main()

{

struct kk x[5]

int i,max,k

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

scanf("%d %s",&x[i].a,x[i].s)

max=x[0].a

for(i=1i<5i++)

if( x[i]>max )

{

max=x[i].a

k=i

}

printf("最大值 %d 及姓名为%s\n",x[k].a, x[k].s )

return 0

}

三、程序阅读题(18分,共3小题,每小题6分,把正确答案按题号填入表格内)

阅读下列程序,写出程序的运行结果。

#include<stdio.h>

int main( )

{

int x=0x10,y=010

printf(“x=%d y=%x\n”,x,y)

return 1

}

结果:x=16 y=8

阅读下列程序,写出程序的运行结果。

#include<stdio.h>

int main( )

{

char ch='C'

int x=3

switch(ch-'B')

{

case 1:x=x+2break

case 1+1:x=2*x

default:x=x-5break

case 3:x=x/2

}

printf("x=%d\n",x)

}

结果:x=5

阅读下列程序,写出程序的运行结果。

#include<stdio.h>

int main()

{

int x,*p,a[10]={0,10,20,30,40,50,60,70,80,90}

p=&a[4]

x=*p++

printf("%d ",x)

x=++*p

printf("%d ",x)

x=*++p

printf("%d ",x)

printf("\n")

return 0

}

结果:50 51 60

四、程序设计题(24分,第1题10分,第2题14分)

1.键盘输入一批整数,输入0时结束,偶数输出,奇数相加,最后输出奇数的和。

#include "stdio.h"

int main()

{

int a,i,s=0

scanf("%d",&a)

while(a)

if(a%2) s+=a

else printf("%d ",a)

printf("\n奇数和为:%d\n",s)

return 0

}

2.在main函数中定义一个整型数组int a[10],编写一个输入函数input,输入这个数组的所有元素,编写一个求数组最大值的函数max,求这个数组中的最大元素,在main函数中输出数组最大值。

#include "stdio.h"

void input(int a[10])

{

int i

for(i=0i<10i++)

scanf("%d",&a[i])

}

int max(int a[10])

{

int m,i

m=a[0]

for(i=1i<10i++)

if(m<a[i]) m=a[i]

return m

}

int main()

{

int a[10]

input()

printf("最大值为%d",max(a))

}

有问题可以到我空间留言,会帮你解答的,祝顺利!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11569800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存