中南大学c语言试题

c语言程序设计试卷

一、选择题(65438+每题0分,***20分)

1.c语言规定:在一个源程序中,主函数的位置(①)。

A.必须在最开始的时候

b必须在系统调用的库函数后面。

C.你可以做任何你想做的事

D.必须在最后

2.以下四个选项中,为合法浮点数的选项是(①)。

A.+1e+1 5e-9.4 03e2

B.-.60 12e-4 -8e5

C.123 e 1.2e-. 4+2e-1

D.-e3 .8e-4 5.e-0

3.如果a =-14且b = 3,则条件表达式A

A.-14 B. -13 C. 3 D. 4

4.已知int n,i=1,j = 2;执行语句n = I

A.1,2 B

5.为了判断两个字符串s1和s2是否相等,应该使用(①)。

A.if(s 1 = = S2)b . if(s 1 = S2)

C.if (strcmp(s1,s2))

D.if (strcmp(s1,s2)==0)

6.下列正确描述是(①)。

函数的定义可以嵌套,但是函数的调用不能嵌套。

b .函数的定义不能嵌套,但函数的调用可以嵌套。

c函数的定义和调用都不能嵌套。

D.函数的定义和函数的调用可以嵌套。

7.在C语言中,下列对函数的描述不正确的是(①)。

A.当数组名用作形参时,可以通过改变形参组的值来相应地改变实参数组的值。

B.允许递归函数调用。

C.函数参数的范围仅限于定义的函数。

D.子函数必须在主函数之前。

8.如果变量是在函数的复合语句中定义的,下面正确的说法是(①)。

变量只在复合语句中有效。

B.该变量在此函数中有效。

这个变量在这个程序的范围内有效。

D.该变量是非法的。

9.下列正确的函数形式是(①)。

A.double fun(int x,int y){ z = x+y;返回z;}

B.fun(int x,y){ int z;返回z;}

C.fun(x,y) { int x,y;双z;z = x+y;返回z;}

D.double fun( int x,int y){ double z;z = x+y;返回z;}

10.下面这个程序的输出是(①)。

# include & ltstdio.h & gt

定义F(y) 8.19-y

#define PRINT(a) printf("%d ",(int)(a))

无效总管(无效)

{

int x = 2;

PRINT(x * F(3));

}

a . 10b . 13c . 11d。报告了错误。

11.以下程序中,编译运行结果正确的是(①)。

A.a .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = { 1 };

printf("%d ",comm . n);

}

B.b .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = { 12.5 };

printf("%f ",comm . x);

}

C.c .无效总管(无效)

{

联盟

{

浮动x;

int n;

} comm={12.5}

printf("%f ",comm . x);

}

D.d .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = 5;

printf("%d ",comm . n);

}

12.有一个定义:int a = 1,* p = &;a;float b = 2.0char c = ' A下列非法操作是(①)。

A.p++;b . a-;c . b++;直流-;

13.在下面的程序中,调用scanf函数向变量A输入数值是错误的,错误的原因是(①)。

主()

{

int *p,*q,a,b;

p = & ampa;

printf("输入a:");

scanf("%d ",* p);

}

A.*p代表指针变量p的地址。

B.*p表示变量A的值,而不是变量A的地址。

C.*p代表指针变量p的值。

D.*p只能用来说明p是指针变量。

14.如果num,a,b,c都是int变量,则执行表达式num=(a=4,b=16,c = 32);最后一个num的值是(①)。

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

15.已经做出了以下定义和输入语句。如果要求A1,A2,C1,C2的值分别为10,20,A,B,正确的数据输入方法是①,(注:_表示空格)。

int al,a2,char c1,C2;

scanf("%d%c%d%c ",& ampa1。c 1;a2和ampC2);

A.10A _ 20 _ B B . 10A _ 20 _ B c . 10A 20 B d . 10A 20 _ B

16.如果指定:int a[10];对数组元素的正确引用是(①)。

A.a[10]b[3.5]c[5-3]d . a[-1]

17.在C语言中,一维数组被定义为:

类型描述符数组名①;

A.[整数常量表达式]b .[表达式]

C.[整数常量]d .[整数表达式]

18.下列能正确初始化一维数组A的说法是(①)。

A.in a[10]=(0,0.0,0,0);

B.int a[10]= { };c . int a[]= { 0 };

D.int a[10]= { 10 * 1 };

19.以下程序段(①)。

x =-1;

{

x = x * x

}

而(!x);

A.这是一个无限循环。b .循环执行两次

C.循环一次。d .语法错误

20.下列关于do-while循环的不正确描述是(①)。

. do-while的循环体至少执行一次。

B.do-while循环以do开头,以while结尾,while(表达式)后面不能写分号。

c在do-while循环中,必须有一个操作可以使while之后的表达式的值变为零(“false”)。

D. do-while的循环体可以是复合语句。

二、是非题(每题1分,***15分)

六五四三八+0。c语言规定标识符中的字母一般区分大小写。

2.控制台标准输入设备一般指键盘。

3.使用while和do-while循环时,循环变量的初始化应该在循环语句之前处理。

4.循环体中continue语句的作用是结束整个循环的执行。

5.关系表达式的值为0或1。

6.如果声明int a[3][4]={0},那么只有元素a[0][0]可以得到初始值0。

7.字符串以一维数组的形式存储在内存中。

8.字符数组中的一个元素保存一个字符。

9.字符数组中的最后一个字符必须是“\0”。

10.当形参是指针变量时,实参必须是数组名。

11.当数组名用作函数参数时,传递数组的值。

12.任何函数中的任何表达式都可以使用全局变量。

13.函数可以返回整数值、字符值、实数值等。,还可以带回指针数据。

14.表达式i++和++i在任何情况下都有完全相同的功能。

15.在赋值表达式中,赋值号左边的变量的数据类型和右边表达式的值可以不同。

三、选择题(65438+每题0分,***5分)

1.如果要求用if后的一对圆括号表示A不等于0的关系,则不能正确表示。

的表达式是(①)。

A.a & lt& gt0

B.!a

C.a=0

地方检察官

E.a!=0

2.选择所有合法常数(①)。

A.3e22.5

B.-E3

C.-.1e-1

D.'基本'

E.'\045'

F.0fd

G.0xfdaL

he8

一. ' \\ '

J."\""

3.下列关于函数原型的说法是错误的:

(1)变量的定义和声明是一回事,函数的定义和声明也是一回事。

(2)声明函数原型时,允许只写参数的类型,不必写参数的名称。

(3)如果定义函数时没有指定函数类型,系统会隐式指定函数类型为int。

(4)调用函数时,函数名、参数个数、参数类型必须与函数原型一致。

(5)如果调谐函数的定义出现在主音函数之前,则不必声明。

(6)所有函数可以互相调用。

(7)在C语言中,所有函数都是并行的,一个函数不能从属于另一个函数,也就是不能用嵌套的方式定义。

(8)如果函数没有返回值,可以在定义时省略函数类型。

(9)在C语言中,任何函数的定义都不允许为空。

按照(10)C语言的说法,实参数变量和形参数变量之间的数据传递是“值传递”。

请从下列关于指针的陈述中选择五个正确的陈述。

(1)指针就是地址。

(2)指针在使用前必须赋值。

(3)当指针P指向数组A的第一个地址时,由于p[i]和a[i]都可以引用数组元素,所以P和A在这里是等价的。

(4)int *p是指定义了一个指向int数据的指针变量p。

(5)数组的指针是索引组的起始地址。

(6)如果定义了int A [4]并且* p = a,那么p++指向数组A占用的内存的第二个字节..

(7)使用指针变量作为函数参数采用“值传递”的方式。

(8)同类型指针可以相减。

(9)指针变量和很多变量一样,可以进行四种运算。

(10)指针p指向数组元素a[2]。如果指向a[4],就执行p=p*2。

5.在下列关于阵列的陈述中,五种最准确的陈述是:

(1)声明数组变量时必须指定大小。

(2)常量表达式必须用来解释数组变量的大小。

(3)初始化数组时,大括号中的数据个数必须与数组的大小相同。

(4)变量定义int a[3]={0,1,2},b[3];可以用b=a让数组b的每个元素等于a的每个元素。

(5)在C语言中,字符串可以作为字符数组处理。

(6)定义了字符数组char c[11];为了给它赋值,可以用c =“China”;。

(7)如果char s [15] = {“我是\ 0学生”};,strlen(s)的值是6。

(8)在C语言中,二维数组中元素的顺序是:按行存储。

(9)C语言中,局部数组变量不能初始化。

(10)在声明初始化数组时,必须指定数组大小。

四、程序运行结果(每题4分,***20分)

1.(4分)

以下程序的运行结果是(①)。

# include & ltstdio.h & gt

无效总管(无效)

{

int I;

char a[]= "时间",b[]= "汤姆";

for(I = 0;一个[我]!= ' \ 0 ' & amp& ampb[i]!='\0';i++)

if (a[i]==b[i])

if(a[I]& gt;= ' a ' & amp& ampa[I]& lt;= 'z') printf("%c ",a[I]-32);

else printf("%c ",a[I]+32);

else printf(" * ");

}

2.(4分)

以下程序段的运行结果是(①)。

I = 1;s=3

{

s++ = i++;

if (s%7==0)继续;

else ++ I;

} whlie(s & lt;15);

printf("%d ",I);

3.(4分)

如果运行时输入:5999,下面程序(保留一位小数)的运行结果是(①)。

无效总管(无效)

{

int x;

浮动y;

scanf("%d ",& ampx);

if(x & gt;= 0 & amp& ampx & lt= 2999)y = 18+0.12 * x;

if(x & gt;= 3000 & amp& ampx & lt= 5999)y = 36+0.6 * x;

if(x & gt;= 6000 & amp& ampx & lt= 10000)y = 54+0.3 * x;

printf("%6.1f ",y);

}

4.(4分)

以下程序的运行结果是(①)。

无效总管(无效)

{

int a=1,k;

for(k = 0;k & lt3;k++) printf("%4d ",f1(a))

}

int f1(int x)

{

静态int z=3,y = 0;

y++;

z++;

return(x+y+z);

}

5.(4分)

下面这个程序的作用是计算函数f (x,y,z) = (x+y)/(x-y)+(z+y)/(z-y)的值。请填空。

# include & ltstdio,h & gt

# include & ltmath.h & gt

float fun1(float,float);

无效总管(无效)

{

float x,y,z,sum

scanf("%f%f% ",& ampx & amp;y & amp;z);

sum = fun 1(①)+fun 1(②);

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

}

浮点函数1(浮点a,浮点b)

{

浮点数字;

num = a/b;

退货数量;

}

五、填空(每题2分,***20分)

1.下面这个程序的作用就是使用公式:π×π/6 = 1/(1×1)+1/(2×2)+1/(3×3)+......

近似π,直到最后一项的值小于10e-6。

# include & ltstdio.h & gt

# include & ltmath.h & gt

无效总管(无效)

{

长I = 1;

①pi = 0;

while(I * I & lt;= 10e+6){ pi =②;i++;}

pi = sqrt(6.0 * pi);

printf("pi=%10.6f\n ",pi);

}

2.下面这个程序的作用是根据数组str1的矩阵格式,将下面的给定字符读入数组str 1,输出行数和列数之和为3的数组元素。

无效总管(无效)

{

char str1[4][3]={'A ',' b ',' C ',' d ',' E ',' f ',' G ',' h ',' I ',' j ',' K ',' I '

};

int x,y,z;

for(x = 0;x & lt4;x++)

for(y = 0;① ;y++)

{

z = x+y;

if ( ② ) printf("%c\n ",str 1[x][y]);

}

}

3.下面这个程序的功能是用递归的方法计算学生的年龄。已知第一个学生年龄最小,为10岁,其余学生都比对方大两岁。找出第五个学生的年龄。

递归公式如下:

年龄(1)=10

年龄(n)=年龄(n-1)+2(n & gt;1)

# include & ltstdio.h & gt

整数年龄

{

int c;

if(n = = 1)c = 10;

else c =①;

返回c;

}

4.下面这个程序的作用是判断输入的年份是否是闰年。

无效总管(无效)

{

int年,是;

scanf("%d ",& amp年份);

if(year % 400 = = 0)yes = 1;

else if(①)yes = 1;

else②;

if(是)printf("%d是",年份);

else printf("%d不是",年份);

printf(“闰年。\ n ");

}

5.实现了以下程序:输入三个整数,按降序输出。

无效总管(无效)

{

int x,y,z,c;

scanf("%d %d %d ",& ampx & amp;y & amp;z);

if(①){ c = y;y = z;z = c;}

if(②){ c = x;x = z;z = c;}

if(③){ c = x;x = y;y = c;}

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

}

六、填空(65438+每题0分,***20分)

1.在C语言中,一个浮点数据在内存中占用的字节数是(①)字节;内存中双精度数据的字节数是(②)字节。

2.如果已定义,char c = ' \ 010 ';变量c包含的字符数是(①)。

3.C源程序的基本单元是(①)。

4.在C语言中(以16位PC为例),一个char数据在内存中的字节数是(①);

内存中int数据的字节数是(②)。

5.现有定义:

int m;

浮点n,k;

char chl,ch2

使m = 3,n = 6.5,k = 12.6,ch1 =' a ',CH2 =' a ',输入数据的格式为:

3 6.5 12.6aA

对应的scanf语句是(1);。

6.执行以下程序片段后,x的值为(①)。

I = 10;i++;x = ++ I;

7.如果A,B,C都是int变量,执行下面的for循环后,C的值为(①)。

for(a=1,b = 5;a & lt= b;a++)c = a+b;

8.以下do-while语句中循环体的执行时间是(①)。

a = 10;

b = 0;

do { b+ = 2;a-= 2+b;} while(a & gt;=0);

9.如果X和Y都是int变量,那么下面for循环中scanf语句可以执行的最大次数是(①)。

for (x=0,y = 0;y!=123。& ampx & lt3;x++)

scanf ("%d ",& ampy);

10.如果有以下定义和陈述:

int *p[3],a[9],I;

for(I = 0;我& lt3;i++)p[I]= & amp;a[3 * I];

那么*p[0]是指数组元素(①);*(p[1]+1)是指数组元素(②)。

11.设A = 3,B = 4,C = 5,那么表达式A | | b+ C & amp;& ampb==c的值为(①)。

12.逻辑与运算的运算符是(①)。

13.如果a = 6,b = 4,c = 2,那么表达式!(a-b)+c-1 & amp;& ampb+c/2的值为(①)。

14.以下程序片段中循环体的执行次数是(①)次。

for(i=1,s = 0;我& lt11;I+= 2)s+= I;

15.如果有以下定义和陈述:

int a[4]={0,1,2,3},* p;

p = & ampa[2];

那么*-p的值就是(①)。

16.执行下面的程序段后,S的值为(①)。

int a[]={5,3,7,2,1,5,3,10},s=0,k;

for(k = 0;k & lt8;k+=2)

s+= *(a+k);

17.执行下面的程序段后,m的值为(①)。

int a[]={7,4,6,3,10},m,k,* ptr

m = 10;

ptr = & ampa[0];

for(k = 0;k & lt5;k+=2)

m =(*(ptr+k)& lt;m)?*(ptr+k):m;

回答:

一、选择题(20分)

1.~5.CBACD 6。~10.BDADB

11.~15.CABCC 16。~20.CACCB

二、是非题(15分)

√√√×√ √√√×× × √

三、选择题(5分)

1.ABC 2。CEGIJ 3。ADFHI 4。ABDEH 5。贝吉

四、程序运行结果(20分)

1.t*M

2.8

3.3635.4

4.6 8 10

5.z+y,z-y^x+y,x-y

五、填空(20分)

1.①double ②pi+1.0/(i*i)

2.①y & lt;3 ②z==2

3.①年龄(n-1)+2

4.①年份% 4 = = 0 & amp& ampyeaar%100!=0②是= 0

5.①z & gt;y②z & gt;x③y & gt;x

六、填空(20分)

1.14/4 ②8/8

2.①1/1

3.①功能

4.①1/① ②2/②

5.①scanf("%d%f%f%c%c ",& ampm & amp;n & amp;k & amp;ch1。ch2)

6.①12

7.①10

8.①3..9.①3..10.①a[0] ②a[4]

11.①112.①& amp;& amp13.①1.14.①5

15.①1

16.①16

17.①6