问答题【说明】 以下【C++程序】实现一个简单的小型复数类MiniComplex,该复数类能进行输入、输出、复数的加法、减法、乘法和除法运算,还可以进行复数的相等比较。【C++程序】#ifndef H_MiniComplex#define H_MiniComplex#include <iostream>using namespace std;class MiniComplex public: //重载流插入和提取运算符 (1) ostream return osObject; (2) istream isObject >>complex.realPart>>ch>>complex.imagPart>>ch; return isObject; MiniComplex(double real=0,double imag=0); //构造函数 MiniComplex operator+(const MiniComplex //重载运算符+ MiniComplex operator-(const MiniComplex //重载运算符- MiniComplex operator*(const MiniComplex //重载运算符* MiniComplex operator/(const MiniComplex //重载运算符/ bool operator==(const MiniComplex //重载运算符== private : double (3) ; double imagPart;;#end if#include "MiniComplex.h"bool MiniComplex::operator==(const MiniComplexMiniComplex::MiniComplex(double real,double imag) realPart== real; imagPart==imagPart;MiniComplex MiniComplex::operator+(const MiniComplex temp.realPart = realPart+ortherComplex. realPart; temp.imagPart = imagPart +ortherComplex. imagPart; return temp; (4) MiniComplex temp; temp.realPart= realPart-ortherComplex. realPart; temp.imagPart = imagPart-ortherComplex. imagPart; return temp;MiniComplex MiniComplex::operator*(const MiniComplex temp.realPart = (realPart*ortherComplex. realPart)-(imagPart *ortherComplex.imagPart); temp.imagPart = (realPart*ortherComplex. imagPart)+(imagPart *ortherComplex.realPart); return temp;MiniComplex MiniComplex::operator/(const MiniComplex float tt; tt=1/(ortherComplex.realPart*ortherComplex.realPart+ortherComplex.imagPart *ortherComplex. imagPart); temp.realPart=((realPart*ortherComplex, realPart)+(imagPart *ortherComplex. imagPart))*tt; temp.imagPart =((imagPart *ortherComplex. realPart)-(realPart*ortherComplex. imagPart))*tt; return temp;#include <iostream>#include <MiniComplex.h>using namespace std;int main() MiniComplex numl(23, 34),num2(56, 35); cout<<"Initial Value of num1="<<num1<<"/n Initial Value of num2="<<num2<<end1; cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1; //使用重载的加号运算符 cout<<num1<<"-"<<num2<<"="<<num1-num2<<end1; //使用重载的减号运算符 cout<<num1<<"*"<<num2<<"="<<num1*num2<<end1; //使用重载的乘号运算符 cout<<num1<<"/"<<num2<<"="<<num1/num2<<end1; //使用重载的除号运算符 (5) ;
问答题【说明】 请编写一个函数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 输出: (4) 第二种情况:输入2 3 126 8 45 8 33 7输入k6y:9 输出: (5)
问答题[说明]链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下:typedefstructnodedatatypedata;structnode*next;QNode;/*链队结点的类型*/typedefstructQNnode*front,*rear;LQueue;/*将头尾指针封装在一起的链队*/以下这种链队的几个例子:设q是一个指向链队的指针,即LQueue*q。下面各函数的功能说明如下:(1)LQueue*Init_LQueue():创建并返回一个带头尾结点的空链队;(2)intEmpty_LQueue(LQueue*q):判断链队q是否空;(3)voidIn_LQueue(LQueue*q,datatypex):将数据x压入链队q;(4)intOut_LQueue(LQuere*q,datatype*x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。[函数]LQueae*Init_LQueue()LQueue*q,*p;q=malloc(sizeof(LQueue));/*申请链队指针*/P=malloc(sized(QNode));/*申请头尾指针结点*/p->next=NULL;(1)=p;returnq;intEmpty_LQueue(LQueue*q)if(q->front(2)q>rear)return0;elsereturn1;voidIn_LQueue(LQueue*q,datatypex)QNoda*p;p=malloc(sizeof(QNnode));/*申请新接点*/p->data=x;p->next=NULL;(3)=p;q->rear=p;intOut_LQueue(LQueue*q,datatype*x)QNnode*p;if(Empty_LQueue(q))return0;/*队空,操作失败*/elsep=q->front->next;*x=(4);(5)=p->next;free(p);if(q->front->next==NULL)q->rear=q->front;return1;
问答题【说明】本应用程序的运行窗口如图2所示。窗口中的3个文本框和两个按钮名称分别为Txt_salary、Txt_base、Txt_tax、Cmd_compute和Cmd_quit。运行时,文本框Txt_base存放的是免税金额基数(应扣除的基本费用co)当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击“计算”按钮Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为800元,税率如表1所示。级数月应纳税所得额适用税率(%)123456789不超过500元的部分501元~2000元的部分2001元~5000元的部分5001元~20000元的部分20001元~40000元的部分40001元~60000元的部分60001元~80000元的部分80001元~100000元的部分超过100000元的部分51015202530354045设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S(元);若0<K≤500,则S=K×5%;若500<K≤2000,则S=500×5%+(K-500)×10%;若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%;若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;例如,某人某月工资总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。在开发过程中,需要编写的程序代码如下;【程序】OptionBase0PrivateSubCmd_compute_Click()Dimpaylevel,taxPratepaylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,_1000001)taxPrate=Array(5,10,15,20,25,30,35,40,45)K={{U}}(1){{/U}}S=0If(K>0)ThenForj=1To9If{{U}}(2){{/U}}ThenS=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100ElseS=S+{{U}}(3){{/U}}*taxPrate(j-1)/100ExitForEndIfNextjEntIf{{U}}(4){{/U}}=Str$(S)EndSubPrivateSubCmd_quit_Click()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salaw.Text=""Txt_base.Text=800Txt_tax.Locked=TrueTxt_base.Enabled={{U}}(5){{/U}}EndSub
问答题【说明】某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据D1、D2、…、Dn中,选出其中所有不重复的k个数据,置于原来前k个数据的位置上。该流程图的算法如下:第1个数据必然被选出,然后从第2个数据开始,逐个考查其余的数据。假设D1、D2、…、Dm(m≥1)是已经选出的、不重复的数据,则对于数据Di(m<i≤n),将其依次与Dm/Dm-1、…、D1进行比较,若没有发现与之相同者,则Di被选出并置于Dm+1的位置上;否则对Di不做处理。例如,如下10个数据:5,2,2,7,4,4,7,1,9,1(n=10)经过上述算法处理后的结果为:5,2,7,4,1,9(k=m=6)【流程图】注:循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
问答题[说明] 若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。[程序] void saddle (int A[ ] [ ], int m, int n) int i,j,min; for (i=0;i <m;i + + ) min: (1) ; for (j=1; j<n; j+ +) if(A[i][j]<min) (2) ; for (j=0; j<n; j+ +) if ( (3) ) p=0; while (p<m if (p > = m)printf ("%d,%d,%d/n",i,j,min);
问答题【说明】下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。【流程图】此流程图1中,比较“K(I)+K(J):M”最少执行次数约为(5)。
问答题试题四(15分,每空3分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤i,j≤N-1)的票尚未售出。函数intFind(inta[][N],intR,int*row,int*col)的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0。例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出的3×3正方形空座位如图(c)中斜线区所示。[函数]intFind(inta[][N],intR,int*row,int*col){inti,j,k,c,t;intFOUND=0;for(i=0;!FOUNDc
问答题
问答题【问题2】(6分)
若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空(1)~(3)。
若采用定义方式1和调用方式1,则输出为“00000000”。
若采用定义方式1和调用方式2,则(1)。
若采用定义方式2和调用方式1,则(2)。
若采用定义方式2和调用方式2,则(3)。
问答题[说明]本程序将自然数1,2,……,N2(N=5)按蛇形方式逐个顺序存入N阶矩阵。令n=N-1,则矩阵中的每一元素可用aij标记,其中i,j(0≤i,j≤n)分别为其所在行的行号和所在列的列号。蛇形方式顺序存放的方法是从an0开始、到a0n为止,依次填入由1递增的自然数,交替地对每一斜列从左上角向右下角或从右下角向左上角排列。程序的输出为:[程序]#include<stdio.h>#include<math.h>#defineSIZE.10inta[SIZE][SIZE],k;voidwrite(intn)/*输出矩阵*/inti,j;for(i=0;i<=n;i++)for(j=0;j<=njj++)printf("%4d",a[i][j]);printf("/n");voidmakeline(introw_start,intcol_start,introw_end)/*完成矩阵一条斜线的整数填写*/inti,j,sign;sign=((1)>=0)?1:-1;for(i=row_start,j=col_start;(row_end-i)*sign>=0;i+=sign,j+=sign)a[i][j]=(2);voidmakeArray(intn)/*完成矩阵每条斜线的整数填写*/intd;for(d=1;d<=(3);d++)if(d<=n+1)if(d%2)makeline((4));elsemakeline(n+1-d,0,n);elseif(d%2)makeline((5));elsemakeline(0,d-n-1,2*n-d+1);voidmain()intn,N=5;k=1;n=N-1;makeArray(n);write(n);
问答题【函数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({{U}} (2) {{/U}})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({{U}} (3) {{/U}}) i++; /*忽略连续的标志字符*/
/*寻找从str[i]开始直到标志字符出现的一个子字符串*/
j=i+1;
while(str[j]!=del
{{U}} (4) {{/U}}='/0'; /*给找到的字符序列置字符串结束标志*/
printf("%s/t",
{{U}} (5) {{/U}};
}
}
问答题试题八(共15 分)
阅读以下说明和Java 程序代码,将应填入(n) 处的字句写在答题纸的对应栏内。
[说明]
在下面的 Java 程序代码中,类SalesTicket 能够完成打印票据正文的功能,类HeadDecorator 与FootDecorator 分别完成打印票据的台头和脚注的功能。
已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的台头!
这是票据正文!
这是票据的脚注!
------------------------
这是票据的台头!
这是票据的脚注!
[Java 程序代码]
public class SalesTicket {
public void printTicket() {
System.out.println("这是票据正文!");
}
}
public class Decorator extends SalesTicket{
SalesTicket ticket;
public Decorator(SalesTicket t){
ticket = t;
}
public void printTicket(){
if(ticket != null)
ticket.printTicket();
}
}
public class HeadDecorator extends Decorator{
public HeadDecorator(SalesTicket t) {
(1) ;
}
public void printTicket() {
System.out.println("这是票据的台头!");
super.printTicket();
}
}
public class FootDecorator extends Decorator{
public FootDecorator(SalesTicket t) {
(2) ;
}
public void printTicket() {
super.printTicket();
System.out.println("这是票据的脚注!");
}
}
public class Main {
public static void main(String[] args) {
T = new HeadDecorator( (3) );
T. (4) ;
System.out.println("------------------------");
T = new FootDecorator( (5) );
T.printTicket();
}
}
问答题[说明]
当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在第一个显示面板上显示字符串"HelloWorld";在第二个显示面板上画一条直线。
[Java代码]
import java.awt. *;
import javax.swing. *;
public class HelloWorldApplet extends JApplet
pubhc void {{U}}(1) {{/U}} {
{{U}}(2) {{/U}} str="HetloWorld";
JLabel label = new JLabel(str);
this. getContentPane().add(label);
}
}
import java.applet.Applet;
import java.awt.Graphics;
public class AppletPaint extends {{U}}(3) {{/U}}{
public void paint({{U}} (4) {{/U}}) {
g.drawLine(0,0,300,200);
}
}
[HTML文档]
<html>
<head>
<title> HTML Test Page </title>
</head>
<body>
<applet code="{{U}} (5) {{/U}}" width="300" height="100">
</applet>
<applet code=" AppletPaint.class" width="300" height="100">
</applet>
</body>
</html>
问答题【说明】某学期成绩管理系统的“增、删、改数据表中的记录”对话框如图1-19所示。图1-19对话框中共定义了6个标签、6个文本框、4个命令按钮和1个Data数据控件。其中Data数据控件是VisualBasic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的访问。【添加】(cmdAdd)按钮用于向学生成绩数据表添加一条空记录:【修改】(cmdEdit)按钮用于修改当前所显示的一条数据记录:命令按钮【删除】(cmdDelete)用于删除当前显示的一条数据记录;单击【退出】(cmdExit)按钮,系统将退出图1-19所示的对话框。表1-13是学生成绩表结构的示例;表1-14是学生成绩表的示例。图1-19将表1-14数据库中的记录信息显示到相应的文本框中。要在各文本框(txtStu(i),i=0,1,2,3,4,5)中显示Data数据控件所连接的数据表中的数据,必须将文本框与Data数据控件进行绑定。表1-13学生成绩表结构字段名类型大小 字段名类型大小班级Text6语文Integer2(默认)学号Text8数学Integer2(默认)姓名Text10英语Integer2(默认) 表1-14学生成绩示例表班级学号姓名语文数学英语AA40001张薇958690BB40001谢新677181AA40002刘红948986CC40001张斌788886………………【VisualBasic程序】PrivateSubForm_Load()Fori=0To5txtStu(i).Locked=TrueNextiEndSubPrivateSubcmdAddClick()cmdEdit.Enabled=NotcmdEdit.Enabled(1)Fori=0To5txtStu(i).Locked=NottxtStu(i).LockedNextiIfcmdAdd.Caption="添加"Then(2)Datal.Caption="新记录"cmdAdd.Caption="保存"cmdExit.Caption="取消"txtStu(0).SetFocusElseDatal.Recordset.Update(3)cmdAdd.Caption="添加"EndIfEndSubPrivateSubcmdEdit_Click()cmdAdd.Enabled=NotcmdAdd.EnabledcmdDelete.Enabled=NotcmdDelete.EnabledFori=0To5txtStu(i).Locked=NottxtStu(i).LockedNextiIfcmdEdit.Caption="修改"ThenDatal.Recordset.EditcmdEdit.Caption="保存"cmdExit.Caption="取消"Else(4)cmdEdit.Caption="修改"EndIfEndSubPrivateSubcmdDelete_Click()answer=MsgBox("确实删除该记录吗?",vbYesNo+vbQuestion,"警告")Ifanswer=vbYesThenDatal.Recordset.Delete(5)IfDatal.Recordset.EOFThen(6)EndIfEndIfEndSubPrivateSubcmdExit_Click()IfcmdExit.Caption="退出"ThenEndElse(7)cmdAdd.Enabled=TruecmdEdit.Enabled=TruecmdDelete.Enabled=TrueFori=0To5txtStu(i).Locked=NottxtStu(i).LockedNexticmdExit.Caption="退出"cmdAdd.Caption="添加"cmdEdit.Caption="修改"(8)EndIfEndSubPrivateSubDatal_Reposition()Datal.Caption="第"&(9).AbsolutePosition+1&"条记录"EndSub1.【问题1】请根据【说明】和图1-19的显示结果,从以下备选答案中为(1)~(9)空缺处选择正确的答案。(以下部分选项可重复选择)【备选答案】A.Datal.RefreshB.Datal.Recordset.UpdateC.Datal.RecordsetD.Datal.Recordset.CancelUpdateE.Datal.Recordset.AddNewF.Datal.Recordset.MoveNextG.Datal.Recordset.MoveLastH.cmdDelete.Enabled=NotcmdDelete.Enabled
问答题[说明]某订单管理系统的部分UML类图如图3-21所示。图3-21某订单管理系统的部分分类图在图3-21中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,OrdeItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表3-16所示。{{B}}表3-16某订单管理系统各个类的部分属性和方法说明表{{/B}}类成员说明ProductListArrayListproductsProductStringcode产品编号Stringdescription产品描述doubleprice产品单价Booleanequals(Objectobject)若两个产品相同则返回true,否则返回falseOrderItemProductproduct订单项中的产品intquantity产品的订购数量ProductgetProduct()获取订单项中的产品OrderArrayList(OrderItem)items订单中饮食的订单项OrderListArrayList(Order)Orders订单voidaddOrder(OrderOrder)向订单列表中添加新订单intgetNumberOfOrders()获取订单列表中的订单总数SalesSystemProductListcatalog产品目录OrderListsales订单列表voidstatistic()依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额可以使用类java.util.ArrayList<E>来实现对象的聚集关系,如图3-21所示OrderList与Order之间的聚集关系。For...each循环提供了一种遍历对象集合的简单方法。在for...each循环中,可以指定需要遍历的对象集合及用来接收集合中每个元素的变量,其语法如下:for(用来接收集合中元素的变量:需要遍历的对象集合)如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable<T>。[Java程序7-1]和[Java程序7-2]分别给出了类OrderList和方法statistic的Java代码。[Java程序7-1]importjava.util.*.publicclassOrderList{{U}}(1){{/U}}{privateArrayList<Order>orders;publicOrderList(){this.orders=newArrayList(Order)"();}publicvoidaddOrder(Orderorder){this.orders,add(order);}publicIterator<Order>iterator(){return{{U}}(2){{/U}};}publicintgetNumberOfOrders(){returnthis.orders,size();}}[Java程序7-2]importjava.util.*;publicclassSalesSystem{privateProductListcatalog;privateOrderListsales;privatestaticPrintWriterstdOut=newPrintWriter(System.out,true);publicvoidstatistic(){for(Productproduct:{{U}}(3){{/U}}{intnumber=0;for(Orderorder:{{U}}(4){{/U}}{for({{U}}(5){{/U}}:order){if<product.ecluals(item.getProduct()))number+=item.getQuantity();}}stdOut.println(product.getCode()+""+product.getDescription()+""+number+""+number*product.getPrice());}}//其余的方法未列出}
问答题【说明】下面流程图的功能是:在已知字符串A中查找特定字符串B,如果存在,则输出B串首字符在A串中的位置,否则输出-1。设串A由n个字符A(0),A(1),…,A(n-1)组成,串B由m个字符B(0),B(1),…,B(m-1)组成,其中n≥m>0。在串A中查找串B的基本算法如下:从串A的首字符A(0)开始,取子串A(0)A(1)…A(m-1)与串B比较;若不同,则再取子串A(1)A(2)…A(m)与串B比较,依次类推。例如,字符串“CABBRFFD”中存在字符子串“BRF”(输出3),不存在字符子串“RFD”(输出-1)。在流程图中,i用于访问串A中的字符(i=0,1,…,n-1),j用于访问串B中的字符(j=0,1,…,m-1)。在比较A(i)A(i/1)…A(i+m-1)与B(0)B(1)…B(m-1)时,需要对A(i)与B(0)、A(i+1)与B(1)、…、A(i+j)与B(j)等逐对字符进行比较。若发现不同,则需要取下一个子串进行比较,依此类推。【流程图】
问答题阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数min4(有0时为三位数),计算max4与min4的差值,得到一个新的四位数。若该数不等于6174,则重复以上过程,直到得到6174为止。
例如,输入1234,则首先由4321-1234,得到3087;然后由8730-378,得到8352;最后由8532-2358,得到6174。
[C代码]
#include<stdio.h>
int difference(int a[])
( int t,i,j,max4,min4;
for(i=0; i<3; i++){/*用简单选择排序法将a[0]~a[3]按照从大到小的顺序排列*/
t=i;
for(j=i+1; ______; j++)
if(a[j]>a[t]) ______;
if(t!=i){
int temp=a[t]; a[t]=a[i]; a[i]=temp;
}
}
max4=______;
min4=______;
return max4-min4;
}
int main()
{ int n,a[4];
printf("input a positive four-digit number:");
scanf("%d",
while(n!=6174){
a[0]= ______; /*取n的千位数字*/
a[1]=n/100%10; /*取n的百位数字*/
a[2]=n/10%10; /*取n的十位数字*/
a[3]= ______; //取n的个位数字*/
n=difference(a);
}
return 0;
}
问答题【说明】喜迎2008年北京奥运会!以下【C程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转90°,并输出旋转前后的点阵数据及字形。图1-15是汉字“会”字的16×16点阵字形,用数字0表示空白位置,用数字1表示非空白位置,“会”字的第1行即可表示成如下的0,1序列:0000000100000000如果把它看做一个字的16个位,“会”字的第1行可以用十六进制数0100来表示。同理,“会”字的第2行可以用十六进制数0240表示,第3行可以用十六进制数0420表示……依此类推,用16个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图1-15的左半部分所示。将一个汉字逆时针旋转90°,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行……依此类推来形成一个旋转后的点阵字形。图1-15的右半部分就是将“会”字逆时针旋转90°后的点阵数据和字形(提示:读者可将书本顺时针旋转90°,以查看旋转90°后的点阵字形)。在【C程序】中,数组old存放着“会”字的16个双字节整型点阵数据。函数turnleft能将该点阵数据逆时针旋转90°,旋转后的点阵数据存放在数组new中。函数display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为0的位,用字符“x”表示值为1的位,从而将旋转前后的点阵按行输出其十六进制的数据和字形,如图1-15所示。【C程序】#include<stdio.h>#defineEMPTY'.'#defineNONEMPTY'x'#defineLEFT0#defineRIGHT1main()staticunsignedold[16]=0x0100,0x0240,0x0420,0x0810,0x1004,0x23c2,0x4001,0x8ff8,0x0100,0x0200,0x0400,0x0800,0xl000,0x2004,0x7ffe,0x0001;unsignednew[16];turnleft(old,new);display(old,new);turnleft(old,new)unsignedold[],new[];introw,k;for(row=0;row<16;row++)for((1);k<16;k++)new[row]|=((old[k]>>(2))display(old,new)unsigned*old,*new;charout[2][17],letter[2];introw,col;letter[O]=EMPTY;letter[1]=NONEMPTY;out[LEFT][16]=out[RIGHT][16]=(4);for(row=0;row<16;row++,old++,new++)for(col=0;co1<16;++col)out[LEFT][col]=letter[((5))out[RIGHT][col]=letter[((6))printf("/n%4x%s",*old,printf("%4x%s",*new,
