C是一门学习逻辑、程序算法、算法实现很好的教程,通过
湖北普通专升本C语言的学习,同学们可以了解程序的设计编码的过程,下面是一套专升本C语言程序设计模拟题,感兴趣的同学们可以做一做。
第七章函数
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语言功能非常强大、应用广泛,一旦同学们掌握了后,再自学其他语言就显得轻而易举了。
编辑推荐