问答题【说明】 函数diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求13中的所有整数都是L1,并且不是 L2中的整数,还要求L3中的所有整数都两两不等。 【函数】 #include < malloc. h > typedef struct node int d; struct node * next Node; void diff(Node *A,Node * B,Node * * r) int lastnum; Node * p; *r = NULL; if( ! A) return; while( (1) ) if(A->d < B ->d) lastnum =A -> d; p= ( Node * ) malloc( sizeof(Node) ); p->d = lastnum; p->next= *r; (2) ; do A = A -> next; while( (3) ); else if(A->d > B->d) B=B- >next; else (4) ; lastnum=A -> d; while ( A while(A) lastnum=A->d; p=( Node * ) malloc( sizeof(Node) ); p-> d = lastnum; (5) ; *r=p; while (A
问答题试题三(15分,每空3分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如,下图所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:typedefstructBSTNode{intdata;structBSTNode*lch,*rch;//结点的左、右孩子指针}*BSTree;函数BSTreeFind_Del(BSTreeroot)的功能是:若root指向一棵二叉树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树中删除以*p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。[函数]BSTreeFind_Del(BSTreeroot){BSTreep,pre;if(!root)returnNULL;/*root指向的二叉树为空树*/(1);/*令p指向根结点的右子树*/if(!p)returnNULL;(2);/*设置pre的初值*/while(p->lch){/*查找“最左下”结点*/pre=p;p=(3);}if((4)==root)/*root的右子树根为“最左下”结点*/pre->rch=NULL;else(5)=NULL;/*删除以“最左下”结点为根的子树*/returnp;}
问答题【函数2.1说明】 递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。 【函数2.1】 int sum (int a[],int n) if(n>0) return (1) ; else (2) ; 【函数2.2说明】 有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。 【函数2.2】 int compare (int a, int b, int c ) int temp, max; (3) a:b; (4) temp:c; 【函数2.3说明】 递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。 【函数2.3】 int dec( int a[], int n ) if(n<=1) return 1; if(a[0]<a[1]) return 0; return (5) ;
问答题试题四(共15分)阅读以下应用说明以及用VisualBasic开发过程中进行的属性设置和所编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[应用说明]启动某应用程序运行的登录窗口如下:其中的标签(Label1)“用户名(U)”对应文本框Username,标签(Label2)“密码(P)”对应文本框“Password”。当用户在Username文本框中输入用户名“ali88”,在Password文本框中输入“zmkm”(显示的字符均为“*”),并单击“确定”按钮时,就会弹出应用程序的主窗口frmAPP,而该登录窗口就会卸载。如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的“确定”按钮后,登录窗口中Password文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生3次输入错误。在第3次输入错误后,就会立即退出该应用程序。在弹出登录窗口后,当按键“Alt+U”时光标就会停留在Username文本框中;当按键“Alt+P”时光标就会停留在Password文本框中。当用户按“Enter”键时,就相当于单击“确定”按钮;当用户按“Esc”键时,就相当于单击“取消”按钮,立即退出该应用程序。[属性设置]在开发过程中,部分控件及属性设置如下:[程序代码]PrivateSubcmdOK_Click()(3)AsInteger'静态变量times的说明If(4)ThenUnloadMe'卸载本登录窗口(5)'弹出应用程序主窗口frmAPPElseMsgBox("用户名或密码错!")times=times+1Password.Text=""'清除密码框中的内容Password.SetFocus'将光标定位于密码框Iftimes=3ThenEndEndIfEndSubPrivateSubcmdCancel_Click()EndEndSub
问答题阅读以下某客房管理系统的算法说明和程序流程图,根据要求回答问题1至问题4。【算法说明】某商务交流中心共有N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组ROOM、RANK、NBED和STATUS中。房间等级值为1、2或3。房间的状态值为0(空闲)或1(占用)。客房是以房间(不是床位)为单位出租的。程序流程图(见图2-11)所反映的算法是,根据几个散客的要求预订一间空房。程序的输入为:人数M,房间等级要求尺(R=0表示任意等级都可以)。程序的输出为:所有可供选择的房间号。
问答题 阅读以下说明和Java代码,请回答问题1和问题2。
【说明】
己知类Stock和类cxyjava都定义在cxyjava.java文件中,类Stock的定义中第14行前共有四行出现了错误,将下面代码修改正确并完善后的输出结果为:
0:0 1:23【Java代码】 01 public class
Stock{ 02 static { 03
shares = 0; 04 share val =
0.0; O5 } 06
public Stock(){getData();} 07 public
Stock(int n, iht pr=0){ 08
shares = n; 09
share val = pr;
10
getData(); 11
} 12 public void getData()
{ 13 System.out.println(shares
+ ":"+share_val); 14 }
15 private int shares; 16
private int share_val; 17 };
18 19 public class cxyjava{ 20
public static void main(String args[]) { 21
Stock a ={{U}} (1) {{/U}};
22 Stock b = new Stock(1,23);
23 //其他无输出代码省略 24
} 25 }
问答题[说明2]
const是C语言的一个关键字,可以用来定义“只读”型变量。
[问题2](4分)
(1)请定义一个“只读”型的整型常量size,并将其值初始化为10;
(2)请定义一个指向整型变量a的指针ptr,使得ptr的值不能修改,而ptr所指向的目标变量的值可以修改(即可以通过ptr间接修改整型变量a的值)。
注:无需给出整型变量a的定义。
问答题【说明】
请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。
【程序】
文件search.cpp的内容如下:
#include <iostream. h >
int SeqSearch( int list[ ] ,int start,int n,int key)
{
for(int i=start;i<=n;i++) //(1)
{
if( list[i] = key)//(2)
{
return i;
}
}
return -1;
}
void main( )
{
int A[10]
int key,count=0,pos;
cout <<" Enter a list of 10 integers:";
for(pos=0;pos<10;pos++)
{
cin >>A; //(3)
}
cout <<" Enter a key; ";
cin >> key;
pos=0;
while(( pos = SeqSearch ( A, pos, 10, key)) !=-1 )
{
count ++;
pos ++;
}
cout<<key<<"occurs" <<count<< (count!=1?" times":" time") <<" in the list,"
<< endl;
}
第一种情况:输入2 3 12 6 8 45 8 33 7输入key:8
输出:{{U}} (4) {{/U}}
第二种情况:输入2 3 126 8 45 8 33 7输入k6y:9
输出:{{U}} (5) {{/U}}
问答题[说明]
C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。
[C++程序]
#include <iostream.h>
template <class T> class Array;
template <Class T> class ArrayBody {
friend {{U}}(1) {{/U}};
T* tpBody;
int iRows,iColumns, iCurrentRow;
ArrayBody(int IRsz, int iCsz) {
tpBody = {{U}}(2) {{/U}};
iRows = iRsz;
iColumns = iCsz;
iCurrentRow = -1;
}
Public:
T
row_error = column_error =false;
try {
if (iCurrentRow < 0 || iCurrentRow >= iRows)
row_error = true;
if (j<0 || j>= iColumns)
column_error = true;
if (row_error == true || column_error == true)
{{U}} (3) {{/U}};
}
catch(char){
if (row_error == true)
cerr << "行下标越界[" << iCurrentRow << "]";
if (column_error = true)
cerr << "列下标越界[" << j << "]";
cout << "/n";
}
return tpBody[iCurrentRow * iColumns + j];
}
~Arraygody(){delete[]tpBody;}
};
template <class T> class Array {
ArrayBody<T> tBody;
Public;
ArrayBody<T>
return tBody;
}
Array(int iRsz, int iCsz) : {{U}}(5) {{/U}} { }
};
void main()
{
Array<int> a1(10,20);
Array<double> a2(3,5);
int b1;
double b2;
b1 = a1[-5][10]; //有越界提示:行下标越界[-5]
b1 = a1[10][15]; //有越界提示:行下标越界[10]
b1 = a1[1][4]; //没有越界提示
b2 = a2[2][6]; //有越界提示:列下标越界[6]
b2 = a2[10][20]; //有越界提示:行下标越界[10]列下标越界[20]
b2 = a2[1][4]; //没有越界提示
}
问答题【函数1说明】 函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串。若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。 【函数1】 int palindrome(char s[] char *pi, *pj; pi=s; pj=s+strlen(s)-1; while(pi<pj pj--; if( (2) )return-1; else return 0; 【函数2说明】 函数f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。 例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。 【函数2】 void f(char *str, char del) int i,j, len; len=strlen(str); i=0; while(i<len) While( (3) ) i++; /*忽略连续的标志字符*/ /*寻找从str[i]开始直到标志字符出现的一个子字符串*/ j=i+1; while(str[j]!=del (4) ='/0'; /*给找到的字符序列置字符串结束标志*/ printf("%s/t", (5) ;
问答题阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。
函数quicksort(int a[],int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组元素a[0]~a[n-1]中。
[C代码]
#include<stdio.h>
void quicksort(int a[], int n)
{
int i,j;
int pivot=a[0]; //设置基准值
i=0; j=n-1;
while (i<j){
while (i<1 //大于基准值者保持在原位置
if (i<j) { a[i] =a[j]; i++;}
while(i<j //不大于基准值者保持在原位置
if (i<1) { a[j] =a[i]; 1--;}
}
a[i]=pivot; //基准元素归位
if (i>1 )
______; //递归地对左孔序列进行快速排序
if (n-i-1>1 )
______; //递归地对右孔序列进行快速排序
}
int main()
{
int i, arr[] ={23,56,9,75,18,42,11,67};
quicksort(______); //调用quicksort对数组arr[]进行排序
for( i=0; i<sizeof(arr)/sizeof(int); i++ )
printf("%d/t",arr[i]);
return 0;
}
问答题
问答题[说明] 本程序使用类来管理员工的通讯地址信息。已知程序的输出为: 输出记录:5 姓名:王丽华 街道地址:中华路15号 市:襄樊市 省;湖北省 邮政编码:430070[C++程序]#include < iostream, h >#include < string, h >class employee. protected: char name[10]; char street[ 20 ]; char city[10]; char (1) [10]; char post[7]; int no; (2) : (3) (char [] ,char [] ,char [] ,char [] ,char [] ,int); void changename ( char n [] ) strcpy ( name, n); void changestreet( char s[] ) strcpy(street,s) ; void changecity ( char c [] ) strcpy ( city, c ); void changeprov( char p [] ) strcpy(prov,p); void changeno(int nnm) (4) ; void display( );;employee:: (3) (char n[] ,char s[] ,char c[] ,char p1[] ,char p2[] ,int nam) strcpy(name,n); strcpy ( street, s); strcpy ( city, c); strcpy ( prov, p1 ); strcpy ( post, p2 ); no = nam; void employee:: display( ) cont< <"输出记录: "< <no< <endl; cout< < "姓名: "< < name < < endl; coot < < "街道地址: "< < street < < endl; cout < < "市: "< < city < < endl; cout< <"省: "< <prov < <endl; cout < <"邮政编码: "< < post < < endl;void main( ) employee cmp("王华" ,"中华路15号" ,"武汉市","湖北省","430070", 1 ); emp. changename( "五丽华" ); emp. changecity ( "襄樊市" ); emp. changeno(5); (5) ;
问答题阅读以下说明和Java代码,将应填入{{U}} (n) {{/U}}处的字句写在答题纸的对应栏内。
{{B}}[{{/B}}说明{{B}}]{{/B}}
已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElement()、 HumberOfElement()以及removeLastElement()。四个方法的含义分别为:
void addElement(Object):在列表尾部添加一个对象;
Object lastElement():返回列表尾部对象;
int numberOfElement():返回列表中对象个数;
void removeLastElement():删除列表尾部的对象。
现需要借助LinkeedList来实现一个Stack栈类,Java代码1和Java代码2分别采用继承和组合的方式实现。
{{B}}[{{/B}}Java代码1{{B}}]{{/B}}
public class Stack extends binkedList {
public void push(Object o) { //压栈
addElement (o);
}
public Object peek() { //获取栈顶元素
return{{U}} (1) {{/U}};
}
public boolean isEmpty() { //判断栈是否为空
return numberOfElement () ==0;
}
public Object pop() { //弹栈
Object o=lastElement();
{{U}} (2) {{/U}};
return o;
}
{{B}}[{{/B}}Java代码2{{B}}]{{/B}}
public class Stack {
private{{U}} ( 3 ) {{/U}};
public Stack() {
list = new LinkedList ();
}
public void push (Object o) {
list. addElement (o);
}
public Object peek() { //获取栈顶元素
return list.{{U}} (4) {{/U}};
}
public boolean isEmpty () { //判断栈是否为空
return list.numberOfElement()==0;
}
public Object pop(){ //弹栈
Object o =list.lastElement();
list.removeLastElement();
return o;
}
{{B}}[{{/B}}问题{{B}}]{{/B}}
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第 index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?{{U}} (5) {{/U}}(A.继承 B.组合)
【说明】传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种,事件与其相应的状态转换如图6-18所示。下面的【C++代码1】与【C++代码2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。【C++代码1】constintCLOSED=1;constintOPENING=2;constintOPEN=3;constintCLOSING=4;constintSTAYOPEN=5;//定义状态变量,用不同整数表示不同状态classDoorprivate:private:intstate;//传输门当前状态voidsetState(intstate)this->state=stale;//设置当前状态public:Door():state(CLOSED);voidgetState()//根据当前状态输出相应的字符串switch(state)caseOPENING:cout<<"OPENING"<<endl;break;caseCLOSED:cout<<"CLOSED"<<endl;break;caseOPEN:cout<<"OPEN"<<endl;break;caseCLOSING:cout<<"CLOSING"<<endl;break;caseSTAYOPEN:cout<<"STAYOPEN"<<endl;break;voidclick()//发生click事件时进行状态转换if((1))setState(OPENING);elseif((2))setState(CLOSING);elseif((3))setState(STAYOPEN);voidtimeout()//发生timeout事件时进行状态转换if(state==OPEN)setState(CLOSING);voidcomplete()//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN);elseif(state==CLOSING)setState(CLOSED);;intmain()DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return0;【C++代码2】classDoorpublic:DoorState*CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;Door();virtual~Door()...//释放申请的内存,此处代码省略;voidsetState(DoorState*state)this->state=state;voidgetState()//例如,当前状态为CLOSED时,输出字符串为"CLOSED";voidclick();voidtimeout();voidcomplete();;Door::Door()CLOSED=newDoorClosed(this);OPENING=newDoorOpening(this);OPEN=newDoorOpen(this);CLOSING=newDoorClosing(this);STAYOPEN=newDoorStayOpen(this);state=CLOSED;voidDoor::click()(4);voidDoor::timeout()(5);voidDoor::complete()(6);classDoorState//定义一个抽象的状态,它是所有状态类的基类protected:Door*door;public:DoorState(Door*door)this->door=door;virtual~DoorState(void);virtualvoidclick()virtualvoidcomplete()virtualvoidtimeout();classDoorClosed:publicDoorState//定义一个基本的closed状态public:DoorClosed(Door*door):DoorState(door)virtual~DoorClosed()voidclick();;voidDoorClosed::click()(7);//其他状态类的定义与实现代码省略ihtmain()DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return0;
【说明】 1.HTTP ◆ HTTP请求消息示例 GET/index,htmlHTTP/1.1 Accept:image/gif,image/jpeg,*/* Accept-Language:zh-ch Accept-encoding:gzip,deflate User-Agent:Mozilla/4.0(compatible: MSIE6.0;Windows 2003) Host:localhost:8080 Connection:Keep-Alive ◆ HTTP响应消息示例 HTTP/1.1 200 OK Servert:Microsoft-IIS/6.0 Date:Mon,3 Jan 2008 13:13:33 GMT Content-Type:text/html Last-Modified:Mon,11 Jan 2008 13:23:42 GMT Contelit-Length:112 <html> ... </html> 2.相关类及主要成员函数 ◆ ServerSocket类 服务器端套接字,它监听固定端口,以接收来自客户端的连接请求,一旦建立连接就返回一个Socket类型的对象,类中的主要成员函数如表6-16所示。 表6-16 ServerSocket类的主要成员函数 函数名 功能说明 ServerSocket(PORT) 构造函数 Accept() 返回建立连接的Socket类型的对象 Close() 关闭当前的ServerSocket类型的对象 ◆Socket类 基于连接的套接字,类中的主要成员函数如表6-17所示。 表6-17 Socket类的主要成员函数 函数名 功能说明 GetnetAddress() 返回InetAddress类型的对象,该对象封装了与该套接字所关联的客房机的IP地址 GetInputSffeam 返回当前对象所关联的输入流 GetOutputStream 返回当前对象所关联的输出流 Close() 关闭当前对象 【Java源程序:一个简单的Web服务器】 /* WebScrvc.java */ packageobjclass; import java.net.*; import java.io.*; public class WebServer public static final int PORT=8080; //Web服务器侦听的端口号 public static final String WEB_ROOT= SyStem.getProperty("user.dir")+ File.separator+"webroot"; //WEB_ROOT变量存放Web服务器工作目录,HTML, GIF图片等静态文件资源 private static final String SHUTDOWN_COMMAND="/shutdown"; //SHUTDOWN_COMM_AND变量保存关闭服务器的命令 private Boolean shutdown=false; //是否收到关闭服务器命令的标志 public static void main(Sting[] args) WebServer server=new WebServer(); Server.await () public void await() ServerSocket serverSocket = null; try serverSocket = new (1) ; //创建侦听端口号为PORT的ServerSocket类型的对象 System.out.println ("WebServerStarted!"); catch(IOException e) e.printStackTrace (); SyStem. exit (1); while(!shutdown) //循环等待客房端连接 Socket socket = null; InputStream input = null; OutputStream output = null; try Socket = (2) ; //创建来自客房端的连接套接字 Input = socket. (3) ; //创建输入流 Output = socket. (4) ; //创建输出流 Request request = new Request (input); //创建request对象 Request. (5) ; //解析客户端HTTP请求 Response response = new ReSponse(output); //创建Response对象 response, setRequest (request); //将request对象传递给response对象 response. (6) ; //给客户端发送所请求的静态资源 (7) ; //关闭连接套接字 shutdown = request. (8) .equals (SHUTDOWN_COMMAND); //凑数当前HTTP请求中的URL是否是关闭服务器命令 Catch(Exception e) e.printStackTrace (); continue; /* Request.java */ package objclass; import java.io.InputStream; import java.iO.IOException; public Class Request private InputStream input; private String url; public Request(InputStream input)this.input = input; public void parse() ... parseUrl() ;... //解析客户端HTTP请求消息 private String parseUrl(String requestString)... //解析客户端HTTP请求中的URL public String getUrl()return url; /* Response.java */ package objclass; import java.io.*; public class Response private static final int BUFFER_ SIZE=1024; Request request; OutputStream output; public Response(Output Strearm output) this.output=output; public void setRequest(Request request)this.request=request; public void sendStaticResource()throwsIOmxception... //向客户端发送所请求的静态资源
填空题阅读以下说明和C++代码,将解答写入对应栏内。 [说明] 类Stock的定义中有三处错误,分别在代码的第04、06、10行。请补齐下述代码中的空缺(1)~(3),修改错误并给出修改后该行的完整代码,最后完善程序运行后的输出结果。 [C++程序] 01 #include<iostream.h> 02 using namespace std; 03 class Stock 04 protected: 05 Stock()shares=0; share_val=0.0;Output(); 06 Stock(int n=0,double pr=3.5): (1) //初始化shares值为n 07 share_val=pr; 08 Output(); 09 ; 10 void~Stock(); 11 void Output()(cout<<shares<<';'<<share val<<endl; 12 public: 13 //成员函数 14 private: 15 //成员变量 16 int shares; 17 double share_val; 18 ; 19 20 void main() //构造三个Stock对象a,b,C 21 Stock a(1); 22 Stock b; 23 Stock C;Stock(); 24 //其他代码省略,且代码无输出 25 程序运行后的输出结果为: 1:3.5 (2) (3)
填空题【说明】 函数fun1 (int bb[])的功能是:在3位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,两位数字又相同,例如144、676等。 【函数2.11】 fun1 (int bb[]) int i, j, k=0, g, s, b; for (i=100; i<=999; i++) g=i%10; (1) b=i/100; if ((i== (int) sqrt (i) * (int) sqrt (i)) 【函数2.2说明】 函数void fun2()的功能是:数组a中有300个四位数,求出数组a千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数CNT,再把所有满足此条件的四位数依次存入数组bb中,然后对数组bb的四位数按小到大的顺序进行排序。例如:9123,9-1-2-3>0,则该数满足条件存入数组bb中,且个数CNT=CNT+1,9812,9-8-1-2<0,则该数不满足条件,忽略。 【函数2.2】 void fun2 ( ) int q,b,s,g,i,j; for (i=0;i<300;i++) q=a[i]/1000; b=a[i]/100%10; s=a[i]/10%10; g=a[i]%10; if (q-b-s-g>0) (3) for ( i=0;i<cnt-1;i++ ) for ( j=i+1;j<cnt;j++ ) if ( bb[i]>bb[j] ) (4) bb[i]=bb[j]; (5)
填空题1】 void sort(char *s,int num) int i,j--num; char t; while(j-->1) for(i=0;i<j;i++) if(s[i]>s[i+1]) t=s[i]; s[i]=s[i+1]; s[i+1]=t; void main() char *s="CEAedea"; sort(s,5); printf("%s",s); 上述程序的结果是 (1) 【函数2.2】 void main() union int ig[6]; Char s[12]; try; try. ig[0]=0x4542; try.ig[1]=0x2049; try. ig[2]=0x494a; try.ig[3]=0x474e; try. ig[4]=0x0a21; try.ig[5]=0x0000; pintf("%s",try, s); 上述程序的结果是 (2) 【函数2.3】 void main() char *letter[5]= "ab","efgh","ijk","nmop","st"; char **p; int i; p=letter; for(i=0;i<4;i++) . printf("%s",p[i]); 上述程序的结果是 (3) 【函数2.4】 main() int i=4,j=6,k=8,*p= int x,y,z; x=p== y=3*-*p/(*q)+7; z=*(r= printf("x=%d,y=%d,z=%d",x,y,z); 上述程序的结果是 (4) 【函数2.5】 int a[]=5,4,3,2,1 ; void main() int i; int f=a[0]; int x=2; for(i=0;i<5;i++) f+=f*x+a[i]; printf("%d",f); 上述程序的结果是 (5)
填空题[说明] 设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函数。 Date operator+(int days):返回某日期加上天数得到的日期。 Date operator-(int days):返回某日期减去天数得到的日期。 int operator-(Date &b):返回两日期相差的天数。 [C++程序] #include<iostream. h> int day_tab[2][12]=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29, 31,30, 31, 30, 31, 31,30,31,30,31; //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 class Date int year,month,day;//年,月,日 int leap (int); //判断是否为闰年 int dton (Date&); Date ntod (int); Public: Date() Date(int y,int mint d)year=y;month=m;day=d; void setday (intd) day=d; void setmonth (int m)month=m; void setyear(int y)year=y; int getday()return day; int getmonth()return month; int getyear() return year; Date operator+(int days) //+运算符重载函数 static Date date; int number= (1) ; date=ntod (number); return date; Date operator-(int days) //-运算符重载函数 statis Date date; int number= (2) ; number-=days; date=ntod (number); return date; int operator-(Date &b) //-运算符重载函数 int days= (3) ; return days; void disp() cout<<year<<"."<<month<<","<<day<<endl; ; int Date::leap (int year) if( (4) ) //是闰年 return 1; //不是闰年 else return 0; int Date::dton (Date &d) //求从公元0年0月0日到d日期的天数 int y,m,days=0; for (y=1;y<=d.year;y++) if( (5) )days+=366; //闰年时加366天 else days+=365; //非闰年时加365天 for (m=0;m<d.mont.h-1;m++) if (leap (d.year) days+=day_tab [1] [m]; else days+=day__tab [0][m]; days+=d.day; return days; Date Date::ntod (int n) //将从公元0年0月0日的天数转换成日期 int y=1,m=1,d,rest=n,1p; while (1) if (leap (y)) if (rest<-366)break; else rest-=366; else //非闰年 if (rest=365)break; else rest-=365; y++; y--; 1p=leap (y); while (1) if (1p) //闰年 if (rest>day_tab [1][m-1])rest-=day_tab [1] [m-1]; else break; else //非闰年 if(rest>day_tab[0] [m-1])rest-=day_tab[0][m-1]; else break; m++: d=rest; return Date (y; m, d); void main() Date now(2003, 10,1),then (2005,6,5); cout<<"now:"; now. disp(); cout<<"then:"; then .disp(); cout<<"相差天数:"<<(then-now)<<endl; Date d1=now+1000,d2=now-1000; cout<<"now+1000:"; d1. disp(); cout<<"now-1000:"; d2. disp();