第10章例题源程序
微机原理及接口技术重点及例题

第一章思考题与习题:1.什么叫微处理器、微机?微机系统包含哪些部分?2 .为什么计算机使用二进制计数制?3.CPU 在内部结构上由哪几部分组成?4 .十六进制的基数或底数是。
5.将下列十进制数分别转换成十六进制、二进制、八进制数:563 6571 234 1286 .将下列十进制小数转换成十六进制数(精确到小数点后4 位数):0.359 0.30584 0.9563 0.1257.将1983.31510转换成十六进制数和二进制数。
8.将下列二进制数转换成十进制数、十六进制数和八进制数:(1)101011101.11011 (2 )11100011001.011 (3 )1011010101.00010100111 9.将下列十六进制数转换成十进制数和二进制数:AB7.E2 5C8.11FF DB32.64E10.判断下列带符号数的正负,并求出其绝对值(负数为补码):10101100;01110001;11111111;10000001。
11.写出下列十进制数的原码、反码和补码(设字长为8 位):+64 -64 +127 -128 3/5 -23/12712.已知下列补码,求真值X :(1)[X]补=1000 0000(2 )[X]补=1111 1111(3 )[-X]补=1011011113.将下列各数转换成BCD 码:30D,127D,23D,010011101B,7FH14.用8421 BCD 码进行下列运算:43+99 45+19 15+3615.已知X =+25,Y =+33,X = -25,Y = -33,试求下列各式的值,并用其对应的真值进行验证:1 12 2(1)[X +Y ]补1 1(2 )[X -Y ]补1 2(3 )[X -Y ]补1 1(4 )[X -Y ]补2 2(5 )[X +Y ]补1 2(6 )[X +Y ]补2 216.当两个正数相加时,补码溢出意味着什么?两个负数相加能产生溢出吗?试举例说明。
《浙工大C语言课本习题答案》

《浙工大C语言课本习题答案》C程序设计习题参考答案习题一 ................................................ . (2)习题二 ................................................ . (3)习题三 ................................................ . (5)习题四 ................................................ . (8)习题五 ................................................ .. (14)习题六 ................................................ .. (17)习题七 ................................................ .. (20)习题八 ................................................ .. (26)习题九 ................................................ .. (33)习题十 ................................................ .. (35)习题十一 ................................................ (36)1习题一1. 填空题⑴计算机程序设计语言按其发展可分为三类,即机器语言、汇编语言和高级语言。
⑵ C程序是函数构成的,一个C程序中至少包含 1个main函数。
因此,函数是C程序的基本单位。
⑶ C程序注释是 /* 和 */ 所界定的文字信息组成的。
⑷函数体一般包括函数首行和函数体。
《精通C程序设计教程》二~九章习题答案

《精通C程序设计教程》部分习题答案2005年4月说明:本答案没有仔细校对,如果发现错误,请自行更正;蓝色的程序经过了上机验证.第二章 C源程序基本语法与顺序结构简单程序设计2.10 ABEFG2.11 A CFHJMNPQRT2.12 (1)3 (2)0 (3)0 (4)1 (5)–1 (6)160 (7)4 (8)4 (9)8 (10)8(11)1 (12)2 (13)1 (14)0 (15)6 (16)0 (17)29(18)3 (19)1 (20)12.13 2.52.143.52.15(1) 4 3 1 1 (2) 4 2 2 2 (3) 3 2 1 22.16(1) 0 0 (2) 100 100 (3) 2 2 (4) 1 1(5) 20 20 (6) 114 1152.17(1) –y*y*y*y*(a*a-b*b) (2) sin(y/sqrt(x*x+y*y))(3) sqrt(1+3.14/2*tan(48.5/180*3.14))(4) a/x/(a/(a+y)+b/(a+b/(a+b/z)))(5) p*q*(r+1)*(r+1)/((r+1)*(r+1)-1)(6) fabs(3-exp(-x)*log(fabs(1+x)))2.20 #include “stdio.h”void main(){long a;int b; double x;float y;scanf(“%l d%d%l f%f”,&a,&b,&x,&y);printf(“a=%l o,b=%.0f,x=%0G,y=%Lg\n”,a,(float)b,x,(long double)y);}2.22#include “stdio.h”#inclu de “math.h”void main(){ double a,b,c,p,s;printf(“Input a b c:”);scanf(“%lf%lf%lf”,&a,&b,&c);p=0.5*(a+b+c);s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%.4f\n”,s);}2.23解:第1月开始: a(尚未还清的借款本金)第2月开始: a(1+p)-x第3月开始: (a(1+p)-x)(1+p)-x=a(1+p)2-x(1+p)-x第4月开始: (a(1+p)2-x(1+p)-x)(1+p)-x=a(1+p)3-x(1+p)2-x(1+p)-x…第n+1月开始:a(1+p)n -x((1+p)n-1+(1+p)n-2+…+1)=0 于是()1)1(1)1(1))1(1(1)1(1)1()1()1(21-++=+-+-+=+⋅⋅⋅+++++=--nnnn n n n p pp a p p p a p p p a x#include "stdio.h" #include "math.h" void main(){ double a,p,x;int n;printf("Input a n p:");scanf("%lf%d%lf",&a,&n,&p); x=a*p*pow(1+p,n)/(pow(1+p,n)-1); printf("x=%.2f\n",x); }输入a n p 为100000 120 0.004,输出为1050.91第三章 选择结构与循环结构3.3 a=2, b=1, c=2 3.4 x=10, y=6 3.5 BCD153.6 循环体共执行了3次,输出为: 12 9 3.7 abcd43.8 解:a 的值就是循环体被执行的次数 先分析内两层循环: 最内层循环次数 j=1 1 j=2 2 ... ... j=i i 总计: 1+2+ (i)2)1(+i i由于i 从1循环到n-1,因此,总的循环次数是4)1(12)12)(1(21212)1(1111112nn n n n i i i i n i n i n i -+++=+=+∑∑∑-=-=-=3.9 BF3.10#include <stdio.h> main(){ char c,i , ;long s =0; for(i=1;i<=10;i++) ; { c=getchar();if(…1‟<=c<=‟9‟ c>=‟1‟&&c<=‟9‟) putchar(c);else if(c= =‟0‟) putchar(…*‟);else s+=(long)c*c;printf(“\ns=%d\n”,s);}printf(“\ns=%l d\n”,s);}3.12 解:/* if 语句求解*/#include “stdio.h”void main(){ double I,p=0;printf(“Input I=”);scanf(“%lf”,&I);if(I>100) { p+=(I-100)*0.01; I=100; } if(I>60) { p+=(I-60)*0.015;I=60; }if(I>40) { p+=(I-40)*0.03;I=40; }if(I>20) { p+=(I-20)*0.05;I=20; }if(I>10) { p+=(I-10)*0.075;I=10; }p+=I*0.1;printf(“p=%f\n”,p);}/* switch语句求解*/#include “stdio.h”void main(){ double I, p=0;printf(“Input I=”);scanf(“%lf”,&I);if(I>=100) { p+=(I-100)*0.01;I=100; } swith((int)(I/10)){ case 10: case 9:case 8:case 7:case 6: p+=(I-60)*0.015;I=60;case 5:case 4:p+=(I-40)*0.03;I=40;case 3:case 2:p+=(I-20)*0.05; I=20;case 1:p+=(I-10)*0.075;I=10;default:p+=I*0.1;}printf(“p=%f\n”,p);}3.19 解:#include “stdio.h”void main(){ int s1,s2,s3; float av; char level;while(1){ printf(“Input three scores of one student:\n”); scanf(“%d%d%d”,&s1,&s2,&s3); if(s1<0||s2<0||s3<0) break; av=(s1+s2+s3)/3.0F; switch((int)(av/10)){ case 9:case 10: level=‟A ‟;break; case 8:level=‟B‟;break; case 7:level=‟C‟;break; case 6:level=‟D‟;break; default:level=‟F‟; }printf(“level=%c \n”,leve l); } }第四章 基本程序设计技术4.3 解:#include “stdio.h” void main(){ double s,a;int k,n;printf(“Input n=”);scanf(“%d”,&n); s=0;a=1;for(k=0;k<=n;k++) { s+=a;a=(n+1)*a;} printf(“s=%.0f \n”,s); }4.4 根据本章打印杨辉三角形例题中组合数的递推计算方法计算组合数:m n C ,要求输入n 、m 值,输出组合数。
经典C++源程序

求数组最大值,最小值及其下标# include<iostream.h>void cout_max(void*p,int x,int n){int max=0,min=0;if(x==4){float*p1;p1=(float*)p;for(int i=1;i<n;i++){if(p1[i]>p1[max])max=i;if(p1[i]<p1[min])min=i;}cout<<"float型数组中:\n";cout<<"最大值为:"<<p1[max]<<"其下标为:"<<max<<endl;cout<<"最小值为:"<<p1[min]<<"其下标为:"<<min<<endl;}if(x==8){double*p1;p1=(double*)p;for(int i=1;i<n;i++){if(p1[i]>p1[max])max=i;if(p1[i]<p1[min])min=i;}cout<<"double型数组中:\n";cout<<"最大值为:"<<p1[max]<<"其下标为:"<<max<<endl;cout<<"最小值为:"<<p1[min]<<"其下标为:"<<min<<endl;}}void main(){float a[]={12.3,25.3,21,36,21.0,54.32,1,9,8.53,4};double b[]={12.3,60,25.3,21,21.0,54.32,1,0.56,9,8.53,4};cout_max(a,sizeof(a[0]),sizeof(a)/sizeof(a[0]));cout_max(b,sizeof(b[0]),sizeof(b)/sizeof(b[0]));}统计字母,数字等各类字符# include<iostream.h># include<string.h>void choose(char*p,int n){int sum1=0,sum2=0,sum3=0,sum4=0;for(int i=0;i<n;i++){if(p[i]>='A'&&p[i]<='z'||p[i]>='a'&&p[i]<='z')sum1++;if(p[i]==' ')sum2++;if(p[i]>='0'&&p[i]<='9')sum3++;elsesum4++;}cout<<"统计结果为:\n";cout<<"字母总数为:"<<sum1<<endl;cout<<"空格总数为:"<<sum2<<endl;cout<<"数字总数为:"<<sum3<<endl;cout<<"其他字符总数为:"<<sum4<<endl;}void main(){char ch[100];cout<<"请输入一段字符";cin.getline(ch,81);choose(ch,strlen(ch));}用调用函数,实现从两个数为输出较大者(要求用指针变量传递参数值# include<iostream.h>void cout_max(float*a,float*b){cout<<"最大数为:"<<((*a>*b)?*a:*b);cout<<endl;}void main(){float a,b;cout<<"请输入要比较的两个数:\n";cin>>a>>b;cout_max(&a,&b);}坐标系下的坐标转化为极坐标下的坐标# include<iostream.h># include<math.h>void cout_change(float&x,float&y){float c,q;x=sqrt(x*x+y*y);y=atan(y/x);}void main(){float x,y;cout<<"请输入直角坐标系下的坐标:\n";cout<<"x=";cin>>x;cout<<"y=";cin>>y;cout_change(x,y);cout<<"极坐标系下的坐标为:\n";cout<<"c="<<x<<endl;cout<<"q="<<y<<endl;}C++程序链表例题# include<iostream.h># include<string.h>struct node{char num[12];char name[20];int age;node*next;};struct LikedList{node*head;int size;};struct student{char num[12];char name[20];int age;};LikedList create(){LikedList list;node*p;p=new node;list.head=p;list.size=0;strcpy(p->name,"0");strcpy(p->num,"0");p->age=0;p->next=NULL;return list;}LikedList create(student*a,int n){LikedList list=create();list.size=n;node*p1,*p2;p2=list.head;for(int i=0;i<n;i++){p1=p2;p2=new node;strcpy(p2->num,(a+i)->num);strcpy(p2->name,(a+i)->name);p2->age=(a+i)->age;p1->next=p2;}p2->next=NULL;return list;}void search(LikedList&list,int a){node*p1,*p2;p2=list.head;int sum=0;for(int i=0;p2->next!=NULL;i++){p1=p2;p2=p2->next;if(p2->age==a){cout<<"在链表中找到一个这个年龄的学生,并已删除该结点!\n";p1->next=p2->next;delete p2;p2=p1;sum++;list.size--;}}if(sum!=0){cout<<"共删除"<<sum<<"个结点\n";}else{cout<<"无该年龄的学生,该结点已插入到链表尾端。
课后习题七(第八、九、十章)

课后习题(第八、九、十章)1、CPU是指( B )A. 控制器B. 运算器和控制器C. 运算器、控制器和主存D. 运算器、控制器、主存和I/O2、指令周期是( C )A. CPU执行一条指令的时间B. CPU从主存取出一条指令的时间C. CPU从主存取出一条指令加上执行这条指令的时间D. 对应于不同的指令,时间长短一致3、同步控制是( B )A. 只适用于CPU控制的方式B. 由统一时序信号控制的方式C. 所有指令执行时间都相同的方式D. 具有应答联络控制信号的方式4、异步控制常用于( A )A. CPU访问外设时B. 微程序控制中C. 微型机的CPU控制中D. CPU访问主存时5、下列说法中( C )是正确的A. 指令周期等于机器周期B. 指令周期小于机器周期C. 指令周期大于机器周期D. 指令周期是机器周期的两倍6、下列说法中( A )是错误的A. 计算机的速度完全取决于主频B. 计算机的速度不完全取决于主频C. 计算机的速度与主频、机器周期内平均含主振周期数有关D. 计算机的速度与机器的平均指令执行速度有关24、微程序控制器中,机器指令与微指令的关系是( B )A. 每一条机器指令由一条微指令来执行B. 每一条机器指令由一段微指令编成的微程序来解释执行C. 一段机器指令组成的程序可由一个微程序来执行D. 一段机器指令组成的程序可由一条微指令来执行26、Intel 8086 CPU是( B )A. 8位微处理器B. 16位微处理器C. 32位微处理器D. 准16位微处理器28、控制器的控制方式中,局部控制( B )A. 和异步控制相同,都不存在基准时标系统B. 属于同步控制,它和中央控制的基准时标是保持同步的C. 属于同步控制并有独立的时标系统,与中央控制的基准时标系统无关D. 属于异步控制,它和中央控制的基准时标应答联络33、隐指令是指( B )A. 操作数隐含在操作码中的指令B. 指令系统中没有的指令C. 在一个机器周期里完成全部操作的指令D. 用户特殊使用的指令34、中断向量可提供( C )A. 被选中设备的地址B. 传送数据的起始地址C. 中断服务程序入口地址D. 主程序的断点地址36、同步通讯之所以比异步通讯具有较高的传输率是因为( E )A. 同步通讯不需要应答信号B. 同步通讯方式的总线长度较短C. 同步通讯用一个公共的时钟信号进行同步D. 同步通讯中各部件存取时间比较接近E. 以上各项因素综合的结果40、下述( D )种情况会提出中断请求A. 产生存储周期“窃取”B. 一次I/O操作结束C. 两数相加结果溢出D. 上述B、C两项41、中断发生时,程序计数器内容的压栈保护,是由( C )完成的A. 压栈指令B. 转移指令C. 中断隐指令D. 中断服务程序44、在中断响应周期,置“0”中断允许触发器是由( A )完成的A. 硬件自动B. 关中断指令C. 程序员在编制中断服务程序时设置的D. 开中断指令45、采用DMA方式传送数据时,每传送一个数据要占用( C )的时间A. 一个指令周期B. 一个机器周期C. 一个存储周期D. 一个时钟周期46、DMA 方式( B )A. 既然能用于高速外围设备的信息传送,也就能代替中断方式B. 不能取代中断方式C. 是一种纯粹的软件方式D. 是一种操作时与主存无关的操作方式47、I/O编址方式通常可分为统一编址和不统一编址,( B )A. 统一编址就是将I/O地址看作是存储器地址的一部分,可用专门的I/O指令对设备进行访问B. 不统一编址是指I/O地址和存储器地址是分开的,所以对I/O访问必须有专门的I/O指令C. 统一编址是指I/O地址和存储器地址是分开的,所以用访存指令实现CPU对设备的访问D. 不统一编址就是将I/O地址看作是存储器地址的一部分,但对I/O访问必须有专门的I/O指令48、带有处理器的终端一般被称为( B )A. 交互式终端B. 智能终端C. 远程终端D. 移动终端49、目前在小型机和微型机里普遍采用的字母与字符编码是( C )A. BCD码B. 十六进制代码C. ASCII码D. 补码以下为书上相关例题50、某机器字长16位,主存按字节编址,转移指令采用相对寻址,由2字节组成,第一个字节为操作码字段,第二字节为相对位移量字段。
编译原理例题与习题解答

G2(S): S→AB A→aA|ε B→bBc|bc
L3={anbnambm| m,n≥0} G3(S): S→AB A→aAb|ε B→aBb|ε
20
编译原理
L4={1n 0m 1m 0n| n,m≥0} 可以看成是两部分: 中间部分是 0m 1m : A→ 0A1 | ε 剩下两边的部分就是: S→ 1S0 | A 所以G4[S]可以写为: S→ 1S0 | A A→ 0A1 |ε
S i S e S i S S
i
S
i
i
i
S e S
i i
结论:因为该文法存在句子iiiei对应两棵 不同的语法树,因而该文法是二义的。
编译原理
18
10. 把下面文法改写成无二义性的文法 S->SS | (S) | ( )
解答: S-> TS | T T->(S) | ( )
编译原理
19
11、给出下面语言的相应文法 L2={aibncn| n≥1,i≥0}
编译原理
21
例题与习题解答
第三章
22
非确定有限自动机状态图的改造
1. 假定NFA M=<S, , , S0, F>,我们对M的 状态转换图进行以下改造:
1) 引进新的初态结点X和终态结点Y,X,YS, 从X到S0中任意状态结点连一条箭弧, 从F 中任意状态结点连一条箭弧到Y。
2) 对M的状态转换图进一步施行替换,其中k是 新引入的状态。
法G是一个四元式G=(VT,VN,S,P),其中
VT:终结符集合(非空)
VN:非终结符集合(非空),且VT VN=
S:文法的开始符号,SVN
P:产生式集合(有限),每个产生式形式为
ex2_10-数值微分法例题源程序及注释

SUBROUTINE LGRG2(X,Y,N,T,Z) DIMENSION X(N),Y(N) DOUBLE PRECISION X,Y,T,Z,S Z=0.0 IF(N.LE.0)RETURN IF(N.EQ.1)THEN Z=Y(1) RETURN END IF IF(N.EQ.2)THEN Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2)) RETURN END IF IF(T.LE.X(2))THEN K=1 M=3
!非线性问题转化为线性问题
!调用线性回归子程序 !反应级数 !速率常数
! 程序结束
SUBROUTINE CF(N,H,X,Y,Z) DIMENSION X(N),Y(N),Z(N) DOUBLE PRECISION X,Y,Z,H,T,YA,YB T=X(1)+H CALL LGRG2(X,Y,N,T,YA) T=X(1)+2*H CALL LGRG2(X,Y,N,T,YB) Z(1)=(4*YA-3*Y(1)-YB)/(2*H)
!线性回归子程序
!子程序结束 !拉格朗日插值子程序
ELSE IF(T.GE.X(N-1))THEN K=N-2 M=N
ELSE
K=1
M=N
10 IF(IABS(K-M).NE.1)THEN
L=(K+M)/2
IF(T.LT.X(L))THEN
M=L
ELSE
K=L
ENDIF
GOTO 10
ASP网络应用程序设计教程(第二版)例题源代码

ASP_SE 各章示例代码
【例 1.1】简单静态 HTML 网页示例 <!-- File Name: 世界你好.htm --> <html> <head> <title> 简单静态网页示例 </title> </head> <body> <p align="center"><font color="blue">Hello World!</font></p> <p align="center"><font face="黑体">世界你好!</font></p> </body> </html>
src = "left.htm" >
totay = Date() theTime = Time() If left(theTime,2)> "12" Then
Response.Write "<H3>下午好!</H3>" Else
Response.Write "<H3>上午好!</H3>" End If %> 今天是 <%=totay%>,时间 <%=theTime%> </body> </html>
【例 1.2】客户端动态网页示例 <!-- File Name: hello.htm --> <html> <head> <script language="JavaScript"> function getname(str) {alert("您好! "+ str+"!");} </script> </head> <body> 请输入您的姓名: <form> <input type="text" name="name" onBlur="getname(this.value)" value=""> </form> </body> </html>
100个经典c语言例题(带答案)

100个经典c语言例题(带答案)经典C源程序100例- -1 经典C源程序100例【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:m...C语言经典程序100例2009-02-26 19:44 | (分类:默认分类)经典C源程序100例- -1 经典C源程序100例【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++)/*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
ACM简单例题

18.
19. s=s+k*(1.00/j);
20.
21. }
22. printf("%.2lf\n",s);
23. }
24.}
错误版本:
01.#include <stdio.h>
02.main()
03.{
04.int m,n,i,j;
printf("%1.2f\n",ave);
}
}
错误版本:
#include <stdio.h>
void main()
{
int n,i;
float sum,ave,m,max,min;
while((scanf("%d",&n))!=EOF)
{
scanf("%f",&m);
max=min=sum=m;
printf("%1.2f\n",ave);
}
}
这是我第一次做该题时犯下的错误。该段程序中的if,else语句块存在逻辑错误,没有想清楚m值与最大值、最小值如何进行比较,就匆忙写代码。
查看文章
C程序设计基础-多项式求和2009-10-30 19:24问题描述
多项式的描述如下:
for (i=1;i<=n;i++)
{
flag1=flag2=flag3=0;
j=0;
while ((c=getchar())!='\n')
{
j++;
if (j==1)
C语言课后习题答案(最终)

C语言课后习题答案(最终)第0章习题1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数:(1)128 (2)511 (3)1024 (4)65535 (5)1048575 答:(1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400(4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF2. 将下列二进制数转化为十进制数和十六进制数:(1)1100110101B (2)101101.1011B 答:(1)821、335 (2)45.6875、2D.B3. 写出下列数的原码、反码、补码:15、-20、-27/32 答:(1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.00101004. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少?答:5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。
答:结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么?答:0~65535、-128~127、-32768~32767C语言程序属于应用程序,程序代码本身存放在应用程序区,程序运行时处理的数据存计算机的内存空间主要分为3个区:系统程序区、应用程序区和数据区,其中数据区放在应用程序数据区。
C++程序设计实验报告10

1.调试例题7。1,例题7。2,例题7。3,例题7。4,中的两题。
2.从227页中的习题1,3,4,5中选择两题进行编程,并进行调试,运行。
算法分析与源程序
1.题目内容
2.算法分析或流程图
3据和结果(必要时应准备多组数据)
2.出错及解决方法,上机调试的结果和体会
C++程序设计实验报告10
学生姓名
学号
指导教师
实验时间
地点
实验题目
自定义数据类型
实验目的
1.掌握结构体类型变量的定义和使用。
2.掌握结构体类型数组的定义和使用。
3.了解链表的概念,初步学会对简单链表进行操作。
实验要求
通过实验,能正确使用结构体类型变量的概念,并正确的使用它。能正确使用结构体类型数组,以此来处理若干学生或员工的信息。进一步的可以使用动态处理的方法—简单的单向链表。
3.上机结束后,应及时整理实验报告。
其它
成绩考核
指导老师签名:
第10章 面向对象的方法

第10章例题分析与解答作者:不详来源:2006年9月4日发表评论进入社区一、填空题1.面向对象方法认为系统是由应用域的______组成。
2.对象具有状态,描述对象的状态用它的______。
3.对象的抽象是______。
4.类之间有两种结构关系,它们是分类关系和______关系。
5.面向对象程序设计语言与其他程序设计语言的最主要差别是它具有______。
6.动态模型描述了系统的______。
二、选择题1.火车是一种陆上交通工具,火车和陆上交通工具之间的关系是( )关系。
A.组装B.整体成员C.has aD.一般具体2.面向对象分析阶段建立的三个模型中,核心的模型是( )模型。
A.功能B.动态C.对象D.分析3.对象模型的描述工具是( )。
A.状态图B.数据流图C.对象图D.结构图4.在有多重继承的类层次结构中,它的类层次结构是( )层次结构。
A.树型B.网状型C.环型D.星型5.描述类中对象的行为,反映了状态与事件关系的是( )。
A.对象图B.状态图C.流程图D.结构图6.在确定属性时,所有( )是候选的属性。
A.动词B.名词C.修饰性名词词组D.词组三、应用题1.建立窗口系统的对象模型。
问题陈述如下:窗口分为对话窗、图形窗、滚动窗三种;对话窗中有若干对话项,由唯一的项名字来确定,对话项分为按钮、选择项、正文项三种,选择项中有若干对话项入口;图形窗中有若干形状元素,形状元素分为一维形状和二维形状,一维形状又分为直线、圆弧、折线;二维形状分为圆、椭圆、矩形、多边形,其中多边形和折线由若干有序顶点组成,正文窗是滚动窗的一种,而图形滚动窗既是一种图形窗又是一种滚动窗。
2.在学校教学管理系统中,学生查询成绩就是系统中的一次交互,请用状态图来描述这种查询的交互行为。
答案:一、填空题1.对象2.属性值3.类4.组装5.继承性6.动态行为二、选择题1.D2.C3.C4.B5.B6.C三、应用题1.2.第10章自测题及参考答案作者:不详来源:2006年9月1日发表评论进入社区一、名词解释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.动作27.活动28.处理29.数据流30.动作对象31.数据存储对象 32.重用性二、填空题1.对象具有封装性,实现了______的结合。
C程序设计课后习题1-3(答案)

C程序设计课后习题第一章习题1.选择题(1)C语言程序的执行总是从(A)开始。
A.main函数的入口 B.编译预处理命令C.源程序的第一个函数D.源程序的第一行语句(2)在C语言的源程序中,主函数的位置(C)。
A.必须在编译预处理命令的后面B.必须在源程序的最后C.任意D.必须在源程序的开头(3)下列变量名中合法的是(C)。
A. B.C.Tom B.3a6bC._6a7bD.$ABC(4)下面两对用户定义标识符哪个可读性更强:(C)A.checkqualityB.salarytotalC.check_quality C.sal_ary_tot_al(5)C程序是由(D)组成。
A.若干个过程B.若干子程序C.一个主程序和若干子程序D.若干函数2.填空题(1)一个函数一般由两部分组成,它们分别是_函数首部______和__函数体____。
(2)编译预处理命令___是_____(填“是”或“不是”)C语言文本的一部分。
(3)一个C语言程序至少应包含一个__主函数或main()__。
(4)C语言的标准输入函数是_scanf()__,标准输出函数是___printf()____。
(5)函数体用___{______符号开始,用_____}______符号结束。
(6)注释的开始和结束标志分别为__/*____和____*/____。
为增强程序的__可读性___,应该为程序写上清晰的注释。
3.编程题:参考本章例题,编写一个C程序,输出以下信息。
***********************The data is ** 2005-03-23 ***********************程序如下:#include <stdio.h>Void main(){printf(“**********************\n”);printf(“*The data is *\n”);printf(“* 2005-03-23 *\n”);printf(“**********************\n”);}第二章习题1.选择题(1)设int m=10 ,则下列表达式的值不等于零的有(A F)。
C语言练习作业及答案

C语言练习作业及答案习题一1、C语言源程序最多可能由____ABCD____________部分组成?A)预处理部分B)变量说明部分C)函数原型声明部分D)函数定义部分2、一个完整的C语言源程序最少必须有___C____。
A)若干个主函数B)若干个函数C)且只能有一个主函数D)一个函数3、C语言以函数为源程序的基本单位最主要有利于__B_____。
A)程序设计结构化B)程序设计模块化C)程序设计简单化D提高程序设计有效性4、要使得C语言编写的程序能够在计算机上运行并得出正确结果,必须要先经过______________B_______________________。
A)编辑和链接B)编译和链接C)修改和运行D运行并输入数据5、一个C程序的执行是从______A______。
A)本程序的main函数开始,到main函数结束。
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束6、以下叙述正确的是__A______。
A)在C程序中,main函数必须位于程序的最前面B)C程序的每行中只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误7、以下叙述不正确的是___D_____。
A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面8、C语言规定:在一个源程序中,main函数的位置是___A_____。
A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后习题二一、程序题1、阅读程序写运行结果(1)#includeintmain(){int某=10,y=6,z=3,t;if(某>y){t=某;某=y;y=t;}if(y>z){t=y;y=z;z=t;}if(某>y){t=某;某=y;y=t;}printf(\return0;}运行结果3610(2)#includeintmain(){intn=123;int某,y,z;某=n/100;y=n0/10;z=n;printf(\return0;}运行结果1,2,3(3)#includeintmain(){int某=10,y=6;printf(\printf(\printf(\return0;}运行结果011(4)#includeintmain(){int某=10,y=6,z=3,=0;+=某;+=y;+=z;printf(\return0;}运行结果19(5)#includeintmain(){inta=2,b=3;float某=3.5,y=2.5;printf(\return0;}运行结果3.5(6)#includeintmain(){inta=-100;unignedb,c;longd=32768;floate=4.56;b=a;a=c=d;printf(\a=e;printf(\return0;}本题假设int型数据占两个字节。
贪心法例题

贪心法3.1 排队接水有n 个人在一个水龙头前排队接水,假如每个人接水的时间为T i ,请编程找出这n 个人排队的一种顺序,使得n 个人的平均等待时间最小。
【输入】输入文件共两行,第一行为n ;第二行分别表示第1个人到第n 个人每人的接水时间T 1,T 2,…,T n ,每个数据之间有1个空格。
【输出】输出文件有两行,第一行为一种排队顺序,即1到n 的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
【样例】 water.in water.out 10 3 2 7 8 1 4 9 6 10 5 56 12 1 99 1000 234 33 55 99 812 291.90 【算法分析】 平均等待时间是每个人的等待时间之和再除以n ,因为n 是一个常数,所以等待时间之和最小,也就是平均等待时间最小。
假设是按照1~n 的自然顺序排列的,则这个问题就是求以下公式的最小值:∑∑==⎪⎪⎭⎫⎝⎛=+⋯⋯+++⋯⋯++++++=ni i j j n T T T T T T T T T T total 1121321211)()()(如果用穷举的方法求解,就需要我们产生n 个人的所有不同排列,然后计算每种排列所需要等待的时间之和,再“打擂台”得到最小值,但这种方法需要进行n!次求和以及判断,时间复杂度很差! 其实,我们认真研究一下上面的公式,发现可以改写成如下形式:∑=--+=++⋯⋯+-+-+=ni i n n T i n T T T n T n nT total 11321)1(2)2()1(这个公式何时取最小值呢?对于任意一种排列k 1, k 2, k 3, …, k n ,当1k T ≤2k T ≤3k T ≤…≤n k T 时,total取到最小值。
如何证明呢?方法如下: 因为n j i k k k k k T T j n T i n T n nT total +⋯++-+⋯++-+⋯+-+=)1()1()1(21假设i <j ,而i k T <j k T ,这是的和为total 1,而把k i 和kj 互换位置,设新的和为total 2,则:))(())(1())(1())1()1(()1()1(12i j i j i j j i i j k k k k k k k k k k T T i j T T j n T T i n T j n T i n T j n T i n total total total --=-+---+-=+-++--+-++-=-=∆我们发现上述△total 恒大于0,所以也说明了任何次序的改变,都会导致等待时间的增加。
C语言编程经典例题

【程序92】
题目:时间函数举例2
1.程序分析:
2.程序源代码:
/*calculate time*/
#include “time.h“
#include “stdio.h“
main()
{ time_t start,end;
int i;
start=time(NULL);
break;}
}
}
【程序81】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
1.程序分析:
2.程序源代码:
output(long b,long i)
{ printf(“\n%ld/%ld=809*%ld+%ld“,b,i,i,b%i);
main()
{struct man *q,*p;
int i,m=0;
p=person;
for (i=0;i〈N;i++)
{if(m〈p-〉age)
q=p++;
m=q-〉age;}
printf(“%s,%d“,(*q).name,(*q).age);
}
【程序79】
题目:字符串排序。
printf(ctime(〈)); /*english format output*/
printf(asctime(localtime(〈)));/*tranfer to tm*/
printf(asctime(gmtime(〈))); /*tranfer to Greenwich time*/
c语言经典例题100道

c语言经典例题100道经典,源程序100例题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数,都是多少, 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) ,*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);} }==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润,高于10万元的部分,可高于10万元,低于20万元时,低于10万元的部分按10%提成可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数,1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;1else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }============================================================== 【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少,1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例10.1 设系统的微分方程为:
⎪⎩⎪⎨⎧==-t e
x x t x x 5.02'22'1 试建立系统仿真模型。
例10.2 利用Simulink 构建函数曲线y=5t 2+16。
例10.3 利用Simulink 仿真求I=⎰
+10)1ln(dx x x 。
例10.4 有初始状态为0的二阶微分方程x"+0.2x'+0.4x=0.2u (t), 其中u(t)是单位阶跃函数,试建立系统模型并仿真。
例10.5 PID 控制器是在自动控制中经常使用的模块,在工程应用中其标准的数学模型为
)()/11()(s E N
s T s T s T K s U d d i p ++= 其中采用了一阶环节来近似纯微分动作,为保证有良好的微分近似的效果,一般选N ≥10。
试建立PID 控制器的模型并建立子系统。
例10.6 利用使能子系统构成一个正弦半波整流器。
例10.7 利用触发子系统将一锯齿波转换成方波。
例10.8 采用S 函数实现模块y=nx ,即模块的功能是把一个输入信号n 倍以后再输出。
(1) 利用MATLAB 语言编写S 函数。
程序如下:
%*************************************************
%S 函数timesn.m ,其输出是输入的n 倍
%*************************************************
function [sys,x0,str,ts]=timesn(t,x,u,flag,n)
switch flag,
case 0 %初始化
[sys,x0,str,ts]=mdlInitializeSizes;
case 3 %计算输出量
sys=mdlOutputs(t,x,u,n);
case {1,2,4,9} %未使用的flag 值
sys=[];
otherwise %出错处理
error(['Unhandle flag=',num2str(flag)]);
end
%*************************************************
%mdlInitializeSizes :当flag 为0 时进行整个系统的初始化
%*************************************************
function [sys,x0,str,ts]=mdlInitializeSizes(T)
%调用函数simsizes 以创建结构体sizes
2
sizes=simsizes;
%用初始化信息填充结构体sizes
sizes.NumContStates=0; %无连续状态
sizes.NumDiscStates=0; %无离散状态
sizes.NumOutputs=1; %有一个输出量
sizes.NumInputs=1; %有一个输入信号
sizes.DirFeedthrough=1; %输出量中含有输入量 sizes.NumSampleTimes=1; %单个采样周期
%根据上面的设置设定系统初始化参数
sys=simsizes(sizes);
%给其他返回参数赋值。
x0=[]; %设置初始状态为零状态
str=[]; %将str 变量设置为空字符串 ts=[-1,0]; %假定继承输入信号的采样周期 %初始化子程序结束
%************************************************* %mdlOutputs :当flag 值为3时,计算输出量
%************************************************* function sys=mdlOutputs(t,x,u,n)
sys=n*u;
%输出量计算子程序结束。
(2) 模块的封装与测试。
例10.9 采用S 函数来构造非线性分段函数。
2
2
13133(3)342452(5)5616x x x x y x x x x ⎧<⎪≤<⎪⎪--≤<⎪=⎨≤<⎪⎪--≤<⎪≥⎪⎩
(1) 利用MATLAB 语言编写S 函数。
程序如下: function [sys,x0,str,ts]=sfunction(t,x,u,flag) switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 3,
sys=mdlOutputs(t,x,u);
case {1,2,4,9}
sys=[];
otherwise
error(['Unhandled flag=',num2str(flag)]); end
function[sys,x0,str,ts]=mdlInitializeSizes sizes= simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs= 1;
sizes.NumInputs= 1;
sizes.DirFeedthrough= 1;
sizes.NumSampleTimes= 1;
sys=simsizes(sizes);
x0=[];
str=[];
ts=[0 0];
function sys=mdlOutputs(t,x,u)
if u<1
sys=3*sqrt(u);
elseif u>=1&u<3
sys=3;
elseif u>=3&u<4
sys=3-(u-3)^2;
elseif u>=4&u<5
sys=2;
elseif u>=5&u<6
sys=2-(u-5)^2;
else
sys=1;
end
(2) 模块的测试。
3。