C语言程序设计实验课参考答案(2025-实验4)

实验4 - 参考答案

选择题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.下列程序的输出结果为()。
#include<stdio.h>
int main()
{
int y=10;
while(y--)
;
printf("y=%d\n",y);
return 0;
}
A、while构成无限循环
B、y=-1
C、y=0
D、y=1

答案:D

1
2
3
4
5
2.从键盘上输入字符时,不可使用的函数是()。
A、gets()
B、fread()
C、scanf()
D、getchar()

答案:B

1
2
3
4
5
3.已知i、j、k为int型变量,若从键盘输入:123<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是()。
A、scanf("%d %d %d",&i,&j,&k);
B、scanf("%d,%d,%d",&i,&j,&k);
C、scanf("%2d%2d%2d",&i,&j,&k);
D、scanf("i=%d,j=%d,k=%d",&i,&j,&k);

答案:B

1
2
3
4
5
6
7
8
9
4.
int a=3,b=2,c=1;
if(a>b>c) a=b;
else a=c;
则a的值为()。
A、0
B、2
C、1
D、3

答案:C

1
2
3
4
5
5.C语言的if语句嵌套时,ifelse的配对关系是()。
A、每个elseif的配对是任意的
B、每个else总是与最外层的if配对
C、每个else总是与它上面的最近的if配对
D、每个else总是与它上面的if配对

答案:C

1
2
3
4
5
6.C语言中,switch后的括号内表达式的值可以是(  )。
A、只能为整型和字符型
B、只能为整型
C、任何类型
D、只能为整型,字符型,实型

答案:A

1
2
3
4
5
6
7
8
9
10
11
12
7.
int t=0;
while(t=1)
{
……
}
关于上述代码,叙述中正确的是()。

A、循环控制表达式不合法
B、循环控制表达式的值为1
C、循环控制表达式的值为0
D、以上说法都不对

答案:B

1
2
3
4
5
8.在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的表达式是()。
A、(!E==0)
B、(E==0)
C、(E>0||E<0)
D、(E!=0)

答案:B

1
2
3
4
5
6
7
8
9
10
11
12
9.C语言中用于结构化程序设计的三种基本结构是()。
A、forwhiledo-while
B、顺序结构、选择结构、循环结构
C、ifswitchbreak
D、ifforcontinue
答案:B
```C
10.若有说明 int a[3][4];则a数组元素的非法引用是()。
A、a[1][3]
B、a[0][4]
C、a[4-2][0]
D、a[0][2*1]

答案:B

1
2
3
4
5
11.下列字符数组长度为5的是()。
A、char c[10]= {'h', 'a', 'b', 'c', 'd'};
B、char c[]= {'h', 'a', 'b', 'c', 'd', '\0'};
C、char c[]={'h', 'a', 'b', 'c', 'd'};
D、char c[6]= {'h', 'a', 'b', 'c', '\0' };

答案:C

1
2
3
4
5
12.char a[10];已正确定义,以下语句中不能从键盘上给a数组的所有元素输入值的语句是()。
A、scanf("%s",a);
B、for(i=0;i<10;i++) a[i]=getchar();
C、gets(a);
D、a=getchar();

答案:D

1
2
3
4
5
13.C语言规定,函数返回值的类型是由()。
A、调用该函数时的主调函数类型所决定
B、在定义该函数时所指定的函数类型所决定
C、return语句中的表达式类型所决定
D、调用该函数时系统临时决定

答案:B

1
2
3
4
5
14.以下正确的描述是:在C语言程序中()。
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数的调用均可以嵌套
D、函数的定义和函数的调用均不可以嵌套

答案:B

1
2
3
4
5
15.C程序的基本结构单位是
A、文件
B、表达式
C、函数
D、语句

答案:C

1
2
3
4
5
16.char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是()。
A、strcat(a1,a2);
B、strcat(a2,a1);
C、strcpy(a2,a1);
D、strcpy(a1,a2);

答案:B

1
2
3
4
5
17.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(  )。
A、c=*p1+2;
B、p2=c;
C、p1=p2;
D、*p1=*p2;

答案:B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
18.
#include<stdio.h>
int main()
{
int x=3,y;
int *p=&x;
y=*p++;
printf("%d %d\n",x,y);
return 0;
}
上述语句执行后的输出结果为( )。
A、3 3
B、3 4
C、4 3
D、4 4

答案:A

1
2
3
4
5
19.下面判断正确的是()。
A、char *s="china";等价于 char *s;s="china";
B、char str[10]={"china"};等价于char str[10];str[]={"china"};
C、char *a="china";等价于 char *a;*a="china";
D、char c[4]="abc",d[4]="abc";等价于 char c[4]=d[4]="abc";

答案:A

1
2
3
4
5
20.字符串指针变量中存入的是(  )。
A、第一个字符
B、字符串
C、字符串的首地址
D、字符串变量

答案:C

程序填空

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
21.本程序的功能是:输出45列的二维数组a中各行元素的最大值。
输出结果为:
95
98
96
99
/*********Begin**********/
#include<stdio.h>
int main()
{ int max;
int a[4][5]={{23,95,21,58,90},
{55,66,88,98,67},
{96,78,87,25,69},
{88,23,78,65,99}};
for(int i=0;i<4;i++){
max=____a[i][0]_____;
for(int j=1;j<5;j++){
if(a[i][j]>max){
max=____a[i][j]_____;
}
}
printf("%d\n",____max_____);
}
return 0;
}
/********** End **********/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
22.本程序的功能是:将一维数组中的数据重新排序,排序结果是
所有奇数按原顺序靠左,所有偶数按原顺序的逆序靠右。
假如原始数据为:3 1 6 7 9 7 2 6 8 9
则重新排序后为:3 1 7 9 7 9 8 6 2 6

/*********Begin**********/
#include<stdio.h>
#include<string.h>
int main()
{
int a[10]={3,1,6,7,9,7,2,6,8,9};
int i=0,j=9,temp;
while(i<=j){
if(____a[i]%2==0____){
temp=a[i];
for(int k=i;k<j;k++){
a[k]=____a[k+1]____;
}
a[j]=temp;
j--;
}
else
____i++____;
}
for(int i=0;i<10;i++){
printf("%2d",a[i]);
}
return 0;
}
/********** End **********/

程序改错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
23.本程序的功能是对一维数组按升序排序,输出排序结果。 
输出结果:
10 28 32 44 53 66 71 77 89 95
找出程序中的3处错误并直接修改,不得增删代码行。
/*********Begin**********/
#include<stdio.h>
int main()
{
int i,j,t,p,a[10]={10,71,32,53,44,95,66,77,28,89};
for(i=0;i<9;i++){
p=0;
for(j=i+1;j<10;j++)
if(a[p]>a[j])
p==j;
if(i!=p){
t=a[p];
a[p]=a[j];
a[i]=t;
}
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
return 0;
}
/********** End **********/

示例代码:
答案1:p=i
答案2:a[p]=a[i];
答案3:p=j

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
24.本程序的功能是从键盘输入任意位数的正整数,输出其逆序数。
输入:35896721
输出:12769853
找出程序中的3处错误并直接修改,不得增删代码行。
/*********Begin**********/
#include<stdio.h>
int main()
{
long n,s;
scanf("%ld",n);
if(n<0) n=-n;
do
{
s=s*10+n/10;
n=n/10;
}while(n!=0);
printf("%ld\n",s);
return 0;
}
/********** End **********/

示例代码:
答案1:s=0;
答案2:&n
答案3:%10

程序设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
25.功能:完善函数fact,用递归调用的方法求 n!。 
程序运行后,按行输出1~9的阶乘。

#include "stdio.h"
long fact(int n)
{
/*********Begin**********/
long f;
if(n==0||n==1 )
f=1;
else
f=n*fact(n-1);
return f;
/********** End **********/
}
int main()
{
int m,k=0;
for(m=1;m<10;m++)
printf("%d!=%d\n",m,fact(m));
//以下内容请勿擅自修改
void TestFunc();
TestFunc();
return 0;
}

void TestFunc()
{
//....
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
26.函数gcd的功能:用递归的方法求两个整数的最大公约数。

递归思路:
如果n等于0,函数返回m,m即为最大公约数,
如果m除以n的余数不等于0,函数返回 n 和 m%n 的最大公约数。

测试界面如下:
1行输入两个整数
2行显示运行结果,

#include "stdio.h"
int gcd(int m,int n)
{
/*********Begin**********/
if(n==0){
return m;
}
else {
return gcd(n,m%n);
}
/********** End **********/
}

int main()
{
int m,n,result;
scanf("%d%d",&m,&n);
result=gcd(m,n);
printf("the gcd is %d\n",result);
//以下内容请勿修改
void TestFunc();
TestFunc();
return 0;
}
void TestFunc()
{
//......
}

综合设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
27.功能:用辗转相除法求两个整数的最大公约数。

测试界面如下:
1行输入两个整数 :100 28
2行显示运行结果 :the gcd is 4

#include "stdio.h"
int gcd(int m,int n)
{
/*********Begin**********/
int r;
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
/********** End **********/
}
int main()
{
int m,n,result;
scanf("%d%d",&m,&n);
result=gcd(m,n);
printf("the gcd is %d\n",result);
//以下内容请勿修改
void TestFunc();
TestFunc();
return 0;
}
void TestFunc()
{
//...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
28.功能:请编写fun()函数,判断一个三位数是否是"水仙花数"
若是,函数返回1,若不是,函数返回0
说明:所谓"水仙花数"是指一3位数,其各位数字立方和
等于该数本身。
例如:153是一个水仙花数,因为153=13+53+33
在main函数中从键盘输入一个三位数,并调用函数fun()进行判断,
若是水仙花数,输出"Yes",若不是输出"No"

#include "stdio.h"
int fun(int n)
{
/*********Begin**********/
int a,b,c;
a=n/100;
b=n/10%10;
c=n%10;
if(n==a*a*a+b*b*b+c*c*c){
return 1;
} else
return 0;
/********** End **********/
}
int main()
{
int n,flag;
scanf("%d",&n);
flag=fun(n);
if(flag)
printf("Yes\n");
else
printf("No\n");
//以下内容请勿改动
void TestFunc();
TestFunc();
return 0;
}
void TestFunc()
{
//......
}