题目
第1题
●试题一
阅读下列算法说明和算法,将应填入(n)处的字句写在答卷的对应栏内。
【算法说明】
某英汉词典文件包含N个记录(N>1),每个记录有两个字段:一个是英文单词,另一个是相应的汉语解释。各个记录按英文单词的词典顺序排列,各英文单词并不重复。
本算法用于维护、更新该英汉词典文件。维护、更新的方法是:首先输入一个英文单词及其汉语解释,然后在该词典中查找输入的英文单词,若找到,则用输入的汉语解释更新原有的解释;若找不到,则需要将输入的英文单词及其汉语解释插入到该词典的适当位置,使各记录仍按英文单词的词典顺序排列。
【算法】
第一步读入英汉词典文件,并将读入的N个英文单词依次存放在字符串数组ENG中,将相应的汉语解释依次存放在字符串数组CN中。数组元素CN(i)给出了数组元素ENG(i)的解释。
第二步输入英文单词及其汉语解释,将它们分别存放在字符串变量E和C中。若E为空串或都是空格,则转向第四步。
第三步根据变量E的值,用二分法在数组ENG中查找。具体步骤如下:
1.1→L,N→H
2.INT((L+H)/2)→K
3.若E=ENG(K),则C→CN(K),转向第二步
若E<ENG(K),则K-1→ (1) ;若E>ENG(K),则K+1→ (2)
4.若H<L则
对I=N,L,-1(始值,终值,增量)循环执行:
ENG(I)→ENG(I+1)
CN(I)→CN(I+1)
然后,将E和C分别存入 (3) 和 (4) ,N+1→N最后转向第二步
否则,转向 (5)
第四步将数组ENG和CN输出,形成新的英汉词典文件,算法结束。
第2题
注意:请勿改动main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。
public class SelectSort{
public static void main(String args [ ]){
int i,j;
int a[ ]={30,1,-9,70,25}
int size=a.length;
for(i=0;_____________________i++)
for (j=i+1;_______________j++)
if(a[i]>a[j])
{
int temp=a[i];
______________
a[j]=temp;
}
for(i=0;i<size;i++)
System.out.println(a[i]+ "" );
}
}
第4题
阅读下列函数说明和C代码及流程图,将应填入(n)处的字句写在对应栏内
[说明]
分糖果问题是一个经典问题。问题描述如下:幼儿国有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个小孩的初始数由键盘输入。经过多少次调整,使每个孩子手中的糖果一样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
[C程序]
include <stdlib.h>
include <stdio.h>
bool allequall (int child[], int n ) //判断各小孩子手中的糖果是否相等
{
for (int i=0; i<n-1; i++)
if (child[i]!=child[i+1] )
return false; //不相等返回假
return true; //相等返回真
}
const int MaxNum=20; //定义最大人数
//主函数
void main ()
{
int Num=0;
int *child;
int *child1;
//构造两个相应大小的数组child代表小朋友现有的粮果数child1代表小朋友原来有的糖果数
int Tnum=0;
int i=0;
do{
printf ("Pelase input the number of the children: ").,
scanf ("%d",&Num );
if (Num>MaxNum )
printf ("Error Number!!" );
} while (Num>MaxNum );
child=new int [Nmn];
child1=new int [Num];
for (i=0; i<Num; i++ ) //将数组赋值
{
printf ("Input NO. %d child's candy numbers: ",i+1);
scanf ("%d", &child[i] );
}
while ((1) )
{
for (i=0; i<Num; i++ )
{
if((2) )
{
(3)
Tnum++;
}
}
for (i=0; i<Num; i++ )
child1[i]=child[i]; //将child1赋值用来记忆原来小朋友的粮果数
for (i=0; i<Nam; i++ )
(4)
for (i=0; i<Num-1; i++)//用循环实现前一个小朋友粮果数加后一个小朋友粮果数的一半
{
child[i]/=2;
child[i]+=child 1 [i+1];
}
child[Num-1]/=2;
(5)
}
printf ("每个同学最后分到糖果数目是%d\n", child[1]);
printf ("老师分发出的糖果是%d\n", Tnum );
}
图12-7是一种解决问题的流程图,请根据该流程图将对应C代码(n)处补充完整。
第5题
A.i*(i+1)/2 + j
B.i*(i-1)/2 + j
C.i*(i+1)/2 + j -1
D.i*(i-1)/2 + j-1
第6题
以下程序段给数组所有的元素输入数据,请选择正确答案填入: #include<stdio.h> main() { int a[10],i=0; while(i<10)scanf("%d",______); : : }
A.a+(i++)
B.&a[i+1)
C.a+i
D.&a[++i]
第7题
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。
[试题源程序]
include<stdio.h>
define N 8
typedef struct
{
char num[10];
double s;
}STREC;
double fun(STREC *a, STREC *b, int *n)
{
}
void main()
{
STREC s[N]={{"GA05", 85},
{"GA03", 76}, {"GA02", 69}, {"GA04", 85},
{"GA01", 91}, {"GA07", 72}, {"GA08", 64},
{"GA06", 87}};
STREC h[N], t; FILE *out;
int i, j, n;
double ave;
ave=fun(s, h, &n);
printf("The %d student data which is lower than %7.3 f:\n", n, ave);
for(i=0; i<n; i++)
printf("%s %4.1f\n", h[i]. num, h[i].s);
printf("\n");
ut=fopen("out.dat", "W");
fprintf(out, "%d\n%7.3f\n", n, ave);
for(i=0; 2<n-1; i++)
for(j=i+1; j<n; j++)
if(h[i]. s>h[j].s)
{
t=h[i];
h[i]=h[j];
h[j]=t;
}
for(i=0; 2<n; i++)
fprintf(out, "%4.1f\n", h[i].s);
fclose(out);
}
第8题
以下程序段给数组所有的元素输入数据,请选择正确答案填入: #include<stdio.h> main() { int a[10],i=0; while(i<10)scanf("%d"、_____); : : }
A.a+(i++)
B.&a[i+1]
C.a+i
D.&a[++i]
第9题
以下程序段给数组所有的元素输入数据,请选择正确答案填入。 #include<stdio.h> main() { int a[10]=0; while(i<10)scan("%d"______); : : }
A.a+(i++)
B.&a[i+1]
C.a+i
D.&a[++i]
第10题
A.发展性原则
B.因材施教原则
C.启发性原则
D.循序渐进原则
第11题
以下程序段给数组所有的元素输入数据,请选择正确答案填入。 #include<stdio.h> main() { int a[10],i=0; while(i<10)scanf("%d",______); : : }
A.a+(i++)
B.&5[i+1]
C.a+i
D.&a[++i]
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!