C语言期末复习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》期末复习题
一、选择题
1. 由C语言源程序文件编译而成的目标文件的缺省扩展名为( )。
A. cpp
B. exe
C. obj
D. C
2. C语言程序的基本模块为()。
A. 表达式
B. 标识符
C. 语句
D. 函数
3. 设x和y均为逻辑值,则x||y为假的条件是()。
A.它们均为真
B. 其中一个为真
C. 它们均为假
D. 其中一个为假
4. x>0 || y==5的相反表达式为()。
A. x<=0 || y!=5
B. x<=0 && y!=5
C. x>0 || y!=5
D. x>0 && y==5
5. 在下面的字符数据定义中,()语句有语法错误。
A. char a[20]=”abcdefg”;
B. char a[]=”x+y=55”;
C. char a[15]={‘1’,’2’};
D. char a[10]=’5’;
6. 若用数组名作为函数调用的实参,传递给形参的是()。
A. 数组的首地址
B. 数组中第一个元素的值
C. 数组中全部元素的值
D. 数组元素的个数
7. 假定a为一个整型数组名,则元素a[4]的地址比该数组的首地址大( )个字节。
A. 4
B. 8
C. 16
D. 32
8. 下列给字符数组赋初值时,正确的是()。
A. char s1[]="abcdef";
B. char s2[4]="abcd";
C. char s3[2][3]={"abc","xyz"};
D. char s4[4][]={'a','x','s','t'};
A. char *p=s;
B. char *p=&s;
C. char *p;p=*s;
D. char *p; p=&s;
9. 变量s已定义为“char *s=”Hello world!”;”要使变量p指向s所指向的同一个字符串,则定义为()。
A. char *p=s;
B. char *p=&s;
C. char *p;p=*s;
D. char *p;p=&s;
10. 要使p指向二维整型数组a[10][20],p应定义为()。
A. int *p=a;
B. int **p=a;
C. int *p[20]=a;
D. int(*p)[20]=a;
11.若有以下说明和语句,则输出结果是()。
char s[12]="a book!";
printf("%d",strlen(s));
A. 12;
B. 8;
C. 7;
D. 11;
12.下列程序语句的输出结果是()。
char sp[]="\t\v\\\0will\n";
printf("%d",strlen(sp));
A. 14;
B. 3;
C. 9;
D. 字符中有非法字符;
13.对于下列程序段,当输入“welcome”时,程序的输出结果是()。
char m[20];
char n[30]="you are";
gets(m);
strcat(n,m);
puts(n);
A.welcome you are
B.welcome are you
C.you are welcome
D.you arewelcome
14. 当输入“jianqiao2012”时,下列程序段的输出结果是()。
char st[20];
char stt[]="nihao";
gets(st);
strlwr(st);
strcat(st,stt);
puts(st);
A.jianqiaohao
B.jianqiao2012hao
C.jianqiao2012nihao
D.jianqiaonihao
15.C语言可以执行程序从()开始执行。
A.程序中的第一条可执行语句
B.程序中的第一个函数
C.程序中的main函数
D.包含文件中的第一个函数
16.若定义如下函数:
sub(int x)
{ float y;
y=3*x-4 ;
return y ;
}
则该函数的数据类型是()。
A.int B.不确定 C.void D.float
17.在下面关于C函数定义的叙述中,正确的是()。
A.函数可以嵌套定义,但不可以嵌套调用
B.函数不可以嵌套定义,但可以嵌套调用
C.函数不可以嵌套定义,也不可以嵌套调用
D.函数可以嵌套定义,也可以嵌套调用。
18.以下程序的输出结果是()。
#include <stdio.h>
main( )
{
int a[]={1,2,3,4,5,6},*p;
p=a;
*(p+3)+=2;
printf("%d,%d",*p,*(p+3));
}
A.1,6 B.2,4 C.1,4 D.2,6
19.以下程序段:
int *p,a,b=1 ;
p=&a ;*p=10 ;a=*p+b ;
A.12
B.11
C.10
D.编译出错
20.若有定义:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是()。
A.i=*p; B.*p=*&j; C.i=&j; D.i=**p;
二、填空题
1.表达式x=x+y表示成复合赋值表达式为_____。
2.关系表达式(x==0)的等价表达式为________。
3. 假定不允许使用逻辑非操作符,则逻辑表达式x>3 && x<10的相反表达式为_______.
4.若x=5,y=10,则x!=y的逻辑值为____。
5. 假定x=5,则执行“int a=(! x? 10: 20) ;”语句后a的值为。
6. 若while循环的“头”为“while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行__________次后正常结束。
7. 假定二维数组的定义为“char a[3][5];”,则该数组所含元素的个数为_____。
8. 假定二维数组的定义为“char a[M][N];”,则该数组所占存储空间的字节数为_。
9. 执行“typedef int ABC[10];”语句把ABC定义为具有10个整型元素的________类型。
10.strlen函数用于计算一个字符串的______。
11. strcat函数用于把一个字符串____到另一个字符串之后的存储空间中。
12.函数中的形参变量的初值由调用该函数时对应的_____值决定。
13.程序的编译是以__________为单位进行的。
14. 假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p 所指对象的值为____。
15.假定a是一个一维数组,则a[i]的指针访问方式为________。
16.假定p是一个指向整数对象的指针,则用________表示该整数对象。
17.在C语言中,凡不参加类型说明的函数,自动按处理。
18.函数的实参传递到形参有两种方式:和。
三、写出下列每个程序运行后的输出结果
1. #include <stdio.h>
void main()
{
int i,a[10];
for(i=0;i<=8;i++)
a[i]=i;
for(i=8;i>=0;i--)
printf("%d ",a[i]);
printf("\n");
}
2.#include <stdio.h>
main()
{ char c[10]={'I',' ','a','m',' ','a',' ','b','o','y'};
int i;
for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");
}
3.#include <stdio.h>
void main()
{ char diamond[][5]={{' ', ' ','*'},{‘ ','*',' ','*'},
{'*', ' ', ‘ ', ' ' ,'*'},{' ','*', ' ','*'},{' ', ' ','*'}};
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
}
4.main()
{ int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("Max is %d",c);
}
max(int x, int y)
{ int z;
z=x>y?x:y;
return(z);
}
5. #include<stdio.h>
void main() {
int a[8]={36,25,48,24,55,40,18,20};
int i, b1, b2;
a[0]<=a[1]? (b1=a[0], b2=a[1]):(b1=a[1],b2=a[0]);
for(i=2; i<8; i++)
if(a[i]<b1) {b2=b1; b1=a[i];}
else if(a[i]<b2) b2=a[i];
printf("%d %d\n",b1,b2);
}
6.#include<stdio.h>
void main()
{
int a[10]={76,63,54,62,40,75,80,,84,44,73};
int b[4]={60,70,90,101};
int c[4]={0};
int i,j;
for(i=0;i<12;i++)
{
j=0;
while(a[i]>=b[j]) j++;
c[j]++;
}
for(i=0;i<4;i++) printf("%d ",c[i]);
printf("\n");
}
7.#include <stdio.h>
main()
{ int x=7,y=9;
printf("x=%d,\ty=%d\n",x,y);
printf("swapped:\n");
swap(x,y);
printf("x=%d,\ty=%d\n",x,y);
}
swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
}
8.main()
{ int a,b;
scanf("%d,%d",&a,&b); 设a=30,b=54
printf(“a=%d,b=%d\n”,a,b);
printf(“swapped:\n”);
swap(&a,&b);
printf(”a=%d,b=%d\n",a,b);
}
swap(p1,p2)
int *p1,*p2;
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
9.#include<stdio.h>
void main()
{
int a[8]={4,8,12,16,20,24,28,32};
int *p=a;
do
{
printf("%d ",*p);
p+=2;
}while(p<a+8);
printf("\n");
}
10. #include<stdio.h>
void LE(int* a, int* b)
{
int x=*a;
*a=*b; *b=x;
}
void main() {
int x=15, y=26;
printf("%d %d\n",x,y);
LE(&x,&y);
printf("%d %d\n",x,y);
}
11.main()
{ int i=2,p;
p=f(i,++i);
printf("%d",p);
}
int f(int a, int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}
12.#include <stdio.h>
void main()
{
int a,b;
int *pointer_1,*pointer_2;
a=100;b=10;
pointer_1=&a;
pointer_2=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pointer_1,*pointer_2);
}
13.main ( )
int *p1,*p2,*p,i1=10,i2=20;
p1=&i1;p2=&i2;
printf(“%d,%d\n”,*p1,*p2);
p=p1;p1=p2;p2=p;
printf(“%d,%d\n”,*p1,*p2);
}
14.void main()
{ int a []={5,8,7,6,2,7,3};
int y,*p=&a[1];
y=(*--p)++;
printf(“%d ”,y);
printf(“%d\n”,a[0]);
}
15。
字符串排序,小到大
#include<stdio.h>
void main()
{
void swap(char *,char*);
char str1[20],str2[20],str3[20];
printf("input three line:\n");
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str2,str3)>0) swap(str2,str3);
printf("Now,the order is:\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
}
void swap(char*p1,char*p2)
{
char p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}
编一程序,输入月份号,输出该月的英文月名。
例如:输入“3”,则输出“March”,要求用指针数组处理.
#include<stdio.h>
void main()
{ char *month_name[13]={"month","January","February", "March","April","May","June","July","August","September",
"October","November","December"};
int n;
printf("input month:\n");
scanf("%d",&n);
if ((n<=12) && (n>=1))
printf("It is %s.\n",*(month_name+n));
else
printf("It is wrong.\n");
}
输入3个整数,从小到大输出
#include<stdio.h>
void main()
{
void swap(int*p1,int*p2);
int n1,n2,n3;
int *p1,*p2,*p3;
printf("input three integer n1,n1,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2) swap(p1,p2);
if(n1>n3) swap(p1,p3);
if(n2>n3) swap(p2,p3);
printf("Now,the order is:%d, %d, %d\n",n1,n2,n3);
}
void swap(int*p1,int*p2)
{
Int p;
p=*p1; *p1=*p2; *p2=p;
}。