中南大学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