[简答题]
阅读以下程序说明和C程序,将应填入(n)处的字句,写在对应栏内。
【程序说明】
某网络由n个端点组成,这些端点被物理地分成若干个分离的端点组。同一组内的两件端点i和j,它们或直接相连,或间接相连(端点i和端点j间接相连是指在这两件端点之间有一个端点相连序列,其中端点i和j分别与这相连序列中的某个端点直接相连)。网络的n个端点被统一编号为0,1,…,n-1。本程序输入所有直接相连的端点号对,分别求出系统各分离端点组中的端点号并输出。
程序根据输入的直接相连的两件端点号,建立n个链表,其中第i个链表的首指针为s[i],其结点是与端点i直接相连的所有端点号。
程序依次处理各链表。在处理s[i]链表中,用top工作链表重新构造s[i]链表,使s[i]链表对应系统中的一个端点组,其中结点按端点号从小到大连接。
【程序】
#inelude
#define N 100
typeef struct node{
int data;
struct node *link;
}NODE;
NODE * s[N];
int i,j,n,t;
NODE
*q,*p,*x,*y,*top;
main( )
{
printf(“Enter namber of components.”);
scanf(“%d”,&n);
for(i=0;i<n;i++)
printf(“Enter pairs./n”);
while(scanf(“%d%d”,&i,&j)==2)
{
/*输入相连端点对,生成相连端点结点链表*/
p=(NODE*)malloc(sizeof(NODE));
p→data=j;p→link=s[i];s[i]=p;
p=(NODE*)malloc(sizeof(NODE));
p→data=i;p→link=s[j];s[j]=p;
}
for(i=0;i<n;i++) /*顺序处理各链表*/
[填空题]以下程序中judge函数的功能是判断x指向的int类型数组(长度为n)中各元素之间的逻辑关系。若n个元素的值均相等则输出"all elements are same".若n个元素的值无序则输出"no order";若n个元素的值按升序排列则输出"ascend".若n个元素的值按降序排列则输出"descend’,。
#include
void judge(___(19)___,int n)
{int f,i=0;
while(ix[i+1]||!f&&___(21)___)
{printf("/n no order");
return;
}
if(___(22)___) printf("/n ascend");
else printf("/n descend");
}
void main( )
{int a[5]={1,2,3,4,5},b[5]={5,4,3,2,1},c[5]={1,4,2,3,5),d[5]={2,2,2,2,2};
judge(a,5);
judge(b,5);
judge(c,5);
judge(d,5);
}
[单项选择]以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序: #include <string.h> void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++ if(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t); } } main( ) {char p[][10]:{"abc","aabdfg","abbd","dcdbe","cd",);int i; f(p,5); printf("%d/n",strlen(p[0])); } 程序运行后的输出结果是( )。
A. 6
B. 4
C. 5
D. 3
[填空题]
阅读以下说明和C程序,将应填入 (n) 处的字句写在对应栏内。
[说明]
假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配1个不同的任务。
程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下:
c[i][i]:将任务i分配给工人j的费用。
task[i]:值为0表示任务i未分配;值为j表示任务i分配给工人j。
worker[k]:值为0表示工人k未分配任务;值为1表示工人k已分配任务。
mincost:最小总费用。
[程序]
#include<stdio.h>
#define N 8 /*N表示任务数和工人数*/
int c[N][N];
unsigned int mincost=65535; /*设置min的初始值,大于可能的总费用*/
int task[N],temp[N],worker[N];
void plan(int k,unsigned int cost)
int i;
if( (1) &&cost<mincost)
mincost=cost;
for(i=0;i<N;i++)temp[i]=task[i];
eise
for(i=0;i<N;i++) /*分配任务k*/
if(worker[i]==0 && (2) )
worker[i]=1;task[k]= (3) ;
plan( (4) ,cost+c[k][i]);
(5) ;task[k]=0;
/*if*/
/*plan*/
void main( )
int i,j;
[多项选择]【说明】
以下程序实现数据的排序,将n个整数分别按照升序和降序进行排序,类SortInt_1实现升序排序,类SortInt_2实现降序排序。
【Java代码】
class SortInt_1
int i,i,k,temp;
void SortInt(int a1,int a2[])//升序排序
for(i=0;i<a1-1;i++)
k=i;
for(j=i+1;j<a1;j++)
if( (1) ) k=j;
if(k !=i)
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
class SortInt_2 (2)
int i,j,k,temp;
void SortInt(int a1, int a2[])//降序排序
for(i=0; i<a1-1;i++)
k=i;
for(j=i+1;j<a1;j++)
if( (3) )k=j;
if(k !=i)
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
public class test
public static void main(String args[])
int a[]=10,55,100,35,87,90,100,16;
SortInt_1 NewInt= (4) ;
NewInt.SortInt(a.lenvh,a);//调用SortInt_1类的方法
System.out.prin
[单项选择]以下程序中函数f( )的功能是将n个字符串按由大到小的顺序进行排序。
#include<string.h>
void f(char p[ ][10],int n)
{ char t[20]; int i,j;
for(i =O;i <n-1 ;i ++ )
for(j =i + 1 ;j < n;j ++ )
if(strcmp(p [i] ,p[j] ) <0)
{ strcpy(t,p[i]);strcpy(p[i] ,p[j] );strcpy(p[j] ,t); } }
main ( )
{ char p [ ] [ 10 ] = { "abc","aabdfg","abbd","dcdbe", "cd" }; int i;
f(p,5); printf("%d/n",strlen(p[O] ) );
}
程序运行后的输出结果是( )。
A. 6
B. 4
C. 3
D. 5