C语言期末复习题

更新时间:2024-03-02 10:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言期末复习题

一、单项选择题

1.一个C程序的执行是从

A)本程序的main函数开始,到main函数结束

B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 2.下面四个选项中,均是不合法的用户标识符的选项的是 A) A p_o do B)float lao _A C) b-a goto int D) _123 temp INT 3.判断字符型变量c1是否为数字字符的正确表达式为 A)?0?<=c1<=?9? B)(c1>=0)&&(c1<=9) C) (?0?>=c1)||(?9?<=c1) D) (c1>=?0?)&&(c1<=?9?) 4.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 5.在C语言中,要求运算数必须是整型的运算符是 A)/ B)++ C)!= D)%

6. 若有定义:

double a[] = { 2.1,3.6,9.5}; double b = 6.0;

则下列错误的赋值语句是:

A) b = a[2]; B) b = a + a[2]; C) a[1] = b; D) b = a[0] + 7;

7.若定义x为双精度型变量,则能正确输入x值的语句是 。 A)scanf(“%f”,x); B)scanf(“%f”,&x); C)scanf(“%lf”,&x); D)scanf(“%lf”, x); 8.以下不正确的说法是 。

A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式

C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准 9.下面程序段的运行结果是 。

char *s=”Nanjing” ; s+=3 ; printf(“%s”,s); A)jing B)字符j C)字符j的地址 D)不确定 10.下面程序段 int k=2;

while (k!=0) {printf(“%d”,k);k--;}

第1页/ 共14页

则下面描述中正确的是 。

A)while循环执行2次 B)循环是无限循环

C)循环题语句一次也不执行 D)循环体语句执行一次 11.若有说明:int *p,m=5,n;以下程序段正确的是 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ;

12.若要对a进行自增运算,则a应具有下面说明 。 A)int a[3][2]; B)char *a[ ]={“12”,”ab”}; C)char (*a) [3] D)int b[10], *a=b;

13.若以下定义和赋值语句:int s[2][3]={0},(*p)[3];p=s;则对数组s的第i行第j列(假设i、j已经正确说明并赋值)元素的合法引用为: A)*(*(p+i)+j) B)*(p[i])+j C)(p+i)+j D)(*p+i)[j] 14.下面程序的运行结果是 。

#iunclude void main ( ) { struct complx { int x; int y ;

} cnum[2]={1,3,2,7} ;

printf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; } A)0 B)1 C)2 D)6 15.函数rewind的作用是 。

A)使位置指针重新返回文件的开头 B)将位置指针指向文件中所要求的特定位置 C)使位置指针指向文件的末尾 D)使位置指针自动移至下一个字符位置

16.

二、基础知识填空

1.在C语言中,没有专门的输入输出的语句,其输入输出都是用函数来完成的,格式化输入操作是由库函数 [1] 完成的。

2.三种基本程序结构是循环结构、选择结构和 [2] 。

a2?b23.数学表达式的C语言表达式是 [3]

x?y4. 设有数组定义: char array []=\则数组 array所占的内存空间为 [4] 5.x,y,z是整型变量,写出x,y,z三个变量中至少有两个为正数的逻辑表达式是: [5] 。

6.用continue语句只能用在循环语句的循环体内,其作用是: [6] 。 7.若有定义语句:int a[4]={1,2,3,4},*p;p=a;则++(*p)的值是 [7] 。 8.若有#define ADD(x) x+x

第2页/ 共14页

int m=1,n=2,k=3,sum ; sum = ADD(m+n)*k ; 则sum的值为 [8] 9.若有定义:

struct num{ int a ;

int b ; float f ;

} n = {1,3,5.0} ;

struct num *pn = &n ;

则表达式(*pn).a+pn->f的值是 [9] 。

10.若执行fopen函数时发生错误,则函数的返回值是 [10] 。

三、程序阅读题

1.输入100,200回车后,下面程序执行结果是 #include

void swap(int *,int *); int main() {

int a, b, *pa=&a, *pb=&b; scanf(“%d,%d”,&a,&b); swap (pa,pb);

printf(“a=%d,b=%d\\n”,a,b); return 0; }

void swap (int *p1,int *p2) {

int *p; p=p1; p1=p2; p2=p; }

2.若运行以下程序时,输入2473↙,则程序的运行结果是 。 #include int main ( ) {

int c;

while ((c=getchar( )) !=?\\n?) switch (c-?2?)

{

case 0 :

case 1 : putchar (c+4) ;

case 2 : putchar (c+4) ; break ; case 3 : putchar (c+3) ;

default : putchar (c+2) ; break ; }

printf(“\\n”); return 0; }

第3页/ 共14页

3.输入6,下面程序的执行结果是: #include

unsigned long int fact (unsigned int ); int main()

{ unsigned int n,fac; scanf(\ fac=fact (n);

printf(\ return 0; }

unsigned long int fact (unsigned int n) {

unsigned int result; if(n==0||n==1) result=1; else

result=n*fact(n-1); return result; }

4.下面程序的输出结果是 。 #include int fun(int); int main()

{ int i,a=5,sum; for(i=0;i<3;i++) sum=fun(a);

printf(\ return 0; }

int fun(int a) {

int b=0;

static int c=3; b++; c++;

return(a+b+c); }

5.下面程序运行的结果是 #include

void copy_string(char *,char *); int main() {

char a[]=\ char b[]=\ copy_string(a,b);

第4页/ 共14页

printf(\return 0 ; }

void copy_string(char *from,char *to) {

for(;*from!='\\0';from++,to++) *to=*from; *to='\\0'; }

6.下面程序执行的结果是 #include

void inv(int [], int ); int main()

{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);

for(i=0;i<10;i++)

printf(\

printf(\return 0; }

void inv(int x[], int n) { int t,i,j,m=(n-1)/2; i=0; j=n-1;

for(;i<=m;i++,j--)

{ t=x[i]; x[i]=x[j]; x[j]=t; } }

7.写出下面程序的运行结果 。 #include struct man {

char name[20] ; int age ;

} person[ ] = { “liming”, 22, “wanghua”, 21,”zhangping”,20 } ; int main ( )

{ int old = 0 ;

struct man *p=person, *q ; for ( ; p<=&person[2]; p++)

if (oldage) { q=p ; old=p->age; } printf(“%s %d\\n”,q->name,q->age) ; return 0; }

8.输入9,5回车后,下面程序执行结果是 #include

void swap(int *,int *); int main() {

第5页/ 共14页

int a, b, *pa=&a, *pb=&b; scanf(“%d,%d”,&a,&b); swap (pa,pb);

printf(“a=%d,b=%d\\n”,a,b); return 0;

}

void swap (int *p1,int *p2) {

int p; p=*p1; *p1=*p2; *p2=p;

printf(“*p1=%d,*p2=%d\\n”,*p1,*p2); }

9.以下程序输出结果是 。 #include int main ( ) {

int x=1,y=0,a=0,b=0; switch(x) {

case 1:switch (y)

{

case 0 : a++ ; break ; case 1 : b++ ; break ; }

case 2:a++; b++; break; case 3:a++; b++;

}

printf(“a=%d,b=%d”,a,b); return 0; }

10.输入6,下面程序的执行结果是: #include

unsigned int fact (unsigned int ); int main()

{ unsigned int n,fac; scanf(\ fac=fact (n);

printf(\ return 0; }

unsigned int fact (unsigned int n) {

unsigned int result; if(n==1||n==2) result=1; else

第6页/ 共14页

result=fact(n-1)+fact (n-2); return result; }

11.下面程序的输出结果是 。 #include int fun(int,int); int main( )

{ int x=7,y=3,s,j; for(j=0;j<3;j++) {

s=fun(x,y);

printf(\ }

return 0; }

int fun(int a,int b) {

static int n=1,i=2; i=n+1; n=i+a-b; return(n); }

12. 当运行以下程序时,从键盘输入:AhaMA□Aha(表示回车,□表示空格),则下面程序的运行结果是________。 #include int main(){

char s[80],c='a'; int i=0;

scanf(\

while(s[i]!='\\0') {

if(s[i]==c) s[i]=s[i]-32; else if(s[i]==c-32) s[i]=s[i]+32; i++; }

puts(s); return 0; }

13.下面程序执行的结果是 #include

void inv(int *, int ); int main()

{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);

第7页/ 共14页

for(i=0;i<10;i++)

printf(\

printf(\return 0; }

void inv(int *x, int n)

{ int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--)

{ t=*i; *i=*j; *j=t; } }

14.下面函数的功能是 int strcmp(char *s,char *t) {

while (*s && *t && (*s == *t)) {

s++; t++; }

return *s - *t; }

四、程序填空题

1.以下程序输出a,b,c三个整数,并按从小到大排序,请完善程序。 #include int main()

{ int a,b,c,t;

scanf(\ if( [1] ) {

t=a; a=b; b=t; }

if(a>c) {

[2] ; a=c; c=t; }

if(b>c) {

t=b;

[3] ; c=t; }

printf(\return 0;

第8页/ 共14页

}

2.下面程序是实现两个M?N矩阵相加,请完善程序。

#include #define M 3 #define N 4

void add(int x[][N],int y[][N],int z[][N]); int main()

{ int i,j,a[M][N],b[M][N],c[M][N]; for(i=0;i

scanf(\ add( [4] ); for(i=0;i

for(j=0;j

printf(\ printf(\ }

return 0; }

void tran(int x[][N],int y[][N],int z[][N]) {

int i,j;

for(i=0;i

z[i][j]= [5] ; }

3.下面函数的功能是将两个字符串s1和s2连接起来,请填空使程序完整。

void conj(char *s1,char *s2) { char *p=s1 ;

while (*s1) [6] ;

while (*s2) { *s1= [7] ; s1++,s2++; } *s1=?\\0? ; }

4.函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据赋0到m-1的值。

#include

#include #include typedef struct aa { int data;

struct aa *next; } NODE;

NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i;

第9页/ 共14页

/**********found***********/

p=(NODE* )malloc(sizeof(NODE)); h=p;

p->next=NULL;

for(i=1; i<=n; i++)

{ s=(NODE *)malloc(sizeof(NODE));

s->data=rand()%m; /*rand()为随机函数*/

s->next=p->next; [8] ; p=p->next; }

/**********found***********/ return h; }

outlink(NODE *h) { NODE *p; p=h->next; while( [9] )

{ printf(\ p=p->next; }

printf(\}

int main()

{ NODE *head;

head=Creatlink(8,22); outlink(head); return 0; }

5.以下程序输出x,y,z三个数中的最小值,请完善程序。 #include

int main ( )

{ int x,y,z,min ;

scanf(“%d %d %d”,&x,&y,&z); if(x>y)

[10] ; else

min=x;

if( [11] ) min=z;

printf (“%d”,min); return 0; } 6.下面程序是实现M?N矩阵的转置,请完善程序。

#include

第10页/ 共14页

#define M 3 #define N 4

void tran(int x[][N],int y[][M]); int main() {

int i,j,a[M][N], [12] ; for(i=0;i

scanf(\ tran(a,b);

for(i=0;i

for(j=0;j

printf(\ printf(\ }

return 0; }

void tran(int x[][N],int y[][M]) {

int i,j;

for(i=0;i

[13] ; }

7.下面程序是实现二分法查找输入的数x是否在数组中,请完善程序。 #include int main() {

int a[8]={6,12,18,42,44,52,67,94}; int low=0,mid,high=7,found,x; found=0; scanf(\

while(( [14] )&&(found==0)) {

mid=(low+high)/2;

if(x>a[mid]) [15] ; else if(x

if( [16] )

printf(\查找成功!所在的位置在:%d\\n\ else

printf(\没有找到!\\n\

}

第11页/ 共14页

8.下面函数是在具有如下数据结构的链表中删除一个结点,请完善程序。

struct Node {

int data;

struct Node *next; };

struct Node * delete_node(struct Node * head,int num) {

struct Node *p = head; struct Node *prep = p; if( head == NULL ) return head;

while( p != NULL ){

if ( p->data != num ){ prep = p; p = p->next; }

else break; }

if ( head == p )/* 删除点恰在head指针处,须修改head指针*/ [17] ;

else if ( p->next != NULL) [18] ;

else /*删除点恰在最后一结点,直接将前一个结点的next域置空 */ prep->next = NULL; if ( p == NULL )

printf(“Not exist!\\n”); else

free(p);

return head; }

五、改正下面程序错误(注:错误在注释语句/****found****/下面1~3行以内):

1.下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。

t?1?1111?????(?1)m?1 234m例如,若输入5,则应输出0.783333。 请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include

/**********************found***********************/ int fun(int m)

{ double t=1.0,j=1.0;

第12页/ 共14页

int i;

/**********************found***********************/ for(i=1;i

j=-1*j; t+=j/i; }

return t;

}

int main() {

int m;

scanf(\

printf(\return 0; }

2.给定如下程序,其中函数fun的功能是求k!(k<13),所求的阶乘的值作为函数值返回值,请改正程序中的错误,使程序能得出正确的结果。 /************found************/ #include ; long fun (int k) {

/************found************/

if k > 0

return (k*fun(k-1));

/************found************/ else if (k=0) return 1; }

int main() {

int k ;

scanf(“%d”,&k);

printf(\ return 0; }

六、编程题

1x313x5135x7?????????的近似值(直到最1.输入x和eps>0,计算x??242462468后一项的绝对值小于eps)。

2.设一个班级有N个人,学生信息包括姓名、学号和三科成绩,编程求每个人的三门课程的总成绩,输入m、n,把三科总成绩在[m,n]之间的学生信息保存在另外一个结构体数组

第13页/ 共14页

中,并输出这些学生的信息。

3.输入一个无符号长整型数,将该数各数位上的奇数数字组成一个新的数,且高位上的数仍然在高位。如:输入12345678,得到的结果是1357

4.设一个班级有N个人,学生信息包括姓名、学号和三科成绩,编程求每个人的三门课程的总成绩,并按总成绩由高分到低分排序,并输出相应的学生成绩。 5.有一个数组,内放10个整数,要求编写一个程序,完成以下功能: (1) 函数实现数组中各数值的键盘输入; (2) 找出数组中最小的数和它的下标;

(3) 将(2)中找到的数和数组中最前面的元素对换; (4) 函数实现数组中各数值的输出。

6.有一个数组,内放10个整数,要求找出最小的数和它的下标。然后把它和数组中的最前面的元素对换。

7. 求Fibonacci数列中前20个数。Fibonacci数列的前两个数为1,1,以后每一个数都是前两个数之和。该数列的前n个数为1,1,2,3,5,8,13,……用数组存放数列的前20个数,并输出之(按一行5个数输出)。

第14页/ 共14页

本文来源:https://www.bwwdw.com/article/kyfa.html

Top