资源描述
C语言考试复习提纲
桂林电子科技大学 周信东窗体底端
一、对应书中各章考试知识点如下:(注意:带*号章节为重点内容。)
第一章 程序设计基础知识
1.程序设计的基本步骤
2.算法流程图的表示方法
*3.程序的三种基本结构(顺序结构、分支(选择)结构、循环结构)
第二章 C语言概述
1.C语言程序的基本结构。(由一个主函数main()或一个主函数及其他函数组成;
每个函数用{}括起来;每个语句后加“;”。)
*2.C语言的标识符及其命名规则
3.C语言的函数分类(主函数、用户自定义函数、库函数)。
4.C程序的开发过程(编辑、连接、运行)。
*第三章 数据类型与运算规则
1.C语言的数据类型。
2.数值数据(整型、实型)的表示。
3.字符数据(字符、字符串)的表示。
4.变量的定义、初始化和赋值。
5.运算符(算术运算、关系运算、逻辑运算)和表达式的书写规则及运算级别。
6.条件运算符和条件表达式的应用。
7.自增/自减运算,逗号运算的应用
8.赋值运算和组合赋值运算的应用
9.混合运算及数据类型转换
第四章 顺序结构程序设计
1.流程控制语句。
2.putchar函数和getchar函数的应用。
*3.printf函数和scanf函数的输入/输出格式及其应用。
*第五章 选择(分支)结构程序设计
1.if~else语句(含嵌套)及其应用。
2.控制条件的表示。
3.Switch语句及其应用。
*第六章 循环结构程序设计
1.循环语句的形式和应用(while结构 、do-while结构、 for结构、*二重循环嵌套)。
2.break和continue语句及其应用。
*第七章 数组
1.一维数组的定义、初始化、引用及应用。
2.典型排序算法:冒泡排序法、选择排序法。
3.一维字符数组的定义、初始化、引用及应用
4.字符数组与字符串的应用。
5.常用字符串处理函数。
6.二维数组的定义、初始化、引用及应用。
第八章 函数
*1.函数的定义。
2.函数的返回值。
*3.函数的调用与声明(单向值传递)。
4.全局变量和局部变量的作用域
第九章 指针
1.指针的定义及引用方法。
2.指针作为函数参数
3.通过指针引用一维数组。
4.指针与字符串。
第十章 结构、联合与枚举类型
1.结构的定义、初始化及引用方法。
2.结构数组的应用
3.联合的概念、定义和引用方法。
二、参考例题:
书后各章的习题
三、试题形式:
选择题、填空题、阅读程序(读程序写结果)、编制完整程序
四、典型题目
(一)填空题
1.C语言的运算符可分为以下几类: 算术 运算符、 关系运算符、 逻辑 运算符、赋值运算符、位运算符、逗号运算符等。
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.在进行关系运算时,凡是结果为真,用1表示,结果为假用0表示。在进行判别时,把__非零_作为真,把_零_作为假。
7.若有定义int a[10]={1,2,3,4,0,4,6};则初始化后,a[4]的初值是__0_,a[8]的初值是___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 a[10]={1,2,3,4,0,4,6};则初始化后,a[4]的初值是__0__,a[8]的初值是___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) %d\n”,x);
printf(“(2) %6d\n”,x);
printf(“(3) %f\n”,56.1);
printf(“(4) %14f\n”,pi);
printf(“(5) %e\n”,568.1);
printf(“(6) %14e\n”,pi);
printf(“(7) %g\n”,pi);
printf(“(8) %12g\n”,pi);
}
结果: (1) 10
(2) □□□□10 (□表示空格)
(3) 56.100000
(4) □□□□□□3.141600
(5) 5.68100e+02
(6) □□□3.14160e+00
(7) 3.1416
(8) □□□□□□3.1416
13.下面程序的运行结果是 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,%d\n”,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=%f\n”, 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.dat
5.可用作C++语言用户标识符的一组标识符是( )。
A)void define +WORD
B)a3_b3 _123 YN
C)for -abc Case
D)2a DO sizeof
6.以下所列的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-2
8.以下选项中不合法的用户标识符是 ( C )
A、_123 B、printf C、A$ D、Dim
9.若变量已正确定义并赋值,符合C语言语法的表达式是( B )
A、a=a+7; B、a=7+b+c,a++ C、int(12.3%4) D、a=a+7=c+b
10.若x、i、j和k都是int型变量,则执行下面表达式后x的值为 C 。
x=(i=4,j=16,k=32)
A)4 B)16 C)32 D)52
11.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是 B 。
A)7 B)8 C)6 D)2
12.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 C 。
A) 必须为字母
B) 必须为下划线
C) 必须为字母或下划线
D) 可以是字母、数字和下划线中任一种字符
13.存储以下数据,占用存储字节最多的是( )。
A)0 B)'0' C)"0" D)0.0
14.若有定义:int a=7;float x=2.5,y=4.7;;则表达式x+a%3*(int)(x+y)%2/4的值是( A )。
A、2.500000 B、2.750000 C、3.500000 D、0.000000
15.以下表达式为真时不能表示A为奇数的表达式是:( C )
A) A%2==1 B) !(A%2==0) C) !(A%2) D) A%2
16.以下能正确地定义变量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;
17.C语言中要求运算对象必须是整型的运算符是:( D )
A) / B) ++ C) != D) %
18.下面四个选项中,均是合法整型常量的选项是 A 。
A) 160 -0xffff 011
B) -0xcdf 01a 0xe
C) -01 986,012 0668
D) -0x48a 2e5 0x
19.下面四个选项中,均是合法浮点数的选项是 B 。
A) +1e+1 5e-9.4 03e2
B) -.60 12e-4 -8e5
C) 123e 1.2e-.4 +2e-1
D) -e3 .234 5.e-0
20.下面四个选项中,均是合法转义字符的选项是 A 。
A) ‘\’’ ‘\\’ ‘\n’
B) ‘\’ ‘\017’ ‘\”’
C) ‘\018’ ‘\f’ ‘xab’
D) ‘\\0’ ‘\101’ ‘x1f’
21.若有代数式,则不正确的C语言表达式是 C 。
A) a/b/c*e*3
B) 3*a*e/b/c
C) 3*a*e/b*c
D) a*e/c/b*3
22.根据定义和数据的输入方式,输入语句的正确形式为 B 。
已有定义:float f1,f2;
数据的输入方式:4.52
3.5
A) 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);
23.c2为字符型,执行语句“c2= 'a'+'6'-'3';”后,c2的值为:( )
A) d B) 100 C) 不确定的值 D) c
24.以下能正确地定义变量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%2
26.putchar函数可以向终端输出一个( 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=%%d\n”,a,b);
}
A、a=%2,b=%f B、a=2,b=5 C、a=%%d,b=%%d D、a=%d,b=%d
29.为表示关系 x≥y≥z, 应使用的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、2
32.判断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+1
34.以下程序的输出结果是( A )。
void main(void)
{ int a = 4, b = 5, c = 0, d;
d = !a && !b || !c;
printf("%d\n", d);
}
A) 1 B) 0 C) 非0的数 D) –1
35.下面有关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=x
B) 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 a[10]=(0,0,0,0,0); B、int a [10]={};
C、int a[]={10,12,56}; D、int a[]={‘10*1’};
43.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是( B )。
A、2 B、3 C、4 D、无确定值
44.若有说明:int a[3][4];则对a数组元素的正确引用是 C 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
45.以下能对二维数组a进行正确初始化的语句是 B 。
A) int a[2][]={{1,0,1},{5,2,3}};
B) int a[][3]={{1,2,3},{4,5,6}};
C) int a[2][4]={{1,2,3},{4,5},{6}};
D) int a[][3]={{1,0,1},{},{1,1}};
46.c语言中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,%d\n",a,b,c);
}
A、10,5,1 B、11,5,-6 10,5,1 C、11,5,1 D、11,5,-6 -6,5,11
48.以下程序执行后sum的值是( B )。
void main(void)
{
int i , sum=0;
for (i=1;i<6;i++) sum+=i;
printf("%d\n",sum);
}
A) 0 B) 15 C) 5 D) 不确定
49.存储以下数据,占用存储字节最多的是( )。
A)0 B)'0' C)"0" D)0.0
50.C语言中要求运算对象必须是整型的运算符是:( )
A) / B) ++ C) != D) %
51.以下正确的说法是( )。
A)用户调用标准库函数前,必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C)系统不允许用户重新定义标准库函数
D)用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中
52.putchar函数可以向终端输出一个( )。
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)3
54.执行以下程序后的输出结果是( )。
#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=%d\n", 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=7
55.以下叙述中正确的是( )。
A) 由于do---while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B) do---while循环由do开始,用while结束,在while(表达式)后面不能写分号
C) 在do----while循环体中,一定要有能使while后面表达式的值变为零的操作
D) do---while循环中,根据情况可以省略while
56.对两个数组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("%d\n", a);
}
A) 1 B) 0 C) 非0的数 D) –1
60.以下叙述中不正确的是_______
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,10
B) 10,20,30
C) 456,567,678
D) 678,567,456
62.以下程序运行后,输出结果是 。
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("%d\n",p);
}
A) 8,15
B) 8,16
C) 8,17
D) 8,8
63.下列程序的输出结果是________。
#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,1
B) 1,1,1,1,2,3
C) 1,1,2,2,3,3
D) 1,1,2,1,3,1
64.以下程序执行时的输出结果为_______。
#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)==p2[k])
putchar(*(k+p1));
}
A) age B) ga C) language
65.下列程序段的输出结果是_______。
A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2
void 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 a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
A) 非法 B) a[4]的地址 C) 5 D) 3
67.下列程序的运行结果是________。
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 0
68.下面程序的输出结果是________。
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;
p=a;
printf("%d\n",*p+9);
}
A) 0 B) 1 C) 10 D) 9
69.若有说明: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 name[20];
char sex;
struct date birth;
}person;
A) year=1976 B) birth.year=1976
C) person.birth.year=1976 D) person.year=1976
72.根据下述定义,可以输出字符'A'的语句是 。
struct person
{ char name[11];
struct
{ char name[11];
int age;
}other[10];
};
struct person man[10]={ {"Jone",{"Paul",20}},{"Paul",{"Mary",18}},
{"Mary",{"Adam",23}},{"Adam",{"Jone",22}}
};
A) printf("%c",man[2].other[0].name[0]); B) printf("%c",other[0].name[0]);
C) printf("%c",man[2].(* other[0])); D) printf("%c",man[3].name);
73.若有以下程序段:
struct st
{ int n;
struct st *next; };
struct st a[3]={5,&a[1],7,&a[2],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+2^2+3^2+...+%d^2=%d\n", n, sum);
}
0<x<1
1≤x<2
2≤x<3
3≤x<4
2.函数求解,输入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=%f\n",y);
}
}
3.从键盘中输入若干个学生的期末成绩,当输入为负数时结束输入。统计并输出这若干个学生的总分和平均分。(15分)
【参考程序】
main()
{ int n=0;
float score,sum=0,average;
printf("请输入学生的期末成绩,输入为负数时结束:\n");
do {
scanf("%f", &score);
if (score<0) break;
else
if (score>100)
{
printf("输入错!分数应为0~100。请重输。\n");
continue;
}
sum += score;
n++;
} while (score>0);
average = sum/n;
printf("总分=%f,平均分=%f\n", sum, average);
}
4.求100-200间的所有素数。(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");
fo
展开阅读全文