您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页C语言分章节知识点及典型试题

C语言分章节知识点及典型试题

来源:抵帆知识网
程序设计语言C复习 第一章 数据类型与表达式

一.知识点

1.C语言的特点:①语言简洁、紧凑,使用方便、灵活; ②运算符丰富;

③数据结构丰富; ④具有结构化控制语句; ⑤语法不太严格,程序设计自由度大;

⑥可以进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作; ⑦生成的目标代码质量高,程序执行效率高; ⑧程序的移植性好。 2.C程序的组成:

⑴C程序是由函数构成的;

⑵一个函数包括函数的首部〔即函数的第一行〕和函数体〔即花括号部分〕; ⑶函数体一般包括声明部分和执行部分;

⑷一个C程序总是从main函数开始执行,从main函数结束;

⑸C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上; ⑹每个语句和数据定义的最后必须有一个分号;

⑺C语言本身没有输入输出语句,是通过函数实现输入输出的; ⑻可以用/*……*/对C程序的任何部分作注释。

3.C语言程序的运行:源程序文件的扩展名为.c,目标程序文件的扩展名为.obj,可执行程序文件的扩展名为.exe。

4.C的数据类型:基本、构造、指针和空类型,char、int、short、long、unsigned、float、double、enum、struct、union、typedef。

5.常量与变量的概念,注意符号常量的定义与使用;

6.整型、实型、字符型常量的表示,注意整型常量的十进制、八进制、十六进制的书写。 7.变量的定义,C的标识符包括关键字、预定义标识符、用户定义标识符;用户定义标识符的可用字符为字母、数字、下划线,第一个字符为字母或下划线。

8.常见数据类型的取值范围,int为-32768~+32767,unsigned int为0~65535。 9.转义字符:\\n、\、\\b、\\r、\\f、\\\\、\\’、\\”、\\ddd、\\xhh

10.不同数值型数据的混合运算,低级类型转换为高级类型运算 11.C的运算符:注意结合方向和运算的优先级

12.算术运算符:+、-、*、/、%、++、--,注意自加、减运算符分前缀和后缀两种方式。其中前缀方式为先自加、减,后引用;后缀方式为先引用,后自加、减;运算符%要求运算量为整数,运算结果也为整数。注意除运算时,假设运算量为整型时,其运算结果也是整型的规则。

13.赋值类运算符:=、+=、-=、*=、/=、%=,注意含义和数据类型的转换。 14.逗号运算符的使用,注意逗号运算符的运算规则。

二.练习 ㈠.填空题:

1.在TURBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是 .exe 。 2.C语言源程序文件的后缀是 .c ,经过编译后,生成文件的后缀是 .obj ,经过连接

第 1 页 共 39 页

程序设计语言C复习 后,生成文件的后缀是 .exe 。

3.结构化程序由 顺序、 选择〔分支〕 、 循环 三种基本结构组成。

4.假设k为整型变量且赋值11。请写出运算k++后表达式的值 11 和变量的值 12 。

5.假设x为double型变量,运算x=3.2,++x后表达式的值 4.2 和变量的值 4.2 。 6.函数体由符号 { 开始,用符号 }结束。函数体的前面是 定义 部分,其后是 执行 部分。

7.C语言中的标识符可分为 关键字、 用户标识符 和预定义标识符三类。

8.在C语言程序中,用关键字 int 定义基本整型变量,用关键字 float定义单精度实型变量,用关键字 double 定义双精度实型变量。

9.把a1、a2定义成单精度实型变量,并赋初值1的定义语句是 float a1=1.0,a2=1.0;。 10.C程序中定义的变量,代表内存中的一个 存储空间。 11.表达式3.5+1/2的计算结果是 3.5。 12.写出数学表达式

a•b三个等价的C语言表达式 a*b/(c*d)、a /(c*d)*b、b/(c*d)*a。 c•d13.通常一个字节包含 8 个二进制位。

14.当电脑用两个字节存放一个整数时,能存放的最大〔十进制〕整数是216-1(65535)、最小〔十进制〕整数是 -215(-32768) 。

15.在C语言中整数可用 十 进制数、 八 进制数和 十六 进制数三种数制表示。

16.C语言中,int型数据占 2 个字节,long型数据占 4 个字节,unsigned int型数据占 2 个字节,short型数据占 2 个字节, float型数据占 4 个字节,double型数据占 8 个字节,char型数据占 1 个字节。

㈡.选择题:

1.组成C语言程序的是〔 〕〔C〕。

A.子程序 B.过程 C.函数 D.主程序和子程序 2.以下表达中正确的选项是〔 〕(C)。

A.在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。 B.C程序由主函数组成。 C.C程序由函数组成。

D.C程序由函数和过程组成。

3.以下选项中正确的整型常量是〔 〕(B)。

A.12. B.-20 C.1,000 D.4 5 6 4.以下选项中正确的实型常量是〔 〕(D)。

A.0 B.3. 1415 C.0.329╳102 D..871 5.以下选项中不合法的用户标识符是〔 〕(C)。

A._123 B.printf C.A$ D.Dim 6.C语言中运算对象必须是整型的运算符是〔 〕(A)。 A.% B./ C.! D.*

第 2 页 共 39 页

程序设计语言C复习 7.可在C程序中用作用户标识符的一组标识符是〔 〕(B)。 A.void B.as_b3 C.For D.2c define _123 -abc DO WORD If case SIG

8.假设变量已正确定义并赋值,符合C语言语法的表达式是〔 〕(B)。

A.a=a+7; B.a=7+b+c,a++ C.int〔12.3%4〕 D.a=a+7=c+b 9.不合法的八进制数是〔 〕(B)。

A.0 B.028 C.077 D.01 10.不合法的十六进制数是〔 〕(A)(零X)。

A.oxff B.0Xabc C.0x11 D.0x19 ㈢.程序设计题:

1.编写一个C程序,输入a、b、c三个数,输出其中最大者。 #include void main() {int a,b,c,max;

printf(“input 3 num:\\n”);

scanf(“%d%d%d”,&a,&b,&c); max=a;

if(b>max)max=b; if(c>max)max=c; printf(“%d”,max); }

第二章 算法与顺序结构

一.知识点

1.算法:为解决一个问题而采取的方法和步骤。 2.算法的分类:数值算法、非数值算法。

3.算法的特点:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。 4.算法描述方法:自然语言、流程图、改进流程图、N—S流程图、伪代码、电脑语言。 5.C语句的类型:控制语句、函数调用语句、表达式语句、空语句、复合语句。 6.输入输出的概念:输入输出是相对主机而言,C语言是由函数来实现输入输出的。 7.字符数据的输入/输出:getchar〔〕、putchar〔〕 8.格式输入/输出:scanf〔〕、printf〔〕

9.printf的格式符:d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,n,-。

10.scanf的格式符:d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,*;&。注意输入数据时数据流的分隔符,系统默认的分隔符为空格、tab键和回车。 11.顺序结构的设计思想:声明变量、输入数据、处理、输出结果。

二.练习

第 3 页 共 39 页

程序设计语言C复习 ㈠.填空题:

1.以下程序段执行后的输出结果是:⑴ -200 2500 ⑵ i=-200,j=2500⑶ 。

int i=-200,j=2500; printf〔“⑴ %d %d”,i,j〕; printf〔“⑵ i=%d,j=%d\\n”,i,j〕; printf〔“⑶ i=%d\\n j=%d\\n”,i,j〕;

2.复合语句在语法上被认为是 一条语句。空语句的形式是 ; 。 3.C语句的最后用 ;结束。

4.以下程序段的输出结果是 x= 127,x= 177,x= 7f,x= 127 。

int x=0177;printf〔“x=%6d,x=%6o,x=%6x,x=%6u\\n”,x,,x,x,x〕;

5.以下程序段的输出结果是 a=513.7215,a= 513.79,a=513.721500,a= 531.721500。

double a=513.7215; printf〔“a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf\\n”,a,a,a,a〕; 6.以下程序段的输出结果是 8,3 。

a=3+5,a*4;x=11/3;printf〔“%d,%%d\\n”,a,x〕;

7.以下程序输入三个整数值给a、b、c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。请填空:

#include main〔〕

{ int a,b,c, m ; printf〔“Enter a,b,c:”〕; scanf〔“%d,%d,%d”, &a,&b,&c〕; m=a ;a=b;b=c; c=m ; printf〔“a=%d,b=%d,c=%d\\n”,a,b,c〕;}

8.以下程序不借助任何变量把a、b中的值进行交换。请填空:

#include main〔〕 { int a,b; printf〔“Input a,b:”〕; scanf〔“%d,%d”, &a,&b〕; a+= b ;b=a- b ;a=a- b ; printf〔“a=%d,b=%d\\n”,a,b〕;}

㈡.选择题:

1.假设a、b、c、d都是int型变量且初始值为0,以下不正确的赋值语句是〔 〕(C)。 A.a=b=c=100; B.d++; C.c+b; D.d=〔c=22〕-〔b++〕; 2.以下选项中不是C语句的是〔 〕(C)。

第 4 页 共 39 页

程序设计语言C复习 A.{int i;i++;printf〔“%d\\n”,i〕;} B.; C.a=5,c=10 D.{ ;} 3.以下合法的C语言赋值语句是〔 〕(D)。 A.a=b=58 B.k=int〔a+b〕; C.a=58,b=58 D.--i; 4.以下程序的输出结果是〔 〕(C)。

A.0 B.1 C.3 D.不确定的值

main〔〕

{ int x=10,y=3; printf〔“%d\\n”,y=x/y〕;}

5.假设变量已正确说明为int类型,要给a、b、c输入数据,正确的输入语句是〔 〕D。 A.read〔a,b,c〕; B.scanf〔“%d%d%d”,a,b,c〕; C.scanf〔“%D%D%D”,&a,&b,&c〕; D.scanf〔“%d%d%d”,&a,&b,&c〕; 6.假设变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是〔 〕C。 A.a=a+b,b=a-b,a=a-b; B.t=a,a=b,b=t; C.a=t;t=b;b=a; D.t=b;b=a;a=t;

7.假设变量已正确定义,以下程序段的输出结果是〔 〕D。 A.输出格式说明与输出项不匹配,输出无定值

B.5.1700 C.5.16800 D.5.16900

x=5.1;printf〔“%f\\n”,〔int〕〔x*1000+0.5〕/〔float〕1000〕; 8.执行以下程序段后,c3中的值是〔 〕A。

A.0 B.1/2 C.0.5 D.1

int c1=1,c2=2,c3;c3=c1/c2;

9.执行以下程序段后,其输出结果是〔 〕B。

A.0,0,-10 B.0,0,3 C.-10,3,-10 D.3,3,-10

int a=0,b=0,c=0; c=〔a-=a-5〕,〔a=b,b+3〕; printf〔“%d,%d,%d\\n”,a,b,c〕; 10.以下程序的输出结果是〔 〕D。

A.a=%2,b=%5 B.a=2,b=5 C.a=%%d,b=%%d D.a=%d,b=%d

main〔〕

{ int a=2,b=5; printf〔“a=%%d,b=%%d\\n”,a,b〕;} 11.假设int型占两个字节,以下程序段的输出是〔 〕D。

A.-1,-1 B.-1,32767 C.-1,32768 D.-1,65535

int a=-1;printf〔“%d,%u\\n”,a,a〕; 12.以下程序段的输出结果是〔 〕C。

A.|3.1415| B.| 3.0| C.| 3| D.| 3.|

float a=3.1415;printf〔“|%6.0f|\\n”,a〕; 13.以下程序段的输出结果是〔 〕B。

A.9 8 B.8 9 C.6 6 D.以上三个都不对

#include main〔〕

{ double a=-3.0,b=2;

第 5 页 共 39 页

程序设计语言C复习 printf〔“%3.0f %3.0f\\n”,pow〔b,fabs〔a〕〕,pow〔fabs〔a〕,b〕〕;} 14.假设a为整型变量,则以下语句〔 〕B。

A.赋值不合法 B.输出值为-2 C.输出为不确定值 D.输出值为2

a=-2L;printf〔“%d\\n”,a〕; 15.假设有定义char s=‘\\092’;则该语句〔 〕B。

A.使s的值包含1个字符 B.定义不合法,s的值不确定 C.使s的值包含4个字符 D.使s的值包含3个字符 16.假设k、g均为int型变量,则以下语句的输出为〔 〕D。 A.15 B.16 C.15 D.16 6f 70 71 6f

k=017;g=111;printf〔“%d\\n”,++k〕;printf〔“%x\\n”,g++〕;

17.已知字母a的ASCII十进制代码为97,执行以下语句后的输出为〔 〕C。 A.b,c B.a--运算不合法,故有语法错误

C.98,c D.格式描述和输出项不匹配,输出无定值

char a=‘a’;a--;printf〔“%d,%c\\n”,a+‘2’-‘0’,a+‘3’-‘0’〕; 18.以下程序的输出为〔 〕A。

A.27.000000 B.27.500000 C.28.000000 D.28.500000

#include main〔〕

{ int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2;printf〔“%f\\n”,x〕; } 19.以下程序的输出结果是〔 〕C。

A.18 B.9 C.-18 D.-9

main〔〕 { int a=9;a+=a-=a+a;printf〔“%d\\n”,a〕; } 20.以下程序的输出结果是〔 〕A。

A.0 B.5 C.1 D.不确定值

main〔〕 { int a=7,b=5;printf〔“%d\\n”,b=b/a〕;} 21.以下程序的输出结果是〔 〕C。

A.12 B.11 C.10 D.9

main〔〕 { int a=011;printf〔“%d\\n”,++a〕;}

㈢.程序设计题:

用N—S图表示以下问题:

1.有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换。 编写程序

2.依次将10个数输入,要求将其中最大的数打印出来。 #include main() {

第 6 页 共 39 页

程序设计语言C复习 int i,a,max;

scanf(\"%d\ for (i=1;i<=9;i++) {

scanf(\"%d\ if (a>max) max=a; }

printf(\"%d\ }

3.有3个数a、b、c,要求按从大到小的顺序把它们打印出来。 main() {

float a,b,c,t;

scanf(\"%f,%f,%f\ if(a>b)

{t=a;a=b;b=t;} /*实现a和b的互换*/ if(a>c)

{t=a;a=c;c=t;} /*实现a和c的互唤*/ if(b>c)

{t=b;b=c;c=t;] /*实现b和c的互换*/ printf(\"%5.2f,%5.2f,%5.2f\\n\ }

4.求1+2+3+……+100。 #include int main() {

int i,sum=0; i=1;

while(i<=100) {

sum=sum+i; i=i+1; }

printf(“%d”,sum); }

5.判断一个数n能否同时被3和5除。 #include main(void)

第 7 页 共 39 页

程序设计语言C复习 { int n;

scanf(\"%d\;

if(n%3 == 0 && n%5 == 0)

printf(\"%d能否同时被3和5整除\\n\ else

printf(\"%d不能否同时被3和5整除\\n\ return 0; }

6.将100~200之间的素数打印出来。 #include int isPrime(int n) { int i;

for(i=2;i*i<=n;i++) if(n%i==0) return 0; return 1; }

int main() { int i;

for(i=100;i<=200;i++) {

if(isPrime(i)) printf(\"%d\\n\ } }

7.求两个整数m和n的最大公约数和最小公倍数。 main() {

int a,b,num1,num2,temp;

printf(\"please input two numbers:\\n\"); scanf(\"%d,%d\ if(num1 { temp=num1; num1=num2; num2=temp; }

a=num1;b=num2;

第 8 页 共 39 页

程序设计语言C复习 while(b!=0)/*利用辗除法,直到b为0为止*/ {

temp=a%b; a=b; b=temp; }

printf(\"gongyueshu:%d\\n\

printf(\"gongbeishu:%d\\n\ }

8.求方程ax2+bx+c=0的根 #include

#include //用到平方根函数 void main() {

float a,b,c,x1,x2,p,q,m; scanf(\"%f%f%f\

if ((a==0.0)&&(b==0.0)&&(c!=0.0)) printf(“no value!\");

else if ((a==0.0)&&(b==0.0)&&(c==0.0)) printf(\"any value!\"); else if ((a==0.0)&&(b!=0.0)) printf(\"x1=x2=%f\else

{m=b*b-4.0*a*c; if(m>=0)

{ x1=(-b+sqrt(m))/(2.0*a); x2=(-b-sqrt(m))/(2.0*a); printf(\"x1=%f\\n\ printf(\"x2=%f\\n\ }

else { p=-b/(2.0*a); q=sqrt(-m)/(2.0*a); printf(\"x1=%f+%fi\\n\ printf(\"x2=%f-%fi\\n\ } }}

9.编写程序,输入两个整数1500和350,求出它们的商和余数并进行输出。

第 9 页 共 39 页

程序设计语言C复习 #include #inclued void main() {int a; int b; int c,d;

a=1500,b=350; c=a/b;//商数 d=a%b;//余数

pritf(\"商数为: %d\\n\ printf(\"余数为:%d\\n\ return 0; }

10.编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。 #include main()

{ double a, b, c, d;

printf(\"输入三个双精度数\\n\"); scanf(\"%lf%lf%lf\ d = ( a + b + c) / 3; printf(\"%.1f\\n\ } 11.求三角形的面积:a,b,c是边长,p是半边长,s是面积,则s=[p(p - a)(p - b)(p - c)] 1/2

#include #include main()

{float a,b,c,p,s;

printf(\"input 3 num:\"); scanf(\"%f%f%f\b,&c); p=(a+b+c)/2;

s=p*(p-a)(p-b)(p-c); s=pow(s,0.5); printf(\"s=%f\",s); }

12.输入一个华氏温度,要求输出摄氏温度。公式为:c=5〔f-32〕/9。 #include main()

第 10 页 共 39 页

程序设计语言C复习 { double tem_c, tem_f;

puts(\"=====华氏温度至摄氏温度转换程序=====\"); printf(\"请输入华氏温度:\"); scanf(\"%lf\

tem_c = (tem_f - 12) * 5.0 / 9.0;

printf(\"%f对应的摄氏温度为%.2f\ renturn 0; }

第三章 选择结构程序设计

一.知识点

1.关系运算符、逻辑运算符、逻辑值的表示与含义;注意&&、||的运算规则。 2.三种if语句

3.选择结构的嵌套,注意if与else的配对; 4.条件运算符:?:

5.switch语句,注意其执行过程; 6.选择结构程序设计思想。

二.练习 ㈠.填空题:

1.C语言中用 非0 表示逻辑值“真”,用 0 表示逻辑值“假”。

2.C语言中的关系运算符按优先级别是 、 、 、 、 、 。 答案:>、<、>=、<=、==、!=

3.C语言中的逻辑运算符按优先级别是 、 、 。 答案:!、&&、||

4.C语言中的关系运算符和逻辑运算符的优先级别是 、 、 、 、 、 、 、 、 。

!、>、<、>=、<=、==、!=、&&、||

5.C语言中逻辑运算符的 ! 优先级高于算术运算符。 6.将以下数学式改写成C语言的关系表达式或逻辑表达式: a=b或a4 x>4||x<-4 7.以下程序的输出结果 1 。

main〔〕 { int a=100;

if〔a>100〕 printf〔“%d\\n”,a>100〕; else printf(“%d\\n”,a<=100);} 8.假设已知a=10、b=15、c=1、d=2、e=0,请分别给出以下表达式的运算结果:

⑴ a*b && c 1 ⑵ a+b>10 || a+b<0 1 ⑶ e 0 ⑷ c==b>e 1 ⑸ !a⑽ (b==10) && (a==10) 0 ⑾ !0 || d && a==c+d 1

第 11 页 共 39 页

程序设计语言C复习 ⑿ (a+c==b)==(b+d==a) || (c=b+a)>(d=c+b) 1

9.当a=1、b=2、c=3时,执行以下if语句后,a= 3 、b= 1 、c= 1 。

if〔a>c〕;b=a;a=c;c=b;

10.当a=1、b=2、c=3时,执行以下if语句后,a= 3 、b= 2 、c= 2 。

if〔a>c〕b=a;a=c;c=b;

11.当a=1、b=2、c=3时,执行以下if语句后,a= 1 、b= 2 、c= 2 。

if〔a>c〕b=a,a=c;c=b;

12.将以下两条if语句合并为一条if语句: 。

if〔a>b〕 scanf〔“%d”,&x〕;else scanf〔“%d”,&y〕; if〔a<=b〕 i++;else j++; 答案:if〔a>b〕 {scanf〔“%d”,&x〕;j++;}

else {scanf〔“%d”,&y〕;i++;}

13.将以下嵌套的if语句改写成不嵌套的if语句: 。

if〔w<0〕 k=0;else if〔w<=100〕 k=1; else k=0; 答案:if〔w>=0&&w<=100〕k=1; else k=0;

14.以下程序判断输入的一个整数是否能被3或7整除,假设能整除,输出“YES”,假设不能整除,输出“NO”。请填空:

#include main〔〕 { int k; printf〔“Enter a int number:”〕;scanf〔“%d”,&k〕; if〔 k%3==0||k%7==0 〕printf〔“YES\\n”〕;else printf〔“NO\\n”〕;} 15.在switch语句中,当执行到break语句时,使流程 跳出开关语句 。

㈡.选择题:

1.假设给定条件表达式〔M〕?〔a++〕:〔a--〕,则和表达式M等价的表达式为〔 〕C。 A.M==0 B.M==1 C.M!=0 D.M!=1 2.为表示关系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) 3.以下程序的输出结果是〔 〕D。

A.0 B.1 C.2 D.3

main〔〕

{ int a=2,b=-1,c=2; if〔aif〔b<0〕 c=0; else c+=1; printf〔“%d\\n”,c〕; }

4.以下程序的输出结果是〔 〕A。

第 12 页 共 39 页

程序设计语言C复习 A.1 B.2 C.3 D.4

main〔〕

{ int w=4,x=3,y=2,z=1;printf〔“%d\\n”,〔wmain〔〕

{ int a,b,s;scanf〔“%d %d”,&a,&b〕; s=a; if〔a6.在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式〔 〕。D A.只能用逻辑表达式 B.只能用关系表达式

C.只能用逻辑表达式或关系表达式 D.可用任意表达式 7.以下程序段运行后,x的值是〔 〕D。

A.14 B.4 C.15 D.3

ok1=1;ok2=2;ok3=3;x=15;

if〔!ok1〕 x--;else if〔ok2〕 if〔ok3〕x=3;else x=4; 8.在C语言中,switch语句后一对圆括号中exp的类型〔 〕。A A.可以是任何类型 B.只能为int型

C.可以是整型或字符型 D.只能是整型或实型

9.以下各组运算符中,优先级最高的分别为〔⑴B ⑵C ⑶C ⑷D〕。 ⑴A.?: B.++ C.&& D.+= ⑵A.*= B.>= C.〔类型〕 D., ⑶A.|| B.% C.! D.== ⑷A.= B.!= C.*(乘) D.( )

10.假设a为整型变量,b为字符型变量,则以下正确的switch语句是〔 〕A。 A.switch〔〔int〕x/10〕 B.switch〔b〕 { case 1:a++;break; { case ‘\\042’;x=a/b;break; case 2:b++;break; case ‘6’;x=a*b;break; case 3:c++;break; case ‘\\010’;x=a+c;break; } } C.switch〔〔int〕x/10〕; D.switch〔a/100+10〕

{ case 0:a++;break; { case2 :x=a/b;break; default:b++;break; case6 :x=a*b;break; case 3+1:c++;break; case8 :x=a+c;break; case 3:d++;break; case10 :x=a-c;break; } }

㈢.程序设计题:

1.从键盘输入一个字母,假设是大写字母,要求改用小写字母输出。

第 13 页 共 39 页

程序设计语言C复习 #include void main() {char var;

var=getchar();

if(var>=65&&var<=90) var=32+var; putchar(var); }

2.求ax2+bx+c=0的根。a、b、c由键盘输入,设b2-4ac>=0. #include #include void main()

{float a,b,c,p,x1,x2;

printf(\"input 3 numbers:\\n\"); scanf(\"%f%f%f\ if(b*b-4*a*c>=0) {

p=pow(b*b-4*a*c,0.5); x1=(-b+p)/2; x2=(-b-p)/2;

printf(\"x1=%f,x2=%f\ } else {

p=pow(-b*b+4*a*c,0.5);

printf(\"x1=%f+%fi,x2=%f-%fi\ } }

第四章 循环结构程序设计

一.知识点

1.循环的概念,C实现循环的方法; 2.goto语句,注意标号的书写;

3.while语句,注意条件表达式的设计;

4.do……while语句,注意条件表达式的设计,及while之后的分号; 5.for语句,注意for中三个表达式的一般含义; 6.循环的嵌套;

7.break与continue语句,注意二者之间的区别; 8.循环结构程序设计思想

第 14 页 共 39 页

程序设计语言C复习 二.练习 ㈠.填空题:

1.以下程序段的输出结果 。y=7,x=21

x=y=0;while〔x<20〕y++,x+=3; printf〔“y=%d,x=%d\\n”,y,x〕;

2.当执行以下程序段后,i的值是 、j的值是 、k的值是 。5、4、6

int a,b,c,d,i,j,k;a=10;b=c=d=5;i=j=k=0; for〔 ;a>b;++b〕i++; while〔a>++c〕 j++; do k++;while〔a>d++〕;

3.以下程序段的输出结果 。死循环没有输出结果

int k,m,n;n=10;m=1;k=1; while〔k<=n〕 m*=2; printf〔“%d\\n”,m〕; 4.以下程序的输出结果 -1 。

main〔〕

{ int x=2;while〔x--〕;printf〔“%d\\n”,x〕;} 5.以下程序段的输出结果 11 。

int i=0,sum=1;do{ sum+=i++;}while〔i<5〕;printf〔“%d\\n”,sum〕; 6.有以下程序段:

s=1.0;for〔k=1;k<=n;k++〕s=s+1.0/〔k*〔k+1〕〕;printf〔“%f\\n”,s〕; 要使下面的程序段的功能与上面程序段的功能相同,请填空:

s=0.0;k=0; d=1.0;

do{ s=s+d; k++ ;d=1.0/〔k*〔k+1〕〕;}while〔 k<=n〕; printf〔“%f\\n”,s〕; 7.以下程序的功能是:从键盘上输入假设干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空:

main〔〕

{ float x,amax,amin; scanf〔“%f”,&x〕;amax=x;amin=x; while〔 x>=0 〕

{ if〔x>amax〕amax=x; if〔 x8.以下程序段的输出结果 。a=12,y=12↙a=16,y=28↙a=16,y=44↙a=16,y=60

a=10;y=0;

do { a+=2;y+=a; printf〔“a=%d,y=%d\\n”,a,y〕; if〔y>50〕break;}while〔a=14〕;

第 15 页 共 39 页

程序设计语言C复习 9.以下程序段中,for循环的循环次数为 。10 9 8 7 6

a=2;b=10;for〔i=b;i<=a;i--,a++〕 printf〔“%3d”,i〕; 10.以下程序段的输出结果 。8 *6 *4 *2 *0↙ 8 *6 *4 *2 *0

for〔i=0;i<3;i++,i++〕 { for〔j=10;j>0;j--〕 { if〔〔j+i〕%2〕{ j--;printf〔“*%d ”,j〕;continue;} --j;--j;printf〔“%d ”,j〕;} printf〔“\\n”〕;}

㈡.选择题:

1.以下程序段的输出结果是〔 〕D。

A.9 B.1 C.11 D.10

int k,j,s;

for〔k=2;k<6;k++,k++〕{ s=1;for〔j=k;j<6;j++〕 s+=j;} 2.以下程序段的输出结果是〔 〕。C

A.12 B.15 C.20 D.25

int i,j,m=0;

for〔i=1;i<=15;i+=4〕

for〔j=3;j〈=19;j+=4〉m++; printf〔“%d\\n”,m〕;

3.以下程序段的输出结果是〔 〕。B

A.10 B.9 C.10 D.9 9 8 9 8 8 7 8 7 7 6

int n=10;while〔n>7〕{ n--;printf〔“%d\\n”,n〕;} 4.以下程序段的输出结果是〔 〕。C

A.1 B.3 0 C.1 -2 D.死循环

int x=3;do { printf〔“%3d”,x-=2〕;}while〔!〔--x〕〕; 5.以下程序的输出结果是〔 〕。C

A.15 B.14 C.不确定 D.0

main〔〕

{ int i,sum;for〔i=1;i<6;i++〕sum+=sum;printf〔“%d\\n”,sum〕;} 6.以下程序的输出结果是〔 〕。B

A.741 B.852 C.963 D.8721

main〔〕{ int y=10;

for〔 ;y>0;y--〕if〔y%3==0〕{ printf〔“%d”,--y〕;continue;} } 7.假设x是int型变量,以下程序段的输出结果是〔 〕。D A.**3 B.##3 C.##3 D.**3##4

第 16 页 共 39 页

程序设计语言C复习 ##4 **4 **4##5 **5 **5 ##5

for〔x=3;x<6;x++〕printf〔〔x%2〕?〔“**%d”〕 :〔“##%d\\n”〕,x〕; 8.以下程序的输出结果是〔 〕。A

A.*#*#*#$ B.#*#*#*$ C.*#*#$ D.#*#*$

main〔〕 { int i;

for〔i=1;i<=5;i++〕 { if〔i%2〕printf〔“*”〕;else continue; printf〔“#”〕;} printf〔“$\\n”〕; }

9.以下表达正确的选项是〔 〕。D

A.do_while语句构成的循环不能用其它语句构成的循环来代替。 B.do_while语句构成的循环只能用break语句退出。

C.用do_while语句构成循环时,只有在while后的表达式为非零时结束循环。 D.用do_while语句构成循环时,只有在while后的表达式为零时结束循环。 10.以下程序的输出结果是〔 〕。D

A.39 81 B.42 84 C.26 68 D.28 70

main〔〕 { int x,i;

for〔i=1;i<=100;i++〕

{ x=i;if〔++x%2==0〕if〔++x%3==0〕if〔++x%7==0〕printf〔“%d ”,x〕;} printf〔“\\n”〕; }

11.对下面程序段描述正确的选项是〔 〕。C

A.while循环执行了10次 B.循环是无限循环

C.循环体语句一次也不执行 D.循环体语句只执行一次

int x=10;while〔x=0〕x=x-1;

12.以下关于for循环的正确描述是〔 〕。D A.for循环只能用于循环次数已确定的情况 B.for循环是先执行循环体语句,后判断表达式 C.在for循环中,不能用break语句跳出循环体

D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 13.以下程序段中是死循环的是〔 〕。C

A.int n=1;while〔!n〕n++; B.int n=1;do { n--;}while〔n〕; C.int n=1;do { n++;}while〔n〕; D.for〔n=5;n<1;〕; 14.以下能正确计算1╳2╳3╳…╳10的程序段是〔 〕。C A.do { k=1;n=1;n=n*k;k++;}while〔k<=10〕; B.do { k=1;n=0;n=n*k;k++;}while〔k<=10〕; C.k=1;n=1;do { n=n*k;k++;}while〔k<=10〕;

第 17 页 共 39 页

程序设计语言C复习 D.k=1;n=0;do { n=n*k;k++;}while〔k<=10〕;

㈢.程序设计题:

1.编写程序,求1-3+5-7+…-99+101的值。 #include \"math.h\" #include \"stdio.h\" void main() { int i;

double sum=0.0; for(i=0;i<=50;i++) {

sum=sum+pow(-1,i)*(i*2+1); }

printf(\"1-3+5-7+……-99+101=%0.0f\ } 或者

#include \"math.h\" #include \"stdio.h\" void main() {

int i,k=1; long sum=0;

for(i=1;i<=51;i++) {

sum+=k*(i*2-1); k=-k; }

printf(\"1-3+5-7+……-99+101=%ld\ }

2.求1+2+3+…+100的值。 #include int main() {

int i,sum=0; i=1;

while(i<=100) {

sum=sum+i;

第 18 页 共 39 页

程序设计语言C复习 i=i+1; }

printf(“%d”,sum); }

3.把100~200之间的不能被3整除的数输出。 #include void main() { int n;

for(n=100;n<=200;n++); {

if(n%3!=0) printf(\"%d \}

printf(\"\\n\"); }

4.求Fibonacci数列前20个数。#include void main() {int a[20],i; a[0]=1;a[1]=1; for(i=2;i<=19;i++) a[i]=a[i-1]+a[i-2]; printf(\"\\n\");

for(i=0;i<20;i++) printf(\"%d,\}

5.打印1000以内的所有素数。 #include\"stdio.h\" void main() {int a[1001],i,j; a[0]=a[1]=0;

for(i=2;i<=1000;i++) a[i]=i;

for(i=2;i<1001;i++) { if(a[i]!=0)

for(j=i+1;j<1001;j++) { if(j%i!=0);

第 19 页 共 39 页

程序设计语言C复习 else a[j]=0; } }

printf(\"\\n\");

for(i=0;i<1001;i++) {

if(a[i]!=0)

printf(\"%d,\ } }

第五章 数组及其应用

一.知识点

1.数组的概念与定义 2.数组的初始化 3.数组元素的引用

4.字符数组的定义、使用、字符串处理函数 5.数组数据的一般处理方式

二.练习 ㈠.填空题:

1.假设有定义:double w[10];则w数组元素下标的上限是 9 ,下限是 0 。 2.以下程序的输出结果是 12 。

main〔〕

{ int arr[10],i,k=0;

for〔i=0;i<10;i++〕 arr[i]=i; for〔i=0;i<4;i++〕 k+=arr[i]+i; printf〔“%d\\n”,z〕; }

3.以下程序的输出结果是 300,0,2 。

main〔〕

{ int i,j,row,col,m;

int arr[3][3]={{100,200,300},{28,72,-30},{-850,2,6}}; m=arr[0][0];

for〔i=0;i<3;i++〕

for〔j=0;j<3;j++〕 if〔arr[i][j]4.在C语言中,二维数组元素在内存中的存放顺序是 按行存放。

5.假设二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为i*m+j+1。 6.假设有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初

第 20 页 共 39 页

程序设计语言C复习 值是 0 ,a[2][1]得到的初值是 6 。

7.假设有说明char s[20];如果想从键盘上把字符串“This is a book.”输入到数组s中,应当调用的函数是 strcpy ;函数调用语句的形式是strcpy(s, “This is a book.”) 。 8.假设有char str1[20]={“a good”},str[ ]={“ student”};能把str2中的字符串接到str1中的字符串后面的函数调用语句是 strcat(str1,str) 。

9.以下findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。

findmax〔int s[ ],int t〕 { int k,p;

for〔p=0,k=p;pif〔s[p]>s[k]〕 p=k ; return p ; } 10.以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数,其它依次类推。用#号结束输入,请填空。

#include “stdio.h” #include “ctype.h” main〔〕

{ int num[26]={0},i; char c; while〔c=getchar()!=‘#’〕 if〔isupper〔c〕〕 num[c-‘A’]+=1; for〔i=0;i<26;i++〕 if〔num[i]〕 printf〔“%c: %d\\n”,i+‘A’,num[i]〕; }

㈡.选择题:

1.以下程序的输出结果是〔 〕。A

A.不确定的值 B.3 C.2 D.1 main〔〕

{ int n[2]={0},i,j,k=2; for〔i=0;ifor〔j=0;j2.以下对一维数组a的正确说明是〔 〕。D A.char a〔10〕; B.int a[ ];

C.int k=5,a[k]; D.char a[ ]={‘a’,‘b’,‘c’}; 3.假设有说明语句:int a[2][4];则对a数组元素的正确引用是〔 〕。A A.a[0]3] B.a[0][4] C.a[2][2] D.a[2][2+1] 4.以下能对二维数组y进行正确初始化的语句是〔 〕。B A.int y[2][ ]={{ 1,0,1 },{ 5,2,3 }}; B.int y[ ][3]={{1,2,3},{4,5,6}};

第 21 页 共 39 页

程序设计语言C复习 C.int y[2][4]={1,2,3},{4,5},{6}; D.int y[ ][3]={{1,0,1,0},{ },{1,1}};

5.假设有说明语句:int y[ ][4]={0,0};则下面不正确的表达是〔 〕。D A.数组y的每个元素都可以得到初值0;

B.二维数组y的行数为1; C.该说明等价于int y[ ][4]={0}; D.只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0;

6.假设有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8};则a数组的行数为〔 〕。A A.3 B.2 C.无确定值 D.1 7.假设二维数组y有m列,则在y[i][j]前的元素个数为〔 〕。B

A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 8.假设有以下语句,则正确的描述是〔 〕。B char x[ ]=“12345”;char y[ ]={‘1’,‘2’,‘3’,‘4’,‘5’};

A.x数组与y数组的长度相同 B.x数组长度大于y数组长度 C.x数组长度小于y数组长度 D.x数组等价于y数组 9.下面程序段的运行结果是〔 〕。B A.‘a’‘b’ B.ab C.ab c D.abc

char c[5]={‘a’,‘b’,‘\\0’,‘c’,‘\\0’};printf〔“%s”,x〕; 10.有两个字符数组a、b,则以下能正确为a、b进行赋值的语句是〔 〕。D A.gets〔a,b〕; B.scanf〔“%s%s”,&a,&b〕; C.getchar〔a〕;getchar〔b〕; D.gets〔a〕;gets〔b〕;

11.有字符数组s1[80]和s2[80],则以下能正确对s1、s2进行输出的语句是〔 〕。B D A.puts〔s1,s2〕; B.printf〔“%s,%s\\n”,s1,s2〕; C.putchar〔s1,s2〕; D.puts〔s1〕,puts〔s2〕; 12.下面描述正确的选项是〔 〕。D

A.两个字符串所包含的字符个数相同时,才能比较字符串; B.字符个数多的字符串比字符个数少的字符串大

C.字符串“STOP ”与“STOP”相等 D.字符串“That”小于字符串“The” 13.以下对字符数组的描述中错误的选项是〔 〕。C

A.字符数组中可以存放字符串 B.字符数组中的字符串可以整体输入、输出 C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D.不可以用关系运算符对字符数组中的字符串进行比较 14.语句printf〔“%d\\n”,strlen〔“school”〕〕;的输出结果是〔 〕。B A.7 B.6 C.存在语法错误 D.不定值

15.有语句char s1[10],s2[10]={“books”};则能将s2的值正确赋给s1的语句是〔 〕。B

A.s1={“books”}; B.strcpy〔s1,s2〕; C.s1=s2; D.strcpy〔s2,s1〕;

㈢.程序设计题:

1.编写程序打印九九乘法表。

第 22 页 共 39 页

程序设计语言C复习 #include void main() {int a[9][9],i,j; for(i=0;i<9;i++) for(j=0;j<=i;j++) a[i][j]=(i+1)*(j+1) ; for(i=0;i<9;i++) { for(j=0;j<=i;j++)

printf(\"%d*%d=%d\ printf(\"\\n\"); } }

2.用随机函数产生20个100以内的整数,用选择法对它们排序。 #include #include #include void main()

{int a[20],i,j,min,mid,f;

srand((unsigned)time(0)); for(i=0;i<20;i++) a[i]=rand()%100; for(i=0;i<19;i++) {min=a[i];f=i;

for(j=i+1;j<20;j++) {if(min>a[j]) {min=a[j];f=j; } else ; }

if(f==i)continue;

else {mid=a[i];a[i]=a[f];a[f]=mid;} }

printf(\"\\n\");

for(i=0;i<20;i++) printf(\"%d,\}

3.用随机函数产生50个200以内的整数,用冒泡法对它们排序。 #include #include

第 23 页 共 39 页

程序设计语言C复习 #include void main()

{int a[50],i,j,mid;

srand((unsigned)time(0)); for(i=0;i<50;i++) a[i]=rand()%200; for(i=0;i<50;i++) {

for(j=0;j<49;j++) { if(a[j]{mid=a[j];a[j]=a[j+1];a[j+1]=mid;} } }

printf(\"\\n\");

for(i=0;i<50;i++) printf(\"%d,\}

4.打印杨辉三角形的前10行。 #include void main()

{int a[10][10],i,j,k; for(i=0;i<10;i++) {a[i][0]=1;a[i][i]=1;} for(i=2;i<10;i++) for(j=1;ja[i][j]=a[i-1][j-1]+a[i-1][j]; printf(\"\\n\");

for(i=0;i<10;i++) {printf(\"\\n\"); for(j=0;j<=i;j++) printf(\"%d,\ } }

5.有一篇文章,共有3行文字,每行有80个字符。要求统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。 #include void main()

{int A[26],a[26],N[10],M=0,Q=0,i; char c;

第 24 页 共 39 页

程序设计语言C复习 int line=0; int l=0;

for(i=0;i<26;i++) {A[i]=0; a[i]=0; if(i<10) N[i]=0; }

while((c=getchar())!=EOF) {if(line>=2)break;

else if(l>80){line++;continue;} else l++;

{if(c>=65&&c<=90)A[c-65]+=1;

else if(c>=97&&c<=122)a[c-97]+=1; else if(c>=48&&c<=57)N[c-48]+=1; else if(c==32)M++; else if(c=='\\n')line++; else Q++; } }

printf(\"\\n\");

for(i=0;i<26;i++) printf(\"%d,\ printf(\"\\n\");

for(i=0;i<26;i++) printf(\"%d,\ printf(\"\\n\");

for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); printf(\"%d\ printf(\"\\n\"); printf(\"%d\}

6.从键盘输入数组a[10]中的十个数,并输出其中的最大值及其下标 #include main() {int i,flag;

第 25 页 共 39 页

程序设计语言C复习 float a[10],max;

printf(\"input 10 num:\"); for(i=0;i<10;i++) scanf(\"%f\ flag=0; max=a[0];

for(i=1;i<10;i++) if(max{flag=i;max=a[i];}

printf(\"%d,%f\}

7.输入一行数字字符,请用数组元素作为计数器来统计每个字符的个数。用下标为0的元素统计字符“1”的个数,下标为1的元素统计字符“2”的个数,依次类推。 #include void main() {int N[10],i; char c;

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

N[i]=0; }

while((c=getchar())!=EOF)

{ if(c>=49&&c<=57)N[c-49]+=1; else if(c==48)N[9]+=1; else ; }

printf(\"\\n\");

for(i=0;i<10;i++) printf(\"%d,\}

第六章 函数与模块化程序设计

一.知识点

1.函数定义的一般形式:函数类型 函数名〔形参类型 形参名,……〕 { 函数体 } 2.函数的参数:注意形参与实参在类型、个数上的一一对应关系。

3.函数值:函数的返回值,也就是函数类型,假设函数无返回值,则为void; 4.函数的调用:注意调用的形式;

5.函数原型与对被调函数的声明,注意整型函数可以不用声明; 6.函数的嵌套调用:

第 26 页 共 39 页

程序设计语言C复习 7.函数的递归调用,要求能用递归编写求n!、1+2+……+n等问题的程序。 8.数组作为函数参数,注意其含义及使用的情况;

9.变量的存储类型,注意static类型的初值、值的变化,外部变量的使用等; 10.内部函数和外部函数:注意其区别。

二.练习 ㈠.填空题:

1.以下程序的输出结果是 12 。

unsigned fun6〔unsigned num〕 { unsigned k=1; do

{ k*=num%10;num/=10;}while〔num〕; return k;} main〔〕

{ unsigned n=26; printf〔“%d\\n”,fun6〔n〕〕; }

2.以下程序的输出结果是 9.000000 。

double sub〔double x,double y,double z〕 { y-=1.0;z=z+x;return z;} main〔〕

{ double a=2.5,b=9.0; printf〔“%f\\n”,sub〔b-a,a,a〕〕;} 3.以下程序的输出结果是 4 。

fun1〔int a,int b〕 { int c;

a+=a;b+=b;c=fun2〔a,b〕; return c*c;}

fun2〔int a,int b〕 { int c;

c=a*b%3;return c;} main〔〕

{ int x=11,y=19; printf〔“%d\\n”,fun1〔x,y〕〕;}

4.下面pi函数的功能是,根据以下公式返回满足精度ε要求的π的值。请填空。

double pi〔double eps〕

{ double s=0.0,t=1.0;int n; for〔n=1;t>eps;n++〕 { s+=t;t=n*t/〔2*n+1〕;

第 27 页 共 39 页

程序设计语言C复习 return 〔2.0* s 〕;} 5.以下函数是求x的y次方。请填空。

double fun〔double x,int y〕 { int i;double z=1;

for〔i=1;i <=y;i++〕 z= z*x ;return z;} 6.以下程序的功能是计算s=1!+2!+……+n!请填空。

long f〔int n〕 { int i;long s;

s= 1 ;for〔i=1;i<=n;i++〕 s= s*n ; return s;} main〔〕

{ long s;int k,n; scanf〔“%d”,&n〕;s= 0 ;

for〔k=0;k<=n;k++〕 s=s+ f(k) ; printf〔“%d\\n”,s〕;}

7.在定义一个函数时如果不加类型说明,则它隐含的类型为 int 。 8.以下程序的运行结果是a= 4 ,b= 6 f( )

{ int a=3; static b=4; a=a+1; b=b+1; printf(“a=%d,b=%d\\n”,a,b);} main( ) { f( ); f( );}

9.以下程序的运行结果是 7;6;7↙2;7;5

main( )

{int i=2,x=5,j=7; fun(j,6 );

printf(“i=%d;j=%d;x=%d\\n”,i,j,x);} fun( int i, int j)

{ int x=7; printf(“i=%d;j=%d;x=%d\\n”,i,j,x);}

10.以下程序的运行结果是 # x=2 y=3 z=0↙* x=4 y=9 z=5↙@ z=0

main( )

{ int x=2; y=3; z=0;

printf(“# x=%d y=%d z=%d\\n”, x, y, z); add(x, y, z);

printf(“@ x=%d y=%d z=%d\\n”, x, y, z);} add( int x, int y, int z) { z=x+y; x=x*x;; y=y*y;

printf(“* x=%d y=%d z=%d\\n”, x, y, z);}

第 28 页 共 39 页

x=2 y=3 程序设计语言C复习

㈡.选择题:

1.以下说法中正确的选项是〔 〕。C

A.C语言程序总是从第一个定义的函数开始执行

B.在C语言程序中,要调用的函数必须在main函数中定义 C.C语言程序总是从main函数开始执行

D.C语言程序中的main函数必须放在程序的开始部分 2.以下函数的类型是〔 〕。C

A.与参数x的类型相同 B.void类型 C.int类型fff〔float x〕 { printf〔“%d\\n”,x*x〕;}

3.以下函数调用语句中,含有的实参个数是〔 〕。B A.1 B.2 C.4 D.5

func〔〔exp1,exp2〕,〔exp3,exp4,exp5〕〕; 4.以下程序的输出结果是〔 〕。C

A.11 B.20 C.21 D.31

func〔int a,int b〕

{ int c;c=a+b;return c;} main〔〕

{ int x=6,y=7,z=8,r; r=func〔〔x--,y++,x+y〕,z--〕; printf〔“%d\\n”,r〕;} 5.以下程序的输出结果是〔 〕。A

A.-1 B.0 C.1 D.2

main〔〕 { int i=2,p; p=f〔i,i+1〕; printf〔“%d\\n”,p〕;} int f〔int a,int b〕 { int c;c=a;

if〔a>b〕 c=1;else if〔a==b〕 c=0;else c=-1; return 〔c〕;}

6.以下程序输出的结果是〔 〕。C

A.0 B.1 C.6 D.无定值

fun〔int a,int b,int c〕 { c=a*b;} main〔〕 { int c;

fun〔2,3,c〕;printf〔“%d\\n”,c〕;}

第 29 页 共 39 页

.无法确定 D

程序设计语言C复习 7.以下程序输出的结果是〔 〕。A

A.5.500000 B.3.000000 C.4.000000 D.8.25 double f〔int n〕 { int i;double s;

s=1.0;for〔i=1;i<=n;i++〕 s+=1.0/i;return s;} main〔〕

{ int i,m=3;float a=0.0;

for〔i=0;iA.函数不能嵌套定义,但可以嵌套调用 B.main函数由用户定义,并可以被调用 C.程序的整个运行最后在main函数中结束

D.在C语言中以源文件而不是以函数为单位进行编译 9.以下概念正确的选项是( ) B

A.形参是虚设的,所以它始终不占用存储单位 B.实参与它所对应的形参占用不同的存储单元 C.实参与它所对应的形参占用一个存储单元

D.实参与它所对应的形参同名时可占用一个存储单元 10.以下不正确的说法是B

A.在C语言中允许函数递归调用

B.函数值类型与返回值类型出现矛盾时,以函数值类型为准 C.形参可以是常量、变量或表达式

D.C语言规定,实参变量对形参变量的数据传递是“值传递” 11.以下正确的函数首部是C A.float swap(int x,y) B.int max(int a,int b)

C.char scmp(char c1,char c2); D.double sum(float x;float y)

12.在函数中未指定存储类别的变量,其隐含存储类别为〔 〕B

A.静态 B.自动 C.外部 D.存储器

13.在一个文件中定义的全局变量的作用域为〔 〕D A.本程序的全部范围

B.离定义该变量的位置最近的函数 C.函数内全部范围

D.从定义该变量的位置开始到本文件结束 14.以下函数的返回值类型是〔 〕B fun(int x)

{printf(“%d\\n”,x);}

第 30 页 共 39 页

程序设计语言C复习 A.void类型 B.int类型 C.没有 D.不确定的

15.在一个函数中的复合语句中定义了一个变量,则该变量的有效范围是〔 〕A A.在该复合语句内 B.在该函数中 C.本程序范围内 D.非法变量

16.假设用数组名作为函数调用的实参,传递给形参的是〔 〕A A.数组的首地址 B.数组第一个元素的值 C.数组中全部元素的值

㈢.程序设计题: 1.用递归法求n!。 #include void main() { int n;

float func(int); scanf(\"%d\

printf(\"\\n%.0f\}

float func(int n) {if(n<0)

printf(\"error!\"); if(n==0||n==1) return(1.0);

else return(n*func(n-1)); }

2.用递归法求1+2+……+n。#include void main() {int n;

int func(int);

printf(\"input a num:\"); scanf(\"%d\

printf(\"\\n%d\}

int func(int n) {if(n<=0)

printf(\"error!\"); if(n==1)return(1);

D.数组元素的个数 第 31 页 共 39 页

程序设计语言C复习 else return(n+func(n-1)); }

第七章 编译预处理

一.知识点

1.宏定义:注意带参宏定义

2.文件包含:注意两种书写方式的区别

二.练习 ㈡.选择题:

1.以下程序的输出结果是〔 〕。B

A.15 B.100 C.10 D.150

#define MIN〔x,y〕 〔x〕<〔y〕?〔x〕:〔y〕 main〔〕

{ int i,j,k;i=10;j=15;k=10*MIN〔i,j〕; printf〔“%d\\n”,k〕;}

2.以下程序中的for循环执行的次数是〔 〕。C A.5 B.6 C.8 D.9

#define N 2 #define M N+1

#define NUM 〔M+1〕*M/2 main〔〕

{ int i;for〔i=1;i<=NUM;i++〕; printf〔“%d\\n”,i〕;} 3.以下程序的输出结果是〔 〕。B

A.11 B.12 C.13 D.15

#include “stdio.h”

#define FUDGF〔y〕 2.84+y #define PR〔a〕 printf〔“%d”,〔int〕〔a〕〕 #define PRINT1〔a〕 PR〔a〕;putchar〔‘\\n’〕 main〔〕

{ int x=2;PRINT1〔FUDGF〔5〕*x〕; } 4.以下表达正确的选项是〔 〕。D

A.用#include包含的头文件的后缀不可以是“.a”

B.假设一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件进行修改,包含此头文件所有源程序不必重新进行编译 C.宏命令可以看做是一行C语句

D.C编译中的预处理是在编译之前进行的。 5.以下有关宏替换的表达不正确的选项是〔 〕。D

第 32 页 共 39 页

程序设计语言C复习 A.宏替换不占用运行时间 B.宏名无类型

C.宏替换只是字符替换 D.宏名必须用大写字母表示

第八章 指针

一.知识点 1.指针的概念 2.指针变量

a[0] a[1] a[2] a[3] a[4] 3.指针与数组

4.指针与字符串

10 20 30 40 50

图8.1 二.练习 p ↑

㈠.填空题:

1.假设有定义:char ch;

⑴使指针p可以指向变量ch的定义语句是 。char *p=&ch; ⑵使指针p指向变量ch的赋值语句是 。p=&ch;

⑶通过指针p给变量ch读入字符的scanf函数调用语句是 。scanf(“%c”,p); ⑷通过指针p给变量ch赋字符的语句是 。*p=’a’;

⑸通过指针p输出ch中字符的语句是 。putchar(*p);或printf(“%c”,*p) 2.假设有如图8.1所示五个连续的int类型的存储单元并赋值,且p和s的基类型皆为int,

p已指向存储单元a[1]。 ⑴通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是 。s=p+3; ⑵用以移动指针s,使之指向中间的存储单元a[2]的表达式是 。s-=2 或s--,s--

⑶已知k=2,指针s已指向中间的存储单元a[2],表达式*〔s+k〕的值是 。50 ⑷指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是 。*(s+1)

⑸指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 。2 ⑹假设p指向存储单元a[0],则以下语句的输出结果是 。10 20 30 40 50

for〔i=0;i<5;i++〕 printf〔“%d ”,*〔p+i〕〕;printf〔“\\n”〕;

㈡.选择题:

1.假设有定义:int x,*pb;则以下正确的赋值表达式是〔 〕。A A.pb=&x B.pb=x C.*pb=&x D.*pb=*x 2.以下程序的输出结果是〔 〕。B

A.因变量无定义输出不定值 B.0 C.-1 D.1

#include “stdio.h” main〔〕

第 33 页 共 39 页

程序设计语言C复习 { printf〔“%d\\n”,NULL〕;}

3.已知指针p的指向如图8.1所示,则表达式*++p的值是〔 〕。B A.20 B.30 C.21 D.31

4.已知指针p的指向如图8.1所示,则表达式++*p的值是〔 〕。C A.20 B.30 C.21 D.31 5.以下程序的输出结果是〔 〕。D

A.23 B.24 C.25 D.26 void prtv〔int *x〕 { printf〔“%d\\n”,++*x〕; } main〔〕

{ int a=25;prtv〔&a〕;}

6.指针变量a所指的字符串长度为〔 〕D

A.26 B.27 C.28 D.23 char *a=”\\nMy Name is Zhang Li.\\”\\n”;

7.在C语言中,变量的指针是指该变量的〔 〕C

A.值 B.名 C. 地址 D.一个标志 8.下面程序段的运行结果是〔 〕D

A.cde B.无确定的输出结果

C.字符’c’的ASCII码值 D.存放字符’c’的存储单元的地址 char *s=”abcde”; s+=2; printf(“%d”,s); 9.假设有定义:int *p[4];则标识符p〔 〕B

A.是一个指向整型变量的指针 B.是一个指针数组名 C.是一个指针,它指向一个含有四个整型元素的一维数组 D.说明不合法

10.有一个二维数组a[3][4],2行3列元素的正确表示方法为〔 〕D A.&a[2][3] B.a[2]+3 C.*(a+2)+3 D.*(a[2]+3) 11.假设有以下说明语句

char *language[ ]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”}; 则表达式:*language[1] >*language[3] 比较的是〔〕B

A.字符B和字符J B.字符串BASIC和字符串JAVA C.字符串FORTRAN和字符串PASCAL D.字符F和字符P

12.指向一个包含4个整型元素的一维数组的指针变量的定义形式为〔 〕A A.int (*p)[4]; B.int *p[4]; C.int (p[4]); D.int (p)[ ] 13.以下程序的运行结果是〔 〕A fun( int *p1,int *p2)

{ if(*p1>*p2) printf(“%d\\n”,*p1); else printf(“%d\\n”,*p2);} main( )

{ int a=3,b=7; fun(&a,&b);}

第 34 页 共 39 页

程序设计语言C复习 A.7 B.3 C.10 D.4

第九章 结构体与共用体

一.知识点

1.结构体的概念与定义 2.结构体变量的定义 3.结构体变量的引用 4.结构体数组

5.共用体的概念与定义 6.枚举类型

7.用户自定义类型

二.练习 ㈠.填空题:

1.为了建立如下列图的存储结构〔即每个结点含两个域,data是数据域,next是指向结点的指针域〕,请填空。 data next

struct link { char data;

struct link *next ;}node;

2.访问结构体数组元素a[k]的成员b,写作 。a[k].b 3.以下程序的运行结果是 Zhang 。 struct s { int num;

char name[20]; int age; }; main( )

{ struct s stud[3]={{101,”Li”,18},{102,”Wang”,19},{103,”Zhang”,21}}; fun(stud+2); }

fun(struct s *p)

{ printf(“%s\\n”,(*p).name);}

4.以下程序的运行结果是__2,3___。 main( )

{ struct EXAMPLE {struct {int x; int y; }in;

第 35 页 共 39 页

程序设计语言C复习 int a; int b; }e;

e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;

printf(“%d,%d”,e.in.x,e.in.y);

㈡.选择题:

1.根据以下定义,能输出字母M的语句是〔 〕D。 A.printf〔“%c\\n”,class[3].name〕; B.printf〔“%c\\n”,class[3].name[1]〕; C.printf〔“%c\\n”,class[2].name[1]〕; D.printf〔“%c\\n”,class[2].name[0]〕; struct person{ char name[9];int age;}; struct person class[10]={ “John”,17,“Paul”,19,“Mary”,18,“Adam”,16}; 2.以下程序的输出结果是〔 〕D。

A.32 B.16 C.8 D.24

typedef union{ long x[2];int y[4];char z[8];}MYTYPE; MYTYPE them; main〔〕{ printf〔“%d\\n”,sizeof〔them〕〕;} 3.设有定义语句

enum weekday{sun,mon,tue,wed,thu,fri,sat} workday; 则以下语句中编译能通过的语句为___________. B

A.sun=0; B.workday=thu; C.workday=3; D.workday=1/7; 4.以下对结构体类型变量的定义中,不正确的选项是( )。C

A. typedef struct aa B.#define AA struct aa { int n; AA { int n; float m; float m; }AA; }td1; AA td1;

C) struct D) struct { int n; { int n; float m; float m; }aa; }td1; stuct aa td1;

5.当定义一个结构体变量时,系统分配给它的内存是〔 〕B A.结构体最后一个成员所需内存量的大小。 B.各成员所需内存量的总和。

C.成员中占内存量最大者所需的容量。 D.结构体中第一个成员所需内存量。

第 36 页 共 39 页

程序设计语言C复习 6.在16位IBM-PC机上使用C语言,如果有以下说明语句,则变量ss所占内存的字节数

为〔 〕C struct s

{ int m; char c; double d; }ss;

A.8 B.1 C.11 D.2 7.下面程序的运行结果是〔 〕D main( )

{ struct cmplx

{ int x; int y;

}cnum[2]={1,3,2,7}; prinyf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x);} A.0 B.1 C.3 D.6

第十章 位运算

一.知识点

1.位运算符与位运算赋值运算符

二.练习 ㈠.填空题:

1.设变量a的二进制数是00101101,假设想通过运算a^b使a的高4位取反,低4位不变,则b的二进制数应是 。11110000

2.a为任意整数,能将变量a清零的表达式是 。a&0

3.a为任意整数,能将变量a中的各二进制位均置成1的表达式是 。a|1 4.能将两字节变量x的高8位置全1,低字节保持不变的表达式是 。x|ff00 5.运用位运算,能将八进制数012500除以4,然后赋给变量a的表达式是 。a=012500>>2

6.运用位运算,能将变量ch中的大写字母转换成小写字母的表达式是 。ch+=1<<5

7.3 && 5的值是——,3& 5的值是——,3||5的值是——,3|5的值是——。 1、1、1、7

8.表达式~2&3<<2|3的值是——。15 9.表达式5^3|2<<1的值是——。6 10.表达式025&012的值是——。0

11.在位运算中,操作数每向右移动一位相当于操作数—除—以—2—。 12、在位运算中,操作数每向左移动一位相当于操作数—乘—以—2—。

㈡.选择题:

1.以下程序的输出结果是〔 〕。D

A.100 B.160 C.120 D.

第 37 页 共 39 页

程序设计语言C复习 main〔〕{ char x=040;printf〔“%d\\n”,x=x<<1〕;} 2.以下程序段中c的二进制值是〔 〕。B

A.00011011 B.00010100 C.00011100 D.00011000

3.以下程序的输出结果是〔 〕。B

A.0 B.1 C.2 D.3 main〔〕{ int x=35;char z=‘A’;printf〔“%d\\n”,〔x&15〕&&〔z<‘a’〕〕;} 4.以下程序的输出结果是〔 〕。A

A.0 B.1 C.2 D.3 main〔〕

{ int a=5,b=6,c=7,d=8,m=2,n=2; printf〔“%d\\n”,〔m=a>b〕&〔n=c>d〕〕;} 5.执行以下语句后a和b的值分别为( ) C int a=1,b=2;a=a^b;b=b^a;a=a^b;

A.a=1,b=2 B.a=2,b=2 C.a=2,b=1 D.a=1,b=1 6.以下程序段的执行结果是( ) A

char a=56;a=a&056;printf(“%d,%o\\n”,a,a); A.40,50 B.1,1 C.56,60 D.50,56

第十一章 文件

一.知识点

1.文件类型指针:FILE

2.文件的打开与关闭:fopen〔〕、fclose〔〕 3.文件的读写:fputc〔〕、fgetc〔〕、fread〔〕、fwrite〔〕、fprintf〔〕、fscanf〔〕 4.文件的定位:rewind〔〕、fseek〔〕、ftell〔〕 5.出错检测:ferror〔〕、clearerr〔〕

二.练习 ㈠.填空题:

1.在C程序中文件可以用两种方式存取,它们是 和 。顺序 和 随机

2.在C程序中数据可以用两种代码形式存放,它们是 和 。ASCII码 和 二进制码 3.在C语言中,文件的存取是以 为单位的,这种文件被称作 文件。字节、流式 4.在C语言中,文件的打开使用 ,文件的关闭使用 。fopen()、fclose() 5.在C语言中,文件类型为 。文本文件或二进制文件 ㈡.选择题:

1.假设执行fopen函数时发生错误,则函数的返回值是〔 〕。D

第 38 页 共 39 页

程序设计语言C复习 A.随机值 B.1 C.NULL D.EOF

2.假设用fopen函数打开一个新的二进制文件,要求文件既能读也能写,则应选用的文件方式字符串是〔 〕。A A.“wb+” B.“r+” C.“rb+” D.“ab+” 3.当正常执行了文件关闭操作时,fclose函数的返回值是〔 〕。C A.-1 B.随机值 C.0 D.1 4.在C语言中,对文件的存取是以〔 〕为单位的。C A〕记录 B〕函数 C〕字节 D〕模块

5.定义fp为文件型指针变量,使用fopen函数打开一个既能读也能写的新的二进制文件,以下正确的调用形式是〔 〕C A. fp=fopen(“filel”,”ab+”) B. fp=fopen(“filel”,”r+”) C. fp=fopen(“filel”,”wb+”) D.fp=fopen(“filel”,”ab”)

6.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是〔 〕C A.只写 B.追加 C.读或读写 D.答案B和C都正确 7.假设调用fputc函数输出字符成功,则其返回值是〔 〕D A.EOF B.1 C.0 D.输出的字符 8.fread和fwrite函数常用来要求一次读入/输出〔 〕数据D A.一个整数 B.一个实数 C.一个字节 D.一组 9.函数调用语句:fseek(fp,-20L,2);的含义是〔 〕C A.将文件位置指针移到距离文件头20个字节处 B.将文件位置指针从当前位置向后移动20个字节 C.将文件位置指针从文件末尾处向后退20个字节 D.将文件位置指针移到离当前位置20个字节处 10.函数rewind的作用是〔 〕B

A.位置指针自动移到下一个字符位置 B.位置指针重新返回文件的开头 C.位置指针自动移到文件尾 D.位置指针移到指定的位置

11.当fclose函数正确执行后,函数的返回值是〔 〕A A.0 B.-1 C.1 D.非零值

第 39 页 共 39 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务