C语言程序设计期末考试复习题.docx
《C语言程序设计期末考试复习题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计期末考试复习题.docx(18页珍藏版)》请在冰豆网上搜索。
C语言程序设计期末考试复习题
C语言程序设计期末考试复习题
一、选择题
1.在每个C程序中都必须包含有这样一个函数,该函数的函数名为 A 。
A.main B.MAIN C.name D.function
2.在以下关于C语言的注释的叙述中,不正确的是C。
A.注释可用"/*"、"*/"形式表示,也可用"//"形式表示
B.编译器在编译一个程序时,将跳过注释,不对其进行处理
C.编译器在编译一个程序时,可发现注释中的单词拼写错误
D.程序中注释的多少不会影响所生成的可执行文件的长度
3.以下叙述不正确的是C。
A.在C程序中,严格区分大小写字母
B.一个C源程序有且仅有一个main函数
C.在C程序中,注释只能位于一条语句的后面
D.一个C程序总是从main函数开始执行
4.下列合法的标识符为D
A.abde+B.#KDJFC.67KDJD.DK3_
5.关于字符串和字符的关系正确的是C
A.“A”与’A’是相同的
B.字符串是常量,字符是变量
C.“A”与’A’是不同的
D.“A”与“A”是相同的
6.下面关于语句的说法正确的是B
A.下面这两段程序的执行效果是一致的
B.空语句是只有一个分号的语句,它其实什么也不干
C.语句的构成不一定需要分号
D.语句的书写对程序的运行不起作用,因此可以随便写都可以
7.以下各标识符中,合法的用户标识符组为D。
A.PAd,P#d,b-b,abc,_0123,ssiped
B.cin,a10,CPP,float,del_word,signed
C.void,max,hiy,,list,*jer
D.a,temp,_isw,INT,keep,wind
8.字符串“\”EOF=-\61\””的长度是B。
A.8 B.9 C.12D.非法字符串
9.数学式
在C程序中对应的不正确的表达式为B。
A.sqrt(sin(x)>0?
sin(x):
-sin(x))B.sqrt(fabs(sinx))
C.sqrt(sqrt(sinx*sinx))D.fabs(sqrt(sin(x)))
10.下列A是C语言的有效标识符?
A._No1B.No.1C.12345D.int
11.以下叙述中正确的是(B)。
A.a是实型变量,C允许进行以下赋值a=10,因此可以这样说:
实型变量中允许存放整型值。
B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。
C.执行语句a=b;后,在内存中a和b变量中原有的值都将被改变。
D.已有a=3,b=5。
当执行了表达式a=b,b=a之后,可使a中的值为5,b
中的值为3。
12.构成C语言源程序的基本单位是(D)。
A.子程序B.过程C.文本D.函数
13.以下叙述正确的是(D)。
A.do_while语句构成的循环不能用其它语句构成的循环来代替。
B.do_while语句构成的循环只能用break语句退出。
C.用do_while语句构成循环时,当while后的表达式为非零时结束循环。
D.用do_while语句构成循环时,当在while后的表达式为零时结束循环。
14.以下能正确进行字符串赋值的是(A)。
A.chars[5]={‘a’,’e’,’i’,’o’,’u’};
B.char*s;s=“good!
”;
C.chars[5]=“good!
”;D.chars[5];s=“good”;
15.以下函数调用语句中,含有的实参个数是(D)。
A.1B.2C.4D.5
func((exp1,exp2),(exp3,exp4,exp5));
16.若已定义:
inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是(D)。
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
17.对于for(表达式1;表达式2;表达式3)语句,下列说法不正确的是(D)。
A.表达式1只能执行一次
B.表达式1、表达式2、表达式3都可以缺省
C.缺省表达式2时循环执行无限次
D.只有循环次数确定的情况下才能用for循环
18.对于函数的形参数和实参数,下列说法正确的是(C)。
A.函数调用时,实参数和形参数之间相互进行值传递
B.实参数个数和形参数的个数可以不相等
C.形参只能是变量D.实参只能是变量
19.下列说法正确的是(C)。
A.指针变量专门用来存放另外一个变量的地址
B.定义指针时,其类型为整型
C.可以把一个整数直接赋给指针变量
D.指针与指针变量是同一概念
20.对于输入语句scanf(“%d%c”,&a,&x);为了使a=10,x=’A’,正确的输入格式是(C)。
A.10AB.10,AC.10AD.10;A
21.以下叙述中正确的是(B)。
A.a是实型变量,C允许进行以下赋值a=10,因此可以这样说:
实型变量中允许存放整型值。
B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。
C.执行语句a=b;后,在内存中a和b变量中原有的值都将被改变。
D.已有a=3,b=5。
当执行了表达式a=b,b=a之后,可使a中的值为5,b
中的值为3。
22.构成C语言源程序的基本单位是(D)。
A.子程序B.过程C.文本D.函数
23.以下叙述正确的是(D)。
A.do_while语句构成的循环不能用其它语句构成的循环来代替。
B.do_while语句构成的循环只能用break语句退出。
C.用do_while语句构成循环时,当while后的表达式为非零时结束循环。
D.用do_while语句构成循环时,当在while后的表达式为零时结束循环。
24.以下能正确进行字符串赋值的是(B)。
A.chars[5]={‘a’,’e’,’i’,’o’,’u’};
B.char*s;s=“good!
”;
C.chars[5]=“good!
”;D.chars[5];s=“good”;
25.以下函数调用语句中,含有的实参个数是(B)。
A.1B.2C.4D.5
func((exp1,exp2),(exp3,exp4,exp5));
26.若已定义:
inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是(D)。
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
27.对于for(表达式1;表达式2;表达式3)语句,下列说法不正确的是(D)。
A.表达式1只能执行一次
B.表达式1、表达式2、表达式3都可以缺省
C.缺省表达式2时循环执行无限次
D.只有循环次数确定的情况下才能用for循环
28.对于函数的形参数和实参数,下列说法正确的是(C)。
A.函数调用时,实参数和形参数之间相互进行值传递
B.实参数个数和形参数的个数可以不相等
C.形参只能是变量D.实参只能是变量
29.下列说法正确的是(C)。
A.指针变量专门用来存放另外一个变量的地址
B.定义指针时,其类型为整型
C.可以把一个整数直接赋给指针变量D.指针与指针变量是同一概念
30.对于输入语句scanf(“%d%c”,&a,&x);为了使a=10,x=’A’,正确的输入格式是(C)。
A.10AB.10,AC.10AD.10;A
二、填空题
1.C语言程序由函数组成,其中每一个程序必须含有一个main函数。
2.一个算法应包含有限的操作步骤,这是指算法的有穷性。
3.以下程序段执行后z的值是。
intx,y,z;x=1;y=2;z=1/y*x;
4.请填入一个整数使以下程序段输出10个整数。
for(i=0;i<=9;printf(“%d\n”,i+=2));
5.静态型变量在函数调用结束后不消失而继续保留原值,而且只能被初始化一次。
6.以下程序段给数组所有元素输入数据,请补充完整。
main()
{inta[10],i=0;
while(i<10)scanf(“%d”,&a[i]);}
7.函数直接或间接调用其本身称为函数的递归调用。
8.C语言的变量分全局变量和局部变量,在函数外定义的变量是全局变量。
9.为表示关系x≥y≥z,应使用的C语言表达式是(x>=y)&&(y>=z)。
10.C语言的函数一般由两部分组成,分别是声明部分和执行部分。
11.以下程序段给数组所有元素输入数据,请补充完整。
main()
{inta[10],i=0;
while(i<10)scanf(“%d”,);}
12.函数直接或间接调用其本身称为函数的递归调用。
13.C语言的变量分全局变量和局部变量,在函数外定义的变量是全局变量。
14.为表示关系x≥y≥z,应使用的C语言表达式是(x>=y)&&(y>=z)。
15.C语言的函数一般由两部分组成,分别是声明部分和执行部分。
三、程序改错题
1.以下程序代码是求n!
。
#include
main()
{inti,s,n;
scanf(“%d”,n);->scanf(“%d”,&n);
for(s=0,i=1;i<=n;i++)->for(s=1,i=1;i<=n;i++)
s*=i;
printf(“%d\n”,s);}
2.以下程序是求整型数组中的最大值。
#include
main()
{inta[10]={4,6,78,45,2,1,0,8,12,24},max,i;
for(max=a[0],i=1;i<=10;i++)->for(max=a[0],i=1;i<=9;i++)
if(a[i]if(a[i]>max)
max=a[i];
printf(“max=%d\n”,max);}
3.以下程序实现的功能是:
交换主函数中的变量a和b的值。
#include
voidfun(int*p1,int*p2)
{int*p3;->p3
p3=p1;p1=p2;p2=p3;}->p3=*p1;*p1=*p2;*p2=p3;}
main()
{inta=10,b=5;
fun(&a,&b);
printf(“a=%d,b=%d\n”,a,b);}}->}
4.以下程序是判断x是否是素数,若是就输出“YES”,否则输出“NO”。
#include
main()
{intx,flag,i;
scanf(“%d”,x);->scanf("%d",&x);
for(flag=1,i=1;i<=x-1;i++)->for(flag=1,i=2;i<=x-1;i++)
if(x/i==0){flag=0;break;}->if(x%i==0){flag=0;break;}
if(flag==1)printf(“YES”);
elseprintf(“NO”);}
5.下列程序是采用折半查找算法在a数组中查找x,若找到x则显示“成功”,否则显示“失败”。
#include
main()
{inta[15]={100,89,80,76,64,56,45,41,32,30,24,22,15,10,6};
inti,j,mid,x;
scanf(“%d”,&x);
i=0;j=14;
while(i<=14)
{mid=(i+j)/2;
if(a[mid]==x)break;
elseif(a[mid]>x)
j=mid-1;->i=mid+1;
elsei=mid+1;}->elsej=mid-1;}
if(i>j)printf(“查找失败\n”);elseprintf(“查找成功\n”);}
6.以下程序的功能是将一个矩阵转置。
#include
main()
{inta[4][4]={4,3,2,1,8,7,6,5,12,11,10,9,13,14,15,16},i,j,k;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)->for(j=i;j<=3;j++)
{k=a[i][j];a[i][j]=a[j][i];a[j][i]=k;}加}
7.以下程序是判断x是否是素数,若是就输出“YES”,否则输出“NO”。
#include
main()
{intx,flag,i;
scanf(“%d”,x);
for(flag=1,i=1;i<=x-1;i++)
if(x/i==0){flag=0;break;}
if(flag==1)printf(“YES”);
elseprintf(“NO”);}
8.下列程序是采用折半查找算法在a数组中查找x,若找到x则显示“成功”,否则显示“失败”。
#include
main()
{inta[15]={100,89,80,76,64,56,45,41,32,30,24,22,15,10,6};
inti,j,mid,x;
scanf(“%d”,&x);
i=0;j=14;
while(i<=14)
{mid=(i+j)/2;
if(a[mid]==x)break;
elseif(a[mid]>x)
j=mid-1;
elsei=mid+1;}
if(i>j)printf(“查找失败\n”);elseprintf(“查找成功\n”);}
9.以下程序的功能是将一个矩阵转置。
#include
main()
{inta[4][4]={4,3,2,1,8,7,6,5,12,11,10,9,13,14,15,16},i,j,k;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
{k=a[i][j];a[i][j]=a[j][i];a[j][i]=k;}
四、程序分析题
1.以下程序段的输出结果是97531。
inta[10]={9,8,7,6,5,4,3,2,1,0},*p;
for(p=a;p<=a+9;p+=2)
printf(“%d”,*p);
2.以下程序的输出结果是61515。
intt=1;
intfun(intp)
{staticintt=5;
t+=p;
printf("%d",t);
return(t);}
main()
{inta=3;
printf("%d\n",fun(a+fun(t)));}
3.以下程序的输出结果是-5,-12,-7。
voidsub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf(“%d,%d,%d\n”,a,b,c);}
4.以下程序段的输出结果是15。
main()
{inta[]={1,2,3,4,5,6,7,8,9,10},b=9,i;
for(i=0;i<3;i++)
b+=a[i];
printf("%d\n",b);}
5.以下程序段的输出结果是16。
intfun(intn)
{if(n==1)return1;
elsereturnn+fun(n-2);}
main()
{printf("%d\n",fun(7));}
6.以下程序段的输出结果是1。
intx=0;
if(x++<0)
printf(“%d”,--x);
printf(“%d”,x++);
7.以下程序段的输出结果是10。
intk,j,s;
for(k=2;k<6;k++,k++)
for(s=1,j=k;j<6;j++)
s+=j;
printf(“%d\n”,s);
8.以下程序的输出结果是25/10=2。
intf(intm,intn)
{returnn/m;}
main()
{inta=10,b=25,c;
c=f(a,b);
printf("%d/%d=%d",b,a,c);}
9.以下程序的运行结果是**。
main()
{intx=1,y=1;
switch(x)
{case1:
switch(y)
{case0:
printf(“*”);break;
case1:
printf(“*”);break;
default:
printf(“*”);break;}
case2:
printf(“*”);}}
10.以下程序的输出结果是a=22。
intfun()
{staticinti=2;
ints=1;
s+=i;i++;
returns;}
main()
{inti,a=10;
for(i=2;i<5;i++)
a+=fun();
printf("a=%d\n",a);}
11.以下程序段的输出结果是97531。
inta[10]={9,8,7,6,5,4,3,2,1,0},*p;
for(p=a;p<=a+9;p+=2)
printf(“%d”,*p);
12.以下程序的输出结果是61515。
intt=1;
intfun(intp)
{staticintt=5;
t+=p;
printf("%d",t);
return(t);}
main()
{inta=3;
printf("%d\n",fun(a+fun(t)));}
13.以下程序的输出结果是-5,-12,-7。
voidsub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf(“%d,%d,%d\n”,a,b,c);}
14.以下程序段的输出结果是15。
main()
{inta[]={1,2,3,4,5,6,7,8,9,10},b=9,i;
for(i=0;i<3;i++)
b+=a[i];
printf("%d\n",b);}
15.以下程序段的输出结果是16。
intfun(intn)
{if(n==1)return1;
elsereturnn+fun(n-2);}
main()
{printf("%d\n",fun(7));}
五、编程题
1.编程求:
S=1/1-1/3+1/5-1/7+…+1/99的值。
#include
main()
{inti=1;
floata=0,f=1.0;
while(i<100)
{
a=a+f/i;
i+=2;
f=-f;
}
printf("%f\n",a);
}
2.若给定数组a[12]={15,6,22,34,1,64,52,7,12,32,24,45},请编程对它们进行降序排序并输出。
#include
voidmain(void)
{
inta[12]={15,6,22,34,1,64,52,7,12,32,24,45},i,j,l,temp;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;}
for(l=0;l<12;l++)
printf("%d\n",a[l]);
}
3.编写程序,求e的值。
e≈1+1/1!
+1/2!
+1/3!
+1/4!
+…+1/n!
。
#include
voidmain()
{
intn=1;
floati=1,e=1;
while(1/i>10e-4)
{
i=i*n;
e=e+1/i;
n++;
}
printf("%f",e);
}
4.输入一个字符串s1,把s1中所有的非数字字符复制到s2中并输出。
例如:
s1[]=“abcd1234%6#$ABC246”,则s2[]=“abcd%#$ABC”。
#include
main()
{
inti=0,j=0;
charch,s1[1024],s2[1024];
gets(s1);
while((ch=s1[i++])!
='\0')
{
if(ch<'0'||ch>'9')
s2[j++]=ch;
}
s2[j]='\0';
puts(s2);
}
5.编写程序,求e的值。
e≈1+1/1!
+1/2!
+1/3!
+1/4!
+…+1/n!
。
#include
voidmain()
{
intn=1;
floati=1,e=1;
while(1/i>10e-4)
{
i=i*n;
e=e+1/i;
n++;
}
printf("%f",e);
}
6.输入一个字符串s1,把s1中所有的非数字字符复制到s2中并输出。
例如:
s1[]=“abcd1234%6#$ABC246”,则s2[]=“abcd%#$ABC”。
#include
main()
{
inti=0,j=0;
charch,s1[1024],s2[1024];
gets(s1);
while((ch=s1[i++])!
='\0')
{
if(ch<'0'||ch>'9')
s2[j++]=ch;
}
s2[j]='\0';
puts(s2);
}