程序员试题.docx
- 文档编号:11547262
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:23
- 大小:23.29KB
程序员试题.docx
《程序员试题.docx》由会员分享,可在线阅读,更多相关《程序员试题.docx(23页珍藏版)》请在冰豆网上搜索。
程序员试题
阅读以下程序说明和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 } 答案: (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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序员 试题