c语言第二版第七章答案
- 格式:doc
- 大小:39.00 KB
- 文档页数:4
C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。
2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。
3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。
4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。
【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。
6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。
1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。
2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。
3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。
c语言第二版课后习题答案C语言第二版课后习题答案C语言是一门广泛应用于计算机科学和软件开发领域的编程语言。
作为一门基础性的编程语言,掌握C语言对于学习其他高级编程语言以及深入理解计算机原理和操作系统等方面都具有重要意义。
而《C语言第二版》是一本经典的C 语言教材,对于初学者来说是一本非常好的入门教材。
在学习C语言过程中,课后习题是巩固知识、提高编程能力的重要环节。
下面,我将为大家提供一些C语言第二版课后习题的答案。
1. 编写一个C程序,实现两个整数相加并输出结果。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和为:%d\n", sum);return 0;}```2. 编写一个C程序,判断一个数是否为偶数。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("该数为偶数\n");} else {printf("该数为奇数\n");}return 0;}```3. 编写一个C程序,计算一个数的阶乘。
```c#include <stdio.h>int main() {int num, i;long long factorial = 1;printf("请输入一个整数:");scanf("%d", &num);if (num < 0) {printf("负数没有阶乘\n");return 0;}for (i = 1; i <= num; i++) {factorial *= i;}printf("%d的阶乘为:%lld\n", num, factorial);return 0;}```4. 编写一个C程序,判断一个数是否为素数。
《数据结构(C语言版第2版)》(严蔚敏著)第七章练习题答案第7章查找1.选择题(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()。
A.(n-1)/2B.n/2C.(n+1)/2D.n答案:C解释:总查找次数N=1+2+3+…+n=n(n+1)/2,则平均查找长度为N/n=(n+1)/2。
(2)适用于折半查找的表的存储方式及元素排列要求为()。
A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序答案:D解释:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
(3)如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用()查找法。
A.顺序查找B.折半查找C.分块查找D.哈希查找答案:C解释:分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。
由于块内是无序的,故插入和删除比较容易,无需进行大量移动。
如果线性表既要快速查找又经常动态变化,则可采用分块查找。
(4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。
A.20,70,30,50B.30,88,70,50C.20,50D.30,88,50答案:A解释:表中共10个元素,第一次取⎣(1+10)/2⎦=5,与第五个元素20比较,58大于20,再取⎣(6+10)/2⎦=8,与第八个元素70比较,依次类推再与30、50比较,最终查找失败。
(5)对22个记录的有序表作折半查找,当查找失败时,至少需要比较()次关键字。
A.3B.4C.5D.6答案:B解释:22个记录的有序表,其折半查找的判定树深度为⎣log222⎦+1=5,且该判定树不是满二叉树,即查找失败时至多比较5次,至少比较4次。
(6)折半搜索与二叉排序树的时间性能()。
C程序设计(第2版)第七章习题解答第七章动态内存分配习题一、基本概念与基础知识自测题7.1 填空题7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。
答案:(1)代码区,存放程序代码;(2)全局变量与静态变量区,存放全局变量或对象(包括静态);(3)局部变量区即栈(stack)区,存放局部变量;(4)自由存储区(free store),即动态存储区或堆(heap)区。
7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动态建立对象的初始化是通过(3)实现(4)。
答案:(1)命名对象(2)无名对象(3)初始化式(initializer)(4)显式初始化7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。
new返回的指针是指向(3)的指针。
答案:(1)3个(2)1个(3)30行10列的2位数组7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。
如果new返回的指针丢失,则所分配的自由存储区空间无法收回,称为(2)。
这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。
答案:(1)返回一个空指针(NULL)(2)内存泄漏(3)重新启动计算机后(4)并不依赖于建立它的作用域7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。
答案:(1)浅拷贝(2)同一个堆对象7.1.6 单链表的结点包含两个域:(1)和(2)。
使用链表的最大的优点是(3),即使是动态数组也做不到这一点。
答案:(1)数据域(2)指针域(3)用多少空间,开多少空间7.1.7 进入单链表必须通过单链表的(1),如果它丢失则(2),内存也(3),在单链表中进行的查找只能是(4)。
C程序设计基础第二版(高等教育出版社)习题答案习题一参考答案第1章C++语言概述一、选择题:1.D2.A3.D4.A5.A6.D7.C8.B9.B二、改后如下:#include//预处理指令,原程序缺少“#”号intmain()//定义主函数,原程序缺少返回值类型“int”(也可为“void”){cout<运行后输出:HelloWorld!三、简答题1、解答:在较大或较复杂的C++程序中,加上相关的注释信息,解释相应的程序,可提高程序的可读性。
2、C++语言有两种注释:(1)C++型注释。
从“//”开始,该行中所有字符都被作为注释处理。
(2)C型注释。
“/某”表示注释的开始,“某/”表示注释的结束,在“/某”、“某/”之间的字符均被视作注释。
3、C型注释主要用于大块注释,而且C++型注释可以嵌在C型注释中。
四、程序设计题1、编写一个程序,在屏幕上输出“IcanueC++”。
解:#includeintmain(){cout<运行后输出:IcanueC++2、参照例题,设计一个C++程序,输入两门课程的成绩,求总成绩。
解:#includemain(){int1,2,um;cout<cin>>1>>2;um=1+2;cout<}3、参照例题,设计一个C++程序,输入a、b两个整数,输出其中的最小数。
解:#includevoidmain(void){intmin(int某,inty);inta,b,m;cout<>a>>b;m=min(a,b);cout<intmin(int某,inty){intz;if(某z=y;returnz;}习题二参考答案第2章数据类型和表达式一、选择题1.C2.B3.B4.B5.A6B7.D8.C9.D11.D12..A13.D14.A15.B16.B17.B18.C19.A二、填空题1、基本类型导出类型用户定义类型2、63、iotream#include<iotream>4、一个int型数据占用的字节数5、210.C6、77、1008、?:9、falefaletrue10、(50<某)&&(某<=100)或!((50>某)||(某>100))11、(m)某100+((m/10))某10+m/10012、非零13、114、字母数字下划线15、4.5三、问答题1.C++语言中用数值“1”表示“真”,数值“0”表示“假”。
7.1用筛法求100之内的素数。
解:所谓“筛法”指的是“Eratosthenes筛法”。
Eratosthenes是古希腊的著名数学家。
他采用的方法是:在一张纸上写下1~1000之间的全部整数,然后逐个判断它们是否素数,找出一个非素数就把它挖掉,最后剩下的就是素数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 …具体做法如下:先将1挖掉(因为1不是素数)。
用2去除它后面的各个数,把能被2整除的数(如4,6,8…)挖掉,即把2的倍数挖掉。
用3去除它后面各数,把3的倍数挖掉。
分别用4,5…各数作为除数去除这些数以后的各数。
这个过程一直进行到在除数后面的数已全被挖掉为止。
例如在上表中1~50范围内的素数,要一直进行到除数为47为止。
事实上,这一过程可以简化。
如果需要找1~n数)即可。
例如对1~50,只需进行到将7上面的算法可表示为:挖去1;用刚才被挖去的数的下一个数p去除p后面的各数,把p的倍数挖掉;检查p n=1000,则检查p<31否),如果是,则返回(2)继续执行,否则就结束;纸上剩下的就是素数。
解题的基本思路有了,但要变成计算机的操作,还要作进一步的分析。
如怎样判断一个数是否已被“挖掉”,怎样找出某一个数p的倍数,怎样打印出未被挖掉的数。
可以设一个数组a,a[1]到a[100]的值分别是1,2,3,…100。
然后用上述方法将非素数“挖去”。
如果一个数被认为是非素数,就将它的值变为零,最后将不为零的数组元素输出,就是所求的素数表。
程序如下:#include <math.h>main ( ){int i,j,n,a[101];for (i=1;i<=100;i++)a[i] =i;for (i=2;i<sqrt(100);i++)for (j=i+1;j<=100;j++){if (a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0; } /*非素数,赋值为0,“挖掉”*/printf(“\n”);for (i=2,n=0;i<=100;i++){ if (a[i]!=0){printf(“%5d”,a[i]);n++; }if (n==10) /*此处if 语句的作用是在输出10个数后换行*/{ printf (“\n”);n=0; }}}运行结果:2 3 5 7 11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 89 977.2用选择法对10个整数排序(从小到大)。
c程序设计谭浩强第二版答案谭浩强教授的《C程序设计》第二版是一本广泛使用的C语言教材,它以通俗易懂的语言和丰富的实例,帮助读者学习C语言的基础知识和编程技巧。
这本书的习题答案对于学习者来说是一个重要的参考资源。
以下是部分习题的答案,但请注意,这里仅提供部分答案,并不是全书的答案。
第一章 C语言概述1. 问题1:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、数据类型丰富、具有高级语言的优点和低级语言的特性。
2. 问题2:C语言适用于哪些领域?- 答案:C语言适用于系统软件开发、嵌入式系统开发、操作系统开发、高性能计算等领域。
第二章数据类型、运算符和表达式1. 问题1:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。
2. 问题3:C语言中的算术运算符有哪些?- 答案:C语言中的算术运算符包括加(+)、减(-)、乘(*)、除(/)和模运算(%)。
第三章控制语句1. 问题1:C语言中的条件语句有哪几种?- 答案:C语言中的条件语句包括if语句、if...else语句和嵌套的if...else语句。
2. 问题2:while循环和do...while循环有什么区别?- 答案:while循环先判断条件再执行循环体,可能一次都不执行循环体;do...while循环至少执行一次循环体,然后再判断条件。
第四章函数1. 问题1:函数的定义和声明有什么区别?- 答案:函数的定义包括函数名、返回类型、参数列表和函数体;函数的声明只包括函数名、返回类型和参数列表。
2. 问题3:什么是递归函数?- 答案:递归函数是指在函数内部调用自身的函数。
第五章指针1. 问题1:什么是指针?- 答案:指针是一种变量,它存储了另一个变量的内存地址。
2. 问题2:指针和数组有什么联系?- 答案:数组名可以作为指针使用,指向数组的第一个元素的地址。
第三章习题答案1.掌握算法必须要掌握的五个特性:a)有穷性。
算法执行步骤的次数有限,能在有限时间内完成。
b)确切性。
每一步操作的执行步骤、执行结果确定,不能有二义性。
c)有效性。
算法中的每一步操作都是可执行的,即算法的每一步都能通过手工或机器在有限时间内完成。
d)必须有零个或多个输入。
e)必须有一个或多个输出。
2.算法是指令的有限序列,是求解问题显式的一步一步进行的过程。
为程序编写提供依据。
程序是用C语言单词将算法表达出来的过程。
算法是程序的灵魂。
3.数据类型总体分为三类:a)对象类型。
对象类型的基本类型又分为整型、浮点型、字符型。
b)函数类型。
c)不完全类型。
4.整型可分为:a)有符号整数。
它又包括 short int、int、long int、long long int。
b)无符号整数。
它又包括unsigned short int、unsigned int、unsigned longint、unsigned long long int。
不同数据类型数据的值域范围不同。
5.合法的标识符有:scanf、x、x1、_y 、_y2x、printf、main合法标识符由英文字母、数字、下划线组成,且第一个字符只能是英文字母或下划线。
关键词不能成为合法标识符。
6.略7.8.变量名:x 数据对象:3存储地址:&x 存储单元:8(在VS2005中)9.0x13B1:十六进制int型字面值;3e3:十进制 int型字面值;‘d’:字符型字面值;“my university”:字符串型字面值;99:十进制int型字面值;023:八进制int型字面值;1.3e-4:double型浮点型字面值;33U:十进制unsigned int型字面值;034L:八进制long int型字面值;0x34UL:十六进制unsigned long int型字面值;30.23L:十进制long double型字面值;30.23F:十进制float型字面值;10.\?:?\’:’\”:”\\:\\233:表示八进制int型整数233\x2f:表示十六进制int型整数 2f。
c语言程序设计教程第二版课后习题答案第一章:C语言基础1. 以下为C语言的特点:- C语言是一种结构化编程语言,可以通过模块化的方式构建复杂的程序。
- C语言具有较高的可移植性,可以在不同的操作系统和硬件平台上运行。
- C语言提供了丰富的库函数,方便开发者进行程序开发。
- C语言对指针的支持较好,可以进行底层的内存操作。
2. C语言中的标识符规则:- 标识符由字母、数字和下划线组成,且第一个字符不能是数字。
- 标识符区分大小写,因此变量名"num"和"Num"是不同的。
- 标识符不能与关键字重名,如"if"、 "for"等。
- 标识符长度一般不超过32个字符。
3. 在C语言中,预处理指令的作用是在程序编译之前对代码进行处理,包括宏展开、文件包含等。
预处理指令以"#"开头,常见的预处理指令有:- #include:用于包含头文件,将头文件中的内容插入到当前文件中。
- #define:用于定义宏,将宏名称替换为指定的值或代码片段。
- #ifdef、#ifndef、#endif:用于条件编译,根据条件是否成立来选择性地编译代码。
4. C语言中的数据类型分为基本数据类型和派生数据类型两种。
基本数据类型包括整型、浮点型、字符型和布尔型,派生数据类型包括数组、指针、结构体和共用体。
5. C语言中的运算符主要分为算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符等。
算术运算符用于执行加减乘除等基本算术操作,关系运算符用于比较两个值的大小关系,逻辑运算符用于组合多个条件的判断结果,位运算符用于对二进制位进行操作,赋值运算符用于将右侧的值赋给左侧的变量。
第二章:C语言程序结构1. C语言程序结构由函数、语句和注释组成。
每个C语言程序至少包含一个main()函数,作为程序的入口。
2. 以下为C语言程序的基本结构:```c#include <stdio.h>int main() {// 程序代码return 0;}```3. C语言中的控制语句包括条件语句和循环语句。
第一章习题答案一、选择题1~5:BDCDA 6~10:DABBB 11~12:CC二、填空题1、main()2、函数首部,函数体3、函数4、编辑、编译、连接、运行5、.cpp、.obj、 .exe6、; 或分号三、编程题#include <stdio.h> /* 包含标准库的信息 */void main() /* 定义名为main 的函数,它不接受参数值 */{ /* main函数的语句都被括在花括号中 */printf("hello, world\n");/* main 函数调用库函数printf 以显示字符序列,其中\n代表换行符 */}第二章习题答案一、选择题1~5:CBABB 6~10:CDCDD 11~15:CADBC 16~20:BDAAD二、填空题1、整型,实型,字符型,枚举类型2、13、94、123535145、2,16、2,27、10 20 08、a=149、2,3,110、double第三章习题答案一、选择题1~5:CBBBC 6~10:DDDBB二、填空题1、控制语句,表达式语句,复合语句2、;3、{}4、15、a6、c:dec=120,oct=170,hex=78,ASCII=x7、32767,327678、10,A,109、3 310、(1) 123.456001(2) □□□□□□□ 123.456(3) 123.4560(4) 8765.456700(5) □□□□□□ 8765.457(6) 8765.4567(7) 8765.4567三、编程题1、参考答案:#include <stdio.h>void main(){int a,b,c;long int u,n;float x,y,z;char c1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51274;n=128765;c1='a';c2='b';printf("\n");printf("a=%2d b=%2d c=%2d\n",a,b,c );printf("x=%8.6f,y=%8.6f,z=%9.6f\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=%6ld n=%9ld\n",u,n); printf("c1='%c'or %d(ASCII)\n",c1,c1);printf("c2='%c'or %d(ASCII)\n",c2,c2);}2、参考答案:#include <stdio.h>void main(){float a, b, c, t;printf("please input a,b,c:\n"); scanf ("%f, %f, %f", &a, &b, &c);t=(a+b+c)/3;printf ("averageof %6.2f、%6.2f and %6.2f is %6.2f\n",a,b,c,t);}3、参考答案:#include <stdio.h>main(){int R, d;float s;printf("请输入圆的半径");scanf("%d",&R);d=2*R;c=2*3.14159*R;printf("d=%d,c=%f\n",d,c);}4、参考答案:#include <stdio.h>void main(){int h, f, x, y; /* x为鸡的数量,y为兔的数量 */printf("请输入鸡兔的总头数h,总脚数f:");scanf("%d%d", &h, &f);x=(4*h-f)/2;y=(f-2*h)/2;printf("笼中有鸡%d 只,有兔%d只。
计算机二级C语言习题集汇总及答案目录第一章C语言基础知识第二章C语言程序设计的初步知识第三章顺序结构程序设计第四章选择结构程序设计第五章循环结构程序设计第六章数组第七章函数第八章指针第九章结构体与共用体第十章文件附录1 预处理命令附录2 位运算模拟试题一模拟试题二模拟试题三模拟试题四模拟试题五第一章答案第二章答案第三章答案第四章答案第五章答案第六章答案第七章答案第八章答案第九章答案第十章答案附录1 答案附录2 答案模拟试题一答案模拟试题二答案模拟试题三答案模拟试题四答案模拟试题五答案第一章C语言基础知识一、选择题1.C语言规定,必须用C 作为主函数名。
(0级)A)Function B)include C)main D)stdio 2.一个C程序可以包含任意多个不同名的函数,但有且仅有一个,一个C程序总是从 B 开始执行。
(0级)A)过程B) 主函数C)函数D)include3. A 是C程序的基本构成单位。
(0级)A)函数B) 函数和过程C) 超文本过程D) 子程序4.下列说法正确的是C 。
(0级)A) 一个函数的函数体必须要有变量定义和执行部分,二者缺一不可B) 一个函数的函数体必须要有执行部分,可以没有变量定义C) 一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数D) 以上都不对5.下列说法正确的是D 。
(0级)A) main函数必须放在C程序的开头B) main函数必须放在C程序的最后C) main函数可以放在C程序的中间部分,但在执行C程序时是从程序开头执行的D) main函数可以放在C程序的中间部分,但在执行C程序时是从main函数开始的6.下列说法正确的是 C 。
(0级)A) 在执行C程序时不是从mian函数开始的B) C程序书写格式严格限制,一行内必须写一个语句C) C程序书写格式自由,一个语句可以分写在多行上D) C程序书写格式严格限制,一行内必须写一个语句,并要有行号7.在C语言中,每个语句和数据定义是用C 结束。
第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
第七章函数一、选择题1、以下关于函数的叙述中正确的是A)每个函数都可以被其它函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数2、设函数fun的定义形式为void fun(char ch,float x) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5);C)fun('65',2.8); D)fun(32,32);3、有以下程序int f1(int x,int y){return x>y?x:y;}int f2(int x,int y){return x>y?y:x;}main(){ int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g); }程序运行后的输出结果是A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,74、有以下程序#define P 3#define F(int x) { return (P*x*x);}main(){ printf("%d\n",F(3+5));}程序运行后的输出结果是A)192 B)29 C)25 D)编译出错5、若程序中定义了以下函数double myadd(double a,double B){ return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是A)double myadd(double a,B); B)double myadd(double,double);C)double myadd(double b,double A); D)double myadd(double x,double y);6、有以下程序char fun(char x ,char y){ if(x < y) return x;return y;}main(){ int a=’9’,b=’8’,c=’7’;printf("%c\n",fun(fun(a,b),fun(b,c))); }程序的执行结果是A)函数调用出错 B)8 C)9 D)77、有以下程序void f(int v,int w){ int t;t=v;v=w;w=t;}main(){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,18、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参9、有以下函数定义:void fun(int n,double x) { …… }若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A)fun(int y,double m); B) k=fun(10,12.5);C)fun(x,n); D) vold fun(n,x);10、有以下程序fun(int a,int b){ if(a>b) return(a);else return(b);}main(){ int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf("%d\n",r);}程序运行后的输出结果是A) 3 B) 6 C) 8 D) 1211、在一个C程序中A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置12、有以下程序int f1(int x,int y){ return x>y?x:y; }int f2(int x,int y){ return x>y?y:x; }main(){ int a=4,b=3,c=5,d,e,f;d=f1(a,b); d=f1(d,c);e=f2(a,b); e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,413、有如下程序void f(int x,int y){ int t;if(x < y){ t=x; x=y; y=t; }}main(){ int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf("%d,%d,%d\n",a,b,c);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,514、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是A) void B) int C) float D) double15、有以下程序float fun(int x,int y){ return(x+y); }main(){ int a=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A) 编译出错 B) 9 C) 21 D) 9.016、若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无值型17、以下函数值的类型是fun(float x){ float y;y= 3*x-4;return y;}A)int B)不确定 C)void D)float18、以下所列的各函数首部中,正确的是A)void play(var :Integer,var b:Integer)B)void play(int a,b)C)void play(int a,int b)D)Sub play(a as integer,b as integer)19、以下程序的输出结果是fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf("%d",a);}A)0 B)29 C)31 D)无定值20、有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4 C) 5 D) 有语法错21、有如下程序int func(int a,int b){ return(a+b);}main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是A) 12 B) 13 C) 14 D) 1522、以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效23、有以下程序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 \n",z,y,x);}输出结果是A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,45624、有以下程序#include "stdio.h"int abc(int u,intv);main(){ int a=24,b=16,c;c=abc(a,b);printf("%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;}输出结果是A)6 B)7 C)8 D)925、以下说法中正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分26、请读程序:#includefunc( 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);}上面程序的输出结果是A)11 B)20 C)21 D)31二、填空题1、有以下程序int sub(int n) {return(n/10+n%10); }main(){ int x,y;scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);}若运行时输入:1234<回车>,程序的输出结果是。
c 语言程序设计教程第二版课后习题答案C语言程序设计教程第二版课后习题答案在学习C语言程序设计的过程中,课后习题是巩固知识、提高编程能力的重要环节。
本文将为大家总结C语言程序设计教程第二版课后习题的答案,希望对大家的学习有所帮助。
第一章课后习题答案1.1 编写一个C程序,输出"Hello, World!"。
```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```1.2 编写一个C程序,计算并输出5的阶乘。
```c#include <stdio.h>int main() {int i, fact = 1;for (i = 1; i <= 5; i++) {fact *= i;}printf("5的阶乘为%d\n", fact);return 0;}```1.3 编写一个C程序,输入一个整数n,计算并输出1到n的和。
```c#include <stdio.h>int main() {int n, sum = 0, i;printf("请输入一个整数:");scanf("%d", &n);for (i = 1; i <= n; i++) {sum += i;}printf("1到%d的和为%d\n", n, sum);return 0;}```第二章课后习题答案2.1 编写一个C程序,输入一个整数n,计算并输出n的平方。
```c#include <stdio.h>int main() {int n;printf("请输入一个整数:");scanf("%d", &n);printf("%d的平方为%d\n", n, n * n);return 0;}```2.2 编写一个C程序,输入一个整数n,判断并输出n是奇数还是偶数。
7.1 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
参考程序如下:
#include<stdio.h>
int aa(int m,int n) //求最大公约数
{ int k;
if(m<n) //使得大数存在m中
{k=m;m=n;n=k;}
k=m%n;
while(k) //辗转求余法
{ m=n;
n=k;
k=m%n;
}
return(n); //n即为最大公约数
}
int bb(int m,int n) //求最小公倍数
{
int k;
k=aa(m,n); //调用aa函数,返回两数的最大公约数
return(m*n/k);
}
main()
{
int m, n,yy,kk;
printf("Input m and n:");
scanf("%d%d",&m,&n);
yy=aa(m,n);
kk=bb(m,n);
printf("最小公倍数=%d\n",kk);
printf("最大公约数=%d\n",yy);
}
7.3 写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。
参考程序如下:
#include<math.h>
int aa(int n)
{
int i;
int flag; // flag标志
for(i=2;i<=sqrt(n);i++)
{ if(n%i==0) break;
}
if(i>sqrt(n)) flag=1;
else flag=0;
return(flag);
}
main()
{ int n,flag; // flag标志
printf("\nInput n:");
scanf("%d",&n);
flag=aa(n);
if(flag==1) printf("%d is a prime number.\n",n);
else printf("%d is not a prime number.\n",n);
}
7.4 写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换。
参考程序如下:
#include <stdio.h>
main()
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3][3],i,j;
printf("array a:\n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("After switch:\n");
aa(a,b);
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
void aa(int a[3][3],int b[3][3])
{ int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
}
说明:当数组名作函数参数时,形参也必须是同类型的数组名,形参数组名的实质是一个指针变量,存放的第0行第0列的元素的地址;这样,子函数中a[i][j]就是主函数中的a[i][j];
7.11写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列
参考程序如下:
main()
{
char s[10];
int i;
void sort(char ss[],int n);
printf("\nInput 10 character:\n");
for(i=0;i<10;i++)
scanf("%c",&s[i]);
printf("\nbefore sort:");
for(i=0;i<10;i++)
printf("%c ",s[i]);
printf("\nAfter sort:");
sort(s,10);
for(i=0;i<10;i++)
printf("%c ",s[i]);
}
void sort(char a[],int n) //起泡法
{
int i,j;
char t;
for(i=1;i<=9;i++)
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
7.17用递归法将一个整数n转换成字符串。
例如,输入483,应输出字符串“483”。
n的位数不确定,可以是任意位数的整数。
参考程序如下:
#include <stdio.h>
main()
{
int n;
void aa(int n);
printf("Input a integar:");
scanf("%d",&n);
printf("The result is:");
if(n<0) {printf("-"); n=-n;} //如果是负数,先输出符号
printf("The result is:");
aa(n);
}
void aa(int n)
{
int i;
i=n/10; //丢掉n的个位
if(i!=0) aa(i); //一直递归调用aa函数,直到i=0,即n是一位数时putchar(n%10+'0'); //把n的个位数字转换成字符
}
补充题:用函数调用的方式编写程序,在主函数中提示输入自然数n,调用函数fun,并输出结果。
函数fun用递归的方法求1+2+3+…n的值。
参考程序如下:
#include <stdio.h>
int fac(int n)
{ int f;
if(n<0) {printf("n<0,data error!"); }
else if(n==0) f=0;
else f=fac(n-1)+n;
return(f);
}
main()
{ int n, y;
printf("Input a integer number:");
scanf("%d",&n);
y=fac(n);
printf("1+2+...+%d=%d",n,y);
}。