Ⅰ 计算机二级c语言考试的题型有哪些以及相应的分值是多少
考试形式及分值:
笔试:选择(70分)填空(30分)
机试:改错(30分)填空(30分)程序(40分)
Ⅱ 大一C语言期末考试的试题大概是什么样子的主要考什么
主要考程序阅读题,重点在c语言函数、指针、数组应用几个方面,要掌握基础的编程方法,比如排序基本算法,后面要编程序的
Ⅲ C语言期末考试试题(谭浩强版)
C语言期末考试试题
2008年04月12日 星期六 00:22
一 选择题(24分,每小题2分)
1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。
A 存放读入数据项的存储区
B 存放读入数据的地址或指向此地址的指针
C 一个指向所读文件的文件指针
D 一个整形变量,代表要读入的数据项总数
2.以下程序的输出结果为( )。
main( )
{
int i=010,j=10;
printf("%d,%d\n",i++,j--);
}
A 11,9
B 9,10
C 8,10
D 9,9
3.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534;
a=20.0/3;
a=(int)125.521%4;
a=5<<2;
A 125,6,31,1
B 125,6,1,20
C 125,6.666666,31,20
D 125.534,6.666666,2,20
4.设i和k都是int类型,则for循环语句( )。
for(i=0,k=-1;k=1;i++,k++)
printf("****\n");
A 循环结束的条件不合法
B 循环体一次也不执行
C 循环体只执行一次
D 是无限循环
5.以下程序的输出结果为( )。
main( )
{
char c;
int i;
for(i=65;i<68;i++)
{
c=i+32;
switch(c)
{
case 'a':
case 'b':
case 'c':printf("%c,",c);break;
default:printf("end");
}
}
}
A a,b,c,end
B a,a,a,end
C a,a,a,
D a,b,c,
6.函数调用语句:fseek(fp,-10L,2);的含义是( )。
A 将文件位置指针从文件末尾处向文件头的方向移动10个字节
B 将文件位置指针从当前位置向文件头的方向移动10个字节
C 将文件位置指针从当前位置向文件末尾方向移动10个字节
D 将文件位置指针移到距离文件头10个字节处
7.以下程序的输出结果为( )。
main( )
{
int i=0,j=0;
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]=0;
printf("%s\n",s1);
}
A side
B country
C sidetry
D countryside
8.下列说法不正确的是( )。
A 主函数main中定义的变量在整个文件或程序中有效
B 不同函数中,可以使用相同名字的变量
C 形式参数是局部变量
D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
9.在下列程序段中,枚举变量 c1的值是( )。
enum color { red,yellow,blue=4,green,white}c1;
c1=yellow;
c1=white;
A 1
B 3
C 5
D 6
10.设有说明 int (*ptr)();其中标识符ptr是( )。
A 是一个指向整形变量的指针
B 是一个指针,它指向一个函数值是int的函数
C 是一个函数名
D定义不合法
11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为( )。
A int p;
B int (*p)[n];
C int *p[n];
D int (*p)( );
12.具有相同类型的指针类型变量p与数组a,不能进行的操作是( )。
A p=a;
B *p=a[0];
C p=&a[0];
D p=&a;
二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)
1.参加位运算的数据可以是任何类型的数据。 ( )
2.若有定义和语句:
int a;
char c;
float f;
scanf("%d,%c,%f",&a,&c,&f);
若通过键盘输入:10 A 12 5
则a=10,c=‘A’,f=12.5。 ( )
3.C语言把文件看作是一个字符(字节)的序列。 ( )
4.若有宏定义:
#define S(a,b) t=a;a=b;b=t
由于变量t没定义,所以此宏定义是错误的。 ( )
5.在Turbo C中,下面的定义和语句是合法的:
file *fp;
fp=fopen("a.txt","r"); ( )
6.若有定义:
char s[ ]="china";
则Turbo C系统为数组s开辟6个字节的内存单元。 ( )
7.若有定义和语句:
int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;
for(i=0;i<3;i++)
sum+=a[i][2-i];
则sum=21。 ( )
8.若有定义和语句:
struct student
{
int num;
char name[10];
float score;
}
s[5]={{1,"lili",98.5},{9,"xiaohua",66}},*p=s;printf("%d",*p++);
输出结果是1。 ( )
9.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。 ( )
10.在Turbo C中,此定义和语句是合法的:
enum aa{ a=5,b,c}bb;
bb=(enum aa)5; ( )
三 写出下列程序的运行结果(36分,每小题6分)
1.
main( )
{
int i=29,j=6,k=2,s;
s=i+i/j%k-9; //s=i+(i/j)%k-9
printf(“s=%d\n”,s);
}
2.
main( )
{
int x=31,y=2,s=0;
do
{
s-=x*y;
x+=2;y-=3;
}
while(x%3==0); //先执行,后判断
printf(“x=%d\ty=%d\ts=%d\n”,x,y,s);
}
3.
main( )
{
int a[6]={10,20,30,40,50,60},i;
invert(a,0,5);
for(i=0;i<6;i++)
printf(“%d,”,a[i]);
printf(“\n”);
}
invert(int s[ ],int i,int j) //倒置
{
int t;
if(i<j)
{
invert(s,i+1,j-1); //函数自身的嵌套调用,形成循环
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
4.
#include <stdio.h>
main()
{
char str[ ]="The C program",c;
int i;
for(i=2;(c=str[i])!='\0';i++)
{
switch(c)
{
case 'g': ++i; break; //由于++i,跳过了g后面的1个字母
case 'o': continue;
default: printf(“%c”,c); continue;
}
printf(“*”);
}
printf(“\n”);
}
5.
struct w //结构体
{
char low;
char high;
};
union u //共用体
{
struct w byte;
short word;
}uw;
main( )
{
int result;
uw.word=0x1234;
printf("word value:%04x\n",uw.word);
printf("high byte:%02x\n",uw.byte.high);
printf("low byte:%02x\n",uw.byte.low);
uw.byte.low=0x74;
printf("word value:%04x\n",uw.word);
result=uw.word+0x2a34;
printf("the result:%04x\n",result);
}
6.
main()
{
char *s2="I love China!",**s1=&s2;
char *s3,c,*s4="w";
s3=&c;
*s3='H';
s2=s2+2;
printf("%s\t%c\t%s\t%c\n",s2,*s3,s4,**s1);
}
四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)
1.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main( )
{
int hb,hm,hl,n=0;
for(hb=0;hb<=100;hb+=(1))
for(hm=0;hm<=100-hb;hm+=(2))
{
hl=100-hb- (3) ;
if(hb/3+hm/2+2*(3)==100)
{
n++;
printf("hb=%d,hm=%d,hl=%d\n",hb/3,hm/2,2*hl);
}
}
printf("n=%d\n",n);
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#define N 10
char str[N];
void main()
{
int i,flag;
for(flag=1;flag==1;)
{
scanf("%s",str);
flag=0;
printf("\n");
}
sort(___(4)___);
for(i=0;i<N;i++)
{
printf("%c",str[i]);
}
printf("\n");
}
sort(char str[N]) //冒泡排序
{
int i,j;
char t;
for(j=1;j<N;j++)
for(i=0;i<10-j;i++)
if(str[i]>str[i+1])
{
t=str[i];
____(5)____;
____(6)____; //交换位置
}
}
3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
3 0 0 3
2 5 7 3
1 0 4 2
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(int m,int n,int arr[])
{
for(i=0;i<m;i=i+m-1)
for(j=0;j<n;j++)
sum=sum+____(7)____;
for(j=0;j<n;j=j+n-1)
for(i=1;____(8)____;i++)
sum=sum+arr[i*n+j];
return(sum);
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#define N 10
main()
{
void maxmin(int arr[],int *pt1,int *pt2,int n);
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=&a;
p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{
int i;
*pt1=*pt2=arr[0];
for(i=1;i<n;i++)
{
if(arr[i]>*pt1)
____(9)____ ;
if(arr[i]<*pt2)
____(10)____ ;
}
}
答案
一 选择题(24分,每小题2分)
1.( B ) 2.( C ) 3.( B )
4.( D ) 5.( D ) 6.( A )
7.( D ) 8.( A ) 9.( D )
10.( B ) 11.( C ) 12.( D )
二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)
1.( × ) 2.( √ )
3.( √ ) 4.( × )
5.( × ) 6.( √ )
7.( √ ) 8.( × )
9.( √ ) 10.( √ )
三 写出下列程序的运行结果(36分,每小题6分)
1.s=20
2.x=35 y=-4 s=-29
3.60,50,40,30,20,10,
4.e C pr*am
5.word value:1234
6.love China! H w l
high byte:12
low byte:34
word value:1274
the result:3ca8
四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)
1.(1) 3 (2) 2 (3)hm hl
2.(4) str (5) str[i]=str[i+1] (6) str[i+1]=t
3.(7) arr[i*n+j] (8) i<m-1
4.(9) *ptr1=arr[i] (10) *ptr2=arr[i]
Ⅳ 求一份C语言程序设计的期末考试试题!!!谢谢了
一.
选择题
(共15题,
每题2分,共30分)
1.
定义结构体的关键字是(
)
A.
union
B.
enum
C.struct
D.typedef
2.
设整型变量a为5,使b不为2的表达式是(
)
A.
b=a/2
B.
b=6-(--a)
C.
b=a%2
D.
b=a>3?2:1
3.
下面哪一项是不正确的字符串赋值或赋初值的方法(
)
A.
char
*str;
str=
“china”;
B.
char
str[7]=
{‘c’,
‘h’,
‘i’,
‘n’,
‘a’};
C.
char
str1[]=
“china”,str2[]=“123”;
D.
char
str1[10];
str1=
“china”;
4.
以下对二维数组a进行正确初始化的是(
)
A.
int
a[2][3]={{1,2},{3,4},{5,6}};
B.
int
a[
][3]={1,2,3,4,5,6};
C.
int
a[2][
]={1,2,3,4,5,6};
D.
int
a[2][
]={{1,2},{3,4}};
5.
选出下列标识符中不是合法的标识符的是(
)
A.
hot_do
B.
cat1
C.
_pri
D.
2ab
6.
以下说法中正确的是(
)
A.
C语言程序总是从第一个的函数开始执行
B.
在C语言程序中,要调用的函数必须在main()函数中定义
C.
C语言程序总是从main()函数开始执行
D.
C语言程序中的main()函数必须放在程序的开始部分
7.
若已定义:int
a[9],
*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为(
)
A.
p+1
B.
a+1
C.
a++
D.
++p
8.
若有说明:
int
i,j=7,
*p=&i;,
则与i=j;
等价的语句是(
)
A.
i=
*p;
B.
*p=*&j;
C.
i=&j;
D.
i=*
*p;
9.
若变量c为char类型,能正确判断出c为小写字母的表达式是(
)
A.
‘a’<=c<=
‘z’
B.
(c>=
‘a’)
||
(c<=
‘z’)
C.
(‘a’<=c)
and
(‘z’>=c)
D.
(c>=
‘a’)
&&
(c<=
‘z’)
10.
以下程序的输出结果是(
)
main()
{
int
a[]={1,2,3,4,5,6,7,8,9},
*p;
p=a;
*(p+3)+=2;
printf(
“%d,%d\n”,*p,*(p+3)
);
}
A.
0,
5
B.
1,
6
C.
1,
5
D.
0,
6
11.
以下程序的输出结果是(
)
main()
{
int
a=5;
float
x=3.14;
a*=x*(‘E’-
‘A’);
printf(“%f\n”,(float)a);
}
A.
62.000000
B.
62.800000
C.
63.000000
D.
62
12.
以下程序的输出结果是(
)
#define
f(x)
x*x
main()
{
int
a=6,b=2,c;
c=f(a)/f(b);
printf(“%d\n”,c);
}
A.
9
B.
6
C.
36
D.
18
13.
定义如下变量和数组:int
i;
int
x[3][3]={1,2,3,4,5,6,7,8,9};
则语句for(i=0;i<3;i++)
printf("%d
",x[i][2-i]);
的输出结果是(
)
A.
1
5
9
B.
1
4
7
C.
3
5
7
D.
3
6
9
14.
下列程序段的输出结果是
(
)
void
main(
)
{
int
k;
for
(k=1;k<5;k++)
{
if(k%2!=0)
printf(
“#”
);
else
printf(“*”)
;
}
}
A.
#*#*
B
.
*#*#
C.
##
D.
**
15.
下列程序执行后输出的结果是(
)
int
d=1;
fun
(int
p)
{
int
d=5;
d
+
=p
+
+;
printf("%d,",d);
}
main(
)
{
int
a=3;
fun(a);
d
+
=
a
+
+;
printf("%d\n",d);
}
A.
8,
4
B.
9,
6
C.
9,
4
D.
8,
5
二.
填空题(共7题,每空2分,共30分)
1.
数组
int
a[3][5];
共定义了_______________个元素。
2.
有float
f=3.1415927;
则
printf(“%5.4f”,
f
);输出的结果是_______________。
3.
下面程序的功能是:输出
100以内(不包含100)能被
3整除且个位数为
6的所有整数,请填空。
main(
)
{
int
i;
for(i=1;
_______________;
i++)
if
(_______________)
printf("%d",
i);
}
4.
设有“int
x=2,
y”说明,则逗号表达式“y=x+5,x+y”的值是
_______________
5.
以下是使用指针,进行字符串复制的程序,请填空。
main()
{
char
a[]=
“Tsinghua
University”,
b[30],
*p1,*p2;
p1=a;
p2=b;
for(;
*p1!=
‘_______________’;
p1++,
p2++)
_______________=_______________;
*p2=
‘_______________’;
printf(“string
a
is:%s\n”,a);
printf(“string
b
is:%s\n”,b);
}
6.
下面程序用冒泡法对数组a进行降序排序,请填空。
main()
{
int
a[5]={4,7,2,5,1};
int
i,j,m;
for(i=0;i<4;i++)
for(j=0;j<_______________;j++)
if(
_______________<
_______________
)
{
m=a[
j];
a[
j]=a[
j+1];
a[
j+1]=
m;
}
for(i=0;i<5;i++)
printf("%d
",a[i]);
}
7.
函数fun的功能是:使一个字符串按逆序存放,请填空。
void
fun
(char
str[])
{
char
m;
int
i,j;
for(i=0,j=strlen(str);i<_______________;i++,j--)
{
m=str[i];
str[i]=
_______________;
str[j-1]=m;
}
printf("the
rotated
string
is
%s\n",_______________);
}
Ⅳ 求一张C语言的期末考试卷,我是大一的新生,想看看试卷的大概格式和内容。
本试卷共8页,共5大题,考生在作答前应先检查是否有缺页、白页,以防漏答。答题前,请先填写学号、姓名、专业及班级。
一、单项选择题(共10题,每题2分,共20分。在备选答案中选择一个最佳答案。多选、错选、不选不得分)
1、不是C语言基本数据类型的是( )。
A、指针类型 B、整型
C、字符型 D、实型
2、设有:int a=3, b= 4, c= 5,x , y; 表达式0 && (x=a)&&(y=b)的值为( )。
A、1 B、0 C、3 D、4
3、设有语句 int a=3 ; 则执行了语句 a+=6;后,变量a 的值为( )。
A、18 B、-3 C、9 D、12
4、执行以下程序段后,输出的y值为(迅毕 )
void main()
{ int a[]={2,4,6,8,10};
int y, *p;
p=&a[0];
y=*p; printf(“%d”,y);
}
A、2 B、4 C、6 D、8
5、有定义语句:float a[4];则分配给数组a的内存空间为( )字节。
A、 20 B、 12 C、 16 C、10
6、以下描述错误的是( )。
A、break语句可用于while语句。
B、break语句和continue语句的作用是一样的。
C、在循环语句中使用break语句是为了跳出循环,提前结束循环。
D、在循环语句中使用continue语句是为了结束本次循环,而不终止整个循环。
7、C语言中规定,if语句的嵌套结构中,else总是( )。
A、与最近的if 配对 B、与第一个if 配对
C、按缩进位置相同的if配对 D、与最近的且尚未配对的if 配对
8、说明语句“int (*p)( ); ”的含义是( ) 。
A、p是一个指向一维数组的指针变量。
B、p是指针变量,指向一个整型数据。
C、p是一个指向函数的指针,该函数返回一个int型数据。
D、以上都不对。
9、以下对二维数组c的正确声明是 ( ) 。
A、int c[3][ ]; B、int c(3,4);
C、int c(2)(2); D、int c[3][2];
10、下述程序段执行后输出结果为( )。
int x=100, y=200;
printf ("% d", (x, y));
A、100 B、200 C、100,200 D、编译出错
二、填空题(共7题,共10空,每空1分,共10分。将答案填在题中横线上)
1、C语言提供的三种逻辑运算符是 && 、 || 和!;
2、函数的返颤昌毕回值是通过函数中的 return 语句获得的。
3、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"定义后,a[2][2]的值为_6__ _;
4、对于"int *pa[5];" pa是一个具有5个元素的_数组指针_,每个元素是一个指向int型变量的__指针__;
5、单向链表的尾节点next指针应赋值__ NULL___;
6、在语句for(x=1,y=3;x>y;y++)中循环体执行的次数为 0 。
7、int a[5];数组a的首地址为2000,则元素a[1]的地址为 2002 ,元素a[2]的地址为 2004 。
三、程序填空题(茄芹共2题,共5空,每空4分,共20分)
1、以下程序完成计算1-1/2+1/3-1/4+1/5+……前n 项和,请填空。
#include <stdio.h>
int main( )
{ int i, n, flag;
float sum;
scanf("%d", &n);
flag= 1 ;
sum=0;
for(i=1;i<=n; i++ )
{ sum+=(float)flag/i;
flag=-flag ;
}
printf("%.3f\n", sum);
}
2、以下程序的功能是从键盘输入n个整数,统计其中正数、0、负数的个数,请填空。
#include <stdio.h>
void main( )
{int a, i, count1,count2,count3;
count1=count2=count3=0 ;
for(i=1;i<=n;i++)
{ scanf(“%d”, &a);
if(a>0) count1++;
else if(a==0) count2++ ;
else count3++;
}
printf(“正数:&d个,零:%d个,负数:%d个\n”, count1,count2,count3 );
}
四、运行程序结果题(共4题,每题6分,共24分)
1、写出程序运行结果。
void main( )
{ int x=1,y=2,t;
int *p1,*p2;
p1=&x; p2=&y;
t=*p1;*p1=*p2;*p2=t;
printf("x=%d,y=%d\n",x,y);
}
运行结果为:
程序有错,不能运行!或写:
x=2,y=1
2、写出程序运行结果。
#include<stdio.h>
int max(int a,int b)
{ int c;
c=a>b?a:b;
return(c);
}
int min(int a,int b)
{int c;
c=a<b?a:b;
return(c);
}
void main()
{ int a=2,b=6;
printf("max=%d\n",max(a,b));
printf(“min=%d\n”,min(a,b));
}
运行结果为:
程序有错,不能运行!或写:
max=6
min=2
3、写出程序运行结果。
#include <stdio.h>
void main()
{ int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,sum=0;
for (i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j) sum=sum+a[i][j];
printf(“sum=%d\n”,sum);
}
运行结果为:
程序有错,不能运行!或写:
sum=15
4、写出程序运行结果。
void main( )
{ int n,f;
n=1;
while(n<=10)
{ f=f*n;
n+=2;
}
printf(“f=%d\n”,&f);
}
运行结果为:
程序有错,不能运行!或写:
f=不确定
五、程序设计题(共2题,每题13分,共26分)
1、将一个数组按逆序存放,如元素1、2、3、4、5,按逆序存放后为5、4、3、2、1。
2、求出1!+2!+3!+…+8!的和并输出。
#include<stdio.h>
float fact(int n)
{ float f;
if(n==1||n==0) f=1;
else f=fact(n-1)*n;
return(f);
}
void main( )
{float sum;
int i;
sum=0;
for(i=1;i<=8;i++)
sum+=fact(i);
printf("sum=%f\n",sum);
}
Ⅵ 大一期末考C语言试题求解答
第一题:#include<stdio.h>
voidmain()
{
inta[10],b[9],i=0;
for(;i<10;i++)
{
printf("请输入第%d个数",i+1);
scanf("%d",&a[i]);
}
for(i=1;i<10;i++)
b[i-1]=a[i]-a[i-1];
for(i=0;i<9;i++)
{
if(i%3==0)printf(" ");
printf("%d ",b[i]);
}
}运行结果:
学习是要用心的,多动脑,多思考学到的东西才是自己的。喔,对了给分哟!!!!!
Ⅶ c语言考试都考什么类型的题目呢
单项选择题共四十题,四十分,每一个选扮族择分值为1分,其中单项选择中含公共基础知识,该部分十道题,占10分。
二、程序填空题
程序填空题有2-3个空,占比分值18分,该题型为上机题,其三个空占比18分,可想而知其重要性。
三、程序改错题
程序改错题有2-3处错误,该题型分值占比也是18分,难度比程序填空题略难。该题型也为上机题,也许重视该类题型。
四、程序设计题
程序设计题是计算机二级C语言考试重点,该题为一大题,占比分值24分,该题型也为上机题,为考试重点,需多加练习。
注:二级公共基础知识在各科考试掘培选择题中体现。程序设计部分,判缺唯主要考查考生对程序设计语言使用和编程调试等基本能力,在选择题和操作题中加以体现。
计算机二级c语言考试考试要求:
一、熟悉Visual C++2010 Express集成开发环境。
二、掌握结构化程序设计的方法,具有良好的程序设计风格。
三、掌握程序设计中简单的数据结构和算法并能阅读简单的程序。
四、在Visual C++2010 Express集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。
以上便是计算机二级c语言考试题型及分值说明。
Ⅷ 计算机二级c语言考试题型和分值。
全国计算机二级州帆陪C语言程序设计包括40个单选题(每题一分)和三道操作题(60分)。
单选题中1~10题为二级公共基础知识,单选题的11~40题是C语言的内容。
操作题包括程序填空(18分)、程序改错(18分)和编程题(24分)各一题。
程序填空是将一个完整的程序,扣掉两到三处,让考生将它填写完整。由于每位考生具体抽到的题目不同,程序填空有2到3个空要填。
C语言有基础知识(C语言概述、常量与变量、数据类型、运算符和表达式),编程三大结构(顺序结构、选择结构、循环结构),数组、函数和指针,其他内容(预处理命令、结构体和共用体、位运算、文件)四大部分内容。重点是第二、三部分。
Ⅸ 全国计算机二级考试(c语言)的题型及各题分值是怎样的(笔试和上机)
全国计算机二级考试(c语言)的题型及各题分值是怎样的题型分值分布:
1、单项选择题,40题,40分(含公共基础知识部分10分)。
2、程序填空题,2~3个空,18分;上机题。
3、程序改错题,2~3处错误,18分;上机题。
4、程序设计题,1题,24分;上机题。
二级公共基础知识在各科考试选择题中体现。程序设计部分,主要考查考生对程序设计语言使用和编程调试等基本能力,在选择题和操作题中加以体现。
(9)c语言期末考试题目分布扩展阅读:
二级c语言考试要求:
1、熟悉Visual C++2010 Express集成开发环境。
2、掌握结构化程序设计的方法,具有良好的程序设计风格。
3、掌握程序设计中简单的数据结构和算法并能阅读简单的程序。
4、在Visual C++2010 Express集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。
Ⅹ 徐师大c语言期末考试11机
1、函数fun的功能是计算x^n。
double fun(double x,int n)
{int i; double y=1;
for(i=1;i<=n;i++) y=y*x;
return y;
}
主函数中已经正确定义m、a、b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。实现这一计算的函数调用语句为______。
答案: 1:fun(a,4)+fun(b,4)-fun((a+b),3)
评析:
函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
2、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指内存空间中,形成一个新字符串s。请填空。
void sstrcpy(char *s,char *t)
{ while(*s++=______);}
main()
{ char str1[100],str2[]="abcdefgh";
sstrcpy(str1,str2);
printf("%s\n",str1);
}
答案: 1:*t++
评析:
要使sstrcpy()函数实现字符串复制,必须将t字符串中的每个字符逐个拷到s字符串中,所以可以使用*s=*t;s++;t++。或者可以写成*s++=*t++,本题只有一个空,可以填入*t++。
知识点:知识点/指针/用指针作函数参数
3、以下程序给指樱源神针p分配三个double型动态内存单元,请填空。
#include <stdlib.h>
main()
{ double *p;
p=(double*)malloc(______);
p[0]=1.5; p[1]=2.5;p[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
答案: 1:3*sizeof(double)
评析:
malloc(size)在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即"返回值")是一个指针,它的值是该分配域的起始地址。如果此函数未能成功地执行,则返回值为0。
本题中要求分配三个double型动态内存单元,所以size处应当为3*sizeof(double)。
知识点:知识点/指针/各类型的指针及指针变量,通过指针引用各类型数据
4、以下程序运行后的输出结果是______。
main()
{ int a,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n",a,b,c);
}
答案: 25 21 37
评析:
本题考查的是格式字符的输出。
变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进制形式输出整数(正数不输出符号),所以本题a=25则输出值为25;脊亏b=025转换为10进制:b=2*8+5=16+5=21,则输出的值为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是空格,所以输出的几个数字之间也必须是空格。
知识点:知识点/函数/变量的存储类别,变量的作用域和裂腔生存期
5、以下程序运行后的输出结果是______。
main ()
{ char a[]="Language",b[]="Programe";
char *p1,*p2; int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k));
}
答案: gae
评析:
本题考查的是字符指针变量与字符数组。
解题过程:
(1)当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出
(2)当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出
(3)当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出
(4)当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g
(5)当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出
(6)当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a
(7)当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出
(8)当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e
(9)当k=8时结束循环
(10)输出结果为:gae。
知识点:知识点/数组的定义和引用/字符串与字符数组
6、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。
main()
{ printf("The sun=%d\n",SunFun(10));}
SunFun(int n)
{ int x,s=0;
for(x=0;x<=n;x++)s+F(______);
return s;
}
F(int x)
{ return (______);}
答案: 1:x
2:x*x+1
评析:
本题考查的是函数的调用。
解题过程:
(1)f(x)的含义为x的平方加上1
(2)所以F(int x)的返回值应该为 x*x+1
(3)SunFun(10)的作用是将0到10之间所有的整数相加求和
(4)所以F()的形式参数为x。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
7、以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。
#define M2
#defineN4
void SumColumMin(int a[M][N],int *sum)
{ int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
for(j=1;j<M;j++)
if(a[k][i]>a[j][i])k=j;
s+=______ ;
}
______ =s;
}
main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin(______);
printf("%d\n",s);
}
答案: 1:a[k][i]
2:*sum
3:x,&s
评析:
本题考查的是函数参数的传送。
解题过程:
(1) 执行以i为变量的for语句
1)k=0
2)执行以j为变量的for语句
①当j=1
②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0
③j=2所以结束循环
3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写 a[k][i],用变量s累加。
(2) SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写 *sum,用来将该指针变量指向s
(3) 当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的指针变量,所以第三个空应该为 x,&s,分别代表已经被定义的数组x,和整型变量s的地址。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
8、以下程序的输出结果是 。
main()
{
int a=0;
a+=(a=8);
printf("%d\n",a);
}
答案: 16
评析:
本题的考查点是表达式。
表达式a+=8相当于a=a+8,对表达式逐步求解过程如下:
a+=(a+8)此时,a的值赋值为8,而不再是0;
a+=8
a=a+8
a=16
故本题答案为16。
知识点:知识点/函数/形式参数与实在参数,参数值的传递
9、以下程序的输出结果是______。
#define MAX(x,y)(x)>(y)?(x):(y)
main()
{
int a = 5, b = 2,c = 3, d = 3, t;
t = MAX(a + b, c + d)*10;
printf("%d\n", t);
}
答案: 7
评析:
本题的考查点是宏定义。
宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10;
由于(a+b)>(c+d)为真, 所以t = (a+b),即为7。
故本题答案为:7。
知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义
10、函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t返回正值,当s<t时返回负值。请填空。
mycmp( char *s,char *t)
{ while (*s==*t)
{ if (*s=='\0')return 0;
++s;++t;
}
return(______);
}
答案: *s-*t
评析:
本题的考查点是比较字符串的大小。
函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的ASCII码的差值,必须使用"*s-*t"得出。
故本题答案为:*s-*t。
知识点:知识点/函数/库函数的正确调用
11、若给fun函数的形参s传送字符串:" 6354abc",则函数的返回值是______。(字符串中包括空格)
long fun(char s[ ])
{ long n; int sign;
for (; isspace(*s);s++);
sign=(*s=='-')?-1:1;
if (*s=='+' || *s=='-') s++;
for (n=0;isdigit(*s);s++)
n=10*n+(*s-'0');
return sign*n;
}
答案: 6354
评析:
本题的考查点是函数的返回值。
这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是"6354"。
故本题答案为:6354。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
12、以下程序段的输出结果为______。
char *p;int i,d;
p="PDP1-0";
for(i=0;i<7;i++)
{
d=isdigit(*(p+i) );
if(d!=0)
printf("%c\n",*(p+i) );
}
答案: 1
评析:
本题的考查点是函数isdigit()。
这段程序的目的是按从左至右的顺序从字符串p中找出阿拉伯数字字符,如果找到,将其打印出来。最后的输出应当是:
1
0
知识点:知识点/函数/库函数的正确调用
13、下列程序中字符串中各单词之间有一个空格,则程序的输出结果是______。
# include<string.h>
main( )
{ char str1[ ]="How do you do", *p1=str1;
strcpy(str1+strlen(str1)/2,"es she");
printf("%s\n",p1);
}
答案: How does she
评析:
本题的考查点是字符串拷贝函数strcpy()。
strlen(str1)是求str1字符串的长度,为13,然后,进行除2运算,结果为6。strcpy()函数是把字符串"es she"拷贝到str1后的第6个字符后面,也就是说,拷贝后的结果是"How does she"。
故本题答案为:How does she。
知识点:知识点/函数/库函数的正确调用
14、下面的函数strcat(str1,str2)实现将字符串str2拼接到字符串str1后面的功能。请填空使之完整。
char *strcat(str1,str2)
char *str1,*str2;
{ char *t=str1;
while(______)str1++;
while(______);
return(t);}
答案: 1:*str1!='\0'
2:*str1++=*str2++
评析:
本题的考查点是字符串连接函数strcat()。
函数strcat(str1,str2)实现将字符串str2连接到字符串str1后面,所以首先要找到字符串str1的串尾,根据C语言的语法规定,一个串的串尾一定是一个隐含字符"\0",而在程序中,对字符串中字符的访问是通过两个指针变量来完成的,因此要找到字符串str1的串尾,要判断*str1是否为"\0",要找到字符串str2的串尾,要判断*str2是否为"\0",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写"*str1"和"*str1++=*str2++ "。
知识点:知识点/函数/库函数的正确调用
15、以下程序的输出结果是______。
void fun()
{ static int a=0;
a +=2; printf("%d",a);
}
main()
{ int cc;
for(cc=1;cc<4;cc++) fun();
printf("\n");
}
答案: 246
评析:
循环for(cc=1;cc<4;cc++)被执行了3次。在函数fun中,由于a是static型变量,所以函数第1次调用后,a= 2;第2次调用后,a = 4;第3次调用后,a = 6。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
16、若要使指针p指向一个double类型的动态存储单元,请填空。
p=______malloc(sizeof (double));
答案: (double*)
评析:
函数malloc返回的是void*而不是double类型指针。所以要使指针p指向一个double类型的存储单元就必须进行强制类型转换。
知识点:知识点/函数/函数的类型和返回值
17、下列程序段的输出结果是______。
main()
{ char b[]="Hello,you";
b[5]=0;
printf("%s\n",b);
}
答案: Hello
评析:
字符串中,数值0或符号'\0'表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。
知识点:知识点/数组的定义和引用/一维数组和多维数组的定义、初始化和引用
18、下列程序的输出结果是______。
void fun(int *n)
{ while((*n)--);
printf("%d",++(*n));
}
main()
{ int a=100;
fun(&a);
}
答案: 0
评析:
在函数fun()中,while((*n)--)是先引用*n的值,再做(*n)-- 运算,所以循环结束时*n的值为0,再做(*n)-- 运算后,*n的值为-1;执行++(*n)后,*n的值是0。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
19、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空:
#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
for(i=0;i<N;i++)
{ p=0;
for(j=1;j<M;j++)
if(x[i][p]<x[i][j])______;
printf("The max value in line %d is %d\n",i,______);
}
}
main()
{ int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1};
______;
}
答案: 1:p=j
2:a[i][p]
3:LineMax(x)
评析:
LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。
所以(1)处应该填p=j;
内循环结束后,便获得了本行中最大的数,即a[i][p],这也就是(2)处应该填写的答案;
而(3)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实参,传递过去,(3)处的答案应该是LineMax(x)。注意大小写,C语言中大小写是不等价的。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
20、若有如下结构体说明:
struct STRU
{ int a,b;char c: double d;
struct STRU *p1,*p2;
};
请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。
______t[20]
答案: struct STRU
评析:
本题主要考查考生对C语言中结构体的掌握。
结构体类型是构造数据类型,是用户自已定义的一种类型。
结构体类型的定义:
struct 结构体类型名
{
成员项表;
};
定义结构体变量的的形式为:
struct 结构体类型名变量1,变量2,...
其中变量包括:一般变量、指针变量、数组变量等。
知识点:知识点/数组的定义和引用/一维数组和多维数组的定义、初始化和引用
21、以下程序运行后的输出结果是______。
void fun(int x,int y)
{x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);}
main()
{int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
答案: 3,2,2,3
评析:
本题的考查点是交换变量的值。
被调函数fun()实现的功能是交换变量x和y的值并打印,由于该函数无返回值,所以在主函数中打印出的x和y的值仍然为2,3。
故本题答案为:3,2,2,3。
知识点:知识点/函数/形式参数与实在参数,参数值的传递
22、下面程序的运行结果是:______。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{int i1,i2;
i1=1000/s(N);i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
答案: 1000 10
评析:
本题的考查点是宏定义。
根据宏定义,变量i1的值为1000/10*10=1000,变量i2的值为1000/(10*10)=10。
故本题答案为:1000和10。
知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义
23、下面程序的运行结果是:______。
void swap(int *a,int *b)
{int *t;
t=a;a=b;b=t;
}
main()
{int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d%d\n",*p,*q);
}
答案: 35
评析:
本题的考查点是函数调用。
观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。
故本题答案为:3和5。
知识点:知识点/函数/函数的类型和返回值
24、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{int row,col,max,min;
for(row=0;row<N;row++)
{for(max=a[row][0],col=1;col<N;col++)
if(______) max=a[row][col];
if(row==0) min=max;
else if(______) min=max;
}
return min;
}
答案: 1:max<a[row][col]
2:max<min
评析:
本题的考查点是求矩阵最大值的算法。
本题中的第一空要求判断出每一行中的最大数,应该填写条件max<a[row][col],第二空要求从N个最大值中找出最小的数,应填入条件max<min。
故本题答案为:max<a[row][col]和max<min。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
25、以下程序的输出结果是______。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{ int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
答案: 16
评析:
本题的考查点是带参数的宏定义。
带参数的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define 命令行中指定的字符串从左到右进行置换。如果串中包含形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果宏定义中的字符串中的字符不是参数字符,则保留。因此对MCRB(j,MCRA(i))进行宏展开就得到了2*MCRA(j)+MCRA(i),即:2*2*j+2*i=2*2*3+2*2=16。
故本题答案为:16。
知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义
26、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun ( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f=______;
}
return m;
}
main()
{ printf("m=%d\n",______);}
答案: 1:-f
2:fun(10)
评析:
本题的考查点是C程序设计。根据程序写出运行结果。
考察的知识点主要是函数的调用。本题利用一个fun函数来完成题目要求的计算。程序中f起的作用是控制i*f的符号,看的出,偶数位都为负值,所以f的值为(-1)^(i+1),最后要求输出m的值,在输出中调用fun函数,并把实参10传给n。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
27、以下程序运行后的输出结果是______。
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}
答案: 1 3 7 15
评析:
本题的考查点是C程序设计。根据程序写出运行结果。
该程序考察的是数组的知识点,n是一个有5个元素,且元素值全为0的数组。程序运行过程时先进行for循环,i=1时,n[1]=n[0]*2+1,此时n[1]=1;执行i++;i=2时,再进行循环,n[2]=n[1]*2+1,此时n[2]=3,再执行i++,此时i=3,继续循环,n[3]=n[2]*2+1,此时n[3]=7,然后i=4时,n[4]=n[3]*2+1,此时n[4]=15。循环结束。注意输出函数中%d后有空格。
知识点:知识点/数组的定义和引用/一维数组和多维数组的定义、初始化和引用
28、请在以下程序第一行的下划线处填写适当内容,使程序能正常运行。
______( double,double);
main()
{ double x,y;
scanf("%1f%1f",&x,&y);
printf(%1f\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b);}
答案: double max
评析:
本题的考查点是C程序设计。调试程序,把不完善的程序进行修改和补充,使之能得到正确的结果。
主函数里可以看到调用了一个max函数,函数在被调用之前需要先定义,所以要求填空的内容应该是对函数进行定义的语句。由题目内容也可以看出此函数是double型的。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
29、有以下程序
void f(int y,int *x)
{ y=y+*x; *x=*x+y;}
main()
{ int x=2,y=4;
f(y,&x);
printf("%d %d\n",x,y);
}
执行后输出的结果______。
答案: 8 4
评析:
f函数中变量x传递的是变量的地址,可以实现值的变换,而变量y是传递的值,执行完f后,y的值是变了,但main函数中的y并未变化。也就是说由于"单向传送"的"值传递"方式,形参值的改变无法传给实参。
知识点:知识点/函数/形式参数与实在参数,参数值的传递
31、C语言程序的基本单位是______
答案:函数
32、设有说明语句:char a= '\72';则变量a包含______个字符、
答案:1
33、c语言是一种______(选择面向对象或面向过程)高级程序设计语言。
答案:面向过程
34、C语言中唯一的三目运算符是______
答案:条件运算符#? :
35、C语言中结束一次循环的语句是______
答案:continue
36、C语言中结束整个循环的语句是______
答案:break
37、二维数组a中元素a[2][2]的值是______ a[4][5]={{1,2,3},{3,2,1,6},{1}};
答案:0
38、写出下面个逻辑表达式的值,设a=3,b=4,则c=5 a || b+c && b-c=______
答案:1
39、写出下面个逻辑表达式的值,设a=3,b=4,则! (a+b)+c –1 && b+ c/2 =______
答案:1
40、在C语言中打开文件的函数名称是______
答案:fopen#fopen()
41、在C语言中关闭文件的函数名称是______
答案:fclose#fclose()
42、C语言中基本的数据类型有______
答案:int float char # 整型 实型 字符型
43、设y是int型变量,请写出判断y为奇数的关系表达______
答案:y%2!=0 # y%2==1 # y%2
44、以下程序运行后的输出结果是______
main()
{ int i=10,j=0;
do
{ j=j+i; i-;
while(i>2);
printf("%d\n",j);
}
答案:52
45、设有以下程序:
main()
{ int n1,n2;
scanf("%d",&n2);
while(n2!=0)
{ n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
程序运行后,如果从键盘上输入1298;则输出结果为______
答案:8921
46、以下程序输出的最后一个值是______
int ff(int n)
{ static int f=1;
f=f*n;
return f;
}
main()
{ int i;
for(i=1;i<=5;i++) printf("%d\n",ff(i));
}
答案:120
47、设有以下程序:
main()
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
执行该程序后,a的值为______b的值为______
答案:0 @ 7
48、 函数fun的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。
fun(int b[], int n ,int *y)
{for(k=0;______;k++) r=r+b[k];
*y=______;
}
答案:k<n @ r
51、以下程序运行后的输出结果是______
main()
{ char m;
m='B'+32; printf("%c",m);
}
答案:b
52、以下程序运行后的输出结果是______
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
答案:yes