阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。
【说明】
计算n的合数。一个整数n可以有多种划分,使其划分的一列整数之和为n。例如,整数5的划分为:
5
4 1
3 2
3 1 1
2 2 1
2 1 1 1
1 1 1 1 1
共有7种划分。这种划分的程序如下所示。
【程序】
include <stdio.h>
int n[1000],m,k;
void output sum()
{
int j;
for(j=0;n[j]!=0;j++)
printf("%d\t",n[j]);
printf("\n");
}
void sum(int i)
if(m-n[i]<n[i])
{ m=m-n[i];
(1)
i++;
n[i+1]=0;
}
else
{
(2)
m-=n[i];
i++;
}
if(m!=n[i])
sum(i);
else
output_sum();
if(n[i]>1)
{
n[i]--;
(3)
}
else
{
while((n[i]==1)&&(i>O))
{
i--;
(4)
}
if(i!=0)
{
(5)
sum(i);
}
}
}
void main()
{
int i;
scanf("%d",&n[0]);
m=k=n[0];
for(i=1;i<=k;i++)
n[i]=0;
while(n[0]!=1)
{
n[0]--;
i=0;
sum(0);
m=k;
}
}
注意:不得修改原有程序的控件的属性。在结束程序运行之前,必须至少正确运行一次程序,将统计的结果显示在标签中,否则无成绩。最后把修改后的文件按原文件名存盘。
请编写一个函数void fun(int m, int k, int xx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。
例如,若输入15,5,则应输出16,18,20,21,22。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include<conio.h>
include<stdio.h>
void fun(int m,int k,int xx[])
{
}
main()
{
int m,n,zz[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
已知列表lst_suit=["黑桃","红桃","梅花","方块"],存放了扑克牌的所有花色,列表lst_face=["3","4","5","6","7","8","9","10","J","Q","K","A","2"],存放了扑克牌的所有牌面大小(按照牌面大小排列)。试编写程序,完成以下功能: (1) 利用列表生成式,将以上两个列表进行元素搭配,生成一个新的列表lst,存放所有牌面(不考虑大小王)。新列表lst的内容为['3黑桃', '3红桃', '3梅花', '3方块', '4黑桃', '4红桃', '4梅花', '4方块',……, 'A黑桃', 'A红桃', 'A梅花', 'A方块', '2黑桃', '2红桃', '2梅花', '2方块']。 (2) 使用random库的shuffle函数将列表lst中的元素次序打乱。 (3) 用户与电脑进行"抽牌比大小"游戏。游戏规则如下: l 用户输入序号(范围在0~51之间),程序根据序号在列表lst中读取牌面。 l 电脑抽牌由程序自动完成(通过random库的randint函数随机生成序号)。 l 将用户抽取的牌面与电脑抽取的牌面进行比较(不考虑花色),并将结果输出。输出内容对照如下: "恭喜,您赢了!" "很遗憾,您输了!" "咱们平手了!"
●试题四
阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编写程序,其功能是:以行为单位把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放。最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT(),把结果XX输出到文件OUT5.DAT中。
例如:原文:You can create an index on any field.
you have the correct record.
结果:n any field.Yu can create an index
rd.yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
【函数】
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "ctype.h"
#include "mem.h"
unsigned char xx[50][80];
int maxline=0;
int readdat(void);
void writedat(void);
/*将题目要求的字符串中所有小写字母o左边的字符串内容移到该串的右边存放,即
将串中"最后"一个字母o左右两侧的内容互换*/
void StrOR(void)
{
inti;
char*p1,*p2,t[80];
for(i=0;i<maxline;i++)
{ t[0]=′/0′;
p2=xx[i];
while(*p2)/*找到最后一个′o′*/
{if((1) )p1=p2;
p2++;
}
strcat(t,p1+1);
*p1=′\\0′;
strcat(t,xx[i]);
p1=xx[i];
p2=t;
while(*p2)/*删去字符′o′*/
{if((2) ) (3) =*p2;
p2++;
}
(4) ;
}
}
void main()
{
clrscr();
if(readdat())
{printf("Can't open the file IN.DAT!\\n");
return;
}
StrOR();
writedat();
}
int readdat(void)
{
FILE*fp;
int i=0;
char*p;
if((fp=fopen("in.dat","r"))==NULL)
return 1;
while(fgets(xx[i],80,fp)!=NULL)
{p=strchr(xx[i],′\\n′);
if(p)
*p=0;
i++;
}
maxline= (5) ;
fclose(fp);
return 0;
}
void writedat(void)
{FILE*fp;
int i;
fp=fopen("in.dat","w");
for(i=0;i<maxline;i++)
{printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
}
}
A.一个磁盘阵列可以被分为一个或者多个逻辑驱动器
B.将驱动器从RAID 5 改为RAID 0将大大提高数据读取的速度
C.RAID 0 可以提供最好的容错性
D.操作系统不会将逻辑驱动器识别为物理驱动器
本程序不完整,请补充完整,并能正确运行。
要求:
去掉程序中的注释符“'”,把程序中的问号“?”改为正确的内容,使其实现上述功能,但不得修改程序的其他部分。最后,按原文件名并在原文件夹中保存修改后的文件。
请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列Ai和Bi(i=0,…,9;下同),Ai在前,Bi在后。求序列Ci,Ci=Ai+Bi。结果Ci用字单元按C0,…,C9的顺序存放。
例如:
序列Ai为:80H(-128D),31H(49D),61(97D),7FH(127D),…
序列Bi为:80H(-128D),01(1D),F1H(-15D),7FH(127D),…
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。
[试题程序]
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10 每个序列的长度
STAC SEGMENT STACK
DB 128 DUP ()
STAC ENDS
DATA SEGMENT
SOURCE DB N*2 DUP() ; 顺序存放A0,L,A9,B0,L,B9
RESULT DW N DUP(0) ; 顺序存放C0,L,C9
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N*2 ;字节数
CALL LOAD ;从"INPUT1.DAT"中读取数据
; **+***** BEGIN ********
MOV DI,OFFSET RESULT ;结果从RESULT开始存放
MOV BX,0
MOV CX,N
PRO: MOV AH,0
MOV AL, (1) ;序列Bi中的一个整数
MOV DL,AL ;暂存Bi
(2) AL,SOURCE[BX] ;Ci=Bi+Ai
JNO STAY ;无溢出转STAY
JUMP1: MOV AH,00 ;有溢出
ADD DL,0
JNS JUMP ;Bi是正数(为一个正数加上一个正数,
;结果为负数的溢出情况)转JUNP(AH
;已为00H)
MOV AH, (3) ;Bi是负数(为一个负数加上一个负数,
;结果为正数的溢出情况)将结果变为
;负数
JMP (4)&nbs
下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数read write DAT()把结果输出到out31.dat文件中。
例如,若输入17,5,则应输出19,23,29,31,37。
注意:部分源程序已给出。
请勿改动主函数main()和输入输出函数read write DAT()的内容。
试题程序:
include < conio.h>
include
Void readwriteDAT();
Void num(int m,int k,,int XX[])
{
}
main()
{
int m,n,xx[1000];
Clrscr();
printf(“\nPlease enter tWO integers:”)
‘scanf(“%d,%d”,&m,&n);
num(m, n, XX);
for(m=0;m<n;m++)
printf(“%d”, XX[m]);
printf(”\n”);
readwriteDAT();
)
VOid read write DAT()
{
int m,n,xx[1000],i;
FILE *rf.,*Wf;
rf=fopen(“in31.Dat”,r”);
Wffopen(“ou1t31.Dat”/”w”);。 for(i=0;i<10;i++)
{
fscanf(rf,%d,” %d”,&m,&n);
num(m,n,XX);
for(m=0;m fprintf(wf,%d”,xx[m]);
fprintf (wf, “\n”);
}
fclose(rf);
fclose (wf);
}