(完整版)C++_谭浩强_总复习题4
- 格式:doc
- 大小:80.51 KB
- 文档页数:20
第一章程序设计和C语言1.1.什么是计算机程序程序..:一组计算机能识别和执行的指令。
只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。
1.2什么是计算机语言计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。
计算机语言发展阶段:机器语言(由0和1组成的指令)符号语言(用英文字母和数字表示指令)高级语言(接近于人的自然语言和数学语言)面向过程的语言(非结构化的语言、结构化语言);面向对象的语言1.3C语言的发展及其特点C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。
因此C语言问世以后得到迅速推广。
C语言主要特点:语言简洁、紧凑,使用方便、灵活。
(只有37个关键字、9种控制语句;程序书写形式自由,源程序短)运算符丰富。
(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达式类型多样化)数据类型丰富。
(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。
)具有结构化的控制语句。
(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言)语法限制不太严格,程序设计自由度大。
(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查)允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。
(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言)用C语言编写的程序可移植性好。
C程序设计谭浩强第四版试卷试卷及答案Revised final draft November 26, 2020一、单项选择题(20题,每题2分,共40分)1.一个C语言程序是由组成的。
A.主程序 B.子程序 C.函数 D.过程2.判断char型变量c1是否为小写字母的最简单且正确的表达式为。
A. 'a'<=c1<='z'B. (c1>=a)&&(c1<=z)C. ('a'<=c1)||('z'>=c1)D. (c1>='a')&&(c1<='z')3.为了判断两个字符串s1和s2是否相等,应当使用。
A. if (s1==s2)B. if (s1=s2)C. if (strcpy(s1,s2))D. if( strcmp(s1,s2) == 0 )4. 设a,b都是int型变量,则表达式:(a=2,b=5,a>b a++ : b++ ,a+b)的值为。
A. 7B. 8C. 9D. 25. 设x、y和t均为int型变量,则以下语句:t=x; x=y; y=t;的功能是。
A. 把x和y按从大到小排列B. 把x和y按从小到大排列C. 无确定结果D. 交换x和y中的值6. 下面标识符中,合法的用户标识符为。
A. P#AdB.12aC.charD._int7. 循环语句while(!E);中的表达式!E等价于。
A. E!=0B. E!=1C. E==0D. E==18. 设有以下语句,则不是对a数组元素的正确引用,其中0≤i<10。
int a[10] = {0,1,2,3,4,5,6,7,8,9};int *p = a;供选择的答案是:A. a[p-5]B. *(&a[i])C. p[i]D. *(a+i)9. 若用数组名作为函数调用的实参,传递给形参的是。
c语言程序设计第三版谭浩强课后习题及答案C语言程序设计是一门基础而重要的编程课程,谭浩强教授的《C语言程序设计》第三版是许多高校计算机专业学生的必修教材。
课后习题是检验学生对课程内容掌握程度的重要手段,以下是部分习题及答案的示例。
# 第一章:C语言概述习题1:简述C语言的特点。
答案: C语言是一种结构化编程语言,具有以下特点:1. 简洁、紧凑、贴近硬件。
2. 丰富的运算符和数据类型。
3. 具有结构化控制语句。
4. 支持模块化程序设计。
5. 可移植性好。
习题2:为什么说C语言具有“高级语言”的特点?答案: C语言被称为高级语言,因为它:1. 抽象了机器语言的复杂性。
2. 允许使用变量名代替内存地址。
3. 提供了丰富的控制结构和数据类型。
4. 支持高级的编程概念,如函数、数组和指针。
# 第二章:数据类型、运算符和表达式习题3:写出C语言中的基本数据类型。
答案: C语言中的基本数据类型包括:- 整型:`int`- 浮点型:`float` 和 `double`- 字符型:`char`习题4:解释赋值运算符的右结合性。
答案:赋值运算符的右结合性意味着当多个赋值运算符出现在同一个表达式中时,它们将从右向左进行计算。
例如,在表达式 `a = b = c;` 中,首先计算 `b = c`,然后将结果赋值给 `a`。
# 第三章:控制语句习题5:描述if语句的基本用法。
答案: if语句用于基于条件执行代码块。
基本语法如下:```cif (条件) {// 条件为真时执行的代码} else {// 条件为假时执行的代码}```其中条件是一个表达式,如果其值为真(非零),则执行if块中的代码;如果为假(零),则执行else块中的代码。
习题6:举例说明for循环的使用。
答案: for循环用于重复执行一段代码,直到给定条件不再满足。
基本语法如下:```cfor (初始化表达式;条件表达式;更新表达式) {// 循环体}```例如,打印0到9的数字:```cfor (int i = 0; i < 10; i++) {printf("%d ", i);}```以上是部分习题及答案的示例。
谭浩强C语言试题库(完整版)谭浩强C语言试题库一、单项选择第一章 C语言概述(1) 一个C程序的执行是从A、本程序的MAIN函数开始,到MAIN 函数结束.B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束.C、本程序的MAIN函数开始,到本程序的最后一个函数结束.D、本程序文件的第一个函数开始,到本程序的MAIN函数结束.(2) 以下叙述正确的是A、在C程序中,MAIN函数必须位于程序的最前面.B、 C程序的每行中只能写一条语句.C、 C语言本身没有输入输出语句.D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误.(3) C语言规定,在一个源程序中,MAIN主函数的位置是在:A、必须在最前面.B、必须在系统调用的库函数的后面C、可以在任意位置.D、必须在最后面(4) 一个C程序是由:A、一个主程序和若干子程序组成B、函数组成C、若干过程组成D、若干子程序组成(5) 以下叙述不正确的是:A、一个C源程序可由一个或多个函数组成B、一个C源程序必须包含一个MAIN函数C、 C程序的基本组成单位是函数D、在C程序中,注释说明只能位于一条语句的后面第二章数据类型、运算符与表达式(1) 若x, i, j, k都是int型变量,则计算下面表达式后,x的值为x =( i=4, j=16, k=32)A、4B、16C、32D、52(2) 下列四组选项中,均不是C语言键字的选项是A、define , IF, typeB、getc, char, printfC、include, scanf, caseE、 if, struct, type(3) 下面四个选项中,均是不合法的用户标识符的选项是A、A,P_0,doB、float,1a0, _AC、b-a, goto, intD、_123, temp, INT(4) 若有代数式3ae/bc,则正确的C语言表达式是A、a/b/c*e*3B、3*a*e/bcC、3*a*e/b*cD、a*e/c/b*3(5) 已知各变量的类型说明如下:int k, a, b;unsinged long w=5;double x=1.42;则以下不符合C语言语法的表达式是A、x%(-3)B、w+=-2;C、k=(a=2,b=3,a+b)D、a+=a-=(b=4)*(a=3)第三章简单C程序设计(1)putchar函数可以向终端输出一个A、整型变量表达式值B、实型变量值C、字符串D、字符或字符型变量值(2)若x,y均定义为int型,z定义为double 型,以下合法的scanf 函数调用语句是A、scanf(“%d%lx,%le”,&x,&y,&z);B、scanf(“%2d*%d%lf”,&x,&y,&z);C、sc anf(“%x%*d%o”,&x,&y,&z);D、scanf(“%x%o%6.2f”,&x,&y,&z);(3)当输入数据的形式为:25,13,10<回车>时,以下程序的输出结果为main(){int x,y,z;scanf(“%d%d%d”,&x,&y,&z);printf(“x+y+z=%d\n”,x+y+z);}A、x+y+z=48B、x+y+z=35C、x+z=35D、不确定值(4) 以下能正确的定义整型变量a,b和c,并对它们赋初值为5的语句是A、int a=b=c=5;B、int a, b, c=5;C、a=5, b=5, c=5;D、a=b=c=5;(5) 若有以下定义,则正确的赋值语句是int a,b; float x;A、a=1, b=2;B、b++;C、a=b=5;D、b=int(x);第四章选择结构程序设计(1)能正确表示“当x的值在[1,10]和[200,210]的范围为真,否则为假”的表达式是A、(x>=1)&&(x<=10)&&(x.>=200)&&(x<=210)B、(x>=1)││(x<=10) ││(x.>=200) ││(x<=210)C、(x>=1) &&(x<=10) ││(x.>=200) &&(x<=210)D、(x>=1)││(x<=10)&& (x.>=200) ││(x<=210)(2)以下程序的运行结果是#include “stdio.h”main(){int a,b,d=241;a=d/100%9;b=(-1)&&(-1);printf(“%d,%d”,a,b);}A、6,1B、2,1C、6,0D、2,0(3)请阅读以下程序:main(){int a=5 , b=0 , c=0;if (a+b+c) printf(“* * *\n”); else printf(“$ $ $\n”); }以上程序 .A) 有语法错误不能通过编译B) 可以通过编译但不能直接通过连接C) 输出* * *D) 输出$ $ $(4)以下程序的运行结果是 .main(){int m=5;if(m++>5)printf(“%d\n”,m);else printf(“%d\n”,m——);}A) 4B) 5C) 6D) 7(5) 为了避免在嵌套的条件语句中if-else中产生二义性,c语言规定:else子句总是与相配对.A)缩排位置相同的ifB)其之前最近的ifC)其之后最近的ifD)同一行上的if第五章循环控制(1)设有程序段int k=10while (k=0) k=k-1则下面描叙正确的是 .A) while (k=0) k=k-1;B) 循环是无限循环C) 循环体语句一次也不执行D) 循环体语句执行一次(2)下面程序段的运行结果是 . int n=0;while(n++<=2); printf(“%d”,n);A) 2B) 3C) 4D) 有语法错(3)C语言中while和do-while循环的主要区别是 .A) do-while的循环体至少无条件执行一次B) while 的循环控制条件比do-while的循环控制条件严格C) do-while允许从外部转到循环体内D) do-while允许从外部转到循环体内(4)以下能正确计算1*2*3*…*10的程序段是 .A) do {i=1;s=1;s=s*i;i++;}while(I<=10);B) do {i=1;s=0;s=s*i;i++;}while(I<=10);C) i=1;s=1;do {s=s*i;i++;}while(I<=10);D) i=1;s=0;do {s=s*i;i++;}while(I<=10);第六章数组(1)在c语言中,引用数组元素时,其数组下标的数据类型允许是____.A) 整型常量B) 整型表达式C) 整型常量或整型表达式D) 任何类型的表达式(2)以下能对二维数组a进行正确初始化的语句是____.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}};)(3)若有说明:int a[3][4]={0};则下面正确的叙述是____.A) 只有元素a[0][0]可得到初值0B) 此说明语句不正确C) 数组a中各元素都可得到初值,但其值不一定为0D) 数组a中每个元素均可得到初值0(4)下面程序___(每行程序前面的数字表示行号).1 main()2 {3 float a[10]={0};4 int i5 for(i=0;i<3;i++) scanf(“%d”,&a[i];6 for(i=1;i<10;i++) a[0]=a[0]+a{i};7 printf(“%f\n”,a[0]);8 }A) 没有错误B) 第3行有错误C) 第5行有错误D) 第7行有错误(5)若二维数组a有m列,则计算机一元素a[i][j]在数组中位置的公式为____.(假设a[0][0]位于数组的第一个位置上.)A) i*m+jB) j*m+iC) i*m+j-1D) i*m+j+1第七章函数(1)以下正确的函数定义形式是 .A)double fun(int x,int y)C) double fun(int x;int y)D) double fun(int x,int y)E) double fun(int x,y);(2) 以下正确的函数形式是 .A) double fun(int x,int y){z=x+y; return z;}B) fun(int x,y){int z;return z;}C) fun(x,y){int x,y; double z;z=x+y;return z;}D) double fun(int x,int y){double z;z=x+y;return z;}(3) C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)传递方式(4)C语言允许函数值型缺省定义,此时该函数值隐含的类型是 .A)float型B)int型C)long型D)double型(5)下面函数调用语句含有实参的个数为. func((exp1,exp2),(exp3,exp4,exp5));A)1B)2C)4D)5第八章编译预处理命令(1)请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);}上面程序的运行结果是 .A) sum=9B) sum=10C) sum=12D) sum=18(2) 以下程序的运行结果是 . #define MIN(x,y) (x)<(y)? (x)+(y) main(){int I=10,j=15,k;k=10*MIN(I,j); printf(“%d\n”,k);。
C语言练习题(谭浩强第四版).附有答案高级语言程序设计综合练习一学号:姓名:一、选择题1、一个C程序若干个C函数组成,各个函数在文件中的位置顺序为:A、任意B、第一个函数必须是主函数,其他函数任意C、必须完全按照执行的顺序排列D、其他函数可以任意,主函数必须在最后2、下列四个叙述中,正确的是:A、 C程序中的所有字母都必须小写B、 C程序中的关键字必须小写,其他标示符不区分大小写C、 C程序中的所有字母都不区分大小写D、 C语言中的所有关键字必须小写3、下列四个叙述中,错误的是:A、一个C源程序必须有且只能有一个主函数B、一个C源程序可以有多个函数C、在C源程序中注释说明必须位于语句之后D、 C源程序的基本结构是函数4、下面不是C语言合法标识符的是:A、abcB、5nC、_4mD、x35、以下叙述不正确的是:A、分号是C语句的必要组成部分B、 C程序的注释可以写在语句的后面C、函数是C程序的基本单位D、主函数的名字不一定非用main来表示6、 C语言中允许的基本数据类型包括:A、整型、实型、逻辑型B、整型、实型、字符型C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型7、 C语言中能用八进制表示的数据类型为:A、字符型、整型B、整形、实型C、字符型、实型、双精度型D、字符型、整型、实型、双精度型8、下列属于C语言合法的字符常数是:A、’\\97’B、”A”C、’\\t’D、”\\0”9、在C语言中,5种基本数据类型的存储空间长度的排列顺序为:A、char1 高级语言程序设计综合练习一学号:姓名:printf(“%d,%c\\n”,c2-c1,c2-‘a’+’A’);则输出结果是:A、2,MB、3,EC、2,ED、输出项与相应的格式控制不一致,输出结果不确定11、以下合法的赋值语句是:A、x=y=100B、d--;C、x + yD、c = int(a+b);12、在以下一组运算符中,优先级最高的是:A、=10 or a=0C、a>=10 || a=10 && a10 && a=15)16、已知x=43, ch=’A’,y=0;则表达式的值是:A、0B、语法错C、1D、“假”17、表达式17%4 /8的值为:A、0B、1C、2D、318、一个可执行的C程序的开始执行点是:A、程序中的第一个语句B、包含文件中的第一个函数C、名为main的函数D、程序中的第一个函数19、组成C语句的一个必不可少的符号是:A、逗号B、引号C、冒号D、分号20、若将int、long、float等类型的数据进行混合运算,其结果的数据类型是:A、变量可以不定义直接使用B、一个说明语句只能定义一个变量C、几个不同类型的变量可在同一语句中定义D、变量可以在定义时进行初绐化22、与x * = y + z等价的赋值表达式是:2 )高级语言程序设计综合练习一学号:姓名:A、 x = y + zB、 x = x * y + zC、 x = x * (y + z)D、 x = x + y * z23、当代电子计算机能够自动地处理指定的问题是因为:A、计算机是电动的B、有解决该问题的计算机程序C、事先存储了解决该问题的程序D、以上都不是24、以下叙述中最准确的是:A、计算机程序是处理某一问题所有指令的集合B、计算机程序是处理某一问题所用到的所有数据的集合C、计算机程序是处理某一问题的所有指令及其数据的集合D、计算机程序是处理某一问题的所有指令及其数据的有序集合25、目前编写计算机程序一般采用的是:A、机器语言B、汇编语言C、高级语言D、英语26、设计一个计算机程序最基本的工作是:A、制定正确的算法B、选择合理的数据结构C、制定正确的算法和选择合理的数据结构D、以上都不是27、算法具有五个特性,以下选项中不属于算法特性的是:A、有穷性B、简洁性C、可行性D、确定性28、下述哪一个不是结构化程序基本结构:A、顺序B、选择C、循环D、嵌套29、 C语言是一种:A、机器语言B、汇编语言C、高级语言D、以上都不是30、 C语言源程序的扩展名为:A、、exeB、、cC、、objD、、cpp31、C程序编译、连接后最终产生(即计算机执行)的文件的扩展名为()A、、exeB、、cC、、objD、、cpp32、构成C语言源程序的基本单位是:A、子程序B、过程C、文本D、函数33、下列叙述正确的是:A、C语言源程序可以直接在DOS环境中运行B、编译C语言源程序得到的目标文件可以直接在DOS环境中运行C、C语言源程序经过编译、连接得到的可执行程序可以直接在DOS环境中运行D、C语言源程序可以直接在VC++环境中运行34、某C程序一个主函数main()和一个自定义函数max()组成,则该程序:3 高级语言程序设计综合练习一学号:姓名:A、写在前面的函数先开始执行B、总是从main()函数开始执行C、总是从max()函数开始执行D、写在后面的函数先开始执行35、以下叙述不正确的是:A、分号是C语句的必要组成部分B、C程序的注释可以写在语句的后面C、函数是C程序的基本单位D、主函数的名字不一定用mian表示36、以下为C语句的是:A、a=8B、a++;C、if(a>8)D、 #include37、以下所列语句中,合法的语句是:()A、a=1,b=2B、++a;C、a=a+1=5D、y=int(a);二、判断题1、( T )C语言是严格区分大写和小写的,因此主函数不能写成main()以外的其他形式。
D4Z4#include <stdio.h>void main(){int a=3,b=4,c=5;float x=1.2,y=2.4,z=-3.6;unsigned int u=51274;long n=128765;char c1='a',c2='b';printf("a=%2d b=%2d c=%2d\n",a,b,c);printf("x=%f,y=%f,z=%f\n",x,y,z);printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);printf("u=%6u n=%9ld\n",u,n);printf("c1=\"%c\" or %d(ASCII)\n",c1,c1);printf("c2=\"%c\" or %d(ASCII)\n",c2-32,c2);}D4Z8#include <stdio.h>#define PI 3.1415926void main(){float r,h;float c,s,s1,v,v1;scanf("%f,%f",&r,&h);c=2*PI*r;s=PI*r*r;s1=4*PI*r*r;v=4.0/3*PI*r*r*r;v1=s*h;printf("c=%.2f,s=%.2f,s1=%.2f,v=%.2f,v1=%.2f\n",c,s,s1,v,v1); }D5Z5#include <stdio.h>void main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=10)y=3*x-11;elsey=2*x-1;printf("y=%d\n",y);}D5Z6#include <stdio.h>void main(){int d;scanf("%d",&d);if(d>=0&&d<=100){if(d>=90)printf("A");else if(d>=80)printf("B");else if(d>=70)printf("C");else if(d>=60)printf("D");elseprintf("E");}elseprintf("input error!!!\n"); }D5Z7#include <stdio.h>void main(){long d;int g,s,b,q,w;scanf("%ld",&d);w=d/10000;q=d%10000/1000;b=d%1000/100;s=d%100/10;g=d%10;if(w>0){printf("5\n");printf("%d,%d,%d,%d,%d\n",w,q,b,s,g);printf("%d,%d,%d,%d,%d\n",g,s,b,q,w);}else if(q>0){printf("4\n");printf("%d,%d,%d,%d\n",q,b,s,g);printf("%d,%d,%d,%d\n",g,s,b,q);}else if(b>0){printf("3\n");printf("%d,%d,%d\n",b,s,g);printf("%d,%d,%d\n",g,s,b);}else if(s>0){printf("2\n");printf("%d,%d\n",s,g);printf("%d,%d\n",g,s);}else if(g>=0){printf("1\n");printf("%d\n",g);printf("%d\n",g);}}D6Z2#include <stdio.h>void main(){char c;int WordCount=0,BlankCount=0,NumberCount=0,OtherCount=0;while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')WordCount++;else if(c==' ')BlankCount++;else if(c>='0'&&c<='9')NumberCount++;elseOtherCount++;}printf("WordCount=%d,BlankCount=%d,NumberCount=%d,OtherCount=%d\n",Word Count,BlankCount,NumberCount,OtherCount);}D6Z4#include <stdio.h>void main(){double jc=1,sum=0;int i;for(i=1;i<=20;i++){jc*=i;sum+=jc;}printf("%lf\n",sum);}D6Z6#include <stdio.h>void main(){int i,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf("%d\n",i*100+j*10+k);}D6Z8#include <stdio.h>void main(){int fz=2,fm=1,i,t;float sum=0;for(i=0;i<20;i++){sum+=fz*1.0/fm;t=fz;fz=fz+fm;fm=t;}printf("%f\n",sum);}12.28.c++d7zsy2#include <stdio.h>main(){int a[11]={10,20,30,40,50,60,70,80,90,100},n,i,j,t; scanf("%d",&n);for(i=0;i<10;i++)if(n<a[i])break;for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=n;for(i=0;i<11;i++)printf("%3d ",a[i]);}d7zsy3#include <stdio.h>main(){int a[4][4],b[4][4],c[4][4]={0};int i,j,k;printf("input A matrix:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("input B matrix:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&b[i][j]);for(i=0;i<4;i++)for(k=0;k<4;k++)for(j=0;j<4;j++)c[i][k]+=a[i][j]*b[j][k];printf("Output C matrix:\n");for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%3d ",c[i][j]);printf("\n");}}D7ZSY5#include <stdio.h>main(){inta[10][10]={{1,0},{1,0},{1,0},{1,0},{1,0},{1,0},{1,0},{1,0},{1,0},{1,0}}; int i,j;for(i=1;i<9;i++)for(j=1;j<9;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<9;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}D7ZSY13#include <stdio.h>#include <string.h>main(){char c1[20],c2[20],c3[40],i,k;gets(c1);gets(c2);for(i=0;c1[i]!=0;i++)c3[i]=c1[i];for(k=0;c2[k]!=0;k++)c3[i++]=c2[k];c3[i]=0;puts(c3);}D7ZSY15#include <stdio.h>#include <string.h>main(){char s1[80],s2[80],i;gets(s2);for(i=0;s2[i]!=0;i++)s1[i]=s2[i];s1[i]=0;puts(s1);}D8ZSY1#include <graphics.h>#include <conio.h>#include <dos.h>#include <math.h>#define PI 3.1415926void DrawFlower(int color,int sx,int sy,int r,int c,float d) {double p,st,x,y;int px,py,i;setcolor(color);for(st=0;st<=2*PI;st+=0.01){p=cos(st*c);x=p*cos(st+d);y=p*sin(st+d);px=sx+x*r;py=sy-y*r;putpixel(px,py);}}void main(){int gdriver,gmode;int i=1;float d;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver,&gmode,"c:\\tc3");for(d=0;d<=2*PI;d+=0.02){DrawFlower(i%14+1,320,240,i*9%200,3,d);delay(50);DrawFlower(0,320,240,i*9,3,d);i+=2;}getch();closegraph();}d8zsy2#include <stdio.h>int findday(int year,int month,int day){int i,sum=0;int MonDay[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if((year%4==0&&year%100!=0)||year%400==0)MonDay[1]++;for(i=0;i<month-1;i++)sum+=MonDay[i];sum=sum+day;return sum;}main(){int year,month,day;int sum;scanf("%d-%d-%d",&year,&month,&day);sum=findday(year,month,day);printf("sum=%d\n",sum);}d8zsy3#include <stdio.h>void HexToDec(){int c;scanf("%x",&c);printf("%d",c);}main(){HexToDec();d8zsy5#include <stdio.h>#include <string.h>void Ver(char c[]){int i,t,l;l=strlen(c);for(i=0;i<=l-1-i;i++){t=c[i];c[i]=c[l-1-i];c[l-1-i]=t;}}main(){char a[80];gets(a);Ver(a);puts(a);}d8zsy7#include <stdio.h>#include <string.h>void find(char c[],char d[]){int i,l,j=0;l=strlen(c);for(i=0;i<l;i++){if(c[i]=='a'||c[i]=='o'||c[i]=='e'||c[i]=='i'||c[i]=='u'||c[i]=='A'||c[i]== 'O'||c[i]=='E'||c[i]=='I'||c[i]=='U'){d[j++]=c[i];}}d[j]=0;main(){char a[80],b[80];gets(a);find(a,b);puts(b);}d8zsy10#include <stdio.h>#include <string.h>void findmaxlen(char c[],char d[]){int i,l,j,k=0,lmax=0;l=strlen(c);for(i=0;i<l;i++){if(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z') {k++;if(lmax<k){lmax=k;for(j=0;j<k;j++)d[j]=c[i-k+1+j];d[j]=0;}}elsek=0;}}main(){char a[80],b[80];gets(a);findmaxlen(a,b);puts(b);}d10zsy1#include <stdio.h>void input(int *p){int i;for(i=0;i<10;i++)scanf("%d",p++);}void output(int *p){int i;for(i=0;i<10;i++)printf("%d ",*p++); }void xch(int *p){int i,max,j=0,t;max=*p;for(i=1;i<10;i++){if(max<*(p+i)){max=*(p+i);j=i;}}t=p[j];p[j]=p[9];p[9]=t;}main(){int a[10];input(a);xch(a);output(a);}d10zsy2#include <stdio.h>#include <math.h>void findarea(double *a,double *b,double *c,double *area) {double s;s=0.5*(*a+*b+*c);*area=sqrt(s*(s-*a)*(s-*b)*(s-*c));}main(){double a,b,c,area;scanf("%lf,%lf,%lf",&a,&b,&c);findarea(&a,&b,&c,&area);printf("area=%lf\n",area);}d10zsy3#include <stdio.h>#include <string.h>void StrCopy(char *from,char *to,int start){while(*(from+start))*to++=*((from++)+start);*to=0;}main(){char c1[80],c2[80];int s;gets(c1);scanf("%d",&s);StrCopy(c1,c2,s);puts(c2);}d10zsy4#include <stdio.h>void MatMul(int (*p1)[3],int (*p2)[3],int (*p3)[3],int n) {int *a,*b,*c,i,j,k;a=*p1;b=*p2;c=*p3;for(i=0;i<n;i++)for(k=0;k<n;k++)for(j=0;j<n;j++)*(c+i*n+k)+=*(a+i*n+j) * *(b+j*n+k); }main(){int a[4][4],b[4][4],c[4][4]={0};int i,j,k;printf("input A matrix:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("input B matrix:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&b[i][j]);MatMul(a,b,c,4);printf("Output C matrix:\n");for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%3d ",c[i][j]);printf("\n");}}d10zsy16#include <stdio.h>#include <string.h>void findNum(char *p1,char *p2){for(;*p1!=0;p1++)if(*p1>='0'&&*p1<='9')*p2++=*p1;*p2=0;}main(){char c1[80],c2[80];gets(c1);findNum(c1,c2);puts(c2);}期末复习题(1) 执行下面的程序段后,变量k中的值为A) 不定值 B) 33 C) 30 D) 10int k=3, s[2];s[0]=k; k=s[1]*10;(2) 若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;其中0≤i≤9, 则对a数组元素不正确的引用上A) a[p-a] B) *(&a[i]) C) p[i] D) a[10](3) 下列程序执行后的输出结果是A) 6 B) 7 C) 8 D) 9void func(int *a,int b[]){ b[0]=*a+6; }main(){ int a,b[5];a=0; b[0]=3;func(&a,b); printf("%d \n,b[0]);}(4) 下列程序执行后的输出结果是A) 3 B) 6 C) 9 D) 随机数main(){ int a[3][3], *p,i;p=&a[0][0];for(i=p; i<9; i++) p[i]=i+1;printf("%d \n",a[1][2]);}(5) 设有数组定义: char array [ ]="China"; 则数组array所占的空间为A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节(6) 下列程序的输出结果是A) 4 B) 6 C) 8 D) 10int b=2;int func(int *a){ b += *a; return(b);}main(){ int a=2, res=2;res += func(&a);printf("%d \n",res);}(7) 若有以下调用语句,则不正确的fun函数的首部是A) void fun(int m, int x[]) B) void fun(int s, int h[41]) C) void fun(int p, int *s) D) void fun(int n, int a)main(){ …int a[50],n;…fun(n, &a[9]);…}(8) 下列程序执行后的输出结果是A) you&me B) you C) me D) errmain(){ char arr[2][4];strcpy(arr,"you"); strcpy(arr[1],"me");arr[0][3]='&';printf("%s \n",arr);}(9) 下列程序执行后的输出结果是A) hello B) hel C) hlo D) hlmvoid func1(int i);void func2(int i);char st[]="hello,friend!";void func1(int i){ printf("%c",st[i]);if(i<3){i+=2;func2(i);}}void func2(int i){ printf("%c",st[i]);if(i<3){i+=2;func1(i);}}main(){ int i=0; func1(i); printf("\n");}(10) 执行下列程序时输入:123<空格>456<空格>789<回车>,输出结果是A) 123,456,789 B) 1,456,789C) 1,23,456,789 D) 1,23,456main(){ char s[100]; int c, i;scanf("%c",&c); scanf("%d",&i); scanf("%s",s);printf("%c,%d,%s \n",c,i,s);}(11) 下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
谭浩强c语言期末考试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言的描述中,错误的是()。
A. C语言是一种高级语言B. C语言可以直接被计算机执行C. C语言具有结构化的特点D. C语言可以用于系统软件的开发答案:B2. 在C语言中,用于定义一个结构体的关键字是()。
A. structB. unionC. enumD. typedef答案:A3. 下列选项中,不能作为C语言合法变量名的是()。
A. _123abcB. intC. 2ndD. name答案:C4. 在C语言中,用于表示逻辑“与”操作的运算符是()。
A. &&B. ||C. !D. =答案:A5. 下列关于C语言函数的描述中,正确的是()。
A. C语言函数必须有返回值B. C语言函数可以没有参数C. C语言函数的返回值类型必须与函数定义时指定的类型一致D. C语言函数可以有多个返回值答案:B6. 在C语言中,用于定义一个整型数组的语句是()。
A. int a[10];B. int a[];C. int a;D. int a=10;答案:A7. 下列关于C语言指针的描述中,错误的是()。
A. 指针可以存储地址B. 指针可以存储数据C. 指针可以作为函数参数D. 指针可以作为函数返回值答案:B8. 在C语言中,用于输入输出的库函数是()。
A. math.hB. string.hC. stdio.hD. time.h答案:C9. 下列选项中,不是C语言预处理指令的是()。
A. #includeB. #defineC. #ifD. switch答案:D10. 在C语言中,用于定义一个枚举类型的关键字是()。
A. enumB. unionC. structD. typedef答案:A二、填空题(每题2分,共20分)1. C语言中,用于定义一个字符型变量的关键字是____。
答案:char2. 在C语言中,表示“不等于”的逻辑运算符是____。
第一章程序设计和C语言1.1.什么是计算机程序:一组计算机能识别和执行的指令。
只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作程序..计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。
1.2什么是计算机语言计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。
计算机语言发展阶段:机器语言(由0和1组成的指令)符号语言(用英文字母和数字表示指令)高级语言(接近于人的自然语言和数学语言)面向过程的语言(非结构化的语言、结构化语言);面向对象的语言1.3C语言的发展及其特点C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。
因此C语言问世以后得到迅速推广。
C语言主要特点:语言简洁、紧凑,使用方便、灵活。
(只有37个关键字、9种控制语句;程序书写形式自由,源程序短)运算符丰富。
(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达式类型多样化)数据类型丰富。
(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。
)具有结构化的控制语句。
(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言)语法限制不太严格,程序设计自由度大。
(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查)允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。
(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言)用C语言编写的程序可移植性好。
习题四填空题1、联编是指一个程序模块、调用代码之间互相关联的过程。
根据联编的时机不同,可以分为静态联编和(动态联编)。
2、包含一个或多个纯虚函数的类称为(抽象类)。
3、虚函数应该在(基类)中声明,且不能在派生类中重新定义。
4、纯虚函数是(只有函数声明而没有具体函数功能实现的虚函数)。
5、在析构函数前面加上关键字( virtual)进行说明,称该析构函数为虚析构函数。
6、如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的(析构函数)也是虚析构函数。
7、多态性分为两类:编译时的多态性和(运行时的多态性),编译时的多态性是通过和(函数)模板实现的。
8、对虚函数的调用有两种方式:(指针调用)和(对象调用)。
9、实现编译时的多态性的机制称为(静态关联),实现运行时的多态性的机制称为(动态关联)。
10、有一种特殊的虚函数,重定义时不要求同名,这种虚函数是(虚析构函数)。
11、模板可以实现程序设计中的(代码重用),体现了面向对象程序设计的(重用性)。
12、C++模板可以分为(函数模板)和(类模板)。
13、由函数模板实例化后是(模板函数),由类模板实例化后是(模板类)。
14、模板的声明使用关键字(template )。
15、已知int sum(int n){return n+n;}long sum(long n){return n+n;}是一个函数模板的两个实例,则该函数模板的定义是( template<typename T>T sum(T n){return n+n;} )。
选择题1、下面的4个关键字中,( A )是用来说明虚函数的。
A. virtualB. publicC. protectedD. private2、实现运行时的多态性要使用( D )。
A. 重载函数B. 构造函数C. 析构函数D.虚函数3、如果一个类至少有一个纯虚函数,那么该类称为( C )。
A. 虚基类B. 派生类C. 抽象类D. 以上都不对14、下列描述中,( D )是抽象类的特征。
A. 可以说明虚函数B. 可以进行构造函数重载C. 可以定义友元D. 不能说明其对象5、下列关于虚函数的描述中,( C )是正确的。
A. 虚函数是一个非成员函数B. 虚函数是一个静态成员函数C. 派生类的虚函数与基类种对应的虚函数具有相同的参数个数和类型D. 虚函数既可以在函数说明时定义,也可以在函数实现时定义6、下列关于纯虚函数与抽象类的描述中,( C )是错误的。
A. 抽象类是指具有纯虚函数的类B. 纯虚函数是一个特殊的虚函数,它没有具体的实现C. 一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类D. 抽象类只能作为基类来用,其纯虚函数的实现由派生类给出7、下列各函数的说明中,( B )表示纯虚函数。
A. virtual int vf(int);B. void vf(int)=0;C. virtual void vf()=0;D. virtual void vf(int){}8、虚函数必须是类的( D )。
A. 友元函数B. 构造函数C. 析构函数D. 成员函数9、下列关于虚函数的描述中,( A )是正确的。
A. 虚函数不能声明为另一个类的友元函数B. 虚函数不能声明为静态成员函数C. 派生类必须重新定义基类的虚函数D. 如果在重定义虚函数时使用了保留字virtual,则该重定义函数仍然是虚函数10、多态调用是指( C )。
A. 以任何方式调用一个虚函数B. 以任何方式调用一个纯虚函数C. 借助于指向对象的基类指针或引用调用一个虚函数D. 借助于指向对象的基类指针或引用调用一个纯虚函数11、在C++中,要实现动态联编,必须使用( D )调用虚函数。
A. 类名B. 派生类指针2C. 对象名D. 基类指针12、下列函数中,可以作为虚函数的是( D )。
A. 普通函数B. 构造函数C. 友元函数D. 析构函数13、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值( B )。
A. 不同B. 相同C. 相容D. 部分相同14、假设Aclass为抽象类,下列声明( B)是正确的。
A. Aclass fun(int);B. Aclass *p;C. int fun(Aclass);D. Aclass Obj;15、下面描述中,正确的是( D )。
A. 虚函数是没有实现的函数B. 纯虚函数的实现只能在直接派生类中定义C. 抽象类是只有纯虚函数的类D. 抽象类指针可以指向不同的派生类16、当运行程序时实际上是将类模板实例化为一个具体的( D )。
A. 类B. 对象C. 函数D. 模板类17、模板函数的真正代码是在( C )时产生的。
A. 源程序中声明函数时B. 源程序中定义函数时C. 源程序中调用函数时D. 运行执行函数时18、类模板的模板参数( D )。
A. 只可作为数据成员的类型B. 只可作为成员的返回值类型C. 只可作为成员函数的参数类型D. 以上三者皆可19、以下关于模板的叙述中,不正确的是( C )。
A. 用模板定义一个对象时不能省略参数3B. 类模板只能有虚拟参数类型C. 类模板的成员函数都是模板函数D. 类模板本身在编译中不会生成任何代码20、如果有如下函数模板的定义:template <class T>T func(T x,T y){return x+y;}则对函数func调用不正确的是( C )。
A. func(3,5);B. func<>(3,5);C. func(3,2.5);D. func<int>(3,2.5);判断题1、在C++中,要实现动态联编,可以使用基类指针调用虚函数。
√2、构造函数可以作为虚函数使用。
N3、虚函数是没有实现的函数。
N4、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值部分相同。
N5、抽象类是只有纯虚函数的类。
N6、构造函数可以作为虚函数。
N7、纯虚函数是一个特殊的虚函数,它没有具体的实现。
√8、虚函数的声明需要使用关键字protected。
N9、设置虚函数的目的是为了消除二义性。
N10、抽象类只能作为基类使用,其纯虚函数的实现由派生类来完成。
√分析题1、#include<iostream.h>class A{public:A(){cout<<endl<<"实例化类A的一个对象。
";}virtual ~A()4{cout<<endl<<"消除类A的一个对象。
";}virtual void f(){cout<<endl<<"执行类A的成员函数。
";}};class B:public A{public:B(){cout<<endl<<"实例化类B的一个对象。
";}virtual ~B(){cout<<endl<<"消除类B的一个对象。
";}void f(){cout<<endl<<"执行类B的成员函数。
";}};void main(){A a=A();B b=B();cout<<endl<<"----------";a.f();b.f();cout<<endl<<"----------";A *p;5p=&b;p->f();cout<<endl<<"----------";}2、#include<iostream.h>class shape{public:shape(){};virtual ~shape(){cout<<"Execting shape dtor"<<endl;}};class Circle:public shape{public:Circle(){};~Circle(){cout<<"Execting Circle dtor"<<endl;}};void main(){shape *pShape=new Circle;delete pShape;}3、#include <iostream>using namespace std;class Base6{private: i nt x;public: Base(int a=0) { x=a; }virtual void fun() { cout<<"Base fun"<<endl; }virtual ~Base() { cout<<"~Base"<<endl; }};class Derived:public Base{private: i nt y;public: Derived(int a=0,int b=0):Base(a) { y=b; }void fun() { cout<<"Derived fun"<<endl; }~Derived() { cout<<"~Derived"<<endl; }};void GFun(Base *p){ p->fun(); }int main(){Derived *p=new Derived;GFun(p); delete p;return 0;}4、#include<iostream.h>class Base{public:virtual int func(){return 10;}};class Derived:public Base{public:int func(){return 80;}};7void main(){Derived d;Base&b=d;cout<<b.func()<<endl;cout<<b.Base::func()<<endl;}5、#include<iostream.h>class base{public:virtual void who(){cout<<"base class1"<<endl;}};class derive1:public base{public:void who(){cout<<"derive1 class2"<<endl;}};class derive2:public base{public:void who(){cout<<"derive2 class3"<<endl;}};void main(){base obj1,*p;derive1 obj2;derive2 obj3;p=&obj1;p->who();p=&obj2;8p->who();p=&obj3;p->who();obj2.who();obj3.who();}6、#include<iostream>#include<cstring>using namespace std;class Base{char base_name[20];public:Base(){strcpy(base_name,"BASE");}virtual char*my_name(){return base_name;}char*class_name(){return base_name;}};class Derived:public Base{char derived_name[20];public:Derived(){strcpy(derived_name,"DERIVED");}char*my_name(){return derived_name;}char*class_name(){return derived_name;}};void show_ptr(Base*p){cout<<endl<<p->my_name()<<""<<p->class_name();}void show_ref(Base&r){cout<<endl<<r.my_name()<<""<<r.class_name();;}int main()9{Base bb;Derived dd;cout<<endl;show_ptr(&bb);cout<<"<==应显示'ABCD EFG'";show_ptr(&dd);cout<<"<==应显示'DERIVED EFG'";cout<<endl;show_ref(bb);cout<<"<==应显示'ABCD EFG'";show_ref(dd);cout<<"<==应显示'DERIVED EFG'";cout<<endl;cout<<endl<<dd.Base::my_name()<<""<<dd.Base::class_name();cout<<"<==应显示'ABCD EFG'";return 0;}7、#include<iostream.h>#include<math.h>const double PI=3.14;class Circle{protected:double r;public:Circle(double radius=0):r(radius){}virtual double Area()=0 ;virtual double Volume()=0;};class Sphere:public Circle{public:Sphere(double radius=0):Circle(radius){}double Area(){ return 4*PI*r*r;}double Volume(){ return 4*PI*pow(r,3)/3; }10};class Cylinder:public Circle{double h;public:Cylinder(double radius=0,double height=0):Circle(radius){ h=height; }double Area(){ return 2*PI*r*(r+h); }double Volume(){ return PI*r*r*h; }};class Cone:public Circle{double h;public:Cone(double radius=0,double height=0):Circle(radius){ h=height; }double Area(){double l=sqrt(h*h+r*r);return PI*r*r*(r+l);}double Volume(){return PI*r*r*h/3;}};void Output(Circle*b[],int n){for(int i=0;i<n;i++)cout<<b[i]->Area()<<" "<<b[i]->Volume()<<endl;}void main(){11Sphere r1(2);Cylinder r2(2,3);Cone r3(2,3);Circle*a[3]={&r1,&r2,&r3};Output(a,3);}8、#include<iostream.h>template <class T>T min(T x,T y){if (x<y)return x;elsereturn y;}void main(){int n1=2,n2=8;double d1=2.3,d2=5.6;cout<<min(n1,n2)<< " ";cout<<min(d1,d2)<< endl;}9、#include<iostream.h>template <typename T>T total(T *p){T sum=0;while(*p)sum+=*p++;return sum;}12int main(){int x[]={1,3,5,7,9,0,13,15,17};cout<<total(x);return 0;}一、编程题1、生成容器类RQ,提供成员函数calTJ()计算容器的体积,定义calTJ()为纯虚数,生成LFT 类表示立方体,数据成员A表示立方体的边长,提供成员函数calTJ()计算立方体的体积;生成长方体类CFT,数据成员A,B,C分别表示长方体的长,宽和高,提供成员函数calTJ()计算长方体的体积,类CFT和类LFT都继承类RQ。