程序员试题.docx

上传人:b****3 文档编号:6544899 上传时间:2023-05-10 格式:DOCX 页数:23 大小:23.29KB
下载 相关 举报
程序员试题.docx_第1页
第1页 / 共23页
程序员试题.docx_第2页
第2页 / 共23页
程序员试题.docx_第3页
第3页 / 共23页
程序员试题.docx_第4页
第4页 / 共23页
程序员试题.docx_第5页
第5页 / 共23页
程序员试题.docx_第6页
第6页 / 共23页
程序员试题.docx_第7页
第7页 / 共23页
程序员试题.docx_第8页
第8页 / 共23页
程序员试题.docx_第9页
第9页 / 共23页
程序员试题.docx_第10页
第10页 / 共23页
程序员试题.docx_第11页
第11页 / 共23页
程序员试题.docx_第12页
第12页 / 共23页
程序员试题.docx_第13页
第13页 / 共23页
程序员试题.docx_第14页
第14页 / 共23页
程序员试题.docx_第15页
第15页 / 共23页
程序员试题.docx_第16页
第16页 / 共23页
程序员试题.docx_第17页
第17页 / 共23页
程序员试题.docx_第18页
第18页 / 共23页
程序员试题.docx_第19页
第19页 / 共23页
程序员试题.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序员试题.docx

《程序员试题.docx》由会员分享,可在线阅读,更多相关《程序员试题.docx(23页珍藏版)》请在冰点文库上搜索。

程序员试题.docx

程序员试题

阅读以下程序说明和C程序,将应填入__(n)__处的字句,写在答卷的对应栏内。

  [程序说明]

  本程序中的函数factor(m,fac,cp)用来计算正整m(m>2)的除自身以外的所有不同因子的和。

该函数返回因子和,并把各因子从小到大依次存放在数组fac中,其因子个数存入在cp所指的变量中。

  例如m=16,求得的因子为

  (1,2,4,8)

  提示:

因子和为15,因子个数为4。

  程序假定正整数m的不同因子个数不会超过100个。

  [程序]

  #include

  #defineN100

  longfactor(intm,intfac[],int*cp)

  {

  intc1,c2,i,k;

  longs;

  fac[0]=1;

  for(c1=s=1,c2=N-1,____

(1)____;;)

  {

  k=m/i;

  if(____

(2)____)

  if(____(3)____)

  {fac[c1++]=i;

  fac[c2--]=k;

  s+=i+k;

  }

  else{

  fac[c1++]=i;

  s+=i;

  }

  i++;

  if(i>=k)brdak;

  }

  for(c2++;c2<=N-1;c2++)

  ____(4)____;

  *cp=c1;

  return____(5)____;

  答案:

  1)3分i=2,或cl+1

  2)3分m%i==0(或!

(m%i)或m==i*k)

  3)3分i!

=k(或i

  4)3分fac[cl++]=fac[c2]

  答cl++给1分,‘=’左右只对一半给1分。

  5)3分s

  1.以下不是c语言规定保留字的是()。

  

(1)float

  

(2)integer

  (3)signed

  (4)unsigned

  2.设int型变量x有初始值3,则表达式x++*5/10的值是()

  

(1)0

  

(2)1

  (3)2

  (4)3

  3.下述程序执行后的输出结果是( )

  #include

  main()

  {

  intx=’f’;

  printf("%%c\n",’a’+(x-’a’+1));

  }

  

(1)G

  

(2)H

  (3)I

  (4)J

  4.设有程序,整理!

  #include

  main()

  {

  inti,j;

  for(i=0,j=1;i<=j+1;i+=2,j--)

  printf("%d\n",i);

  }

  在运行上述程序时,for语句中循环体的执行次数是()

  

(1)3

  

(2)2

  (3)1

  (4)0

  5.在下述选项时,没有构成死循环的程序是()

  

(1)inti=100

  while

(1)

  {

  i=i_0+1;

  if(i>100)

  break;

  }

  

(2)for(;;);

  (3)intk=1000;

  do

  {

  ++k;

  }while(k>=10000);

  (4)ints=36;

  while(s);--s;

  答案:

  1.

(2)2.

(2)3.

(1)4.(3)5.(3)

  1.假定a和b为int型变量,则执行下述语句组后,b的值为()。

  a=1;

  b=10;

  do

  {

  b-=a;

  a++;

  }while(b--<0);

  

(1)9

(2)-2(3)-1(4)8

  2.设有变量说明语句

  inta=1,b=0;

  则执行以下程序段的输出结果为()。

  switch(a)

  {

  case1:

  switch(b)

  {

  case0:

printf("**0**");break;

  case1:

printf("**1**");break;

  }

  case2:

printf("**2**");break;

  }

  printf("\n");

  

(1)**0**

(2)**0****2**(3)**0****1****2**(4)有语法错误

  3.以下合法的数组说明是()。

  

(1)chara[6]="string";

  

(2)inta[5]={0,1,2,3,4,5};

  (3)chara="string";

  (4)INTa[]={0,12,3,4,5};

  4.下述程序代码中有语法错误的行是()。

  inti,ia[10],ib[10];/*第一行*/

  for(i=0;i<

  =9;i++)/*第2行*/

  ia=0;/*第3行*/

  ib=ia;/第4行*/

  

(1)第1行

(2)第2行(3)第3行(4)第4行

  5.若已定义

  inta[9],*p=a;

  提示:

在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是()。

  

(1)p+1

(2)a+1(3)a++(4)++p

  答案:

  1.(4)2.

(2)3.(4)4.(4)5.(3)

  试题一

  【说明】

  该程序的功能是从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。

最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6.DAT中。

  例如:

原文:

YouHeMe

  Iamastudent.

  结果:

MeHeYou

  studentaamI

  原始数据文件存放的格式是:

每行的宽度均小于80个字符,含标点符号和空格。

  【函数】

  #include

  #include

  #include

  #include

  charxx[50][80];

  intmaxline=0;/*文章的总行数*/

  intReaaDat(void);

  voidWriteDat(void);

  voidStrOL(void)

  {

  char*pl,*p2,t[80];

  inti;

  for(i=0;i  {p1=xx[i];t[0]=0;

  while(*p1)p1++;

  while(p1>=xx[i])

  {while(!

isalpha(*p1)&&p1!

=xx[i])p1--;

  p2=p1;

  while(

(1))p1--;

  if(p1==xx[i])

  if(isalpha(*p1))p1--;

  elseif(!

isalpha(*(p1+1)))break;

  p2++;

  

(2);

  strcat(t,p1+1);

  strcat(t,"");

  }

  strcpy(xx[i],t);

  }

  }

  voidmain()

  {

  if((3)){

  printf("数据文件in.dat不能打开!

\n\007");

  return;

  }

  StrOL();

  writeDat();

  getch();

  }

  intReadDat(void)

  {

  FILE*fp;

  inti=0;

  char*p;

  if((fp=fopen("e:

\\a\\in.dat","r"))==NULL)return1;

  while(fgets(xx[i],80,fp)!

=NULL){

  p=strchr(xx[i],′\n′);

  if(p)*p=0;

  i++;

  }

  maxline=(4)

  fclose(fp);

  return0;

  }

  voidWriteDat(void)

  {

  FILE*fp;

  inti;

  fp=fopen("e:

\\a\\out6.dat","w");

  >  for(i=0;i<(5);i++){

  printf("%s\n",xx[i]);

  fprintf(fp,"%s\n",xx[i]);

  }

  fclose(fp);

  }

  【答案】

  

(1)isalpha(*p1)&&p1!

=xx[i]

  

(2)*p2=0

  (3)ReadDat()

  (4)i

  (5)maxline

  试题二

  阅读下列说明和流程图,将应填入(n)的语句写在答题纸的对应栏内。

  【流程图说明】

  下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:

data,left和right。

其查找的方法是:

首先与树的根节点的元素值进行比较:

若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。

直到指针为空,表示此树中不存在所要查找的元素。

  【算法说明】

  【流程图】

  将上题的排序二叉树中查找元素的过程用递归的方法实现。

其中NODE是自定义类型:

  typedefstructnode{

  intdata;

  structnode*left;

  structnode*right;

  }NODE;

  【算法】

  NODE*SearchSortTree(NODE*tree,inte)

  {

  if(tree!

=NULL)

  {

  if(tree->data  (4);∥小于查找左子树

  elseif(tree->data  (5);∥大于查找左子树

  elsereturntree;

  }

  returntree;

  }

  【答案】

  

(1)p=p->left

  

(2)p=p->right

  (3)returnP

  (4)returnSearchSortTree(tree->left)

  (5)returnSearchSortTree(tree->right)

  试题三

  假设以带头结点的单循环链表作非递减有序线性表的存储结构。

函数deleteklist(LinkListhead)的功能是删除表中所有数值相同的多余元素,并释放结点空间。

  例如:

链表初始元素为:

  (7,10,10,21,30,42,42,42,51,70)

  经算法操作后变为:

  (7,10,21,30,42,51,70)

  【函数1】

  voiddeleteklist(LinkListhead)

  {

  LinkNode*p,*q;

  p=head->next;

  while(p!

=head)

  {

  q=p->next;

  while(

(1))

  {

  

(2);

  free(q);

  q=p->next;

  }

  p=p->next;

  }

  }

  【说明2】

  已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。

下面的程

  序的功能是:

从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。

  【函数2】

  #include

  typedefstructnode{

  intdata;

  stuctnodeleftChild,rightchild;

  }BintreeNode;

  typedefBintreeNode*BinaryTree;

  voidConstrncTree(intT[],intn,inti,BintreeNode*&ptr)

  {

  if(i>=n)(3);∥置根指针为空

  else

  {

  ptr=-(BTNode*)malloc(sizeof(BTNode))

  ptr->data=T[i];

  ConstrucTree(T,n,2*i+1,(4));

  ConstrucTree(T,n,(5),ptr->rightchild);

  }

  }

  main(void)

  {/*根据顺序存储结构建立二叉链表*/

  Binarytreebitree;intn;

  printf("pleaseenterthenumberofnode:

\n%s";n);

  int*A=(int*)malloc(n*sizeof(int));

  for(inti=0;i<*从键盘输入结点值*p>

  for(inti=0;i  ConstructTree(A,n,0,bitree);

  }

  答案:

  

(1)q!

=head&&q->data==p->data

  

(2)p->next=q->next

  (3)ptr=NULL

  (4)ptr->leftchild

  (5)2*i+2

  试题四

  阅读下列函数说明和C函数,将应填入n处的字句写在答题纸的对应栏内。

  [函数2.1说明]

  函数strcat(chars[],chart[])的功能是:

将字符串t复制连接字符串s的尾部,并返回新

  字符串的首地址作为函数值。

例如:

若s=“abcd”,t=“efg”,则新字符串应该是“abcdefg”。

  [函数2.1]

  char*strcat(chars[],chart[])

  {char*p;

  p=s+strlen(s)-1

  while(

(1)){

  

(2);

  }

  *p=‘\0’;

  returns;

  }

  [函数2.2说明]

  函数f(char*str,chardel)的功能是:

将非空字符串str中的指定字符del删除,形成一个

  新字符串仍存放在str所指内存单元中。

  例如若str的值为“33123333435

  ”,del的值为‘3’,调用此函数后,新字符串为:

“1245”。

  [函数2.2]

  voidf(char*str,chardel)

  {

  inti,j,len;

  len=strlen(str);

  i=j=0;

  while(i  if((3))

  (4)=str[i];

  i++;

  }

  (5);

  }

  试题五

  阅读以下说明和C代码,将应填入n处的字句写在答题纸的对应栏内。

  [说明]

  下面程序中函数fun的功能是:

在含有10个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。

最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。

  例如:

  若输入2857845328

  则应输出:

  Themax:

8

  Total:

3//最大数出现次数

  Thepositions:

149

  #include

  #defineM10

  intfun(int*a,int*n,intpos[])

  {inti,k,max=-32767;

  

(1)

  for(i=0;i  if(

(2))max=a[i];

  for(i=0;i  if((3))pos[k++]=i;

  *n=k;

  returnmax;

  }

  main()

  {inta[M],pos[M],i=0,j,n;

  printf("Enter10number:

");

  for(i=0;i  j=fun((5));

  printf("Themax:

%d\n",j);

  printf("Total:

%d",n);

  printf("Theposition:

");

  for(i=0;i  printf("\n");

  }

 阅读以下程序说明和C程序,将应填入__(n)__处的字句,写在答卷的对应栏内。

  [程序说明]

  本程序中的函数factor(m,fac,cp)用来计算正整m(m>2)的除自身以外的所有不同因子的和。

该函数返回因子和,并把各因子从小到大依次存放在数组fac中,其因子个数存入在cp所指的变量中。

  例如m=16,求得的因子为

  (1,2,4,8)

  提示:

因子和为15,因子个数为4。

  程序假定正整数m的不同因子个数不会超过100个。

  [程序]

  #include

  #defineN100

  longfactor(intm,intfac[],int*cp)

  {

  intc1,c2,i,k;

  longs;

  fac[0]=1;

  for(c1=s=1,c2=N-1,____

(1)____;;)

  {

  k=m/i;

  if(____

(2)____)

  if(____(3)____)

  {fac[c1++]=i;

  fac[c2--]=k;

  s+=i+k;

  }

  else{

  fac[c1++]=i;

  s+=i;

  }

  i++;

  if(i>=k)brdak;

  }

  for(c2++;c2<=N-1;c2++)

  ____(4)____;

  *cp=c1;

  return____(5)____;

  答案:

  1)3分i=2,或cl+1

  2)3分m%i==0(或!

(m%i)或m==i*k)

  3)3分i!

=k(或i

  4)3分fac[cl++]=fac[c2]

  答cl++给1分,‘=’左右只对一半给1分。

  5)3分s

  1.以下不是c语言规定保留字的是()。

  

(1)float

  

(2)integer

  (3)signed

  (4)unsigned

  2.设int型变量x有初始值3,则表达式x++*5/10的值是()

  

(1)0

  

(2)1

  (3)2

  (4)3

  3.下述程序执行后的输出结果是( )

  #include

  main()

  {

  intx=’f’;

  printf("%%c\n",’a’+(x-’a’+1));

  }

  

(1)G

  

(2)H

  (3)I

  (4)J

  4.设有程序,整理!

  #include

  main()

  {

  inti,j;

  for(i=0,j=1;i<=j+1;i+=2,j--)

  printf("%d\n",i);

  }

  在运行上述程序时,for语句中循环体的执行次数是()

  

(1)3

  

(2)2

  (3)1

  (4)0

  5.在下述选项时,没有构成死循环的程序是()

  

(1)inti=100

  while

(1)

  {

  i=i_0+1;

  if(i>100)

  break;

  }

  

(2)for(;;);

  (3)intk=1000;

  do

  {

  ++k;

  }while(k>=10000);

  (4)ints=36;

  while(s);--s;

  答案:

  1.

(2)2.

(2)3.

(1)4.(3)5.(3)

  1.假定a和b为int型变量,则执行下述语句组后,b的值为()。

  a=1;

  b=10;

  do

  {

  b-=a;

  a++;

  }while(b--<0);

  

(1)9

(2)-2(3)-1(4)8

  2.设有变量说明语句

  inta=1,b=0;

  则执行以下程序段的输出结果为()。

  switch(a)

  {

  case1:

  switch(b)

  {

  case0:

printf("**0**");break;

  case1:

printf("**1**");break;

  }

  case2:

printf("**2**");break;

  }

  printf("\n");

  

(1)**0**

(2)**0****2**(3)**0****1****2**(4)有语法错误

  3.以下合法的数组说明是()。

  

(1)chara[6]="string";

  

(2)inta[5]={0,1,2,3,4,5};

  (3)chara="string";

  (4)INTa[]={0,12,3,4,5};

  4.下述程序代码中有语法错误的行是()。

  inti,ia[10],ib[10];/*第一行*/

  for(i=0;i<

  =9;i++)/*第2行*/

  ia=0;/*第3行*/

  ib=ia;/第4行*/

  

(1)第1行

(2)第2行(3)第3行(4)第4行

  5.若已定义

  inta[9],*p=a;

  提示:

在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是()。

  

(1)p+1

(2)a+1(3)a++(4)++p

  答案:

1.(4)2.

(2)3.(4)4.(4)5.(3)

1.假定a和b为int型变量,则执行下述语句组后,b的值为()。

  a=1;

  b=10;

  do

  {

  b-=a;

  a++;

  }while(b--<0);

  

(1)9

(2)-2(3)-1(4)8

  2设有变量说明语句

  inta=1,b=0;

  则执行以下程序段的输出结果为()。

  switch(a)

  {

  case1:

  switch(b)

  {

  case0:

printf("**0**");break;

  case1:

printf("**1**");break;

  }

  case2:

printf("**2**");break;

  }

  printf("\n");

  

(1)**0**

(2)**0****2**(3)**0****1****2**(4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2