C语言考试复习提纲.doc
C语言考试复习提纲桂林电子科技大学 周信东窗体底端一、对应书中各章考试知识点如下:(注意:带*号章节为重点内容。)第一章 程序设计基础知识1程序设计的基本步骤2算法流程图的表示方法*3程序的三种基本结构(顺序结构、分支(选择)结构、循环结构)第二章 C语言概述1C语言程序的基本结构。(由一个主函数main()或一个主函数及其他函数组成;每个函数用括起来;每个语句后加“;”。)*2C语言的标识符及其命名规则3C语言的函数分类(主函数、用户自定义函数、库函数)。4C程序的开发过程(编辑、连接、运行)。*第三章 数据类型与运算规则1C语言的数据类型。2数值数据(整型、实型)的表示。3字符数据(字符、字符串)的表示。4变量的定义、初始化和赋值。5运算符(算术运算、关系运算、逻辑运算)和表达式的书写规则及运算级别。6条件运算符和条件表达式的应用。7自增/自减运算,逗号运算的应用8赋值运算和组合赋值运算的应用9混合运算及数据类型转换第四章 顺序结构程序设计1流程控制语句。2putchar函数和getchar函数的应用。*3printf函数和scanf函数的输入/输出格式及其应用。*第五章 选择(分支)结构程序设计1ifelse语句(含嵌套)及其应用。2控制条件的表示。3Switch语句及其应用。*第六章 循环结构程序设计1循环语句的形式和应用(while结构 、do-while结构、 for结构、*二重循环嵌套)。2break和continue语句及其应用。*第七章 数组1一维数组的定义、初始化、引用及应用。2典型排序算法:冒泡排序法、选择排序法。3一维字符数组的定义、初始化、引用及应用4字符数组与字符串的应用。5常用字符串处理函数。6二维数组的定义、初始化、引用及应用。第八章 函数*1函数的定义。2函数的返回值。*3函数的调用与声明(单向值传递)。4全局变量和局部变量的作用域第九章 指针1指针的定义及引用方法。2指针作为函数参数3通过指针引用一维数组。4指针与字符串。第十章 结构、联合与枚举类型1结构的定义、初始化及引用方法。2结构数组的应用3联合的概念、定义和引用方法。二、参考例题:书后各章的习题三、试题形式:选择题、填空题、阅读程序(读程序写结果)、编制完整程序四、典型题目(一)填空题1C语言的运算符可分为以下几类: 算术 运算符、 关系运算符、 逻辑 运算符、赋值运算符、位运算符、逗号运算符等。2在C语言中,实型变量可以分为 单精度(float) 型、 双精度(double) 型。3_顺序结构_ _、_分支结构_、_循环结构_是结构化程序设计的三种基本结构。4若a=3,b=5, 则表达式a>b?a: b+的值是_3_。5若有定义:int a=8, b=5, c; 执行语句c = a/b+0.4 ;后,c的值为_1_。6在进行关系运算时,凡是结果为真,用表示,结果为假用表示。在进行判别时,把_非零_作为真,把_零_作为假。7若有定义int a10=1,2,3,4,0,4,6;则初始化后,a4的初值是_0_,a8的初值是_0_。8若有定义:int a=8, b=5, c; 执行语句c = a/b+0.4 ;后,c的值为_1_。9当a=3,b=4,c=5时,写出下列各式的值。a&&b的值为 1 ,!a&&b的值为 0 ,a|c的值为 1 ,!a|c的值为 1 。10若有定义int a10=1,2,3,4,0,4,6;则初始化后,a4的初值是_0_,a8的初值是_0_。11下面程序的功能是 : 输出 100 以内能被 3 整除且个位数为 6 的所有整数 , 请填空。 #include <stdio.h> main() int i, j; for (i=0; _i<10_ ; i+) j=i*10+6; if ( _j%3!=0_ ) continue; printf("%d",j); 12以下程序的输出结果为。#include <stdio.h>main()int x=10; float pi=3.1416;printf(“(1) %dn”,x);printf(“(2) %6dn”,x);printf(“(3) %fn”,56.1);printf(“(4) %14fn”,pi);printf(“(5) %en”,568.1);printf(“(6) %14en”,pi);printf(“(7) %gn”,pi);printf(“(8) %12gn”,pi);结果: (1) 10(2) 10(表示空格)(3) 56.(4) 3.(5) 5.68100e+02(6) 3.14160e+00(7) 3.1416(8) 3.141613下面程序的运行结果是s=254。#include <stdio.h>main()int a,s,n,count;a=2; s=0; n=1; count=1;while(count<=7) n=n*a; s=s+n; +count; printf(“s=%d”,s);14当运行以下程序时,从键盘键入China#<CR>(<CR>代表回车),则下面程序的运行结果是5,5。#include <stdio.h>main()int v1=0,v2=0; char ch;while(ch=getchar()!=#)switch(ch)case a:case h:default: v1+;case o: v2+;printf(“%d,%dn”,v1,v2);15以下程序功能为求1!+2!+3!+ +10!,请填空将程序补充完整。 #include <stdio.h> void main(void) float s = 0, t = 1;int n;for (n=1; n<=10 ; n+) t = t*n ; s = s+t ; printf("1!+2!+3!+。+10!=%f", s); 16 以下程序求:sum=1/2+1/4+1/6+1/8+.前10项之和并输出和。填空完成该程序。 #include <stdio.h> main ( ) float f1,sum=0.0; int n; f1= 2 for(n=1;n<10;n+) sum+=1/f1; f1= f1+2 ; printf(“sum=%fn”, sum ) ; (二)选择题1一个c语言程序的执行是从( A )。 A、本程序的main函数开始,到main函数结束 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C、本程序的main函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束2.C语言规定:在一个源程序中,main函数的位置C。A) 必须在最开始B) 必须在系统调用的库函数的后面C) 可以任意D) 必须在最后3.以下叙述不正确的是D。A) 一个C源程序可由一个或多个函数组成B) 一个C源程序必须包含一个main函数C) C程序的基本组成单位是函数D) 在C程序中,注释说明只能位于一条语句的后面4以下选项中合法的用户标识符是( )。A) long B) _2Test C) 3Dmax D) A.dat5可用作C+语言用户标识符的一组标识符是( )。A)void define +WORDB)a3_b3 _123 YNC)for -abc CaseD)2a DO sizeof6以下所列的C语言常量中,正确的整型常量是:( )A)123.0 B)-456 C)789,000 D)'72'7以下选项中不合法的实型常量是( B )A、 2.607E-1 B、0.8103*12 C、-77.77 D、456e-28以下选项中不合法的用户标识符是 ( C )A、_123 B、printf C、A$ D、Dim9若变量已正确定义并赋值,符合C语言语法的表达式是( B )A、a=a+7; B、a=7+b+c,a+ C、int(12.3%4) D、a=a+7=c+b10.若x、i、j和k都是int型变量,则执行下面表达式后x的值为C。x=(i=4,j=16,k=32)A)4B)16C)32D)5211.假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是B。A)7B)8C)6D)212.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符C。A) 必须为字母B) 必须为下划线C) 必须为字母或下划线D) 可以是字母、数字和下划线中任一种字符13存储以下数据,占用存储字节最多的是( )。 A)0 B)'0' C)"0" D)0.014若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( A )。A、2. B、2. C、3. D、0.15以下表达式为真时不能表示A为奇数的表达式是:( C ) A) A%2=1 B) !(A%2=0) C) !(A%2) D) A%216以下能正确地定义变量a,b和c并为它们赋初值5的语句是:( A )A) int a=5,b=5,c=5; B) int a,b,c=5;C) a=5,b=5,c=5; D) int a=b=c=5;17C语言中要求运算对象必须是整型的运算符是:( D ) A) / B) + C) != D) %18.下面四个选项中,均是合法整型常量的选项是A。A) 160-0xffff011B) -0xcdf01a0xeC) -01986,0120668D) -0x48a2e50x19.下面四个选项中,均是合法浮点数的选项是B。A) +1e+15e-9.403e2B) -.6012e-4-8e5C) 123e1.2e-.4+2e-1D) -e3.2345.e-020.下面四个选项中,均是合法转义字符的选项是A。A) nB) 017”C) 018fxabD) 0101x1f21.若有代数式,则不正确的C语言表达式是C。A) a/b/c*e*3B) 3*a*e/b/cC) 3*a*e/b*cD) a*e/c/b*322根据定义和数据的输入方式,输入语句的正确形式为B。已有定义:float f1,f2;数据的输入方式:4.523.5A) scanf(“%f,%f”,&f1,&f2);B) scanf(“%f%f”,&f1,&f2);C) scanf(“%3.2f %2.1f”,&f1,&f2);D) scanf(“%3.2f%2.1f”,&f1,&f2);23c2为字符型,执行语句“c2= 'a'+'6'-'3'”后,c2的值为:( ) A) d B) 100 C) 不确定的值 D) c24以下能正确地定义变量a,b和c并为它们赋初值5的语句是:( )A) int a=5,b=5,c=5; B) int a,b,c=5;C) a=5,b=5,c=5; D) int a=b=c=5;25以下表达式为真时不能表示A为奇数的表达式是:( ) A) A%2=1 B) !(A%2=0) C) !(A%2) D) A%226putchar函数可以向终端输出一个( D )。A) 整型变量的值 B) 实型变量的值C) 字符串 D) 字符或字符型变量的值27有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是(D)。A) 132<回车>B) 1,3,2<回车>C) a=1 b=3 c=2<回车>D) a=1,b=3,c=2<回车>28以下程序的输出结果是( D )main() int a=2,b=3; printf(“a=%d,b=%dn”,a,b);A、a=%2,b=%f B、a=2,b=5 C、a=%d,b=%d D、a=%d,b=%d29为表示关系 xyz, 应使用的C语言表达式是( A )A、(x>=y)&&(y>=z) B、(x>=y)AND(y>=z)C、(x>=y>=z) D、(x>=y)&(y>=z)30若有以下定义:int k=7,x=12;,则能使值为3的表达式是( D ) A、x%=k-(k%5) B、x%=(k%=5) C、 x%=(k-k%5) D、(x%=k)-(k%=5)31假定w、x、y、z、m均为int型变量,有如下程序段: w=1; x=2; y=3; z=4; m=(w<x)?w:x;m=(m<y)?m:y;m=(m<z)?m:z;则该程序运行后,m的值是( C )。 A、4 B、3 C、1 D、232判断char型变量c是否为小写字母的表达式是( )。A) 'a'<=c<='z' B) (c>=a)&&(c<=z)C) ( 'a'>=c)|( 'z'<=c) D) (c>='a')&&(c<='z')33以下选项中,与k=n+完全等价的表达式是( )。A) k=n,n=n+1 B) n=n+1,k=n C) k=+n D) k+=n+134以下程序的输出结果是( A )。 void main(void) int a = 4, b = 5, c = 0, d; d = !a && !b | !c; printf("%dn", d); A) 1 B) 0 C) 非0的数 D) 135下面有关for循环的正确描述是D。A) for循环只能用于循环次数已经确定的情况B) for循环是先执行循环体语句,后判断表达式C) 在for循环中,不能用break语句跳出循环体D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来36对for(表达式1;表达式3)可理解为B。A)for(表达式1;0;表达式3)B)for(表达式1;1;表达式3)C)for(表达式1; 表达式1;表达式3)D)for(表达式1; 表达式3;表达式3)37以下不是无限循环的语句为A。A) for(y=0,x=1;x>+y;x=i+) i=xB) for(;x+=i);C) while(1) x+; D) for(i=10;i-) sum+=i;38下列程序段不是死循环的是C。A) int i=100;while(1)i=i%100+1;if(i>100) break;B) for(;);C) int k=0;do +k; while(k>=0);D) int s=36;while(s); -s;39下面程序的运行结果是:( C )int x=3;do printf("%3d", x-=2);while(!(-x); A. 1 B. 3 0 C. 1 -2 D. 死循环40对下述程序段描述正确的是:( B )int k=0;while (k=1) k+;A. 有语法错误,不能执行B. 循环是无限循环C. 循环体语句一次也不执行D. 程序体语句执行一次41以下程序中,while循环的循环次数是( D )。 main() int i=0; while(i<10) if(i<1) continue; if(i=5) break; i+; A、1 B、10 C、6 D、死循环,不能确定次数42以下能对一维数组a进行正确初始化的语句是( C )。A、int a10=(0,0,0,0,0); B、int a 10=; C、int a=10,12,56; D、int a=10*1;43若有说明:int a3=1,2,3,4,5,6,7;则a数组第一维的大小是( B )。A、2 B、3 C、4 D、无确定值44若有说明:int a34;则对a数组元素的正确引用是C。A)a24B)a1,3C)a1+10D)a(2)(1)45以下能对二维数组a进行正确初始化的语句是B。A) int a2=1,0,1,5,2,3;B) int a3=1,2,3,4,5,6;C) int a24=1,2,3,4,5,6;D) int a3=1,0,1,1,1;46c语言中while和do-while循环的主要区别是( A ) A、do-while的循环体至少无条件执行一次 B、while的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 D、do-while的循环体不能是复合语句47以下程序的输出结果是( B )void sub(int x, int y, int z)z=y-x; printf("%d,%d,%d ",x,y,z);main() int a=10,b=5,c=1; sub(c+10,b,a); printf("%d,%d,%dn",a,b,c);A、10,5,1 B、11,5,-6 10,5,1 C、11,5,1 D、11,5,-6 -6,5,1148.以下程序执行后sum的值是( B )。 void main(void) int i , sum=0;for (i=1;i<6;i+) sum+=i;printf("%dn",sum); A) 0 B) 15 C) 5 D) 不确定49存储以下数据,占用存储字节最多的是( )。 A)0 B)'0' C)"0" D)0.050C语言中要求运算对象必须是整型的运算符是:( ) A) / B) + C) != D) %51以下正确的说法是( )。 A)用户调用标准库函数前,必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C)系统不允许用户重新定义标准库函数 D)用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中52putchar函数可以向终端输出一个( )。A) 整型变量的值 B) 实型变量的值C) 字符串 D) 字符或字符型变量的值53以下程序的输出结果是( )。 main( )int a=1,b=2,c=3;printf("%d",c>b>a);A)2 B)1 C)0 D)354执行以下程序后的输出结果是( )。 #include <stdio.h> void main(void) int i = 0, j = 0, a = 6;if (+i>0)|(+j>0) a +;printf("i=%d, j=%d, a=%dn", i, j, a); A) i=0, j=0, a=6 B) i=1, j=1, a=7 C) i=1, j=0, a=7 D) i=0, j=1, a=755以下叙述中正确的是( )。A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号C)在do-while循环体中,一定要有能使while后面表达式的值变为零的操作D) do-while循环中,根据情况可以省略while56对两个数组a和b进行如下初始化char a="ABCDEF"char b='A', 'B', 'C', 'D', 'E', 'F'则以下叙述正确的是( D )。A) a与b数组完全相同 B) a与b长度相同C) a与b中都存放字符串 D)a数组比b数组长度大57有两个字符数组a,b,则以下正确的输入格式是:( )A) gets(a,b); B) scanf("%s%s",a,b);C) scanf("%s%s",&a,&b); D) gets("a"),gets("b");58执行语句for (i=1; i+<4; );后变量i的值是:( ) A) 3 B) 4 C) 5 D) 不定59以下程序的输出结果是( )。 #include <stdio.h> int f(void) int i = 0; int s =1;s += i;i+;return (s); void main(void) int i, a = 0;for (i=0; i<5; i+) a += f();printf("%dn", a); A) 1 B) 0 C) 非0的数 D) 160.以下叙述中不正确的是_A) 在不同的函数中可以使用相同名字的变量B) 函数中的形式参数是局部变量C) 在一个函数内定义的变量只能在本函数范围内有效D) 在一个函数内的复合语句中定义的变量在本函数范围内有效61.有以下的程序void fun(int a,int b,int c)a=456;b=567;c=678;main( )int x=10,y=20,z=30;fun(x,y,z);printf("%d,%d,%d",x,y,z);其输出结果为 。A) 30,20,10B) 10,20,30C) 456,567,678D) 678,567,45662.以下程序运行后,输出结果是 。func(int a,int b)static int m=0,i=2;i+=m+1;m=i+a+b;return(m);main( )int k=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);printf("%dn",p);A) 8,15B) 8,16C) 8,17D) 8,863.下列程序的输出结果是_。#include <stdio.h>void f1( )int x=0;x+;printf("%d,",x);void f2( )static int x;x+;printf("%d,",x);void main( )int k;for(k=0;k<3;k+)f1( ),f2( );A) 1,1,1,1,1,1B) 1,1,1,1,2,3C) 1,1,2,2,3,3D) 1,1,2,1,3,164.以下程序执行时的输出结果为_。#include<stdio.h>void main()char s1="language",s2="program"char *p1=s1,*p2=s2;int k;for(k=0;k<7;k+)if(*(p1+k)=p2k)putchar(*(k+p1);A) age B) ga C) language 65.下列程序段的输出结果是_。A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4D) 2 1 1 2void fun(int *x, int *y) printf("%d %d", *x, *y); *x=3;*y=4;main() int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);66.下列程序的输出结果是_。main() char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5;printf("%d",*-p);A) 非法 B) a4的地址 C) 5 D) 367.下列程序的运行结果是_。void fun(int *a, int *b) int *k;k=a; a=b; b=k;main() int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);A) 6 3 B) 3 6 C) 编译出错 D) 0 068.下面程序的输出结果是_。main() int a =1,2,3,4,5,6,7,8,9,0,*p;p=a;printf("%dn",*p+9);A) 0 B) 1 C) 10 D) 969.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是_。A) i=*p; B) *p=*&j; C) i=&j; D) i=*p;70.有以下结构体定义:struct example int x;int y; v1;则正确的引用或定义是 。A) example.x=10 B) example v2; v2.x=10;C) struct v2; v2.x=10; D) struct example v2=10;71.对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是 。struct date int year,month,day; ;struct worklist char name20; char sex; struct date birth;person;A) year=1976 B) birth.year=1976 C) person.birth.year=1976 D) person.year=197672.根据下述定义,可以输出字符'A'的语句是 。struct person char name11;struct char name11; int age;other10;struct person man10= "Jone","Paul",20,"Paul","Mary",18,"Mary","Adam",23,"Adam","Jone",22;A) printf("%c",man2.other0.name0); B) printf("%c",other0.name0);C) printf("%c",man2.(* other0); D) printf("%c",man3.name);73.若有以下程序段:struct st int n;struct st *next; ;struct st a3=5,&a1,7,&a2,9, '0' ,*p=a;则值为6的表达式为 。A) p+->n B) p->n+ C) (*p).n+ D) +p->n(三)编程题1编写程序,从键盘输入n的值,求出表达式1+22+32+.+n2的值。(10分)【参考程序】main()int n, i, sum=0;scanf("%d",&n);for (i=1; i<=n; i+) sum += i*i;printf("1+22+32+.+%d2=%dn", n, sum);0x11x22x33x42函数求解,输入x的值,输出y的值。(10分)【参考程序】main()float x,y;scanf("%f",&x);if (x<=0)|(x>=4)printf("输入数据超出处理范围!n");else if (x<1) y=x;else if (x<2) y=x-1;else if (x<3) y=x*x-2*x-1;else y=x*x*x+4*x-17;printf("y=%fn",y);3从键盘中输入若干个学生的期末成绩,当输入为负数时结束输入。统计并输出这若干个学生的总分和平均分。(15分)【参考程序】main()int n=0;float score,sum=0,average;printf("请输入学生的期末成绩,输入为负数时结束:n");do scanf("%f", &score);if (score<0) break;elseif (score>100) printf("输入错!分数应为0100。请重输。n");continue;sum += score;n+; while (score>0);average = sum/n;printf("总分=%f,平均分=%fn", sum, average);4求间的所有素数。(12分)【参考程序】#include "stdio.h"#include "math.h"main()int m,i,n=0;for (m=101; m<=200; m=m+2)if (n%10=0) printf("n");for (i=2; i<=sqrt(m); i+)if (m%i=0)