C语言期末复习.docx
第一章C语言概述一、选择题I、C语言程序由什么组成()A、子程序 B、主程序和子程序 C、函数 D、过程2、源程序要正确地运行,必须要有什么函数()A、Printf函数 B、自定义的函数 C、main函数 D、不需要函数 3、指出下面哪些是合法的A、3ab B、int C、ABC D、a_3E、sum.aF、#abc G、_stu2 H、abc f二、问答题1、C语言程序由哪几部分组成? C语言程序结构有什么特点?参考答案一、选择题1、C 2、C 3、CDG二、问答题见教案第二章基本数据类型、运算符及表达式一、选择题1、C语言中的数据的基本类型包括()A、整型、实型、字符型和逻辑型B、整型、实型、字符型和结构体C、整型、实型、字符型和枚举型D、整型、实型、字符型和指针型2、在C语言中,不合法的int型常量是()A、32767 B、0678C、OXABC D、32768L3、在C语言中,运算对象必须是整型数的运算符是()A、B、C、和D、*4、若已定义X和Y为double型,则表达式:x=l,y=x+3/2的值是()Scanf("d,%d,%d”,&a,&b,&c);If(a<b)If(b<c)Printf(umax=%dnc);ElsePrintf("max=%dn”,b);Else if(a<c)Printf(4linax=%dn,c);ElsePrintf(umax=%dn,a);main()int year, leap;Scanf(t4%d'&year);If(year%4= =0&&year% 100!=0)|(year%400= =O)leap=l;Else leap=O;If(leap)PrintfC%d is a leap year ”,year);Else(u%d is not a leap year ”,year);)3、main()float score;Char grade;Scanfr%r;&score);While(score> 100|score<0)printf("n输入有误,请重输”);ScanfC4%f&score);)Switch(int)(score/10)Case 9:gradc=,A,;break;Case 8:grade=,BbreakCase 7:grade=,CbieakCase 6: grade= ' D * ;breakCase 5:Case 4:Case 3:Case 2:Case 1:Case O:grade=,E,;Printf(“成绩是 5.1 f,相应的等级是cn”,score,grade);)第五章循环结构程序设计一、选择题1、在C语言中,当while中语句中的条件为 时,结束该循环A、0B、1C、TrueD、非02、在C语言中,当do-while语句中的条件为 时,结束该循环A、0B、1C> TrueD、非。3、若K为整型,以下while循环体中的语句执行一次Whilc(k=O)prinif("d”,k);k-;prinlf("n”);A、无限次B、。次C、1次D、2次4、设i和x都是int类型,则以下for循环For(i=0,x=0;i<=9&&x!=876;i+)scanfC%d,&x);A、最多执行10次B、最多执行9次C、是无限循环D、循环体一次也不执行5、逻辑运算符两侧运算对象的数据类型A、只能是。或1B、只能是。或非。正数C、只能是整型或字符型数据D、可以是任何类型的数据二、填空题1、C语言三个循环语句分别是语句,语句和语句2、至少执行一次循环体的循环语句是3、循环功能最强的循环语句是三、看程序写结果1、main () int k=l,n=263 ;do k*= n%10 ; n/= 10 ; while (n);printfCt%dn,k);)2、main()int i,j,p,s;s=0;for(i=l;i<=4;i+)P=l; for(j=l;j<=i;j+)P=P*j; s=s+p; )Printf(tts=%dn,s);3、main()int i=l,s=3;Dos+=i+;If(s%7=0)continue;Else +i; while(s<15);PrintfCi=%dnM,i);)4、main()int s=O,k;For(k=7 ;k>=4;k-)switch (k)(case 1:Case 4:Case 7:S+;Break;Case 2:Case 3:Case 6:Break;Case 0:Case 5:S+=2; Break; )Prinlf("s=%d”,s);四、编程题1001、用while语句计算s= Z n »=i2、求s=l+2+3+4+,直到s的值不小于28888,求此n的值为多少?3、判断m是否为素数4、求Fibonacci数列前40个数。这个数列有如下特点:第1、2两个数为1, I .从第3个数 开始,该数是其前面两个数之和。5、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153= + 53 + 33参考答案一、选择题1、A 2、A 3、B 4、A 5、A二、填空题1、while do-while for2、do-while3、for三、看程序写结果1、362、 s=333、i=84、s=4四、编程题1、#include<stdio.h>Main()int i,s;s=0;i=I;while(i<=100)(s=s+i;i+;)Printf(<ts=%dn,s);)2、#include<stdio.h>Main()int i,s=0;For(i=l;i+)s=s+i;If(s>=28888) break;Printf(uni=%d,i);3、#include<stdio.h>Main()int m.n;Scanf("d”,&m);For(n=2;n<=m-1 ;n+) if(m%n=O)break;if(n>m-1 )printfCvn%d is a prime numbcr!n'm); else printf(4in %d is not a prime numberin'',m);I4、main()long int fl,f2;Int i;fl=l;f2=l;for(i=l;i<=20;i+)printfC%121d%121d,fl,f2);If(i%2= =0)printf(“n”);fl=fl+f2;f2=f2+fl;I#include<stdio.h>Main() int n,i,j,k:For(n=100;n<l(X)0;n+)i=n/100;j=n/10-i*10;k=n%IO;if(n= =i*i*i+j*j*j+k*k*k) printf(u%dn,n);第六章 数组一、选择题1、在C语言中,引用数组元素时,其数组下标的数据类型允许是A、整型常量B、整型表达式C、整形常最或整形表达式D、任何类型的表达式2、以下对一维整型数组a的正确说明是一A、int a(10);int n=10,an;C、int n;scanf("%d",&n);int an;D、#define SIZE 10int aSIZE;3、若有定义:则对数组a元素的正确引用是A、a10 B、a3.5 C、a(5) D、a10-104、以下能对一维数组a进行正确初始化的语句是。A、int al 0= 0,0,0,0,0;B、inta10=;C、int a = 0;D、int a10= 10*1;5、若有定义:ina34,则对数组a元素的正确引用是A、a24B、al,3 C、a(5) D、aI0-106、以下能对二维数组a进行正确初始化的语句是A、inta曰1,0,1,5,2,3);B、ima3=l,2,3,4,5,6;C、inta24=l,2,3,4,5,6);D、inta3=lAl,),1,1);7、若有说明:inta34=0;则下面正确的叙述是A、只有元素a00可得到初值。B、此说明语句不正确C、数组a中各元素都可得到初值,但其值不一定为0D、数组a中每个元素均可得到初值()8、下面是对s的初始化,其中不正确的是A、chars5=“abc”;B、char s5=ta;,b,;c,;d,e,0,);C、char s5=" ”;D、char s5=,abcdef*;二、程序填空1、以下程序把一个由小到大的有序数列放在a1到an中,a0用作工作单元,程序把读入 的x值插入到a数组中,插入后,数组中的数仍然的序。请填空,完善程序。#include<stdio.h>int al0=0,12,17.20,25,28,x,i,n=5;Printf(44enter a number");Scanf("%d",&x);a0=x;i=n;while(ai>x)a(1)=ai;(2) ;al(3)=x;n+;for(i=l;i<=_(4);i+) printf(“4d”,ai);1三、编程题1、用选择法对10个整数排序(从小到大)2、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小 写字母,中文字母,中文字符,数字,空格及其他字符的个数。(提示:中文字符是两个 字节,且数值均大于128的字符)。3、将一个数组中的值按逆序重新存放。例如:原来顺序为8, 6, 5, 4, lo要求改为1, 4, 5, 6, 8。参考答案一、选择题1、A 2、D 3、A 4、A 5、A 6、B 7、D 8、A二、程序填空(1) i+1i=i-l+i(4) n二、编程题1、main()int i,j,minjemp,a11;Printf(uentcr data:n"); For(i=l;i<=10;i+) printf(*a%d=v,i);ScanfCl%d'&aiJ);)Printf("n”);For(i=l;i<=10;i+)Printf(“5cT,aiD;For(i=l;i<=9;i+) rnin=i;For(j=i+l;j<=10;j+) If(a|rnin>aj) rnin=j; Temp=ai;ai=amin; amin=temp;Printf(44n(he sorted numberin'');For(i=l;i<=10;i+)Printf("5d”,ai);)2、main()int ij,upp,Iow,dig,spa,oth;Chartext38O;Upp=low=dig=spa=o(h=0;For(i=0;i<3;i+)printf(unplease input line %d:n”,i+); Gets(texti);For(j=0;j<80&&tcxti|j!=,0,;j+) if(textij>,A,&&textilj<=,Z3 Upp+;Else if(textij>=,a,&&textij<=,z,) Low+;Else if(textij>=,0,&&textij<=,9,) Dig+;Else if (textij='')Spa+;ElseOth+;)For(i=0;i<3;i+)Printf("sn”,tcxti);PrintfC'upper case:%dnupp);Printf(lkuppcr casc:%dn”,low);Prinlf("digil:%dn”,dig);Printf(uspace:%dirspa);Prinlf("other:%dn”,oth);3、#define N 5Main()int aN,i,tcmp;PrinlfCenler array a:n);For(i=0;i<N;i+)Scanf("d”,&ai);Printf(uari-ay a:n");For(i=0;i<N;i+)Printf("4d”,ai);For(i=0;i<N/2;i+) (temp=ai; ai=aN-i-l;aN-i-l=temp;PrintfC4n now,array a:n");For(i=0;i<N;i+)Printf("4d”,ai);Printf(un,*);1第七章 函数一、选择题1、在C语言函数的定义和引用中,以下描述正确的是A、必须有形式参数B、也可以没有形式参数C、数组名不能作为形式参数D、形式参数必须是变量名2、以下函数定义形式正确的是A、double fun(int x, int y)z=x+y;Return z;)B、myfun(int x,y)int z;Return z;IC、myfun (x,y)int x,y;Double z;Z=x+y;Return z;)D、double fun (x, y)double z;z=x+y;return z;)3、在C程序中,下面描述正确的是A、函数的定义可以嵌套,但函数的调用不可以嵌套B、函数的定义不可以嵌套,但函数的调用可以嵌套C、函数的定义和函数调用都可以嵌套D、函数的定义和调用都不可以嵌套4、若调用一个函数,且此函数中没有relurn语句,则正确的说法是A、该函数没有返回值B、该函数返回若干个系统默认值C、能返回一个用户所希望的函数值D、返回一个不确定的值A、1B、2C、2.0D、2.55、若t为double类型,表达式t=l,t+5,l+的值就是()A、1B、6.0C、2.0D、 1.06、若有定义:inta=10, b=9, c=8;执行下面两条语句 c=(a-=(b-5); c=(a%l l)+(b=3);后, 变量b的值为()A、9B、4C、3D、27、设inta=12,则执行完语句a+=a-=a*a后,a的值是A、22B、264C、 144D、 -264二、问答题:1、简述匕'和“a”的区别。参考答案一、选择题K C 2、D 3、A 4、D 5、D 6、C 7、D二、问答题穹是字符常量”屋是字符串常量C语言规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串 是否结束。C语言规定以字符,(T作为字符串结束标志。如果有个字符串"china",实际上 在内存中是占内存不是5个字节,而是6个字节,最后一个是、(V。第三章顺序结构程序设计一、选择题1、putchar ()函数可以向终端输出一个A)整型变量表达式值B)实型变量值C)字符串D)字符或字符型变量值2、.已有如下定义和输入语句,若要求al,a2,cl,c2的值分别为10, 20, A和B,当从第一列 开始输入数据时,正确的数据输入方式是int al,a2; char cl,c2;scanfr%d%c%d%c'、,&a l,&c I,&a2,&c2);5、C语言规定,函数返回值的类型是由决定的A、return语句中的表达式类型B、调用该函数时的主调函数类型C、调用该函数时由系统临时D、在定义函数时所指定的函数类型6、以下不正确的说法是A、全局变量,静态变量的初值是在编译时指定的B、静态变量如果没有指定初值,则其初值为0C、局部变量如果没有指定初值,则其初值不确定D、函数中的静态变晨在函数每次调用时,都会重新设置初值二、填空题1、C语言函数返回类型的默认定义类型是 2、函数的实参传递到形参有两种方式:和3、在一个函数内部调用另一个函数的调用方式称为 。在一个函数内部直接或间接调 用该函数成为函数 的调用方式4、C语言变量按其作用域分为 和5、凡在函数中未指定存储类别的局部变量,其默认的存储类别为三、看程序写结果1、#includc<stdio.h>Int abc(int u,int v);Void main()int a=24,b=16,c;c=abc(a,b);printf(ttvalue=%d,c);Int abc(int u. int v)(int w;While(v)w=u%v;u=v;v=w;)Return u;)2、#include<stdio.h>intxl=30,x2=40;main()int x3=10,x4=20;sub(x3,x4);sub(x2,xl);primf("d,%d.%d,%dn”,x3,x4,x I,x2);sub(in( x,int y)xl=x;x=y;y=xl;)3、#include<stdio.h>Main()int i=5;Prinlf("%dn”,sub(i);)sub(inl n)int a;If(n=l) return 1;a=n+sub(n-l);return (a);I4、#include<stdio.h>Void fun()static int m;m+=2;printf(*%d m);)Main()int a;For(a= I ;a<=4;a+) fun();Printf(“n”);)四、编程题1、编写一个函数,判断任一整数是否为素数,用main。函数调用并测试之。2、用递归方法求n!3、有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和最低分参考答案一、选择题1、B 2、D 3、B 4、A 5、D 6、A二、填空题1、整型2、值传递、地址传递3、递归、嵌套4、全局变量、局部变量5、自动局部变量二、看程序写结果1、Value=82、10,20,40,403、154、2468三、编程题1、#include<stdio.h>#include<math.h>Int prime(int x)int i,flag=l;For(i=2:i<=sqrt(x);i+)If(x%i=O) flag=O;If(nag=l)Return 1;ElseReturn 0;Main()int x;Scanf("d”,&x);If(prime(x)= 1 )printf(M%d is a prime.n",x);Else printf(4t%d is not a primen.",x);2、float fac(int n)float f;If(n<0) prinlf("nvO,dataerror!');Else if(n=0|n=l)f=l;Else f=fac(n-l)*n;Return(f);IMain()int n;Float y;Printf("input an interger number:',);Scanf("d”,&n);y=fac(n);printfC%d!=%IO.Of;n,y);3、float max=0,min=0;float average(float array,int n)inti;Float aver,sum=arrayO;Max=min=array0;For(i=l ;i<n;i+)if(array i>max)max=array i;El se i f(array i <mi n)mi n=array i ;Suin=sum+arrayi;1aver=sum/n;rcturn(avcr);IMain()float ave,score 10;Int i;For(i=0;i<10;i+)Scanfr%f;&scoreil);Ave=average(score, 10);Printf(t<max=%6.2fnmin=%6.2fnaverage=%6.2fAn,max,min,ave);第八章 预处理命令一、选择题1、对宏命令的处理是A、在程序执行时进行的B、在对程序中其他语句进行编译前进行的C、在程序连接时进行的D、与程序中其他语句同时进行编译2、下面对编译预处理的叙述正确的是A、预处理命令只能位于程序的开始处B、预处理功能是指完成宏替换和文件包含的调用C、只要行首以“#"标识的控制行都是预处理命令D、编译预处理就是对源程序进行初步的语法检查二、编程题1、输入一行字母字符,根据需要设置条件编译,使之能使将字母全改为大写输出,或全改 为小写字母输出。参考答案一、选择题1、 B 2、 C二、编程题#define LETTER IMain()char str20=,C Language”©Int I;i=0;while(c=stri!=,0,)i+;# if LETTERIf(c>='a,&&c<=,z') c=c-32;# elseIf(c>='A'&&c<=Z) c=c+32;#endifPrintf("c”,c);)第九章 指针一、选择题1、指针是一种一A、标识符B、变量C、内存地址D、运算符2、显示指针变量P中的值,可以使用命令A、Prinlf("d”,p);B、Printf("d”,*p);C、Printf("d”,*p);D、Printf("d”,p);3、为指针变量P输入整型变量i的地址,可以使用命令A、Scanf("p”,&p);B、*p=i;C、P=&I;D、*p=&I;4、若有定义void *p;int *q:float ,下面操作不对的是A、p=q;B、q=r;C、p=r;D、r=p;5、若有说明#dcfine m 20 int n= 1 ();卜面定义不正确的是_A、 Float sm;B、 Float sm* 10;C、 Float sm+n;D、 Float slm+10;6、若有定义 int a= 1,2,0;请问 aalalOJ=A、0 B、1 C、2 D、37、若有char s10,*p=s;则下面表达式正确的是A、 s=p+s;B、 p=s+IO;C、s2=p4;D、p=sO;8、定义整型指针变量p和q,下面操作不正确的是A、 Int *p,q=null;B、Int *p.q=null.null;C、Int *p,*q=null,null;D、Int *p,*q=null;9、若有定义 inia=l,2,3,b3= 1,2,3);,请问 a=bA、不能比较B、结果为真C、结果为假D、结果不确定二、填空题1、二级指针是存放一级指针的2、指针变量虽然都是存放指针,但不同3、空指针名称是,表示没有指针的一种状态4、函数名和 名可以作为指针常量5、不同类型的指针变量的赋值必须三、编程I、输入3个整数,按由小到大的顺序输出。2、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。3、写一个函数,将一个3*3的矩阵转置.04、将n个数按输入顺序的逆序排列,用函数实现。参考答案一、选择题1、C 2、D 3、C 4、B 5、C 6、A 7、C 8、D 9、D二、填空题1、 单元地址2、 基类型3、 Null4、 数组5、 显式类型变换二、编程题1、 Main()int nl,n2,n3;Int *pl,*p2,*p3;PrintfCinput three integers nl,n2,n3:”);Scanfr%d,%d,%dM,&n 1 ,&n2,&n3);pl=&n I;p2=&n2;p3=&n3;if(nl>n2) swap(pl,p2);if(n I >n3) swap(p l,p3);if(n1>n3) sw叩(p2,p3);printf(;'now,thc order is:%d,%d,%dn,nl,n2,n3);ISwap(int *pl,int *p2)int p;p=*p l;*p 1 =*p2;*p2=p;)2、main()int len;Char *str20;Printfflnput string:'');Scanf("s”,str);Len=length(str);PrintffThe length of string is %d?len);1Length(char *p)int n;N=0;While(*p!=,0,)n+;P+;IRcturn(n);I3、main()int a33,*p,i;PrintfC'input matrix:n'');For(i=0;i<3;i+)Scanf(u%d %d %d,&ariO,&air I ,&ai2);p=&a00;move(p);printf("now,matrix:n");for(i=0;i<3;i+)printf(M%d %d %dn,ai0,ail,ai2);)Move(int *pointer)int i,j;For(i=0;i<3;i+)For(j=i;j<3;j+)t=*(pointer+3*i+j);*(pointer+3*i-tj)=*(pointer+3*j+i);*(pointer+3*j+i)=t;)4、main()int i,n;Char *p,num20;Printff'input n:");ScanfC%d,&n);Printff'please input these numbers:n,');For(i=0;i<n;i+)Scanf("d”,&numi);P=&numO;Sort(p,n);Printf(unow,the sequence is:n");For(i=0;i<n;i+)Printf("%d”,numi);)Sorl(char p,int m)inti;Char temp,*pl,*p2;For(i=0;i<m/2;i+)pl=p+i;p2=p+(m-l-i);tcmp=*pl;*pl=*p2;*p2=tcmp;第十章结构体与共用体一、选择题1、定义结构类型时,下列叙述正确的是一A、系统会按成员大小分配每个空间B、系统会按最大成员大小分配空间C、系统不会分配空间D、以上说法均不正确2、已知结构类型变量x的初始化值为“20”,30,40,35.5,请问合适的结构定义是一A、 Struct sint no;int x,y,z);B、 Struct schar no2;int x,y,z;C、 Struct sint no;float x,y,z;D、Struct schar no2;float x,y,z;若程序中有定义struct abcint x;char y;);abc si,s2;则会发生的情况是A、编译时会有错误B、链接时会有错误C、运行时会有错误D、程序没有错误二、编程1、己有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号 升序排列。参考答案选择题1、C 2、D 3、A二、编程题1、#include<stdio.h>#define null 0#define LEN sizeof(struct student)Struct studentlong num;Int score;Struct student *nexl;;Struct student listA.IistB;Int n,sum=0;Main()struct student *creat(void)Struct student *inscrt(struct student *,struct student *);Void print(struct student *);Struct student *ahcad,*bhcad,*abh;PrintfCninpu( list a:rT);ahead=creat();sum=sum+n;printfCinput list b:n");hhead=creat();sum=sum+n;abh=inscrt(ahcad,bhcad);print(abh);IStruct student *creat(void)struct student *pl,*pl,*head;n=0;pl=p2=(struct student *)malloc(LEN);printf(uinput number & scores of studcnt:nM);prinlf(uif number is O.stop inputing,n);scanf("ld,%d”,&p 1 ->num,&p 1 ->score);head=null;while(pl->num!=O)n=n+l;If(n=l)head=pl;Else p2->next=p I;P2=pl;p 1 =(struct student*)malloc(LEN); scanf("ld,%d”,&p I ->num,&p I ->score);p2->nexl=null;return(head);1Struct student *insert(strucl studenl*ah,struct *bh)struct student *pa 1 ,*pa2,*pb l,*pb2;pa2=pal=ah;pb2=pbl=bh;dowhile(pb 1 ->num>pa 1 ->num)&&(pa 1 ->next!=null) pa2=pal;pl=pai->next;)If(pb I ->num<=pa I ->num)if(ah=pal)ah=pbI;else pa2->next=pbl;pbl=pbl->ncxt;pb2->next=pa 1;pa2=pb2;pb2=pbI;)While(pal->next!=null)|(pal=null&&pbl !null);If(pb l->num>pal ->num)&&(pa 1 ->next=null) pal->next=pbl;rcturn(ah);IVoid print(struct student 水head)struct student *p;Printf(un there are %d records:n",sum);p=head;if(p!=null)doprintfr%ld %dn,p->num.p->score);p=p->next;While(p!=null);A) 10A 2OB/B) 10A20B/C) 10A20BZC) 10A20B/3、执行下列程序片段时输出结果是int x=13,y=5;printfC%d",x%=(y/=2);A) 3 B) 2 C) I D) 04、若定义x为double型变量,则能正确输入x值的语句是A) scan偿%r',x);B) scanfC%',&x);C) scanfr%lf;&x);D) scan%5.ir,&x);5、.已知i,j,k为int型变量,若从键盘输入:1,2,3回车,使I的值为1, j的值为2, k的 值为3,以下选项中正确的输入语句是一A) scanf(“2d%2d%2d”,&i,&j,&k);B) scanfT%d_%d_%d”,&i,&j,&k);C) scanf("%d,%d,%d”,&i,&j,&k);D) scanf("i=%d,j=%d,k=%d”,&i,&j,&k);6、有输入语句:scanf(uad,b=%d,c=M,&a,&b,&c);®® a 1, b 的值为 3, c 的值为2,则正确的数据输入方式是A) 132/B) 1,3,2/C) a= 1 b=3 c=2/D) a=l,b=3,c=2Z二、看程序写结果1、用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,cl=,Ac2='a'问在键盘上如何输 入?(一表示空格)main () int a,b;float x,y;char cl,c2;scanf("a=%(Lb=%d",&a,&b);scanf(" %f J*%e”,&x,&y);scanffJ %cJ* %c,&cl,&c2);第十一章位运算编程题I、设计一个函数,使给出一个数的原码,能得到该数的补码参考答案Main()unsigned int a;Unsigned int getbits(unsigned);Printf("ninput an