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=%f\n",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-->%c\n",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 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 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,%d\n",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("%d\n",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=%d\n",i,j,x); } fun(int i,int j) {int x=7; printf("i=%d;j=%d;x=%d\n",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 %d\n",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 %d\n",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.3f\n",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=%f\n",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=%d\n",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=%d\n",x,y,z); add(x,y,z); printf("(3)x=%d y=%d z=%d\n",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=%d\n",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("\n\n%d!=%lg\n\n",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):%d\n",fact(5)); printf("FACT(1):%d\n",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:%d\n",【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=%d\n",k); } 参考答案:【1】计算斐波那契数列第7项的值 【2】k=13 7.56以下程序的运行结果是 。 main() {int i=5; printf("%d\n",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=%f\n",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=%d\n",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 {【1】; k+=2; } } fav2(float s[],float w[]) {float sum,k,i; sum=0.0; for(k=0,i=0;i {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 【1】; for(i=p-1;i 【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] 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 %d\n",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.2f\n",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 {a[i][1]=1;a[i][i]=1;} for(【1】;i for(j=2;【2】;j++) a[i][j]=【3】+a[i-1][j]; } 参考答案:【1】i=3 【2】j 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 x[0][j]=(n-j)*(n-j); for(i=1;i {for(j=0;j 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 {printf("\n"); for(j=0;j printf("%4f",(*(a+i))[j]); /*错误语句【2】*/ } } 参考答案:【1】for(j=0;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,%d\n",a,b,c); a+=c; printf("second:%d,%d,%d\n",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,%d\n",i,k); } fun(int m) {m+=k; k+=m; {char k='B'; printf("(2)%d\n",k-'A'); } printf("(3)%d,%d\n",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,%d\n",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=%d\n",i); reset(i=i/2); printf("i=%d\n",i); reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); } workover(int i) {i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",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=%d\n",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("%d\n",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=%d\t",++x); } funy() {static int y=0; printf("y=%d\n",++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=%2d\n",x,y,n); func(); printf("MAIN:x=%2d y=%2d n=%2d\n",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=%2d\n",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!=%d\n",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=%d\n",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=%d\n",a,b); swap(&a,&b); printf("(2)a=%d,b=%d\n",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("%d\n",++*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="\ta\017bc";则指针变量s指向的字符串所占的字节数是 。 A)9 B)5 C)6 D)7 参考答案:C 参考分析:字符串的串长为5,但字符串占用6个字节的空间(含一个'\0')。 9.18 下面程序段中,for循环的执行次数是 。 char *s="\ta\018bc"; for( ;*s!='\0';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=%d\n"; 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=%d\n"; 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++)!='\0');} B)strcpy2(char *p1,char *p2) {while ((*p1=*p2)!='\0'){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= ='\0') 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】!='\0') n=n*8+*p-'0'; printf("%d\n",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("%d\n",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】])=='\0') {num++;break;} return num; } 【1】A)str[i]==sub[i] B)str[i]!='\0' C)str[i]=='\0' 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!='\0') {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"%d\n",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】'\0' 【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!='\0') {if(*s= ='(') l++; else if (*s= =')') {r++; if (【l 【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='\0'; } 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 {if (*p1!=*p2) break; else {p1++;【p2--】;} } if (p1 else printf("Yes\n"); } 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 s[i]='A'+i+32; sub(s,7,SIZE-1); for (i=0;i printf("%c",s[i]; printf("\n"); } sub(char *a,int t1,int t2) { char ch; while (t1 {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!='\0') { if (*p>='a'&&*p<='z') {a[i]=*p;i++;} else {b[j]=*p;j++;} p++; } a[i]=b[j]='\0'; puts(a);puts(b); } 参考答案: abcdefg ADGH 以上就是关于2022年湖北专升本C语言程序设计模拟题(3)的全部内容了,如果你还有专升本相关的疑惑(如专升本报名、考试动态、院校招生简章、统考动态、湖南专升本院校、历年真题、考试大纲、专升本等相关信息),可以在文章下方留下你的联系方式,老师会第一时间联系到你,为你答疑解惑哦! 部分内容来源于网络转载、学生投稿,如有侵权或对本站有任何意见、建议或者投诉,请联系邮箱(1296178999@qq.com)反馈。
未经本站授权,不得转载、摘编、复制或者建立镜像, 如有违反,本站将追究法律责任!