阅读以下说明和C语言函数,填补空缺。
[说明]
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)分别表示year是(或不是)闰年。
[C语言函数]
int Count_5_13(int year)
{
int date; /*date为0表示星期日,为1~6分别表示星期一至星期六*/
long days=0; /*days记录天数*/
int m, y, c=0; /*c用于表示黑色星期五的个数*/
if(year<1900) return-1;
/*计算从1900年1月1日起,至给定年份year的1月13日间隔的天数*/
days=12;
for(y=1900; y<year; y++) {
days +=365;
if (iSLeapYear(Y)) ________ ;
}
date=((days%7)+1)%7;
/*算出给定年份year的1月13日是星期几+/
c=(________ )?1:0;
for(m=1; ________ ; m++) {
switch(m) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2: days=28;
if(________ )days=29;
break;
}/*end of switch*/
date=((days%7)+ ________ )%7;
if (date==5) c++;
} /*end of for*/
return c;
}
第1题
阅读以下说明和C++代码,将填入 (n) 处的字句在应栏内。
[说明]
现需要统计某企业员工的月平均:[资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。
[C++代码]
include
using namespace std;
class Department {
protected:
float average(float x, int y){
if(Y==O) throw (1)______ ;
return x/y;
}
public:
void caculate(void){
float sumSalary;
int employeeNumber;
try{
cout <<"请输入当月工资总和与员工数:"<<endl;
cin >> sumSalary >> employeeNumber:
float k=average(sumSalary,employeeNumber);
cout <<"平均工资:"<<k<<endl;
}
(2)______ (int e){
if(e==0){
cout <<"请重新输入当月工资总和与员工数:"<<endl;
cin>>sumSalary>>employeeNumber;
float k=average(sumSalary,employeeNumber);
cout<<"平均工资:"<<k<<endl;
}
}
}
};
VOid msin(){
try {
(3)______ ;
d.caculate();
}
(4)______ (int e){
if(e==0)
cout<<"程序未正确计算平均工资!"<<endl;
}
}
[问题1]
程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:
请输入当月工资总和与员工数:
6000 5
(5)______
[问题2]
若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:
请输入当月工资总和与员工数:
6000 0
(6)______
0 0
(7)______
第2题
阅读以下说明和C函数,将应填入(n)处对应栏内。
[说明]
基于管理的需要,每本正式出版的图书都有一个ISBN号。例如,某图书的ISBN号为“978-7-5606-2348-1”。
ISBN号由13位数字组成:前三位数字代表该出版物是图书(前缀号),中间的9个数字分为三组,分别表示组号、出版者号和书名号,最后一个数字是校验码。其中,前缀号由国际EAN提供,已经采用的前缀号为978和979;组号用以区别出版者国家、地区或者语言区,其长度可为1~5位;出版者号为各出版者的代码,其长度与出版者的计划出书量直接相关;书名号代表该出版者该出版物的特定版次;校验码采用模10加权的算法计算得出。
校验码的计算方法如下:
第一步:前12位数字中的奇数位数字用l相乘,偶数位数字用3相乘(位编号从左到右依次为13到2)。
第二步:将各乘积相加,求出总和S。
第三步:将总和S除以10,得出余数R。
第四步:将10减去余数R后即为校验码V。若相减后的数值为10,则校验码为0。
例如,对于ISBN号“978-7-5606-2348-1”,其校验码为1,计算过程为:
S=9×1+7×3+8×1+7×3+5×1+6×3+0×1+6×3+2×1+3×3+4×1+8×3=139
R=139mod 10=9
V=10-9=1
函数check(char code[])用来检查保存在code中的一个ISBN号的校验码是否正确,
若正确则返回true,否则返回false。例如,ISBN号“978-7-5606-2348-1”在code中的
存储布局如表3-1所示(书号的各组成部分之间用“-”分隔):
表3-1 数组code的内容示例
在函数check(char code[])中,先将13位ISBN号放在整型数组元素tarr[0]~tarr[12]中(如表3-2所示,对应ISBN号的位13~位1),由tarr[0]~tarr[11]计算出校验码放入变量V,再进行判断。
表3-2 数组tarr的内容示例
[C函数]
boo1 cheCk(char code[])
{
int i,k=0;
intS=0,temp=0;
int V;
int tarr[13]={0};
if (Strlen(code) <17} return falSe;
for(i=0; i<17; i++) /*将13位ISBN号存入tarr*/
if(code[i]!='-')
tarr (1)____ =code[i]-'0';
for(i=0; (2)_____ ; i++ ); {
if (i%2)
S+= (3)______ ;
else
S+= (4)______ ;
}
v=( (5)______ ==C)?0:10-s%10;
if(tart[12]==v)
return true ;
return false;
}
第3题
对以上【Java源程序】进行运行测试,请将以下(9)、(10)空缺处的测试命令填写完整。
在本机运行WebServer程序,然后打开IE浏览器。
1)在IE地址栏中,输入请求“/index.html”页面的命令:(9)。
2)在IE地址栏中,输入关闭Web服务器的命令:(10)。
第4题
阅读以下技术说明、Java源程序和运行测试部分,根据要求回答问题1和问题2。
【说明】
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所示。
◆Socket类 基于连接的套接字,类中的主要成员函数如表6-17所示。
【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 utput = null;
try{
Socket =(2); //创建来自客房端的连接套接字
Input = socket.(3); //创建输入流
utput = socket.(4); //创建输出流
Request reque
第5题
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
下面的Java程序演示了如何使用Applet在网页上显示图形用户界面CUI(graphical user interface),该实例显示一个时钟。每当浏览器显现Applet的内容时都调用start()函数,让applet得以开始工作(尤其时那些被stop()函数所关闭的工作)。每当浏览器不再显现Applet的内容时都调用stop()函数,让applet得以关闭某些甚耗资源的工作调用destroy()函数之后也会调用此函数。每当浏览器将Applet从网页移除时都调用destroy()函数,已执行"applet不再被使用时"应该做的最后释放资源等动作。每当调用repaint()函数时,或网页窗口须重新刷新时调用paint()函数。
【Java程序】
import java.applet.*;
import java.awt.*;
public class ClockApplet extends (1) implements Runnable
{ //运行函数,每隔一秒刷新一次时间
public void run(){
while (true){
try{
Thread.sleep(1000);
}
catch (InterruptedException e){}
(2); //刷新当前时间
}
}
public void start(){ //调用此函数,并根据条件启动时钟线程或重起线程
if( clockThread= =null){
clockThread = new Thread(this);
clockThread. start();//启动新创建的线程
}
else
clockThread.(3);//恢复挂起的线程
}
public void stop(){ //挂起时钟线程
if (clockThread ! = null)
clockThread. (4);
}
public void destroy(){//停止时钟线程
if (5) {
clockThread.stop();
clockThread = null;
}
}
public void paint(Graphics g){//在网页上重新显示时间
g. drawString( new java.util. Date().toString(), 10,30);
}
private Thread clockThread;
}
第6题
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
下面的Java程序演示了如何在用户等待载入主程序时显示logo图片的例子。logo图片mylogo.gif存放在文件夹image下面。显示logo图片的是一个线程类logo。
【Java程序】
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.ImageIcon.*;
import java.lang.Runnable;
public class mainFrame. extends JFrame
{
public static void main(String[] args)
{
Logo lg=new Logo("image/mylogo.gif");
lg. (1);
mainFrame. main_framE. = new mainFrame();
main_frame.setTitle("使用logo图片示例程序”);
Thread.sleep(1);//程序暂时挂起
main_frame.setVisible(true);
lg. (2);//使logo图片不可见
}
}
class Logo extends JWindow implements (3)
{
String filename;//Logo图像文件的文件名
public Logo(Stringname){
filename = name;
}
public void run()
{
ImageIcon ig = new ImageIcon(filename);
JButton btn = new JButton(ig); //将图片给JButton显示
getContentPane(). (4); //将按钮加到JPanel里
Toolkit kit = Toolkit.getDefauhToolkit();
Dimension screenSize = kit.getScreenSize(); //获得屏幕的大小
setLocation(screenSize.width/4,screenSize.height/4);
//将Logo窗口显示在屏幕宽的1/4,高的1/4处
setSize(ig. getIconWidth(),ig. getIconHeight()); //将Logo窗口大小设成图像的大小
toFront(); //将Logo窗口显示为最前面的窗口
setVisible(true) (5); //显示该窗口
}
public void setNOtVisible()
{
setVisible(false);
}
}
第7题
阅读下列算法说明和算法流程,将应填入(n)处的字句写在对应栏内。
【算法说明】
程序实现了常见的猜数字游戏。游戏开始时由程序自动产生一个1到100的随机数,接收用户输入,并给出提示信息,直至用户猜对。用户猜对后,显示猜测次数,并提供“重新开始”和“退出”功能。
算法采用两层循环实现。外层循环采用do-while循环,由循环条件控制是否重新开始。内层采用for循环,用于判断用户的每次输入。m是随机产生的整数,键盘输入是字符串类型变量,n是整型变量。
【问题1】内循环还需要一个变量,其作用为(1)。
【问题2】请将流程图5.2补充完整。
第8题
阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
【C++程序】
include < stdio. h >
include < string. h >
define Max 1000
class Bank
{
int index;
char date [Max] [10]; // 记录交易日
iht amount[Max]; // 记录每次交易金额,以符号区分存钱和取钱
int rest[ Max]; // 记录每次交易后余额
static iht sum; // 账户累计余额
public:
Bank( ) {index =0;}
void deposit( char d[ ] , int m) //存入交易
{
strcpy ( date [ index ], d);
amount[ index] = m;
(1);
rest[ index] = sum;
index++;
}
void withdraw (char d[ ], int m) //取出交易
{
strcpy( date[ index] ,d);
(2);
(3);
rest[ index] = sum;
index++;
}
void display( );
};
int Bank:: sum = 0;
void Bank:: display ( ) //输出流水
{
int i;
printf("日期 存入 取出 余额\n");
for (4)
{
printf(" %8s" ,date[i] );
if (5)
printf(" %6d" , -amount[i] );
else
printf( "%6d ",amount[i] );
printf( "% 6d\n" ,rest[i] );
} }
void main( )
{
Bank object;
object. deposit ( "2006.2.5", 1 00 );
object. deposit( "2006.3.2" , 200);
object. withdraw( "2006.4.1", 50);
object. withdraw( "2006.4.5", 80);
object. display ( );
}
本程序的执行结果如下:
日期 存入 取出 余额 2006.2.5 100 100
2006.3.2 200 300
2006.4.1 50 250
2006.4.5 80 170
第9题
阅读以下说明和C程序,将应填入(n)处的字句写在对应栏内。
【说明】
并行计算中需要将N个作业分配给N个处理器同时去完成,每个处理器都能承担这N个作业,但耗时不同。下面的程序用回溯法计算总耗时最小的一种作业分配方案,在该方案中为每个处理器分配1个不同的作业。
程序中,N个作业从0开始依次编号,N个处理器也从0开始依次编号,主要的变量说明如下:
c[i][j]:将作业i分配给处理器j的耗时;
job[i]:值为0表示作业i未分配,值为j表示作业i分配给处理器j;
processor[k]:值为0表示处理器k未分配作业,值为1表示处理器k已分配作业;
mincost:最小总耗时。
【C程序】
include<stdio.h>
define N 8/*N表示作业数和处理器数*/
int c[N][N];
unsigned int mincost=65535/*设置min的初始值,大于可能的总耗时*/
int job[N],temp[N],processor[N];
void Assign(int k,unsigned int cost)
{
int i;
if (1)&& cost<mincost){
mincost = cost
for(i=0;i<N;i++)temp[i]=job[i];
}
else {
for(i=0;i<N;i++)/*分配作业k*/
if (2)&& cost+c[k][i]<mincost){
processor[i]=1;job[k]=(3);
Assign (4),cost+c[k][i]);
(5);job[k]=0;
}/ * if * /
}
}/ *Assign * /
void main()
{
int i,j;
for(i=0;i<N;i++){/*设置每个作业由不同处理器承担时耗时及全局数组的初值*/
processor[i]=0;job[i]=0;temp[i]=0;
for(j=0;j<N;j++)
scanf("%d",&c[i][j]);
}
Assign(0,0);/*从作业0开始分配*/
printf("\n最小耗时=%d\n",mincost);
for(i=0;i<N;i++)
printf("Job%d is assigned to Processor%d\n",i,temp[i]);
}/*main*/
第10题
阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。
【说明】
程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。
【程序】
define N 10
main()
{
void (1);
int i,a[N];
for(i=0;i<10,i++) /*输入*/
scanf(“%d”,&a[i]);
(2);
for(i=0;i<N,i++) /*输出*/
printf(“%3d”,a[i]);
}
void selectSon(int x[],int n)
{
int i,j,k,t;
for(int i=0; (3);i++)
{
k=i;
for(j=i+1;j<n;j++)
if (4) k=j;
if (5)
{t=x[i];x[i]=x[k];x[k] =t;}
}
}
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!