1、C语言 复习与练习,考试大纲,考试形式 笔试,闭卷,120分钟 考试题型 选择(30) 简答(30) 填空(20) 程序设计(20) 范围,考试范围(1),第3章:了解数据基本类型,包括整型、浮点型、字符型;了解算术、赋值和逗号运算符和表达式 第4章:了解C语言语句,重点掌握输入输出函数printf和scanf,牢记基本的输入输出格式说明字符 第5章:掌握关系运算符和关系表达式,掌握逻辑运算符和逻辑表达式;熟悉if语句的三种形式;掌握条件运算符;熟悉多分支语句switch语句;能自行编写简单的选择结构程序 第6章:重点掌握四种循环控制语句:goto+if语句;while语句;do while语
2、句;for语句;一般掌握break语句和continue语句;能自行编写简单的循环控制语句,考试范围(2),第7章:重点掌握一维数组的定义和引用;了解二维及多维数组的定义和引用;重点掌握字符数组的使用,尤其是字符串结束标志 第8章:重点掌握掌握函数的定义,形式参数和实际参数,函数的返回值;熟悉函数调用的多种形式;理解局部变量和全局变量的概念;理解四种变量存储类别,重点在静态局部变量和外部变量 第10章:理解指针的概念;理解多种指针:包括变量指针,数组指针,字符串指针;重点掌握指针作函数参数的概念和用法; 第11章:重点掌握结构体的定义方式;掌握结构体变量,结构体数组。,重点分布,第3章 数据类
3、型18% 第4章 顺序结构、输入输出6% 第5章 选择结构、关系和逻辑运算符14% 第6章 循环结构13% 第7章 一维数组和字符数组20% 第8章 函数和四种变量25% 第10章 指针4%,10 指针(1),1 int a = 1,2,3, *p, *q;p = a+1;q = p+;执行该程序段后, p和q所指向的单元的内容分别为:A) (*p) = 1, (*q) = 2 B) (*p) = 2, (*q) = 3C) (*p) = 3, (*q) = 2 D) 以上都错 2 对于 int *p, *q, i=5, j=6;执行:p = 后 (*p)=_ _ , (*q)= _,6,5,
4、10 指针(2),3 以下选项中,对基类型相同的指针变量不能进行运算的运行符是( )。A B C D 4 若有以下定义和语句,且0 i10,则对数组元素地址的正确表示是( )。 int a 1,2,3,4,5,6,7,8,9,0, p, i ; pa; A A(ai ) Bapa Cpi D(&pi),8 函数(1),1 有一函数:int f(int a) auto int b = 0;static int c = 3;b = b+1;c = c+1;return(a+b+c);如果有int i, j; 则执行两次调用:i=f(2); j=f(2) 后, i, j值为:A) i = 7, j
5、= 7 B) i = 7, j = 8C) i = 8, j = 7 D) i = 8, j = 8,8 函数(2),1以下正确的叙述是( )。 AC语言的主函数是无参函数 BC语言的主函数最多允许有1个参数 CC语言的主函数最多允许有2个参数 DC语言的主函数可以有2个以上的参数 2C语言中函数返回值的类型是由( )决定的。 Areturn语句中的表达式类型 B调用该函数的主调函数类型 C调用函数时临时确定 D定义函数时所指定的函数类型,8 函数(3),3以下不正确的描述是( )。 A调用函数时,实参可以是表达式 B调用函数时,简单变量的实参与形参可以共用内存单元 C调用函数时,简单变量做实
6、参与形参将为形参分配内存单元 D调用函数时,实参与形参的类型必须一致 4若x为int型变量,则以下函数fun的返回值类型为( )。 fun(x) printf(“%dn“,x); A返回值为void类型 B无法确定返回值 C返回值为int类型 D没有返回值,8 函数(4),5C语言规定,调用一个函数时,实参变量与形参变量之间的数据传递是( ) A地址传递 B值传递 C由实参传给形参,再由形参传回来给实参 D由用户指定传递方式 6在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量的存储类应该是( )。 Aextern BRegister Cauto Dstatic
7、,8 函数(5),7以下不正确的描述为( ) A在函数之外定义的变量称为外部变量,外部变量是全局变量 B在一个函数中既可以使用局部变量,又可以使用同名全局变量 C外部变量定义和外部变量说明的含义不同 D若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。,8 函数(6),8以下不正确的描述为( ) A不同函数中可以使用相同名字的变量 B形式参数是局部变量 C在一个函数内部定义的变量只在本函数范围内有效 D在一个函数内部的复合语句中定义的变量可以在本函数范围内有效 9在C语言中,对于存储类型为( )的变量,只有在使用它们时才占用内存单元。 Astatic和au
8、to B静态(static) Cregister和static Dauto和register 10C语言中形参的缺省存储类别是( ) A自动(auto) B静态(static) C寄存器(register) D外部(extern),8 函数(7),11下列程序的运行结果是: 。 unsigned fun3(unsigned num)unsigned k=1;dok=num%10;num/=10;while(num);return(k); main( ) unsigned n=26;printf(“%dn“,fun3(n); ,12,8 函数(8),12下列程序的运行结果是: 。 long fu
9、n4(int n) long s;if (n=1)|(n=2) s=2;else s=n+fun4(n1);return(s); main( ) long x;x=fun4(4); printf(“%ldn“,x); ,9,8 函数(9),13下列程序的运行结果是: 。 int fun2(int x,int y)int m=5;return(xym); main( )int a=7,b=5;printf(“%dn“,fun2(a,b); ,30,7 数组(1),1 如果char cc=“12345“,做sizeof(cc)后的返回值应为 A) 2 B) 5 C) 6 D) 12 定义字符指针数
10、组arr, 数组大小为20,应写为 _,sizeof()返回参数对象的字节数: 这里的参数是字符数组cc,有6个元素.,char *arr20;_,7 数组(2),3下面程序的运行结果是: #include add1(a,n) int a,n; int i;for(i=0; in; i+) ai+; main() static int array=0,1,2,3,4,5,6,7,8,9;int i; add1(array,10);for (i=0; i10; i+)printf(“%d “,arrayi); ,1 2 3 4 5 6 7 8 9 10,7 数组(3),下面程序的运行结果是: #
11、include main( ) int a33=1,2,3,4,5,6,7,8,9;int i;for (i=0; i3; i+)printf(“%d“,ai2i); ,357,6 循环控制(1),1 用for循环打印 1 4 7 10 13 16 19 22 25 , 其语句应为:for (i=1; i=9; i+) printf(“%3d”, _ _);执行完下列语句段后, i,j值分别为:_int i, j;j=10*(i=5);i+=j*=i+2;,3*i-2,355,350,解析: 第一条语句执行后: i = 5, j = 50 执行第二条语句:i+=j*=i+2 i += (j *
12、= (i+2) i += (j *= 7) i += (j = 50*7) i = 5 + 350 = 355, j = 350,6 循环控制(2),2 用for循环打印 0 1 2 0 1 2 0 1 2;for( i=1; i=9; i+ ) printf(“%2d“, _ _);,(i-1)%3,5 选择结构程序设计(1),1 语句if (ab) k=0; else k=1; (int a, b, k) 等价于:A) k=(ab)?1:0; B) k=ab; C) k=a=b; D) 以上均不是 2判断字符变量c的值为数字(0-9)则返回1,否则返回0, 可用表达式:A) 0=c=9 B
13、) 0=c & c=9 C) 0=c | c= 9 D)以上均不是,5 选择结构程序设计(2),3 对于int x, y; 语句 if (x=0) if (x) y=1; else y= -1; B) if (x!=0) if (x0) y=1; else y= -1; else y=0;C) if (x0) y=1; else y=0;,5 选择结构程序设计(3),4 循环 for(i=0, j=5; +i!=-j; ) printf(“%d %d”, i, j); 将执行A) 6次 B) 3次 C) 0次 D) 无限次,i = 0, j = 5, (+i1) != (-j4) 成立: i
14、= 1, j = 4 i = 1, j = 4, (+i2) != (-j3) 成立: i = 2, j = 3 i = 2, j = 3, (+i3) != (-j2) 成立: i = 3, j = 2 ,4 顺序程序设计(1),1下面程序的运行结果是( )。 main( ) int a, b;a=23; b=87;printf(“%d%dn“,a,b); A 23 B23,87 C a=23 D238787 b=87 2下面程序的运行结果是( )。 main( ) float x, y;x=12.34; y=0.00045; printf(“%f,%f“,x,y); A12.34,0.00
15、045 B12.340000,0.000450 C12.34 0.00045 D12.340000 0.000450,4 顺序程序设计(2),3下面程序的运行结果是( )。 main( ) int h=34, k=56;printf(“h=%dnk=%dn“,h,k); Ah=34 Bh=34 k=56 C34 56 D34 k=56 k=56 4下面程序的运行结果是( )。 main( ) float x=12.34567, y=345.2354;printf(“x=%5.3 f, y=%5.3 f “,x,y); A12.346,345.235 Bx=12.346, y=345.235 C
16、12.345670,345.235000 Dx=12.34567, y=345.2354,4 顺序程序设计(3),5下面程序的运行结果是( )。 main( ) int s=3, w=5;printf(“%u, %u, %d, %d“,s,w,s,w); A3,5,3,5 B3 5 3 5 C65533,5,3,5 D65533,65531,3,5 6运行下面程序时若从键盘输入:123 45 6789 输出结果是( )。 main( ) int a, b, c;scanf(“%3d%3d%3d“, Aa=123, b=45, c=678 Ba=123 b=454 c=678 C123, 45,
17、 678 Da=123, b=456, c=789,4 顺序程序设计(4),7运行下面程序时若从键盘输入:123456789 输出结果是( )。 main( ) int a, b, c;scanf(“%3d%3d%3d“, Aa=12 b=45c=3467 B12 45 3467 Ca=12B=45c=3467 Da=12 b=45 c=3467,3 数据类型、运算符、与表达式(1),1 语句printf(“%d%d”, 123); 将输出:A) %123%d B) %d123 C) %d123 D)上述语句语法有错 2 对于整型变量i,j执行scanf(“%d%*d%d“,2,4,“%”格式
18、表示输出一个“%”。,*表示跳过它指定的列数,3 数据类型、运算符、与表达式(2),4 对于int i; char c, s20;从输入序列123ab45efg中将123读入i; b读入c; “45efg”读入s, 则scanf语句应写为: A) scanf(“%da%c%s”, i, c, s) B) scanf(“%d%*c%c%s”,3 数据类型、运算符、与表达式(3),5 若a, b, c均为int型变量且有值,要交换变量a和b的值,正确的语句组是( )。Ac=a, a=b, b=c; Ba=b; b=a;Cc=a; a=b; b=c ; Dc=a; b=a; a=c; 6 x为int
19、型变量,且值为2345,不正确的输出函数是( )。Aprintf(“%d“,x); Bprintf(“%3d“,x);Cprintf(“%c“,x) ; Dprintf(“%s“,x);,【例1】输出以下图形,C,B,A,#include “stdio.h” #define N 6 main() int j,k;for(j=1;j=N;j+) for(k=1;k=30-j;k+)printf(“ “);for(k=1;k=2*j-1;k+)printf(“*“);printf(“n“); ,【A】,#include “stdio.h” #define N 6 main() int i,j,k;
20、for(i=1;i4;i+) for(j=1;j=N;j+) for(k=1;k=30-j;k+)putchar( );for(k=1;k=2*j-1;k+)printf(“*“);printf(“n“);printf(“n“);printf(“n“); ,【B】,#include main( ) int i,j;for(i=1;i=5;i+) for(j=1;j=30-i;j+)putchar(“ “);for(j=1;j=2*i-1;j+)printf(“*“);printf(“n“);,for(i=4;i0;i-) for(j=1;j=30-i;j+)putchar( );for(j=1
21、;j=2*i-1;j+)printf(“*“);printf(“n“); /main,【C】,栈的应用数制转换,十进制数和其它进制数的转换是计算机实现计算的基本问题 算法策略:N=(N div d)*d+N mod d 例: (1348)10=( )8,其运算过程如下:N N div 8 N mod 81348 168 4168 21 021 2 52 0 2,2504,栈的应用数制转换函数,void conversion( ) initstack(s);scanf (“%d”,n);/读入要转换的数while(n)push(s,n%8);/各个位数入栈n=n/8;while(! Stacke
22、mpty(s)pop(s,e);/按高位到低位顺序出栈printf(“%d”,e);,十进制数转换成二进制、十六进制数?,#include “stdio.h“ void main() char ch;int i,count10=0; /* for(i=0;i=0,输入一个字符串,统计其中的数字字符各有多少 ?,#include void main() unsigned int n,r;void dtor(unsigned,unsigned);printf(“输入一个正整数 n= “);scanf(“%u“, ,编写函数,实现将一个十进制整数转换成r(r=16)进制输出,void dtor(un
23、signed x, unsigned r0) char a50;int i=0,y;while (x != 0) y = x % r0; i+;if (y0) putchar(ai-);putchar(n);,编写函数,实现将一个十进制整数转换成r(r=16)进制输出,#include void main() unsigned int n,r;void dtor(unsigned,unsigned);printf(“输入一个正整数 n= “);scanf(“%u“, ,编写递归函数,实现将一个十进制整数转换成r(r=16)进制输出,void dtor(unsigned x, unsigned r0) int y;if (x != 0) /*以下语句顺序不能颠倒,否则逆序*/ dtor(x/r0,r0); y = x % r0;if (y10) putchar(0+y);else putchar(a+y-10); ,将十进制整数x转换成r0进制的数,然后输出。,输入月份,打印1999年该月有几天,#include main() int month;int day; printf(“please input the month number:“); scanf(“%d“, ,