报考流程:
各市专升本:
湖北普通专升本网用户登录
快速导航关闭

关注湖北普通专升本网公众号

免费获取专升本最新资讯和资料

+关注
报考指南
招生院校
武汉晴川学院专升本 武汉传媒学院专升本 湖北商贸学院专升本 武汉学院专升本 武昌首义学院专升本 武汉商学院专升本 武汉工程科技学院专升本 文华学院专升本 荆楚理工学院专升本 湖北第二师范学院专升本 黄冈师范学院专升本 湖北汽车工业学院专升本 湖北经济学院专升本 湖北民族学院专升本 武汉体育学院专升本 江汉大学专升本 长江大学专升本 湖北工程学院专升本 湖北医药学院专升本 湖北科技学院专升本 湖北理工学院专升本 湖北文理学院专升本 武汉轻工大学专升本 湖北师范大学专升本 湖北中医药大学专升本 武汉纺织大学专升本 武汉东湖学院专升本 汉口学院专升本 武汉工商学院专升本 武昌理工学院专升本 武汉生物工程学院专升本 湖北警官学院专升本 汉江师范学院专升本 武汉设计工程学院专升本 武汉华夏理工学院专升本 武汉文理学院专升本 湖北大学知行学院专升本 武汉科技大学城市学院专升本 三峡大学科技学院专升本 长江大学工程技术学院专升本 湖北工业大学工程技术学院专升本 武汉工程大学邮电与信息工程学院专升本 武汉纺织大学外经贸学院专升本 湖北汽车工业学院科技学院专升本 湖北民族大学科技学院专升本 湖北医药学院药护学院专升本 湖北经济学院法商学院专升本 武汉体育学院体育科技学院专升本 湖北师范大学文理学院专升本 湖北工程学院新技术学院专升本
业余制专升本
湖北普通专升本网 > 试题答案 > 详情

2022年湖北普通专升本C语言程序设计模拟题(3)

湖北普通专升本网 普通专升本培训 2022-01-15 10:19 交流群+

【摘要】C是一门学习逻辑、程序算法、算法实现很好的教程,通过 湖北普通专升本 C语言的学习,同学们可以了解程序的设计编码的过程,下面是一套专升本C语言程序设计模拟题,感兴趣的同...

C是一门学习逻辑、程序算法、算法实现很好的教程,通过湖北普通专升本C语言的学习,同学们可以了解程序的设计编码的过程,下面是一套专升本C语言程序设计模拟题,感兴趣的同学们可以做一做。

2022年湖北普通专升本C语言程序设计模拟题(3)
 
 
第七章函数
 
7.1选择题
 
*7.1建立函数的目的之一,以下正确的说法是。
 
A)提高程序的执行效率B)提高程序的可读性
 
C)减少程序的篇幅D)减少程序文件所占内存
 
参考答案:B
 
*7.2以下正确的说法是。
 
A)用户若需要调用标准库函数,调用前必须重新定义
 
B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义
 
C)用户系统根本不允许用户重新定义标准库函数
 
D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。
 
参考答案:B
 
7.3以下正确的函数定义形式是。
 
A)double fun(int x,int y)B)double fun(int x;int y)
 
C)double fun(int x,int y);D)doubel fun(int x;int y);
 
参考答案:A
 
*7.4以下正确的函数形式是。
 
A)double fun(int x,int y){z=x+y;return z;}
 
B)double fun(int x,y){int z;return z;}
 
C)fun(x,y){int x,y;double z;z=x+y;return z;}
 
D)double fun(int x,int y){double z;z=x+y;return z;}
 
参考答案:D
 
*7.5以下正确的说法是。
 
A)实参和与其对应的形参占用独立的存储单元
 
B)实参和与其对应的形参共占用一个存储单元
 
C)只有当实参和与其对应的形参同名时才共占用一个存储单元
 
D)形参是虚拟的,不占用存储单元
 
参考答案:A
 
参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。
 
7.6若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。
 
A)没有返回值B)返回若干个系统默认值
 
C)返回一个用户所希望的函数值D)返回一个不确定的值
 
参考答案:D
 
参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。
 
7.7以下不正确的说法是,C语言规定。
 
A)实参可以是常量、变量或表达式
 
B)形参可以是常量、变量或表达式
 
C)实参可以是任意类型
 
D)实参应与其对应的形参类型一致
 
参考答案:B
 
7.8以下正确的说法是。
 
A)定义函数时,形参的类型说明可以放在函数体内
 
B)return后面的值不能为表达式
 
C)如果函数的类型与返回值类型不一致,以函数类型为准
 
D)如果形参与实参的类型不一致,以实参类型为准
 
参考答案:C
 
7.9 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是。
 
A)地址传递B)单向值传递
 
C)由实参传给形参,再由形参传回实参D)由用户指定传递方式
 
参考答案:B
 
7.10以下程序有语法性错误,有关错误原因的正确说法是。
 
main()
 
{int G=5,k;
 
void prt_char();
 
......
 
k=prt_char(G);
 
......
 
}
 
A)语句void prt_char();有错,它是函数调用语句,不能用void说明
 
B)变量名不能使用大写字母
 
C)函数说明和函数调用语句之间有矛盾
 
D)函数名不能使用下划线
 
参考答案:C
 
7.11 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。
 
A)float型B)int型C)long型D)double型
 
参考答案:B
 
7.12 C语言规定,函数返回值的类型是由所决定。
 
A)return语句中的表达式类型
 
B)调用该函数时的主调函数类型
 
C)调用该函数是系统临时指定
 
D)在定义该函数时所指定的函数类型
 
参考答案:D
 
*7.13下面函数调用语句含有实参的个数为。
 
fun((exp1,exp2),(exp3,exp4,exp5));
 
A)1 B)2 C)4 D)5
 
参考答案:B
 
参考分析:该函数的实参是两个逗号表达式。
 
7.14以下错误的描述是。
 
函数调用可以
 
A)出现在执行语句中B)出现在表达式中
 
C)作为函数的实参D)作为函数的形参
 
参考答案:D
 
7.15以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
 
#include
 
#include
 
float f(float,float);
 
main()
 
{float x,y,z,sum;
 
scanf("%f%f%f",&x,&y,&z);
 
sum=f(【1】)+f(【2】);
 
printf("sum=%fn",sum);
 
}
 
float f(float a,float b)
 
{float value;
 
falue=a/b;
 
return(value);
 
}
 
【1】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y
 
【2】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y
 
参考答案:【1】B【2】C
 
7.16以下正确的描述是________。
 
A)函数的定义可以嵌套,但函数的调用不可以嵌套
 
B)函数的定义不可以嵌套,但函数的调用可以嵌套
 
C)函数的定义和函数的调用均不可嵌套
 
D)函数的定义和函数的调用均可以嵌套
 
参考答案:B
 
7.17以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有的这样的数及其个数。请选择填空。
 
sub(int k,int n)
 
{int a1,a2;
 
a2=【1】;
 
a1=k-【2】;
 
if((k%3==0&&a2==5)||(k%3==0&&a1==5))
 
{printf("%4d",k);n++;return n;}
 
else return-1;
 
}
 
main()
 
{int n=0,k,m;
 
for(k=10;k<100;k++)
 
{m=sub(k,n);
 
if(m!=-1)n=m;
 
}
 
printf("nn=%d",n);
 
}
 
【1】A)k*10 B)k%10 C)k/10 D)k*10%10
 
【2】A)a2*10 B)a2 C)a2/10 D)a2%10
 
参考答案:【1】C【2】A
 
7.18以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C');则符合程序段运行结果的选项是。
 
void move(char getone,char putone)
 
{printf("%c-->%cn",getone,putone);}
 
void hanoi(int n,char one,char two,char three)
 
{if(n==1)move(one,three);
 
else
 
{hanoi(n-1,one,three,two);
 
move(one,three);
 
hanoi(n-1,two,one,three);
 
}
 
}
 
A)A-->C B)A-->C C)A-->C D)A-->C
 
A-->B A-->B A-->B A-->B
 
C-->B C-->A C-->B C-->B
 
B-->A A-->B A-->C A-->C
 
C-->B B-->C B-->A A-->B
 
A-->C A-->C B-->C B-->C
 
A-->B A-->B A-->C A-->C
 
参考答案:C
 
7.19若用数组名作为函数调用的实参,传递给形参的是。
 
A)数组的首地址B)数组第一个元素的值
 
C)数组中全部元素的值D)数组元素的个数
 
参考答案:A
 
7.20已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为。
 
int a[3][4];
 
f(a);
 
A)f(int array[][6])B)f(int array[3][])C)f(int array[][4])D)f(int array[2][5])
 
参考答案:B
 
7.21若使用一位数组名作为函数实参,则以下正确的说法是。
 
A)必须在主调函数中说明此数组的大小
 
B)实参数组类型与形参数组类型可以不匹配
 
C)在被调函数中,不需要考虑形参数组的大小
 
D)实参数组名与形参数组名必须一致
 
参考答案:C
 
7.22以下函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。
 
int binary(int a[],int m)
 
{int low=0,high=9,mid;
 
while(low<=high)
 
{mid=(low+high)/2;
 
if(m<a[mid])p=""【1】;
 
else if(m>a[mid])【2】;
 
else return(mid);
 
}
 
return(-1);
 
}
 
A)high=mid-1 B)high=mid+1 C)low=mid-1 D)low=mid+1
 
参考答案:【1】A【2】D
 
7.23如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是。
 
A)只在该复合语句中有效B)只在该函数中有效
 
C)在本程序范围内均有效D)为非法变量
 
参考答案:A
 
7.24以下不正确的说法为。
 
A)在不同函数中可以使用相同名字的变量
 
B)形式参数是局部变量
 
C)在函数内定义的变量只在本函数范围内有效
 
D)在函数内的复合语句中定义的变量在本函数范围内有效
 
参考答案:D
 
7.25以下程序的正确运行结果是。
 
#define MAX 10
 
int a[MAX],i;
 
main()
 
{printf("n");sub1();sub3(a);sub2();sub3(a);}
 
sub2()
 
{int a[MAX],i,max;
 
max=5;
 
for(i=0;i
 
}
 
sub1()
 
{for(i=0;i
 
sub3(int a[])
 
{int i;
 
for(i=0;i<max;i++)p=""printf(?%3d?,a<i>);
 
printf("n");
 
}
 
A)0 2 4 6 8 10 12 14 16 18 B)0 1 2 3 4
 
0 1 2 3 4 0 2 4 6 8 10 12 14 16 18
 
C)0 1 2 3 4 5 6 7 8 9 D)0 2 4 6 8 10 12 14 16 18
 
0 1 2 3 4 0 2 4 6 8 10 12 14 16 18
 
参考答案:D
 
*7.26以下程序的正确运行结果是。
 
#include
 
void num()
 
{extern int x,y;
 
int a=15,b=10;
 
x=a-b;
 
y=a+b;
 
}
 
int x,y;
 
main()
 
{int a=7,b=5;
 
x=a+b;
 
y=a-b;
 
num();
 
printf("%d,%dn",x,y);
 
}
 
A)12,2 B)12,25 C)5,25 D)5,2
 
参考答案:C
 
7.27凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。
 
A)auto B)static C)extern D)register
 
参考答案:A
 
7.28在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是。
 
A)extern B)register C)auto D)static
 
参考答案:D
 
*7.29以下程序的正确运行结果是。
 
main()
 
{int a=2,i;
 
for(i=0;i<3;i++)printf("%4d",f(a));
 
}
 
int f(int a)
 
{int b=0;
 
static int c=3;
 
b++;c++;
 
return(a+b+c);
 
}
 
A)7 7 7 B)7 10 13
 
C)7 9 11 D)7 8 9
 
参考答案:D
 
*7.30以下程序的正确运行结果是。
 
#include
 
main()
 
{int k=4,m=1,p;
 
p=func(k,m);printf("%d,",p);
 
p=func(k,m);printf("%d"n",p);
 
}
 
func(int a,int b)
 
{static int m=0,i=2;
 
i+=m+1;
 
m=i+a+b;
 
return(m);
 
}
 
A)8,17 B)8,16 C)8,20 D)8,8
 
参考答案:A
 
7.2填空题
 
7.31 C语言规定,可执行程序的开始执行点是【】。
 
参考答案:main函数
 
7.32在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。
 
参考答案:【1】函数声明【2】函数体
 
*7.33若输入的值是-125,以下程序的执行结果是。
 
#include
 
main()
 
{int n;
 
scanf("%d",&n);
 
printf("%d=",n);
 
if(n<0)printf("-");
 
n=abs(n);
 
fun(n);
 
}
 
fun(int n)
 
{int k,r;
 
for(k=2;k<=sqrt(n);k++)
 
{r=n%k;
 
while(r==0)
 
{printf("%d",k);
 
n=n/k;
 
if(n>1)printf("*");
 
r=n%k;
 
}
 
}
 
if(n!=1)printf("%dn",n);
 
}
 
参考答案:-125=-5*5*5
 
参考分析:本程序用来将整数分解为素数因子的乘积。
 
7.34下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是【1】;改正后为【2】。
 
void add(float a,float b)
 
{float c;
 
c=a+b;
 
return c;
 
}
 
参考答案:【1】void add(float a,float b)【2】float add(float a,float b)
 
7.35以下程序的运行结果是。
 
main()
 
{int i=2,x=5,j=7;
 
fun(j,6);
 
printf("i=%d;j=%d;x=%dn",i,j,x);
 
}
 
fun(int i,int j)
 
{int x=7;
 
printf("i=%d;j=%d;x=%dn",i,j,x);
 
}
 
参考答案:
 
i=7;j=6;x=7
 
i=2;j=7;x=5
 
7.36以下程序的运行结果是。
 
main()
 
{increment();
 
increment();
 
increment();
 
}
 
increment()
 
{int x=0;
 
x+=1;
 
printf("%d",x);
 
}
 
参考答案:1 1 1
 
7.37以下程序的运行结果是。
 
#include
 
main()
 
{int a=1,b=2,c;
 
c=max(a,b);
 
printf("max is%dn",c);
 
}
 
max(int x,int y)
 
{int z;
 
z=(x>y)?x:y;
 
return(z);
 
}
 
参考答案:max is 2
 
7.38以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。请填空。
 
#include
 
void YesNo(char ch)
 
{switch(ch)
 
{case'y':
 
case'Y':printf("nThis is YES.n");【1】;
 
case'n':
 
case'N':printf("nThis is NO.n");
 
}
 
}
 
main()
 
{char ch;
 
printf("nEnter a char'y','Y'or'n','N':");
 
ch=【2】;
 
printf("ch:%c",ch);
 
YesNo(ch);
 
}
 
参考答案:【1】break【2】getchar()
 
7.39以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示"WELL DONE!!",否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。
 
void Check(int ponse,float value)
 
{int val;
 
val=【1】;
 
printf("计算后的值:%d",val);
 
if(【2】)printf("nWELL DONE!!!n");
 
else printf("nSorry the correct answer is%dn",val);
 
}
 
参考答案:【1】value+0.5【2】ponse==val
 
7.40以下程序的功能是。
 
#include
 
f(int n)
 
{int i,j,k;
 
i=n/100;j=n/10-i*10;k=n%10;
 
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)return n;
 
else return 0;
 
}
 
main()
 
{int n,k;
 
printf("Output");
 
for(n=100;n<1000;n++)
 
{k=f(n);
 
if(k!=0)
 
printf("%d",k);
 
}
 
printf("n");
 
}
 
参考答案:输出所有的水仙花数。
 
7.41以下程序的功能是用二分法求方程2x3-4x2+3x-6=0的根,并要求绝对误差不超过0.001。请填空。
 
#include
 
float f(float x)
 
{return(2*x*x*x-4*x*x+3*x-6);}
 
main()
 
{float m=-100,n=90,r;
 
r=(m+n)/2;
 
while(f(r)*f(n)!=0)
 
{if(【1】)m=r;
 
else n=r;
 
if(【2】)break;
 
r=(m+n)/2;
 
}
 
printf("方程的解是%6.3fn",r);
 
}
 
参考答案:【1】f(r)*f(n)<0或f(r)*f(m)>0【2】n-m<0.001
 
7.42若输入一个整数10,以下程序的运行结果是。
 
int sub(int a)
 
{int c;
 
c=a%2;
 
return c;
 
}
 
main()
 
{int a,e[10],c,i=0;
 
printf("Input a number:");
 
scanf("%d",&a);
 
while(a!=0)
 
{c=sub(a);
 
a=a/2;
 
e<i>=c;
 
i++;
 
}
 
for(;i>0;i--)printf("%d",e[i-1]);
 
}
 
参考答案:1010
 
7.43以下程序的功能是计算下面函数的值。请填空。
 
sin(x)sin(y)sin(z)
 
F(x)=++
 
sin(x-y)*sin(x-z)sin(y-z)*sin(y-x)sin(z-x)*sin(z-y)
 
#include
 
#include
 
float f(float,float,float);
 
main()
 
{printf("input x,y,z:n");
 
scanf("%f%f%f",&x,&y,&z);
 
sum=【1】;
 
printf("sum=%fn",sum);
 
}
 
float f(float a,float b,float c)
 
{float value;
 
value=【2】;
 
return(value);
 
}
 
参考答案:【1】f(x,y,z)+f(y,z,x)+f(z,x,y)【2】sin(a)/sin(a-b)/sin(a-c)
 
参考分析:本题答案非常不严谨,完全可以写成多种方式,比如
 
【1】f(x,x-y,x-z)+f(y,y-z,y-x)+f(z,z-x,z-y)【2】sin(a)/sin(b)/sin(c)
 
【1】f(x,y,z)【2】sin(a)/sin(a-b)/sin(a-c)+sin(b)/sin(b-c)/sin(b-a)+sin(c)/sin(c-a)/sin(c-b)
 
7.44已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。
 
修改前的pow函数:
 
int pow(int x,int y)
 
{int i,j=1;
 
for(i=1;i<=y;i++)j=j*x;
 
return j;
 
}
 
修改后的函数:
 
int pow(int x,int y)
 
{int j;
 
for(【1】;【2】;【3】)j=j*x;
 
return j;
 
}
 
参考答案:【1】j=1【2】y>0或y>=1【3】y--或--y
 
7.45以下程序的运行结果是输出如下图形。请填空。
 
*
 
***
 
*****
 
*******
 
*****
 
***
 
*
 
#include
 
void a(int i)
 
{int j,k;
 
for(j=0;j<=7-i;j++)printf("");
 
for(k=0;k<【1】;k++)printf("*");
 
printf("n");
 
}
 
main()
 
{int i;
 
for(i=0;i<3;i++)【2】;
 
for(i=3;i>=0;i--)【3】;
 
}
 
参考答案:【1】2*i+1【2】a<i>【3】a<i>
 
参考说明:最长的一行前面有5个空格。
 
7.46以下程序的功能是求三个数的最小公倍数,请填空。
 
#include
 
int max(int x,int y,int z)
 
{if(x>y&&x>z)return(x);
 
else if(【1】)return(y);
 
else return(z);
 
}
 
main()
 
{int x1,x2,x3,i=1,j,x0;
 
printf("Input three number:");
 
scanf("%d%d%d",&x1,&x2,&x3);
 
x0=max(x1,x2,x3);
 
while(1)
 
{j=x0*i;
 
if(【2】)break;
 
i++;
 
}
 
printf("zuixiaogongbeishu=%dn",j);
 
}
 
参考答案:【1】y>x&&y>z【2】j%x1==0&&j%x2==0&&j%x3==0
 
参考分析:本题有错误,若x=z>y这种条件下max函数不能正确返回最大值。若将所有条件均改为>=就可以了。
 
7.47函数gongyue的作用是求整数num1和num2的最大公约数。请填空。
 
int gongyue(int num1,int num2)
 
{int temp,a,b;
 
if(num1【1】num2)
 
{temp=num1;num1=num2;num2=temp;}
 
a=num1;b=num2;
 
while(【2】)
 
{temp=a%b;a=b;b=temp;}
 
return(a);
 
}
 
参考答案:【1】<【2】b
 
参考分析:本题需要修改,作为函数,没有必要将num1赋值给a,另外,不必须要num1大,num2小,还有【2】可以为b!=0
 
7.48以下程序的运行结果是。
 
main()
 
{int x=2,y=3,z=0;
 
printf("(1)x=%d y=%d z=%dn",x,y,z);
 
add(x,y,z);
 
printf("(3)x=%d y=%d z=%dn",x,y,z);
 
}
 
add(int x,int y,int z)
 
{z=x+y;x=x*x;y=y*y;
 
printf("(2)x=%d y=%d z=%dn",x,y,z);
 
}
 
参考答案:
 
(1)x=2 y=3 z=0
 
(2)x=4 y=9 z=5
 
(3)x=2 y=3 z=0
 
7.49下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π值,请填空。
 
π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…
 
#include
 
#include
 
#include
 
double pi(double eps)
 
{double s,t;
 
int n;
 
for(【1】;t>eps;n++)
 
{s+=t;
 
t=n*t/(2*n+1);
 
}
 
return(【2】);
 
}
 
main()
 
{double x;
 
printf("nPlease enter a precision:");
 
scanf("%lf",&x);
 
printf("neps=%lf,π=%lf",x,pi(x));
 
}
 
参考答案:【1】s=0,t=1,n=1【2】2*s
 
7.50下面是一个计算阶乘的程序。程序中错误的语句是【1】,应改为【2】。
 
#include
 
double fac(int);
 
main()
 
{int n;
 
printf("Enter an integer:");
 
scanf("%d",&n);
 
printf("nn%d!=%lgnn",n,fac(fac(n));
 
}
 
double fac(int n)
 
{double result=1.0;
 
while(n>1||n<170)result*=--n;
 
return result;
 
}
 
参考答案:【1】while(n>1||n<170)result*=--n【2】while(n>1&&n<170)result*=n--;
 
***7.51函数f的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行结果为。
 
f(int a[][20],int n)
 
{int i,j,k;
 
j=n/2+1;
 
a[1][j]=1;
 
i=1;
 
for(k=2;k<=n*n;k++)
 
{i=i-1;j=j+1;
 
if(i<1&&j>n){i=i+2;j=j-1;}
 
else
 
{if(i<1)i=n;
 
if(j>n)j=1;
 
}
 
if(a<i>[j]==0)a<i>[j]=k;
 
else{i=i+2;j=j-1;a<i>[j]=k;}
 
}
 
}
 
main()
 
{int a[20][20]={0},n,i,j;
 
scanf("%d",&n);
 
f(a,n);
 
for(i=1;i<=n;i++)
 
{for(j=1;j<=n;j++)
 
printf("%3d",a<i>[j]);
 
printf("n");
 
}
 
}
 
参考答案:
 
17 24 1 8 15
 
23 5 7 14 16
 
4 6 13 20 22
 
10 12 19 21 3
 
11 18 25 2 9
 
参考说明:这是幻方题目
 
7.52下面函数func的功能是。
 
#include
 
long func(long num)
 
{long k=1;
 
num=labs(num);
 
do
 
{k*=num%10;
 
num/=10;
 
}while(num);
 
return k;
 
}
 
main()
 
{long n;
 
printf("nPlease enter a number:");
 
scanf("%ld",&n);
 
printf("nThe product of its digits is%ld.",func(n));
 
}
 
参考答案:计算一个数的各位数字之积。
 
7.53以下程序的运行结果是。
 
#include
 
main()
 
{printf("FACT(5):%dn",fact(5));
 
printf("FACT(1):%dn",fact(1));
 
fact(-5);
 
}
 
fact(int value)
 
{if(value<0){printf("FACT(<0):Error!n");return(-1);}
 
else if(value==1||value==0)return(1);
 
else return(value*fact(value-1));
 
}
 
参考答案:
 
FACT(5):120
 
FACT(1):1
 
FACT(<0):Error!
 
7.54以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请填空。
 
递归公式如下:
 
10 n=1
 
age(n)=age(n-1)+2 n>1
 
#include
 
age(int n)
 
{int c;
 
if(n==1)c=10;
 
else c=【1】;
 
return c;
 
}
 
main()
 
{int n=5;
 
printf("age:%dn",【2】);
 
}
 
参考答案:【1】age(n-1)+2【2】age(n)
 
7.55下面程序的功能是【1】,运行结果是【2】。
 
long fib(int g)
 
{switch(g)
 
{case 0:return 0;
 
case 1:case 2:return 1;
 
}
 
return(fib(g-1)+fib(g-2));
 
}
 
main()
 
{long k;
 
k=fib(7);
 
printf("k=%dn",k);
 
}
 
参考答案:【1】计算斐波那契数列第7项的值【2】k=13
 
7.56以下程序的运行结果是。
 
main()
 
{int i=5;
 
printf("%dn",sub(i));
 
}
 
sub(int n)
 
{int a;
 
if(n==1)return 1;
 
a=n+sub(n-1);
 
return a;
 
}
 
参考答案:15
 
参考分析:利用递归的方法计算1+2+3+4+5
 
7.57以下程序是应用递归函数算法求某数a的平方根,请填空。求平方根的迭代公式如下:
 
x1=1/2(x0+a/x0)
 
#include
 
double mysqrt(double a,double x0)
 
{double x1,y;
 
x1=【1】;
 
if(fabs(x1-x0)>0.00001)y=mysqrt(【2】);
 
else y=x1;
 
return y;
 
}
 
main()
 
{double x;
 
printf("Enter x:");scanf("%lf",&x);
 
printf("The sqrt of%f=%fn",x,mysqrt(x,1.0));
 
}
 
参考答案:【1】1.0/2*(x0+a/x0)【2】a,x1
 
7.58以下程序的运行结果是。
 
#include
 
f(int a[])
 
{int i=0;
 
while(a<i><=10)
 
{printf("%3d",a<i>);
 
i++;
 
}
 
}
 
main()
 
{int a[]={1,5,10,9,11,7};
 
f(a+1);
 
}
 
参考答案:5 10 9
 
7.59以下程序的运行结果是。
 
main()
 
{int a[3][3]={1,3,5,7,9,11,13,15,17},sum;
 
sum=func(a);
 
printf("nsum=%dn",sum);
 
}
 
func(int a[][3])
 
{int i,j,sum=0;
 
for(i=0;i<3;i++)
 
for(j=0;j<3;j++)
 
{a<i>[j]=i+j;
 
if(i==j)sum=sum+a<i>[j];
 
}
 
return(sum);
 
}
 
参考答案:sum=6
 
7.60阅读下面程序,完成下列问题中的填空。
 
问题(1)此程序在调用函数f后的运行结果是【1】。
 
(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则程序的运行结果是【2】。
 
f(int s[][4])
 
{int i,j,k;
 
for(i=0;i<3;i++)
 
for(j=i+1;j<4;j++)
 
{k=s<i>[j];s<i>[j]=s[j]<i>;s[j]<i>=k;}
 
}
 
main()
 
{int s[4][4],i,j;
 
for(i=0;i<4;i++)
 
for(j=0;j<4;j++)
 
s<i>[j]=i-j;
 
f(s);
 
for(i=0;i<4;i++)
 
{printf("n");
 
for(j=0;j<4;j++)
 
printf("%4d",s<i>[j]);
 
}
 
}
 
参考答案:
 
【1】0 1 2 3【2】0-1-2-3
 
-1 0 1 2 1 0-1-2
 
-2-1 0 1 2 1 0-1
 
-3-2-1 0 3 2 1 0
 
7.61以下search函数的功能是利用顺序查找法从数组的10个元素中对关键字m进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或找到数组尾部时结束。若找到,返回此元素的下标;若未找到,则返回-1。请填空。
 
#include
 
int search(int a[10],int m)
 
{int i;
 
for(i=0;i<=9;i++)if(【1】)return(i);
 
return-1;
 
}
 
main()
 
{int a[10],m,i,no;
 
 
no=search(【2】);
 
if(【3】)printf("nOK FOUND!",no);
 
else printf("nSorry Not Found!");
 
}
 
参考答案:【1】a<i>==m【2】a,m【3】no>=0
 
7.62已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋给各元素从2开始的偶数,函数fav2则按顺序每5个元素求一个平均值,并将该值存放在数组w中。请填空。
 
#define SIZE 30
 
fav1(float s[])
 
{int k,i;
 
for(k=2,i=0;i<size;i++)<p="">
 
{【1】;
 
k+=2;
 
}
 
}
 
fav2(float s[],float w[])
 
{float sum,k,i;
 
sum=0.0;
 
for(k=0,i=0;i<size;i++)<p="">
 
{sum+=s<i>;
 
if((i+1)%5==0)
 
{w[k]=sum/5;
 
【2】;
 
k++;
 
}
 
}
 
}
 
main()
 
{float s[SIZE],w[SIZE/5],sum;
 
int i,k;
 
fav1(s);
 
fav2(s,w);
 
}
 
参考答案:【1】s<i>=k【2】sum=0.0
 
7.63以下程序的运行结果是【1】,其算法是【2】。
 
main()
 
{int a[5]={5,10,-7,3,7},i,t,j;
 
sort(a);
 
for(i=0;i<=4;i++)
 
printf("%3d",a<i>);
 
}
 
sort(int a[])
 
{int i,j,k;
 
for(i=0;i<4;i++)
 
for(j=0;j<4-i;j++)
 
if(a[j]>a[j+1])
 
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
 
}
 
参考答案:【1】-7 3 5 7 10【2】冒泡法排序
 
7.64以下程序的运行结果是【1】,其算法是【2】。
 
main()
 
{int a[5]={9,6,8,3,-1},i,j,t,p;
 
sort(a);
 
for(i=0;i<=4;i++)
 
printf("%3d",a<i>);
 
}
 
sort(int a[])
 
{int i,j,t,p;
 
for(j=0;j<4;j++)
 
{p=j;
 
for(i=j;i<=4;i++)
 
if(a<i>
 
t=a[p];a[p]=a[j];a[j]=t;
 
}
 
}
 
参考答案:【1】-1 3 6 8 9【2】选择法排序
 
7.65函数del的作用是删除有序数组a中的指定元素x。已有调用语句n=del(a,n,x);其中实参n为删除数组元素的个数,赋值号左边的n为删除后数组元素的个数。请填空。
 
del(int a[],int n,int x)
 
{int p,i;
 
p=0;
 
while(x>=a[p]&&p<n)<p="">
 
【1】;
 
for(i=p-1;i<n;i++)<p="">
 
【2】;
 
n=n-1;
 
return n;
 
}
 
参考答案:【1】p++【2】a<i>=a[i+1]
 
7.66以下程序的运行结果是。
 
#include
 
func(int array[][4],int m)
 
{int i,j,k;
 
k=0;
 
for(i=0;i<3;i++)
 
for(j=0;j<4;j++)
 
if(array<i>[j]<m)<p="">
 
k=k+array<i>[j];
 
return k;
 
}
 
main()
 
{static int a[3][4]={{1,13,5,7},{2,4,26,8},{10,1,3,12}};
 
int i,j,m;
 
for(i=0;i<3;i++)
 
{for(j=0;j<4;j++)
 
printf("%4d",a<i>[j]);
 
printf("n");
 
}
 
m=10;
 
printf("nthe value is%dn",func(a,m));
 
}
 
参考答案:1 13 5 7
 
2 4 26 8
 
10 1 3 12
 
the value is 31
 
7.67函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。
 
a[0]=1,a[1]=2;
 
swap(a[0],a[1]);
 
参考答案:【1】1,2【2】单向传值不能完成对实参数据的交换
 
7.68函数swap(arr,n)可完成对arr数组从第一个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。
 
a[0]=1,a[1]=2;
 
swap(a,2);
 
参考答案:【1】2,1【2】地址传递对形参的改变能改变实参的值
 
7.69以下程序可计算10名学生1门课成绩的平均分,请填空。
 
float average(float array[])
 
{int i;float aver,sum=array[0];
 
for(i=1;【1】;i++)
 
sum+=【2】;
 
aver=sum/10;
 
return aver;
 
}
 
main()
 
{float score[10],aver;
 
int i;
 
printf("ninput 10 scores:");
 
for(i=0;i<10;i++)scanf("%f",&score<i>);
 
aver=【3】;
 
printf("naverage score is%5.2fn",aver);
 
}
 
参考答案:【1】i<10【2】array<i>【3】average(score)
 
7.70函数yahui能够按以下形式构成一个杨辉三角形,请填空。
 
1
 
1 1
 
1 2 1
 
1 3 3 1
 
1 4 6 4 1
 
1 5 10 10 5 1
 
………..
 
#define N 11
 
yahui(int[][N])
 
{int i,j;
 
for(i=1;i<n;i++)<p="">
 
{a<i>[1]=1;a<i><i>=1;}
 
for(【1】;i<n;i++)<p="">
 
for(j=2;【2】;j++)
 
a<i>[j]=【3】+a[i-1][j];
 
}
 
参考答案:【1】i=3【2】j<i p=""【3】a[i-1][j-1]
 
<i p=""【3】a[i-1][j-1]7.71下面程序的功能是:从键盘输入一个整数m(4≤m≤20),则输出如下的整数方阵(存入二维数组aa)。例如,若输入4则会输出左边的方阵,若输入5,则会输出右边的方阵。
 
<i p=""【3】a[i-1][j-1]
 
16 9 4 1 25 16 9 4 1
 
9 4 1 16 16 9 4 1 25
 
4 1 16 9 9 4 1 25 16
 
1 16 9 4 4 1 25 16 9
 
请改正程序中的错误语句,使它能得出正确的结果。改正后的语句是【1】和【2】。
 
#define M 20
 
void aMatrix(int n,int x[][M])
 
{int i,j;
 
for(j=0;j<n;j++)<p="">
 
x[0][j]=(n-j)*(n-j);
 
for(i=1;i<n;i++)<p="">
 
{for(j=0;j<n;j++)p=""
 
x<i>[j]=x[i-1][j+1];
 
x<i>[n-1]=x[i-1][0];
 
}
 
}
 
main()
 
{int a[M][M],i,j,m;
 
printf("nPlease enter an integer number between 4 and 20:");
 
scanf("%d",&m);
 
aMatrix(m,a);
 
printf("nThe%d*%d matrix generated:",m,m);
 
for(i=0;i<m;i++)<p="">
 
{printf("n");
 
for(j=0;j<m;j++)<p="">
 
printf("%4f",(*(a+i))[j]);/*错误语句【2】*/
 
}
 
}
 
参考答案:【1】for(j=0;j<n-1;j++p=""【2】printf(?%4d?,(*(a+i))[j]);
 
7.72以下程序的运行结果是。
 
main()
 
{int a=1,b=2,c=3;
 
++a;
 
c+=++b;
 
{int b=4,c;
 
c=b*3;
 
a+=c;
 
printf("first:%d,%d,%dn",a,b,c);
 
a+=c;
 
printf("second:%d,%d,%dn",a,b,c);
 
}
 
printf("third:%d,%d,%d"n",a,b,c);
 
}
 
参考答案:
 
first:14,4,12
 
second:26,4,12
 
third:26,3,6
 
7.73以下程序的运行结果是。
 
int k=1;
 
main()
 
{int i=4;
 
fun(i);
 
printf("(1)%d,%dn",i,k);
 
}
 
fun(int m)
 
{m+=k;
 
k+=m;
 
{char k='B';
 
printf("(2)%dn",k-'A');
 
}
 
printf("(3)%d,%dn",m,k);
 
}
 
参考答案:
 
(2)1
 
(3)5,6
 
(1)4,6
 
7.74以下程序的运行结果是。
 
int x1=30,x2=40;
 
main()
 
{int x3=10,x4=20;
 
sub(x3,x4);
 
sub(x2,x1);
 
printf("%d,%d,%d,%dn",x3,x4,x1,x2);
 
}
 
int sub(int x,int y)
 
{x1=x;x=y;y=x1;}
 
参考答案:10,20,40,40
 
7.75以下程序的运行结果是。
 
int i=0;
 
main()
 
{int i=5;
 
reset(i/2);printf("i=%dn",i);
 
reset(i=i/2);printf("i=%dn",i);
 
reset(i/2);printf("i=%dn",i);
 
workover(i);printf("i=%dn",i);
 
}
 
workover(int i)
 
{i=(i%i)*((i*i)/(2*i)+4);
 
printf("i=%dn",i);
 
return i;
 
}
 
reset(int i)
 
{i=i<=2?5:0;
 
return i;
 
}
 
参考答案:
 
i=5
 
i=2
 
i=2
 
i=0
 
i=2
 
7.76以下程序的运行结果是。
 
int a=5;int b=7;
 
main()
 
{int a=4,b=5,c;
 
c=plus(a,b);
 
printf("A+B=%dn",c);
 
}
 
int plus(int x,int y)
 
{int z;
 
z=x+y;
 
return z;}
 
参考答案:A+B=9
 
7.77以下程序的运行结果是。
 
int a=3,b=5;
 
int max(int a,int b)
 
{int c;
 
c=a>b?a:b;
 
return c;
 
}
 
main()
 
{int a=8;
 
printf("%d",max(a,b));
 
}
 
参考答案:8
 
7.78以下程序的运行结果是。
 
int x;
 
main()
 
{x=5;
 
cude();
 
printf("%dn",x);
 
}
 
cude()
 
{x=x*x*x;}
 
参考答案:125
 
参考分析:x是全局变量。
 
7.79以下程序的运行结果是。
 
main()
 
{int i;
 
for(i=0;i<3;i++)
 
{funx();
 
funy();
 
}
 
}
 
funx()
 
{int x=0;
 
printf("x=%dt",++x);
 
}
 
funy()
 
{static int y=0;
 
printf("y=%dn",++y);
 
}
 
参考答案:
 
x=1 y=1
 
x=1 y=2
 
x=1 y=3
 
7.80以下程序的运行结果是。
 
main()
 
{int i;
 
for(i=0;i<3;i++)
 
fun();
 
}
 
fun()
 
{static int x=0;
 
x+=1;
 
printf("%3d",x);
 
}
 
参考答案:1 2 3
 
7.81以下程序的运行结果是。
 
int n=1;
 
main()
 
{static int x=5;
 
int y;
 
y=n;
 
printf("MAIN:x=%2d y=%2d n=%2dn",x,y,n);
 
func();
 
printf("MAIN:x=%2d y=%2d n=%2dn",x,y,n);
 
func();
 
}
 
func()
 
{static int x=4;
 
int y=10;
 
x=x+2;
 
n=n+10;
 
y=y+n;
 
printf("FUNC:x=%2d y=%2d n=%2dn",x,y,n);
 
}
 
参考答案:
 
MAIN:x=5 y=1 n=1
 
FUNC:x=6 y=21 n=11
 
MAIN:x=5 y=1 n=11
 
FUNC:x=8 y=31 n=21
 
7.82以下程序的功能是。
 
int fac(int n)
 
{static int f=1;
 
f=f*n;
 
return f;
 
}
 
main()
 
{int i;
 
for(i=1;i<=5;i++)
 
printf("%d!=%dn",i,fac(i));
 
}
 
参考答案:计算并输出1到5的阶乘
 
7.3编程题
 
7.83已有变量定义和函数调用语句:int a=1,b=-5,c;c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。
 
fun(int x,int y)
 
{}
 
参考程序:
 
fun(int x,int y)
 
{if(x>y)return x-y;
 
return y-x;
 
}
 
7.84已有变量定义和函数调用语句:int x=57;isprime(x);函数isprime()用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。
 
int isprime(int a)
 
{}
 
参考程序:
 
int isprime(int a)
 
{int k;
 
if(a==1)return 0;
 
for(k=2;k<=a/2;k++)
 
if(a%k==0)return 0;
 
return 1;
 
}
 
7.85已有变量定义和函数调用语句int a,b;b=sum(a);函数sum用来求1+2+3+…+n,请编写sum函数。
 
int sum(int n){}
 
参考程序:
 
int sum(int n)
 
{int s=0,k;
 
for(k=1;k<=n;k++)
 
s+=k;
 
return s;
 
}
 
7.86已有变量定义和函数调用语句double a=5.0;int n=5;和函数调用语句mypow(a,n);用来求a的n次方。请编写mypow函数。
 
double mypow(double x,int y){}
 
参考程序:
 
double mypow(double x,int y)
 
{double s=1;
 
for(;y>0;y--)
 
s=s*x;
 
return s;
 
}
 
7.87以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。已有初始值x0=3.1415/4,要求绝对误差不超过0.001,函数f用来计算迭代公式中x0的值。请编写f函数。牛顿迭代公式是:xn+1=xn
 
第八章编译预处理
 
8.1选择题
 
8.1以下叙述中不正确的是。
 
A)预处理命令都必须以#开始
 
B)在C程序中凡是以#开始的语句行都是预处理命令行
 
C)C程序在执行过程中对预处理命令行进行处理
 
D)以下是正确的宏定义#define IBM_PC
 
参考答案:C
 
8.2以下叙述中正确的是。
 
A)在程序的一行上可以出现多个有效的预处理命令行
 
B)使用带参的宏时,参数的类型应与宏定义时的一致
 
C)宏替换不占用运行时间,只占用编译时间
 
D)以下定义中C R是称为宏名的标识符
 
#define C R 045
 
参考答案:C
 
8.7以下有关宏替换的叙述不正确的是。
 
A)宏替换不占用运行时间
 
B)宏名无类型
 
C)宏替换只是字符替换
 
D)宏名必须用大写字母表示
 
参考答案:D
 
8.21在“文件包含”预处理语句的使用形式中,当#include后面的文件名用""括起时,寻找被包含文件的方式是。
 
A)直接按照系统设定的标准方式搜索目录
 
B)先在源程序所在目录搜索,再按照系统设定的标准方式搜索
 
C)仅仅搜索源程序所在目录
 
D)仅仅搜索当前目录
 
参考答案:B
 
8.22在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>括起时,寻找被包含文件的方式是。
 
A)仅仅搜索当前目录
 
B)仅仅搜索源程序所在目录
 
C)直接按系统设定的标准方式搜索目录
 
D)先在源程序所在目录搜索,再按系统设定的标准方式搜索
 
参考答案:C
 
8.25 C语言提供的预处理功能包括条件编译,其基本形式为:
 
#xxx标识符
 
程序段1
 
#else
 
程序段2
 
#endif
 
A)define或include B)ifdef或include
 
C)ifdef或ifndef或define D)ifdef或ifndef或if
 
参考答案:D
 
第九章指针
 
9.1选择题
 
9.1以下程序的运行结果是。
 
void sub(int x,int y,int*z)
 
{*z=y-x;}
 
main()
 
{int a,b,c;
 
sub(10,5,&a);
 
sub(7,a,&b);
 
sub(a,b,&c);
 
printf("%4d,%4d,%4d",a,b,c);
 
}
 
A)5,2,3 B)-5,-12,-7
 
C)-5,-12,-17 D)5,-2,-7
 
参考答案:A
 
9.2执行以下程序后,a的值为【1】,b的值为【2】。
 
main()
 
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
 
a=p1==&m;
 
b=(-*p1)/(*p2)+7;
 
printf("a=%d,b=%dn",a,b);
 
}
 
【1】A)-1 B)1 C)0 D)4
 
【2】A)5 B)6 C)7 D)10
 
参考答案:【1】C【2】C
 
9.3下面程序欲对两个整型变量的值进行交换,以下正确的说法是。
 
main()
 
{int a=10,b=20;
 
printf("(1)a=%d,b=%dn",a,b);
 
swap(&a,&b);
 
printf("(2)a=%d,b=%dn",a,b);
 
}
 
swap(int p,int q)
 
{int t;
 
t=p;p=q;q=t;}
 
A)该程序完全正确
 
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
 
C)该程序有错,只要将swap()函数中的形参p、q和变量t均定义为指针即可
 
D)以上说法都不正确
 
参考答案:D
 
*9.4有四组对指针变量进行操作的语句,以下判断正确的选项是。
 
(1)int*p,*q;q=p;
 
int a,*p,*q;p=q=&a;
 
(2)int a,*p,*q;q=&a;p=*q;
 
int a=20,*p;*p=a;
 
(3)int a=b=0,*p;p=&a;b=*p;
 
int a=20,*p,*q=&a;*p=*q;
 
(4)int a=20,*p,*q=&a;p=q;
 
int p,*q;q=&p;
 
A)正确:(1)不正确:(2),(3),(4)
 
B)正确:(1),(4)不正确:(2),(3)
 
C)正确:(3)不正确:(1),(2),(4)
 
D)以上结论都不正确
 
参考答案:D
 
参考分析:在四组操作中,完全正确的只有(4),对各组操作中出现的错误分析如下。
 
(1)int*p,*q;q=p;p没有指向一个确定的空间
 
int a,*p,*q;p=q=&a;
 
(2)int a,*p,*q;q=&a;p=*q;q没有指向确定空间,且*q不是地址值
 
int a=20,*p;*p=a;p没有指向一个确定的空间
 
(3)int a=b=0,*p;p=&a;b=*p;
 
int a=20,*p,*q=&a;*p=*q;p没有指向一个确定的空间
 
9.5以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是。
 
main()
 
{int*p,*q,a,b;
 
p=&a;
 
printf("input a:");
 
scanf("%d",*p);
 
 
}
 
A)*p表示的是指针变量p的地址
 
B)*p表示的是变量a的值,而不是变量a的地址
 
C)*p表示的是指针变量p的值
 
D)*p只能用来说明p是一个指针变量
 
参考答案:B
 
9.6以下程序有错,错误原因是。
 
main()
 
{int*p,i;char*q,ch;
 
p=&i;
 
q=&ch;
 
*p=40;
 
*p=*q;
 
 
}
 
A)p和q类型不一致,不能执行*p=*q;语句
 
B)*p中存放的是地址值,因此不能执行*p=40;语句
 
C)q没有指向具体的存储单元,所以*q没有实际意义
 
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句
 
参考答案:D
 
9.7有如下语句int a=10,b=20;*p1=&a,*p2=&b;如果让两个指针变量均指向b,正确的赋值方式是。
 
A)*p1=*p2;B)p1=p2;C)p1=*p2;D)*p1=*p2;
 
参考答案:B
 
9.8已有定义int k=2;int*p1,*p2;且p1,p2均指向变量k,下面不能正确执行的赋值语句是。
 
A)k=*p1+*p2;B)p2=k;C)p1=p2;D)k=*p1*(*p2);
 
参考答案:B
 
9.9变量的指针,其含义是指变量的。
 
A)值B)地址C)名D)一个标志
 
参考答案:B
 
9.10若已定义int a;下面对(1)(2)两个语句的正确解释是。
 
(1)int*p=&a;(2)*p=a;
 
A)语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值
 
B)(1)和(2)语句的执行结果,都是把变量a的地址赋给指针变量p
 
C)(1)在对p进行说明的同时进行初始化,使p指向a
 
(2)将变量a的值赋给指针变量p
 
D)(1)在对p进行说明的同时进行初始化,使p指向a
 
(2)将变量a的值赋给*p
 
参考答案:D
 
9.11若有语句int a=4,*p=&a;下面均代表地址的一组选项是。
 
A)a,p,*&a B)*&a,&a,*p C)*&p,*p,&a D)&a,&*p,p
 
参考答案:D
 
9.12已有说明float f=3.14,*p;若让p指向f,则正确的赋值语句是。
 
A)p=f;B)p=&f;C)*p=f;D)*p=&m
 
参考答案:B
 
9.13若有说明int*p,m=5,n;则以下正确的程序段是。
 
A)p=&n;B)p=&n;
 
scanf("%d",&p);scanf("%d",*p);
 
C)scanf("%d",&n);D)p=&n;
 
*p=n;*p=m;
 
参考答案:D
 
9.14若有说明int*p1,*p2,m=5,n;以下正确的程序段是。
 
A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;
 
C)p1=&m;p2=p1;D)p1=&m;*p2=*p1;
 
参考答案:C
 
9.15已有变量定义和函数调用语句int a=25;print_value(&a);下面函数输出的正确结果是。
 
void print_value(int*x)
 
{printf("%dn",++*x);}
 
A)23 B)24 C)25 D)26
 
参考答案:D
 
9.16下面判断正确的是C。
 
A)char*a="china";等价于char*a;*a="china";
 
B)char str[10]={"china"};等价于char str[10];str[]="china";
 
C)char*s="china";等价于char*s;s="china";
 
D)char c[6]="china",d[6]="china";等价于char c[6]=d[6]="china";
 
9.17设char*s="ta17bc";则指针变量s指向的字符串所占的字节数是。
 
A)9 B)5 C)6 D)7
 
参考答案:C
 
参考分析:字符串的串长为5,但字符串占用6个字节的空间(含一个'')。
 
9.18下面程序段中,for循环的执行次数是。
 
char*s="ta18bc";
 
for(;*s!='';s++)printf("*");
 
A)9 B)5 C)6 D)7
 
参考答案:C
 
9.19下面能正确进行字符串赋值操作的是。
 
A)char s[5]={"ABCDE"};B)char s[5]={'A','B','C','D','E'};
 
C)char*s;s="ABCDE";D)char*s;scanf("%s",s);
 
参考答案:C
 
9.20下面程序段的运行结果是。
 
char*s="abcde";
 
s+=2;
 
printf("%d",s);
 
A)ced B)字符'c'C)字符'c'的地址D)无确定的输出结果
 
参考答案:C
 
9.21设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。
 
A)c=*p1+*p2;B)p2=c;C)p1=p2;D)c=*p1*(*p2);
 
9.22设有下面的程序段,则下列正确的是。
 
char s[]="china";char*p;p=s;
 
A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等
 
C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等
 
参考答案:D
 
9.23下面程序段的运行结果是。
 
char*format="%s,a=%d,b=%dn";
 
int a=1,b=10;
 
a+=b;
 
printf(format,"a+=b",a,b);
 
A)for,"a+=b",ab B)format,"a+=b"C)a+=b,a=11,b=10 D)以上结果都不对
 
参考答案:C
 
9.24下面程序段的运行结果是________。
 
char*p="%d,a=%d,b=%dn";
 
int a=111,b=10,c;
 
c=a%b;p+=3;
 
printf(p,c,a,b);
 
A)1,a=111,b=10 B)a=1,b=111 C)a=111,b=10 D)以上结果都不对
 
参考答案:B
 
9.31以下与库函数strcpy(char*p1,char*p2)功能不等的程序段是。
 
A)strcpy1(char*p1,char*p2)
 
{while((*p1++=*p2++)!='');}
 
B)strcpy2(char*p1,char*p2)
 
{while((*p1=*p2)!=''){p1++;p2++;}}
 
C)strcpy3(char*p1,char*p2)
 
{while(*p1++=*p2++);}
 
D)strcpy4(char*p1,char*p2)
 
{while(*p2)*p1++=*p2++;}
 
参考答案:D
 
9.32以下与库函数strcmp(char*s,char*t)的功能相等的程序段是。
 
A)strcmp1(char*s,char*t)
 
{for(;*s++==*t++;)
 
if(*s=='')return 0;
 
return(*s-*t);}
 
B)strcmp2(char*s,char*t)
 
{for(;*s++==*t++;)
 
if(!*s)return 0;
 
return(*s-*t);}
 
C)strcmp3(char*s,char*t)
 
{for(;*t==*s;)
 
{if(!*t)return 0;t++;s++;}
 
return(*s-*t);}
 
D)strcmp4(char*s,char*t)
 
{for(;*s==*t;s++,t++)
 
if(!*s)return 0;
 
return(*t-*s);}
 
参考答案:C
 
9.39下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。
 
#include
 
main()
 
{char*p,s[6];int n;
 
gets(p);
 
n=【1】;
 
while(【2】!='')n=n*8+*p-'0';
 
printf("%dn",n);
 
}
 
【1】A)0 B)*p C)*p-'0'D)*p+'0'
 
【2】A)*p B)*p++C)*(++p)D)p
 
参考答案:【1】C【2】C
 
9.40下面程序的功能是统计子串sub在母串中出现的次数。请选择填空。
 
#include
 
main()
 
{char str[80],sub[80];
 
int n;
 
gets(str);gets(sub);
 
printf("%dn",count(str,sub));
 
}
 
int count(char*str,char*sub)
 
{int i,j,k,num=0;
 
for(i=0;【1】;i++)
 
for(【2】,k=0;sub[k]==str[j];k++,j++)
 
if(sub[【3】])==''){num++;break;}
 
return num;
 
}
 
【1】A)str<i>==sub<i>B)str<i>!=''C)str<i>==''D)str<i>>sub<i>
 
【2】A)j=i+1 B)j=i C)j=0 D)j=1
 
【3】A)k B)k++C)k+1 D)++k
 
参考答案:【1】C应该为B【2】B【3】A应该为C
 
9.41下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。请选择填空。
 
#include
 
main()
 
{char str[80],*p,max,*q;
 
p=str;gets(p);max=*(p++);
 
while(*p!='')
 
{if(max<*p){max=*p;【1】;}
 
p++;
 
}
 
p=q;
 
while(【2】){*p=*(p-1);【3】;}
 
*p=max;
 
puts(p);
 
}
 
【1】A)p++B)p=q C)q=p D)q++
 
【2】A)p>str B)p>=str C)*p>str[0]D)*p>=str[0]
 
【3】A)p++B)str--C)p--D)i--
 
参考答案:【1】C【2】A【3】C
 
9.53下面程序的运行结果是________。
 
#include"stdio.h"
 
#include"string.h"
 
main()
 
{char*s1="AbDeG";
 
char*s2="AbdEg";
 
s1+=2;s2+=2;
 
printf"%dn",strcmp(s1,s2));
 
}
 
A)正数B)负数C)零D)不确定的值
 
参考答案:B
 
9.68若有定义:int(*p)[4];则标识符p C。
 
A)是一个指向整型变量的指针
 
B)是一个指针数组名
 
C)是一个指针,它指向一个含有四个整型元素的一维数组
 
D)定义不合法
 
9.74若有定义:int*p[4];则标识符p B。
 
A)是一个指向整型变量的指针
 
B)是一个指针数组名
 
C)是一个指针,它指向一个含有四个整型元素的一维数组
 
D)定义不合法
 
9.103语句int(*ptr)();的含义是C。
 
A)ptr是指向一维数组的指针变量
 
B)ptr是指向int型数据的指针变量
 
C)ptr是指向函数的指针,该函数返回一个int型数据
 
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
 
9.2填空题
 
9.117下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出,请分析程序填空。
 
int i;
 
char s[80],*p;
 
for(i=0;i<79;i++)
 
{s<i>=getchar();
 
if(s<i>=='n')break;
 
}
 
s<i>=【1】;
 
p=【2】;
 
while(*p)putchar(*p++);
 
参考答案:【1】''【2】s
 
9.133下面程序的功能是检查给定字符串s是否满足下列两个条件:
 
a)字符串s中左括号”(”的个数与右括号”)”的个数相同;
 
b)从字符串s的首字符起顺序查找右括号”)”的个数在任何时候均不超过所遇到的左括号”(”的个数;
 
若字符串同时满足上述两个条件,函数返回1,否则返回0
 
#include"stdio.h"
 
main()
 
{char c[80];
 
int d;
 
printf("Input a string:");
 
gets(c);
 
d=check(c);
 
printf("%s",d?"Yes":"No");
 
}
 
check(char*s)
 
{int l=0,r=0;
 
while(*s!='')
 
{if(*s=='(')l++;
 
else if(*s==')')
 
{r++;if(【l<r】)p=""}
 
【s++】;
 
}
 
return(【l==r】);
 
}
 
9.134下面程序的功能是将十进制数转换成十六进制数。
 
(注释:'0'和'A'的ASCII码值为48,65)
 
#include"stdio.h"
 
#include"string.h"
 
main()
 
{int a,i;
 
char s[20];
 
printf("Input a:n");
 
scanf("%d",&a);
 
c10_16(s,a);
 
for(i=【strlen(s)-1】;i>=0;i--)printf("%c",*(s+i));
 
printf("n");
 
}
 
c10_16(char*p,int b)
 
{int j;
 
while(b>0)
 
{j=b%16;
 
if(【j<10】)*p=j+48;
 
else*p=j+55;
 
b=b/16;
 
【p++】;
 
}
 
*p='';
 
}
 
9.135下面程序是判断输入的字符串是否是”回文”,(顺读和倒读都一样的字符串,称”回文”,如level)。
 
#include"stdio.h"
 
#include"string.h"
 
main()
 
{char s[81],*p1,*p2;
 
int n;
 
printf("Input a string:");
 
gets(s);
 
n=strlen(s);
 
p1=s;
 
p2=【s+n-1】;
 
while(【p1<p2】)<p="">
 
{if(*p1!=*p2)break;
 
else{p1++;【p2--】;}
 
}
 
if(p1<p2)p=""printf(?non?);
 
else printf("Yesn");
 
}
 
9.139当运行以下程序时,从键盘输入this is a text.,则下面程序的运行结果是________。
 
#include"stdio.h"
 
#define TURE 1
 
#define FALSE 0
 
int change(char*c,int status);
 
main()
 
{int flage=TRUE;
 
char ch;
 
do
 
{ch=getchar();
 
flag=change(&ch,flag);
 
putchar(ch);
 
}while(ch!='.');
 
printf("n");
 
}
 
int change(char*c,int status)
 
{if(*c=='□'return TRUE;
 
else
 
{if(status&&*c<='z'&&*c>='a')*c+='A'-'a';
 
return FALSE;
 
}
 
}
 
结果:This Is A Text.
 
9.144下面程序的运行结果是________。
 
#include"stdio.h"
 
#define SIZE 12
 
main()
 
{char s[SIZE];int i;
 
for(i=0;i<size;i++)<p="">
 
s<i>='A'+i+32;
 
sub(s,7,SIZE-1);
 
for(i=0;i<size;i++)<p="">
 
printf("%c",s<i>;
 
printf("n");
 
}
 
sub(char*a,int t1,int t2)
 
{char ch;
 
while(t1<t2)<p="">
 
{ch=*(a+t1);
 
*(a+t1)=*(a+t2);
 
*(a+t2)=ch;
 
t1++;t2--;
 
}
 
}
 
参考答案:abcdefglkjih
 
}
 
9.145下面程序的运行结果是。
 
#include
 
main()
 
{char a[80],b[80],*p="aAbcdDefgGH";
 
int i=0,j=0;
 
while(*p!='')
 
{if(*p>='a'&&*p<='z')
 
{a<i>=*p;i++;}
 
else
 
{b[j]=*p;j++;}
 
p++;
 
}
 
a<i>=b[j]='';
 
puts(a);puts(b);
 
}
 
参考答案:
 
abcdefg
 
ADGH
 
湖北普通专升本中C语言功能非常强大、应用广泛,一旦同学们掌握了后,再自学其他语言就显得轻而易举了。
 
编辑推荐
 
2022年湖北普通专升本护理学(给药、静脉输液输血)模拟题
2022年湖北普通专升本护理学(胃肠活动、泌尿系统)模拟题
2022专升本各种真题资料包,限时免费领取!
真题资料包

专升本备考资料免费领

填写信息后即可免费领取以下
专升本备考大礼包

  • 专升本《大学英语》直播课+网课

    资深老师千人直播课内容:大学英语语法课程

  • 专升本内部在线刷题软件

    内部在线刷题系统,无限模拟刷题考试

  • 最新专升本招生专业对照表(公办/民办)

    汇总湖北所有专升本高校招生专业+计划+解析

  • 同城/同校/同专业考生交流群

    内部考生交流微信群免费进,交友学习两不误

  • 专升本面授体验课一节

    可免费领取一节专升本体验课

转载请注明:文章转载自 www.hbptzsbw.com
本文地址:https://www.hbptzsbw.com/test/10692.html
普通专升本 其他专升本
湖北普通专升本网交流群

扫一扫加入微信交流群

与考生自由互动、并且能直接与资深老师进行交流、解答
湖北普通专升本网公众号

扫一扫加入微信公众号

关注湖北普通专升本网微信公众号,回复“福利”即可申请学费优惠
微信交流群
湖北普通专升本网微信交流群

扫一扫,专升本网送神秘大礼

全国服务热线
027-86646545   

在线咨询
联系我们
扫一扫
湖北普通专升本网微信公众号

扫一扫,专升本网送神秘大礼

全国服务热线
027-86646545   

返回顶部
关于我们 在线报名 网站地图 联系我们

版权所有 ©2006-2022 武汉市洪山区求学问校职业培训学校有限公司

本站地址:武汉市洪山区珞喻路718号春和天地大厦11层(求学问校培训学校)

ICP备案号:鄂ICP备14009716号-7

公安备案号:42011102001594