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

实验5 - 参考答案

选择题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.以下程序的执行结果是()。
#include<stdio.h>
int main()
{
int w=1,x=2,y=3,z=4;
w=(w<x)?x:w;
w=(w<y)?y:w;
w=(w<z)?z:w;
printf("%d",w);
return 0;
}
A、2
B、4
C、3
D、1

答案:B

1
2
3
4
5
6
7
8
2.下列程序段的输出结果是()。
char c1=97,c2=98;
printf("%d %c",c1,c2);

A、a b
B、97 98
C、97 b
D、a 98

答案:C

1
2
3
4
5
3.如下选项中不属于C语言程序运算符的是()。
A、!=
B、sizeof
C、printf
D、&&

答案:C

1
2
3
4
5
4.判断char型变量c是否为大写字母的表达式是( )。
A、'A'<=c<='Z'
B、 ('A'<=c)AND('Z'>=c)
C、 (c>='A')&&(c<='Z')
D、(c>='A')&(c<='Z')

答案:C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
5.下面的程序片断所表示的数学函数关系是(  )。
y = 0;
if(x != 0)
y = 1;
if(x > 0)
y = 1;
else
y = 0;

A、 y = 0 (x<0)
y = 0 (x=0)
y = 1 (x>0)
B、 y = 1 (x<0)
y = -1 (x=0)
y = 0 (x>0)
C、 y = -1 (x<0)
y = 1 (x=0)
y = 0 (x>0)
D、 y = -1 (x<0)
y = 0 (x=0)
y = 1 (x>0)

答案:A

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

答案:B

1
2
3
4
5
7.以下描述中正确的是()。
A、在 do-while 循环体中,一定要有能使 while 后面表达式的值变为零("假")的操作
B、由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
C、do-while 循环中,根据情况可以省略 while
D、do-while 循环由do开始,用while结束,在 while(表达式)后面不能写分号

答案:A

1
2
3
4
5
8.如下有关 for 循环的描述中,正确的是()。
A、for 循环只能用于循环次数已经确定的情况
B、for 循环是先执行循环循环体语句,后判断表达式
C、在 for 循环中,不能用 break 语句跳出循环体
D、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

答案:D

1
2
3
4
5
9.for(表达式1; ;表达式3) 可理解为()。
A、for(表达式1;1;表达式3)
B、for(表达式1;表达式1;表达式3)
C、for(表达式1;0;表达式3)
D、for(表达式1;表达式3;表达式3)

答案:A

1
2
3
4
5
6
7
10.
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
11.若二维数组a有m列,则在a[i][j]之前的元素个数为()。
A、j*m+i
B、i*m+j
C、i*m+j+1
D、i*m+j-1

答案:B

1
2
3
4
5
12.以下数组定义中不正确的是()。
A、int a[2][3];
B、int b[][3]={0,1,2,3};
C、int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
D、int c[100][100]={0};

答案:C

1
2
3
4
5
13.下列定义不正确的是()。
A、#define PI 3.141592
B、#define S 345
C、static char c;
D、int max(x,y); { }

答案:
D

1
2
3
4
5
14.与实际参数为实型数组名相对应的形式参数不可以定义为()。
A、float a;
B、float (*a)[3];
C、float a[];
D、float *a;

答案:
A

1
2
3
4
5
15.若用数组名作为函数的实参,传递给形参的是()。
A、数组的首地址
B、数组元素的个数
C、数组中全部元素的值
D、数组第一个元素的值

答案:
A

1
2
3
4
5
16.以下正确的说法是
A、如果形参与实参的类型不一致,以实参类型为准
B、如果函数值的类型与返回值的类型不一致,以函数值类型为准
C、定义函数时,形参的类型说明可以在函数体内
D、return后面的表达式不能是函数

答案:
B

1
2
3
4
5
6
7
8
9
17.下列选项中正确的语句组是(  )。
A、char s[8];
s={"Beijing"};
B、char *s;
s="Beijing";
C、char s[8];
s="Beijing";
D、char *s;
s={"Beijing"};

答案:
B

1
2
3
4
5
18.若有说明:int i,j=2,*p=&i; 则能完成“i=j”功能的语句是( )。
A、i=**p;
B、i=*p;
C、*p=j;
D、i=&j;

答案:
C

1
2
3
4
5
6
7
8
9
10
11
12
19.下面程序的输出结果是
#include<stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));
return 0;
}
A、2
B、3
C、4
D、5

答案:
B

1
2
3
4
5
20.下列关于指针定义的描述,错误的是( )。
A、指针变量的类型与它所指向的变量类型一致
B、指针是一种变量,该变量用来存放某个变量的地址
C、指针变量的命名规则与标识符相同
D、指针是一种变量,该变量用来存放某个变量的值

答案:
D

程序填空

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21.本程序的功能是:利用顺序查找,在给定的数组中查找一个数是否存在,
若存在,输出该数首次出现的位置,若不存在则输出-1
输入:21
输出:3
输入:100
输出:-1
/*********Begin**********/
#include<stdio.h>
#define N 10
int main( )
{ int i,num;
int a[N]={23,57,21,58,90,55,66,88,98,67};
scanf("%d",&num);
for(___i=0___;i<=___N-1___ && a[i]!=num;i++);
if(i>=N)
printf("-1\n");
else
printf("%d\n", ___i+1___);
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
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
23.本程序的功能是,判断由012345 六个数字能组成多少个互不相同且无重复数字的三位数(最高位不能为0)?
输出结果:100

找出程序中的3处错误并直接修改,不得增删代码行。
/*********Begin**********/
#include<stdio.h>
int main()
{
int i,j,k,n;
for(i=0;i<=5;i++)
for(j=0;j<=5;j++)
for (k=0;k<=5;k++)
if(i!=k||i!=j||j!=k)
n++;
printf("%d\n",n);
return 0;
}
/********** End **********/

示例代码:
答案1:n=0
答案2:i=1
答案3:i!=k&&i!=j&&j!=k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
31
32
33
34
35
36
37
38
39
40
25.本程序中,fun()函数的功能是判断一个数n是否为完数,若是,
返回1,若不是返回0。完数定义:其真因子之和等于该数本身。

程序运行后,在main()函数中调用fun()函数进行判断,输出1000
以内的所有完数。

输出: 6 28 496

#include "stdio.h"
int fun(int n)
{
/*********Begin**********/
int s=0;
for(int i=1;i<=n/2;i++){
if(n%i==0){
s=s+i;
}
}
if(s==n)
return 1;
else
return 0;
/********** End **********/
}
int main()
{
for(int i=1;i<=1000;i++){
if(fun(i)){
printf("%4d", i);
}
}
//以下内容请勿改动
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
26.函数fun()的功能:计算1+2+3+...+n的和。

程序运行后,从键盘输入一个正整数,在main()函数中调用fun()函数验证其功能。
输入:100
输出:5050

#include "stdio.h"
int fun(int n)
{
/*********Begin**********/
int s=0;
for(int i=1;i<=n;i++){
s=s+i;
}
return s;
/********** End **********/
}

int main()
{
int m;
scanf("%d", &m);
printf("%d\n", fun(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
27.功能:有一个一维数组score,内放10个学生的成绩,用一
个函数average()求平均成绩。

例如:如果10个学生的成绩分别为928768569284
70659060 则平均成绩为:76.400000

#include "stdio.h"
float average (float array[],int n)
{
/*********Begin**********/
int i;
float aver,sum=0;
for(i=0;i<n;i++)
sum=sum+array[i];
aver=sum/n;
return aver;
/********** End **********/
}
int main()
{
float score[]={92,87,68,56,92,84,70,65,90,60};
printf(" %f\n",average (score,10));
//以下内容请勿改动
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
28.功能:用辗转相除法求两个整数的最大公约数。

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

#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()
{
//......
}