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