C语言考试基本题目
发布于2019-01-21 01:01
1.调用一个函数时,实参也要声明其类型( × )
2. 执行语句 int a=10; a+=a-=a*a;后,变量a的值是-180。
3.若变量已正确定义,则x4=1+2=3;不是正确的赋值语句(对)
4.函数的递归调用就是一个函数直接或间接地调用它自身。( √ )
5.函数strlen("China\n")的值是7。( × )
6.通过return语句,函数可以带回一个或一个以上的返回值。( × )
7.结构体类型只有一种。 ( × )
8.char *p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。( × )
9.若有定义:char *p(char a[10]);则p是函数名。( √ )
10.用fopen("file","r+");打开的文件"file"可以进行修改。 ( √ )
1.设int a[2]={1,2},*p=a;,则*p是( b )A
A.元素a[0]的值 B.元素a[0]的地址
C.元素a[1]的值 D.元素a[1]的地址
2.下面程序段的结果是 1 。
int x=1;
do {
printf(“%2d”, x--);
}while(x);
3.在VC6.0中,将一个整数10002存到磁盘上,以ASCII码形式存储和以二进制形式存储,占用的字节数分别是( a ) C
A. 2和2 B. 2和5 C. 5和4 D. 5和5
4、设有定义:float a=2,b=4,h=3;以下C语言表达式中与代数式的计算结果不相符的是( B )
A)(a+b)*h/2B)(1/2)*(a+b)*h
C)(a+b)*h*1/2D)h/2*(a+b)
5、C库函数中fscanf的作用是( A )
A)从文件中读取数据
B)向文件写入数据
C)不是关于文件读写的函数
D)从键盘中读入数据
6.在while(!x)语句中的!x与下面条件表达式等价的是( D )
A) x!=0 B) x==1
C) x!=1 D) x==0
7.设int*p[4];,则标识符p是( d ) B
A.整型数组名 B.指针数组名
C.指针函数名 D.指向整型变量的指针
8、有以下程序:
#include
void main()
{
int i,s=0;
for(i=1;i<10;i+=2)
s+=i+1;
printf(“%d\n”,s);}
程序执行后的输出结果是( D )
A)自然数1~9的累加和
B)自然数1~10的累加和
C)自然数1~9中奇数之和
D)自然数1~10中偶数之和
9、有以下函数定义:
void fun(int n,double x){……}
若以下选项中的变量都已经正确定义并赋值,则对函数fun的正确调用语句是( C )
A)fun(int y,double m);
B)k=fun(10,12.5);
C)fun(x,n);
D)void fun(n,x);
10.设struct student
{char name[10];
char sex;}stu;,
则sizeof(stu)的值是( C
A. 2 B. 1O C. 11 D. 12
1.字符串"A"在内存中占用的字节数是__2___。
2.函数的自我调用被称为递归调用
在循环语句中,可以使用__continue__语句结束本次循环
3.以下程序运行后的输出结果是__11,4____。
int a=3,b=4;
void fun(int x1,int x2)
{printf("%d,%d\n",x1+x2,b);}
main()
{int a=5,b=6;fun(a,b);}
4.若用数组名作为函数调用的实参,传递给形参的是 该数组的首地址 。
5.如果在程序中用到strcpy、strcat等库函数时,需要用#include包含 头文件。
6.设有定义:struct person { int ID; char name[12];} p;将scanf(“%d %s”, &p.ID, p. name );语句补充完整,为结构体变量p的成员正确读入数据。
7. 建立了下面链表结构,指针p, q分别指向如下图所示的结点,则将p所指结点从链表中删除并释放该结点语句是:
q.next =p.next; 、 free(p); 。
8.有定义int a=1234;,执行语句a=a>>2;后,变量a的值是 308 。
9.C语言中根据数据的组织形式,把文件分为文本文件或ASCII文件和 二进制文件 两种。
10. 在C语言中,一个char变量占1字节。
1. C语言程序从main()函数开始执行,所以这个函数要写在( D )
A. 程序文件的开始 B. 程序文件的最后
C. 它所调用的函数的前面 D. 程序文件的任何位置
2.若有以下定义:int a[2][3]={2,4,6,8,10,12};则 *(*(a+1)+0)的值是___8_____
3.以下程序运行后的输出结果是___6,8___。
#define M 2<3 ? 5:6
void main( )
{ int i=3, j, k; j=i+M; k=i+(M);
printf ("%d, %d\n", j, k); }
4.如果声明了一个数组:int A[10];则A本身是一个数据,这个数据是一个指向 int 类型的地址。
5.以下程序运行后的输出结果是____6,8_____。
#define M 2<3 ? 5:6
void main( )
{ int i=3, j, k; j=i+M; k=i+(M);
printf ("%d, %d\n", j, k); }
6是由define后面6得来的
6、补充调换两个整型数据值的函数:void swap(int *p,int *q)
{int x;x=*p; *p=*q; *q=x;}
7.gets()函数的作用是: 从键盘读入一个字符串存入实参数组或字符型指针变量指向的字符串 。
8.以下程序运行后的输出结果是___4\n 8______。
func(int a)
{ static int m=O; m+=a; printf("%d\n",m); }
void main() { int k=4; func(k);func(k); }
Static 貌似可以记忆
9.#define f(x,y) x*y 则表达式f(2+3,4+5)的值是: 19 。
10.int i=3,j=3,k;则语句k=(i++)* (++j);执行后完,i,j,k的值分别是: 4,4,12 。
写出下面各程序运行后显示的结果。
1、void main( )
{
int a[6]={1,2,3,4,5,6}, *p=a, **pa;
for(p=a;p
printf("%2d",*(p+1));
printf("\n");
printf("%2d\n",**(pa=&p));
}
答案:
2 3 4 5 6
6
2、void swap(int *x,int *y){int a;a=*x;*x=*y;*y=a;}
void main()
{
int i=3,j=5;swap(&i,&j);printf(”%d,%d”,i,j);
}
5,3
1.#include
int f(int x)
{ int s;
if(x==1) s=1;
else s=x+f(x-1);
printf("%3d",s);
return s;
}
void main()
{ f(4); }
答案:
1 3 6 10
2、#include
void main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)//a>b=1
printf("%d\n",d);
else
if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
答案:
3
3. 以下程序运行后的输出结果是___7 6 5 4 5 6 7______。7 6 5 4 3 2 1
# define N 7
main()
{int i,j,temp,a[N]={1,2,3,4,5,6,7};
for(i=0;i
{j=N-1-i;
temp=a[i];a[i]=a[j];a[j]=temp; } //因为j也变化了
for(i=0;i
4、#include
void pw(int (*p)[4], int n)
{ int i;
p=p+1;
for(i=0;i
printf("%d\n",*(*p+i));
}
void main()
{
int A[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
pw(A,4);
}
答案:从第二行开始的
1
2
3
4
5
6
7
8
9
10
11
12
5
6
7
8
1.写一个函数,把两个字符串前后连接起来,并用main()函数加以调用。
#include
void tianj(char* s1,char* s2)
{
int i=0,j=0;
gets(s1);
gets(s2);
while(s1[i]!='\0')i++;
while(s2[j]!='\0')
{
s1[i]=s2[j];
i++,j++;
}
s1[i]='\0';
puts(s1);
}
int main()
{
char s1[80],s2[80];
tianj(s1,s2);
return 0;
}
2、有两个链表,结点均为struct student类型。且每个链表至少有一个结点,最后一个结点的next指针为0,现已知这两个链表的头结点地址分别为head_A,head_B,试编写一个函数,把这个链表首尾连接成一个链表,并返回这个链表的头结点地址。
struct student *connect(struct student *head1,struct student *head2)
{
struct student *p1,*p2;
for(p1=head1;p1!=NULL;p1=p1->next)
p2=p1;
p2->next=head2;
return(head1);
}
3、设计一个递归调用函数,求1到n的偶数和。
#include
int f(int m)
{
int sum=0;
if(m%2==1)m--;
if(m==0) sum=0;
else sum=m+f(m-2);
return(sum);
}
int main()
{
int n,sum=0;
printf("Please enter n=");
scanf("%d",&n);
sum=f(n);
printf("1到%d之间的偶数和=%d\n",n,sum);
return 0;
}
1、编写一个程序。实现输入一个小写英文字母,程序输出它对应的大写字母。要求可以重复输入,直到输入一个非英文字母的字符程序结束(提示:小写英文字母的ASCII码值比大些字母大32)
#include
int main()
{
char ch;
while(1)
{
while((ch=getchar())=='\n')
printf("\n");
if(ch>='a'&&ch<='z')ch-=32;
if(ch>='A'&&ch<='Z') printf("%c",ch);
else break;
}
return 0;
}
2、一个结构体类型为struct student,它的成员为char name[20],int score。编程可输入一个班的学生姓名和成绩[班级的人数不定],并按成绩高到低排序输出。
#include
struct student
{
char name[20];
int score;
};
int main()
{
struct student stu[500],temp;
int i,j,max,n; //n为班级人数
printf("请输入班级人数:n=");
scanf("%d",&n);
printf("请输入学生信息:\n");
printf("姓名 分数\n");
for(i=0;i
{
scanf("%s %d",stu[i].name,&stu[i].score);
}
for(i=0;i
{
max=i;
for(j=i+1;j
if(stu[j].score>stu[max].score) max=j;
if(max!=i)
{
temp=stu[i];
stu[i]=stu[max];
stu[max]=temp;
}
}
printf(" 姓名 分数\n");
for(i=0;i
{
printf("%5s%5d\n",stu[i].name,stu[i].score);
}
return 0;
}
3、写一个递归调用函数,返回一个整型数组的最大值。
#include
int arrmax(int *p,int n)
{
int max,k;
if(n==1) max=k=*p;
else
{
k=arrmax(p,n-1);
max=*(p+n-1)>k?*(p+n-1):k;
}
return(max);
}
int main()
{
int arr[10]={12,4,6,72,3,32,435,32,-324,34},max;
max=arrmax(arr,10);
printf("max=%d\n",max);
return 0;
}
2.(10份)编写升序排序sort函数。main函数输入10个数,并输出排序后的数。
#include
void sort(float arr[],int n) //冒泡排序
{
int i,j;
float temp;
for(i=0;i
for(j=0;j
if(*(arr+j)>*(arr+j+1))
{
temp=*(arr+j);
*(arr+j)=*(arr+j+1);
*(arr+j+1)=temp;
}
}
int main()
{
float arr[10];
int i;
printf("请输入10个实数(空格间隔):");
for(i=0;i<10;i++)
{
scanf("%f",&arr[i]);
}
sort(arr,10);
printf("升序排序后:");
for(i=0;i<10;i++)
{
printf("%.2f ",arr[i]);
}
printf("\n");
return 0;
}
3.(15分) 用指针处理:有n个整数,使后面的m个数和前面的n-m的数位置互换。编写4个函数:
main()中调用其它函数;
input():输入n个数;
change():进行处理;
output():输出10个数。
#include
void input(int *p,int n)
{
int i;
printf("请输入%d个整数:\n",n);
for(i=0;i
scanf("%d",p+i);
}
void output(int *p,int n)
{
int i;
for(i=0;i
printf("%d ",*(p+i));
printf("\n");
}
void change(int *p,int n,int m)
{
int i,j,t;
for(j=1;j<=m;j++)
{
t=*(p+n-1);
for(i=n-1;i>0;i--)
*(p+i)=*(p+i-1);
*p=t;
}
}
int main()
{
int arr[100],m,n;
printf("请输入整数n(<100):");
scanf("%d",&n);
printf("请输入整数m(m
scanf("%d",&m);
input(arr,n);
printf("原始数组:\n");
output(arr,n);
change(arr,n,m);
printf("移动后数组:\n");
output(arr,n);
return 0;
}
(本章完)