当前位置:文档之家› 单片机课后习题答案(《单片机应用技术》C语言版)复习课程

单片机课后习题答案(《单片机应用技术》C语言版)复习课程

单片机课后习题答案(《单片机应用技术》C语言版)复习课程
单片机课后习题答案(《单片机应用技术》C语言版)复习课程

单片机课后习题答案(《单片机应用技术》

C语言版)

单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、编程器等。连接方法如下图所示。

单片机开发系统连接方法示意图

2.单片机应用系统的开发过程如下:

设计电路图→制作电路板→程序设计→硬软件联调→程序下载→产品测试2.4 具有那些基本功能

答:1.在线仿真功能

在线仿真器(In Circuit Emulator,简称ICE)是由一系列硬件构成的设备,它能仿真用户系统中的单片机,并能模拟用户系统的ROM、RAM和I/O 口。因此,在线仿真状态下,用户系统的运行环境和脱机运行的环境完全“逼真”。

2.调试功能

1)运行控制功能

开发系统应能使用户有效地控制目标程序的运行,以便检查程序运行的结果,对存在的硬件故障和软件错误进行定位。

2)单片机状态查看修改功能

当CPU停止执行程序运行后,开发系统允许用户方便地读出或修改目标系统资源的状态,以便检查程序运行的结果、设置断点条件以及设置程序的初始参数。任务2中图2.13给出了在Medwin调试环境下查看单片机内部资源的菜单。

3.程序编译功能

1) 程序设计语言

单片机程序设计语言包括机器语言、汇编语言和高级语言。

机器语言是单片机唯一能够识别的语言。

汇编语言具有使用灵活、实时性好的特点。目前,在实际项目开发中较少使用汇编语言。

高级语言通用性好,且具有较好的可读性和可移植性,是目前单片机编程语言的主流。

2) 程序编译

单片机开发系统能够提供源程序的编辑、编译和下载功能以及工程管理功能。

4.程序固化功能

编程器是完成这种任务的专用设备,它也是单片机开发系统的重要组成部分。

习题4 答案

4.单片机定时/计数器的定时功能和计数有何不同

答:当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,如果单片机系统采用12M晶振,则计数周期为:,这是最短的定时周期,适当选择定时器的初值可获取各种定时时间。

当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数,检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。

当需要准确计算时间时往往采用定时器的定时方式,而当要对一些外部事件计数时则采用定时器的计数方式。

4.软件定时和硬件定时的原理

答:软件定时是通过编写一段延时程序来实现定时,这段延时程序不完成任何操作,只是通过一些空操作浪费掉一段时间。这样的软件定时往往浪费CPU的工作效率,并且定时不够准确,前面三章的各个任务中均采用了这种方法。

硬件定时是通过单片机的定时器来实现时间的计算,用户只需要对定时器的工作方式、初始值赋予合适的数值,启动定时器后,定时器将自动按照机器周期定时。这种由定时器实现的定时方式,定时时间准确、CPU的工作效率高。

4.5单片机的定时/计数器是增1计数器还是减一计数器

答:

MCS-51系列单片机的定时/计数器是增1计数器。

对于增1计数器,计数初值应等于最大计数值减去所需要的计数值。

而减1计数器,计数初值就等于所需要的计数值。

例如:假设需要计数50000次。对于增1计数器的单片机,若采用方式1的定时器,最大计数值为65536,则初值应为:65536-50000=15536。

而对于减1计数器,则计数初值将为50000。

1,当定时计数器在工作方式一,晶振平率为6赫兹

答:

在定时/计数器工作于方式1下,最大计数值为65536。

若晶振频率为6MHz,则一个机器周期为2μS,所以最短定时时间为2μS(计数初值为65535),最长定时时间为2μS×65536=μS(计数初值为0)

4.8什么是中断特点是什么

答:

中断是通过硬件来改变CPU的运行方向。计算机在执行程序的过程中,当出现CPU以外的某种情况,由服务对象向CPU发出中断请求信号,要求CPU 暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。

调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的;而何时调用中断服务程序事先却无法确定,因为“中断”的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。

中断的特点:分时操作、实时处理、故障处理

4.9 单片机有哪几个中断源

答:

MCS-51系列单片机有5个中断源,分别是外部中断0、定时器0、外部中断1、定时器1、串行口。它们的优先级别通过寄存器IP实现。

4.外部中断有哪两种触法方式

答:

外部中断有低电平触发和下降沿触发两种方式。通过定时器控制寄存器TCON中的IT0、IT1来选择和设定。

IT1为中断触发方式控制位,当IT1 = 0,外部中断1控制为电平触发方式。当IT1 = 1,外部中断1控制为下降沿触发方式。

4 常用的中断函数定义语法如下:

答: void 函数名() interrupt n【using,m】

其中n为中断类型号,C51编译器允许0~31个中断,n取值范围0~31。

习题5答案

5,7段 LED静态和动态显示在硬件连接上分别具有什么特点

答:LED静态显示时各位数码管相对独立,公共端恒定接地(共阴极)或正电源(共阳极),每个数码管的8个字段分别与一个8位I/O口地址相连,适合于2个及其以下的数码管显示。动态显示时各位数码管的段选线相应并联在一起,由一个8位的I/O口控制,各位的段选线由另外的I/O口控制。

5.LED显示器一次能点亮多少行灯

答:每次只能点亮一行。其采用的为动态显示,具体原理为:从第一行开始点亮,每行点亮之间延时1ms,第八行结束后再从第一行开始循环显示。利用人体的视觉驻留现象,所以看到的是一个稳定的图形,好像8行同时点亮。

5.机械式按键组成的键盘,应如何消除按键抖动

答:可以采用硬件和软件两种方式,硬件上可在键输出端加RS触发器或单稳态触发器构成去抖电路,软件上可以在检测到有按键按下时,执行一个10ms 左右的延时程序,然后确认该键是否仍保持闭合状态的电平。

5.独立式按键和矩阵式按键分别具有什么特点

答:独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,适合于八键以下使用;矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口,适合于八个键以上使用。

C语言程序设计第四版第六章答案-谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

C语言第六章习题带答案

练习6-1答案 一、选择题 1.已知函数abc的定义为: void abc() {……} 则函数定义中void的含义是( A )。 A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型 D.以上三个答案全是错误的 2.已知:int p();,p是( C )。 A.int型变量 B.函数p的调用 C.一个函数声明,该函数的返回值是int型的值 D.强制类型转换表达式中的变量 3.以下正确的函数形式是( D )。 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; z=x+y; return z; } { double z; z=x+y; return z; } 4.以下说法正确的是( C )。 A.定义函数时,形参的类型说明可以放在函数体内 B.return后边的值不能为表达式 C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致,以实参类型为准 5.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。 A.float 型B.int型C.long型D.double型6.下面函数调用语句含有实参的个数为( B )。 func((exp1, exp2), (exp3, exp4, exp5)); A.1 B.2 C.4 D.5 7.以下程序的功能是计算函数F(x, y, z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。 #include #include float f(float, float); main() {float x, y, z, sum; scanf("%f%f%f", &x, &y, &z); sum=f( ①B )+f( ②C ); (注:或者选择sum=f( ①C )+f( ②B )) printf("sum=%f\n", sum); } float f(float a, float b) {float value; value=a/b;

C语言第六章数组习题

C语言第六章数组习题 第六章数组 6.1 选择题 [题]在C语言中,引用数组元素时,其数组下标的数据类型允许是_____. A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 [题]以下对一维整型数组a的正确说明是_____。 A)int a(10);B)int n=10,a[n]; C)int n;D)#define SIZE 10 scanf(\%d,&n);int a[SIZE]; int a[n]; [题]若有说明:int a[l0];则对a数组元素的正确引用是_____。 A) a[10] B)a[3.5] C)a(5) D)a[10-10] [题]在C 语言中,一维数组的定义方式为:类型说明符数组名_____。 A)[常量表达式] B)[整型表达式] C)[整型常量]或[整型表达式] D)[整型常量] [题]以下能对一维数组a进行正确初始化的语句是_____。 A)int a[l0]=(0,0,0,0,0); B)int a[l0]={}; C)int a={0};D)int a[10]={10*1}; [题]以下对二维数组a的正确说明是_____。

1 A)int a[3]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); [题]若有说明:int a[3][4];则对a数组元素的正确引用是_____。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) [题]若有说明:int a[3][4];则对a数组元素的非法引用是_____。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] [题]以下不能对二维数组a进行正确初始化的语句是_____。 A)int a[2][3]={0}; B)int a[3]={{1,2},{0}}; C)int a[2][3]={{l,2},{3,4},{5,6}}; D)int a[3]={1,2,3,4,5,6}; [题]若有说明:int a[3][4]={0};则下面正确的叙述是_____。 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 [题]若有说明:int a[3][4];则数组a中各元素_____。 2

c语言 第6章作业

书面作业8 专业理科学号3120101717 姓名马凌浩 习题6 一、选择题 1.设float x=2.5, y=4.7; int a=7;,printf(“%.1f”, x+a%3*(int)(x+y)%2/4)的结果为 A 。 A.2.5 B.2.8 C.3.5 D.3.8 2.执行下列程序段的输出结果是 C 。 int a = 2; a += a *= a -= a *= 3; printf("%d", a); A.-6 B.12 C.0 D.2 3.设字符型变量x 的值是064,表达式“~ x ^ x << 2 & x”的值是 A 。 A.0333 B.333 C.0x333 D.020 4.设a 为整型变量,不能正确表达数学关系:1010 && a<15 D.!(a<=10) && !(a>=15) 5.设以下变量均为int 类型,表达式的值不为9 的是 C 。 A.(x=y=8,x+y,x+1) B.(x=y=8,x+y,y+1) C.(x=8,x+1,y=8,x+y) D.(y=8,y+1,x=y,x+1) 二.填空题 1 .-127 的原码为11111111 、反码为10000000 、补码为10000001 。 2.逻辑表达式x && 1 等价于关系表达式if(x==0) 表达式的值为0;else 表达式的值为1;。3.设int a=5, b=6; 则表达式(++a==b--)? ++a : --b 的值是7 。 4.设c = 'w', a = 1, b = 2, d = -5, 则表达式'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==(a=2)的值 分别为 1 、0 、 1 、 1 。 5.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为c1=2,c2=5 。 #include int main(void) { int c1 = 0, c2 = 0; char ch; while((ch = getchar()) !=?#?) switch(ch){ case …a?: case …h?: c1++; default: c2++; } printf(“c1=%d,c2=%d\n”, c1, c2); return 0; }

C语言第六章数组习题答案

第六章 数组 习题答案 2、0 4 3、0 6 4、&a[i] i%4==0 printf("\n"); 5、i+j==3_ a[i][j] 6、12 7、a[i][j]+b[i][j] printf(“\n ”) 8、按行存放 9、( a[i]>a[j]) 10、将串str2复制到串str1中后再将串str3连接到串str1之后 三、阅读题 1、如右图所示 2、AQM 3、AzyD 4、9198 5、如右图所示 6、92 7、1,2,5,7, 8、2 9、v1=5,v2=8,v3=6,v4=1 10、a*b*c*d* 四、编程题 1(1)选择法排序 #include void main( ) {int i,j,n=10,p,a[10];int temp; for(i=0;i

for(j=i+1;j void main( ) {int i,j,n=10,p,a[10];int temp; for(i=0;ia[j]) {temp=a[i];a[i]=a[j];a[j]=temp;} printf("\n排序后的一维数组:\n"); for(i=0;i void main( ) {int a[11],i,n=10,k; int point; printf("\n 请输入原始数据:\n"); for(i=0;ik) {point=i; break;} if(i!=n) {for(i=n;i>point;i--) a[i]=a[i-1]; a[point]=k;} /*从后向前方式*/ else a[n]=k; printf("插入后的数是:\n"); for(i=0;i int main() {int i,j,upp,low,dig,spa,oth; char text[3][80];

c语言程序设计(第3版)的习题答案

1.5请参照本章例题,编写一个C程序,输出以下信息: ************ Very Goodj! ************ 解: main() { printf(" ************ \n"); printf("\n"); printf(" Very Good! \n"); printf("\n"); printf(" ************\n"); } 1.6编写一个程序,输入a b c三个值,输出其中最大者。 解:main() {int a,b,c,max; printf("请输入三个数a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max

数据结构(C语言版)第6章习题答案

第6章树和二叉树自测卷解答 一、下面是有关二叉树的叙述,请判断正误(每小题1分,共10分) (√)1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。(×)2.二叉树中每个结点的两棵子树的高度差等于1。 (√)3.二叉树中每个结点的两棵子树是有序的。 (×)4.二叉树中每个结点有两棵非空子树或有两棵空子树。 (×)5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。(应当是二叉排序树的特点) (×)6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。(应2i-1) (×)7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。 (×)8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。(应2i-1)(√)9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。 (正确。用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子女结点的指针,还有n+1个空指针。)即有后继链接的指针仅n-1个。 (√)10. 〖01年计算机系研题〗具有12个结点的完全二叉树有5个度为2的结点。 最快方法:用叶子数=[n/2]=6,再求n2=n0-1=5 二、填空(每空1分,共15分) 1.由3个结点所构成的二叉树有5种形态。 2. 【计算机研2000】一棵深度为6的满二叉树有n1+n2=0+ n2= n0-1=31 个分支结点和26-1 =32个叶子。 注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。 3.一棵具有257个结点的完全二叉树,它的深度为9。 (注:用? log2(n) ?+1= ? 8.xx ?+1=9 4.【全国专升本统考题】设一棵完全二叉树有700个结点,则共有350个叶子结点。 答:最快方法:用叶子数=[n/2]=350 5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有500个叶子结点,有499个度为2的结点,有1个结点只有非空左子树,有0个结点只有非空右子树。 答:最快方法:用叶子数=[n/2]=500 ,n2=n0-1=499。另外,最后一结点为2i属于左叶子,右叶子是空的,所以有1个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=0. 6.【严题集6.7③】一棵含有n个结点的k叉树,可能达到的最大深度为n,最小深度为2。 答:当k=1(单叉树)时应该最深,深度=n(层);当k=n-1(n-1叉树)时应该最浅,深度=2(层),但不包括n=0或1时的特例情况。教材答案是“完全k叉树”,未定量。) 7. 【试题1】二叉树的基本组成部分是:根(N)、左子树(L)和右 子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即 按N L R次序),后序法(即按L R N次序)和中序法(也称

C语言程序设计教程 第六章 课后习题参考答案

P158 1求三个实数最大值 #include float max(float,float,float); int main() { float a,b,c,m; printf("请输入三个实数:"); scanf("%f %f %f",&a,&b,&c); printf("最大数为%f\n",max(a,b,c)); return 0; } float max(float a,float b,float c) { float t; if(a>b&&a>c) t=a; else if(b>a&&b>c) t=b; else t=c; return t; } P158 2求最大公约数最小公倍数 #include int fun1(int a,int b); int fun2(int a,int b); int main() { int a,b; printf("请输入两个整数:"); scanf("%d %d",&a,&b); printf("最大公约数为:%d\n",fun1(a,b)); printf("最小公倍数为:%d\n",fun2(a,b)); } int fun1(int a,int b) { int t,r; if(a

} while((r=(a%b))!=0) { a=b; b=r; } return b; } int fun2(int a,int b) { int n; n=(a*b)/fun1(a,b); return n; } P158 3求完全数 #include void wan(int n); void main() { int n; for(n=1;n<1000;n++) wan(n); printf("\n"); } void wan(int n) { int i,s=0; for(i=1;i<=n/2;i++) { if(n%i==0) s=s+i; } if(n==s) printf("%d\t",n); } P158 4无暇素数 #include #include

谭浩强c语言第四版第六章课后答案

//第四版第六章习题 //6.1 # if 0 # include # include # define N 101 int main() { int a[N]; int i,j,k,m=0; for(i=1;ik) { printf("%-3d,",a[i]); m++; if(m%5==0) { puts("\b "); } } } puts("\b "); return 0; } # endif //6.2 # if 0 # include # define N 10 int main() { int a[N]; int i,j,t; printf("请输入十个整数:"); printf("\n"); for(i=0;i

for(i=0;ia[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } printf("从小到大输出为:\n"); for(i=0;i int main() { int a[3][3]; int i,j,sum=0; printf("请输入这个整型矩阵:\n"); for(i=0;i<3;++i) { for(j=0;j<3;++j) { scanf("%d",&a[i][j]); } } for(i=0;i<3;++i) { for(j=0;j<3;++j) { if(i==j||(i+j)==2) { sum+=a[i][j]; } } } printf("sum=%d\n",sum); return 0; } # endif //6.4 # if 0 # include

C语言课后习题答案

第四章选择结构 4.22 #include main() { int y0,m0,d0,y1,m1,d1,age; printf("please input your birthday(yyyy-mm-dd):\n"); scanf("%d-%d-%d",&y0,&m0,&d0); printf("please inpur current day(yyyy-mm-dd):\n"); scanf("%d-%d-%d",&y1,&m1,&d1); age=y1-y0; if(m1 main() { int i; printf("input a integer:\n"); scanf("%d",&i); if(i%2==0)printf("%d is a even\n",i); else printf("%d is a odd\n",i); } 4.24 #include main() { int a,b,c,max=0; printf("input 3 numbers:\n"); scanf("%d%d%d",&a,&b,&c); max=a; if(a main() { float x,y; scanf("%f",&x); if(x>-5&&x<0)printf("y=%f",x); if(x==0)printf("y=%f",x-1); if(x>0&&x<10)printf("y=%f",x+1); if(x<=-5||x>=10)printf("error"); }

C语言第六章课后答案

xt6-1 #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++) {printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++)

printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } xt6-3 #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum); return 0; }

C语言 第六章 函数期末测试习题与答案

C语言第六章函数期末测试习题与答案 1、以下叙述正确的是 A. C语言中除了main函数,其他函数不可作为单独文件形式存在 B.C语言程序是由过程和函数组成的 C.C语言函数可以嵌套调用 D.C语言函数不可以单独编译 参考答案:C 2、以下关于C语言程序中函数的说法正确的是 A.函数的定义和调用均不可以嵌套; B.函数的定义可以嵌套,但函数的调用不可以嵌套; C.函数的定义和点用都可以嵌套。 D.函数的定义不可以嵌套,但函数的调用可以嵌套; 参考答案:D 3、若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是 A.调用可以出现在表达式中 B.调用可以作为独立的语句存在 C.调用可以作为一个函数的形参 D.调用可以作为一个函数的实参 参考答案:C 4、以下关于return语句的叙述中正确的是 A.没有return语句的自定义函数在执行结束时不能返同到调用处 B.一个自定义函数中可以根据不同情况设置多条return语句 C.定义成void类型的函数中可以有带返回值的return语句 D.一个自定义函数中必须有一条return语句

参考答案:B 5、C语言规定:函数返回值类型是由 A.return语句中的表达式类型决定 B.调用该函数时系统临时决定 C. 定义该函数时所指定的函数类型决定 D.调用该函数时的主调函数类型决定 参考答案:C 6、以下错误的描述是() 函数调用可以_____ A.出现在执行语句中 B.出现在一个表达式中 C.做为一个函数的形参 D.做为一个函数的实参 参考答案:C 7、以下说法不正确的是() C语言规定: A.实参可以是任意类型 B.实参可以是常量、变量或表达式 C.形参应与其对应的实参类型一致 D.形参可以是常量、变量或表达式 参考答案:D 8、C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是() A.由用户指定传递方式 B.单向值传递

《C语言程序设计》第6章习题答案

1、选择题 (1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B 2、填空题 (1)a=10,b=20 a=20,b=10 (2)**pp=60 3、程序设计题 (1) #include char *month_name(int n); void main() { int n; printf("\nPlease enter 1 integer:"); scanf("%d",&n); printf("%d month :%s\n",n,month_name(n)); } char *month_name(int n) { static char*name[]={"illegal month", "Jan","Feb","Mar","Apr","May","Jun", "July","Aug","Sept","Oct","Nov","Dec"}; return ((n<1||n>12)?name[0]:name[n]); } (2) #include #define N 10 sort(int data[]) { int i,j,min_a,temp;

for(i=0;i void reverse(char *c); void main()

《C语言程序设计》课后习题答案第6章

6.1 输入两个正整数m,n,求其最大公约数和最小公倍数。 int m,n,temp,b,y; printf("请输入两个正整数m,n:\n"); scanf("%d,%d",&m,&n); if(m='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else other++; } printf("共有字母%d个,共有空格%d个,共有数字%d个,共有其他字符%d个",letters,space,digit,other); 6.3 求s=a+aa+aaa+...+aa...a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5),n有键盘输入 int i=1,a,n,sum=0,temp=0; printf("请输入a、n的值:\n"); scanf("%d,%d",&a,&n);/*一定不要忘记加&&*/ while(i<=n) { temp=temp+a; sum=sum+temp; a=a*10; ++i; } printf("s=a+aa+aaa+...+aa...a的值为%d\n",sum);

华中科技大学标准C语言程序设计及应用习题答案

第二章 一.选择题 1.C 2.B D 3.A 4.A 5. D 6.C 7.D 8.C 9.A 10.D 11.B 12.D 13.C 14.D 15.A 16.B 17.A 18.B 100011 001111 二.判断题 1.错 2.错 3.错 4.错 三.填空题 1. B 66 2. n1=%d\nn2=%d\n 3. 0 四.计算 1 (1)x|y = 0x002f (2)x^y = 0x0026 (3)x&y = 0x0009; (4)~x+~y = 0xffc6 (5)x<<=3 0x0068 (6)y>>=4 0x0002 2 (1) 6 (2)50 (3) 1 (4)–16 (5) 1 (6)20 3 (1)0 (2) 1 (3) 1 (4) 4 (5)8 (6) 1 4 (1)12 (2)0 (3) 1 (4)27

(6) 6 (7)24 (8)27 (9)–29 5 (1)0 (2) 1 (3) 1 (4)–3 (5) 2 五.程序分析题 程序1 b=20 a=3600 程序2 第三章 一.填空题 1.s=6 2.96 3.(1) scanf("%c",&c); (2) c-32 更好的答案:c-('a'-'A') 2.1 main() { int a,b; printf("please input a & b:"); scanf("%d%d",&a,&b); printf("\nmax is %d\n",(a>b)?a:b); } 2.2 int max(int x,int y); main() { int a,b,c,max; printf("please input a & b & c:"); scanf("%d%d%d",&a,&b,&c); max=a>b?a:b; max=c>max?c:max; printf("\nmax is %d\n",max); } 2.3

C语言苏小红版第六章习题答案

第六章习题1. (1)#include main() { int i,j,k; char space=' '; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) { printf("%c",space); } for(k=1;k<=6;k++) { printf("*"); } printf("\n"); } } (2)#include main() { int k = 4, n; for (n = 0; n < k; n++) { if (n % 2 == 0) continue; k--; } printf("k = %d,n = %d\n",k,n); } (3)#include main() { int k = 4, n;

for (n = 0; n < k; n++) { if (n % 2 ==0) break; k--; } printf("k = %d, n = %d\n", k, n); } 2. (1)计算1+3+5+……99+101= #include main( ) { int i,sum=0; for(i=1;i<=101;i=i+2) { sum=sum+i; } printf("sum=%d\n",sum); } (2)计算1*2*3+3*4*5+...+99*100*101= #include main( ) { long i; long term,sum=0; for(i=1;i<=99;i=i+2) { term=i*(i+1)*(i+2); sum=sum+term; } printf("sum=%ld",sum); }

(完整版)c语言第六章循环结构程序设计(习题册答案)

第六章循环结构程序设计 基础练习(A) 一、选择题 1、C语言中while和do-while循环的主要区别是(A)。 A) do-while的循环体至少无条件执行一次 B) while的循环控制条件比do-while的循环控制条件严格 C) C)do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句 2、以下描述中正确的是(C)。 A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用 复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操 作 D)do-while循环中,根据情况可以省略while 3、设有程序段 int k=10; while(k) k=k-1; 则下面描述中正确的是(A)。 A)while循环执行10次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 4、下列循环语句中有语法错误的是( D )。 A) while(x=y) 5;B) while(0) ; C) do 2;while(x==b);D) do x++ while(x==10); 5、已知int i=1;执行语句while (i++<4) ;后,变量i的值为(C)。 A) 3 B) 4 C) 5 D) 6 6、语句while(!E);中的表达式!E等价于(A)。 A)E==0 B)E!=1 C)E!=0 D)E==1 7、下面程序段的运行结果是(A)。 a=1; b=2; c=2; while(a main() { int num=0; while(num<=2) { num++; printf(“%d\n”,nu m); } } A)1 B)1 C)1 D)1 2 2 2 3 3 9、以下能正确计算1×2×3×…×10的程序段是(C)。

c语言习题集合预处理命令)

第六章预处理命令 6.1 选择题 1.下面叙述中正确的是()。 A. 带参数的宏定义中参数是没有类型的 B. 宏展开将占用程序的运行时间 C. 宏定义命令是C语言中的一种特殊语句 D. 使用#include命令包含的头文件必须以“.h”为后缀 2.下面叙述中正确的是()。 A. 宏定义是C语句,所以要在行末加分号 B. 可以使用#undef命令来终止宏定义的作用域 C. 在进行宏定义时,宏定义不能层层嵌套 D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换 3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。 A. 直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索 C. 仅仅搜索源程序所在目录 D. 仅仅搜索当前目录 4.下面叙述中不正确的是()。 A. 函数调用时,先求出实参表达式,然后带入形参。而使用带参的宏只是进行简单的字符替换 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,在 展开时也要分配内存单元,进行值传递 C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏没 有类型 D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果 5.下面叙述中不正确的是()。 A. 使用宏的次数较多时,宏展开后源程序长度增长。而函数调用不会使源程序变长 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,在 展开时不分配内存单元,不进行值传递 C. 宏替换占用编译时间 D.函数调用占用编译时间 6.下面叙述中正确的是( )。 A. 可以把define和if定义为用户标识符 B.可以把define定义为用户标识符,但不能把if定义为用户标识符 C. 可以把if定义为用户标识符,但不能把define定义为用户标识符 D. define和if都不能定义为用户标识符 7.下面叙述中正确的是()。 A.#define和printf都是C语句 B.#define是C语句,而printf不是 C.printf是C语句,但#define不是 D.#define和printf都不是C语句 8.以下叙述中正确的是()。 A. 用#include包含的头文件的后缀不可以是“.a”

C语言第六章循环结构复习题

循环结构程序设计复习题 一.选择题 1.以下while循环中,循环体执行的次数是:() k=1; while (--k) k=10; a) 10次b) 无限次c) 一次也不执行d) 1次 2.有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=0; while (!x!=0) x++; a) 退出while循环后,x的值为0 b) 退出while循环后,x的值为1 c) while的控制表达式是非法的 d) while循环执行无限次 3. 有以下程序段,其中n为整型变量,执行后输出结果是:() n=20 ; while(n--) ; printf(“%d”,n) ; a) 2 b) 10 c) -1 d) 0 4. 有以下程序段,其中t为整型变量,以下选项中叙述正确的是:() t=1; while (-1)

{ t--; if(t) break;} a) 循环一次也不执行 b) 循环执行一次 c) 循环控制表达式(-1)不合法 d) 循环执行2次 5. 有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=-1; do {;} while (x++); printf(“x=%d”,x); a) 该循环没有循环体,程序错误 b) 输出x=1 c) 输出x=0 d) 输出x=-1 6. 有以下程序段,其中x,y为整型变量,程序输出结果是:() for(x=0,y=0;(x<=1)&&(y=1);x++,y--) ; printf(“x=%d,y=%d”,x,y); a) x=2,y=0 b) x=1,y=0 c) x=1,y=1 d) x=0,y=0

相关主题
文本预览
相关文档 最新文档