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

作业5 - 参考答案

选择题

1
2
3
4
5
6
7
8
9
10
1.若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是()。  
scanf("%f %f %f", &a, &b, &c);
A、10.0,22.0,33.0
B、10.0
22.0 33.0
C、10 22
33
D、10
22
33

答案:A

1
2
3
4
5
6
7
2.下列程序段的输出结果为()。
float x=213.82631;
printf("%3d",(int)x);
A、3.8
B、213.82
C、213
D、213.83

答案:C

1
2
3
4
5
3.可在C程序中用作标识符的一组标识符是( )。
A、2c DO SiG
B、void Define WORD
C、as_b3 _123 If
D、For -abc case

答案:C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4.若执行以下程序时从键盘上输入34,则输出结果是( )。
#include<stdio.h>
int main()
{
int a,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a<b) s=b;
s*=s;
printf("%d\n",s);
return 0;
}
A、14
B、16
C、20
D、18

答案:B

1
2
3
4
5
6
7
8
9
10
5.
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
6.C语言的switch语句中case后(  )。
A、可为任何量或表达式
B、只能为常量或常量表达式
C、可为常量表达式或有确定值的变量及表达式
D、只能为常量

答案:B

1
2
3
4
5
6
7
8
7.以下程序段的输出结果为()。 
for(i=4;i>1;i--)
for(j=1;j<i;j++)
putchar('#');
A、无
B、######
C、###
D、#

答案:B

1
2
3
4
5
6
8.在C语言中,为了结束由while语句构成的循环,while后一对圆括号
中表达式的值应该为()。
A、1
B、0
C、True
D、非0

答案:B

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

答案:D

1
2
3
4
5
10.以下能正确定义数组并正确赋初值的语句是()。
A、int c[2][]={{1,2},{3,4}};
B、int N=5,b[N][N];
C、int a[1][2]={{1},{3}};
D、int d[3][2]={{1,2},{34}};

答案:D

1
2
3
4
5
11.int a[10];合法的数组元素的最小下标值为()。
A、1
B、0
C、10
D、9

答案:B

1
2
3
4
5
6
7
8
9
12.有如下定义语句:
char a[10];
如下选项中,不能将字符串"abc"存储在数组a中的是()。
A、strcat(a,"abc");
B、int i;
for(i=0;i<3;i++)
a[i]=i+97;
C、strcpy(a,"abc");
D、a="abc";

答案:D

1
2
3
4
5
13.函数调用:strcat(strcpy(str1,str2),str3)的功能是()。
A、将串str2连接到串str1之后再将串str1复制到串str3中
B、将串str1复制到串str2中后再连接到串str3之后
C、将串str2复制到串str1中后再将串str3连接到串str1之后
D、将串str1连接到串str2之后再复制到串str3之后

答案:C

1
2
3
4
5
14.以下语法中正确的是()。
A、C语言程序中的main函数必须放在程序的开始部分
B、C语言程序总是从main开始执行
C、在C语言程序中,要调用的函数必须在main函数中定义
D、C语言程序总是从第一个定义的函数开始执行

答案:B

1
2
3
4
5
15.下列说法不正确的是()。
A、在一个函数内部,可以在复合语句中定义变量,这些变量只在复合语句中有效
B、形式参数是局部变量
C、不同函数中,可以使用相同名字的变量
D、主函数main中定义的变量在整个文件或程序中有效

答案:D

1
2
3
4
5
16.C语言程序中必须有的函数是()。
A、#include "stdio.h"
B、main()
C、printf()
D、scanf()

答案:B

1
2
3
4
5
17.若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。
A、*p=*q;
B、n=*q;
C、p=n;
D、p=q;

答案:C

1
2
3
4
5
18.若已定义x为int类型变量,下列语句中定义指针变量p的正确语句是(  )。
A、int *p=&x;
B、int p=&x;
C、*p=*x;
D、int *p=x;

答案:A

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
19.
#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
6
7
20.若已有定义:
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = a, i;
其中0≤i≤9,则对a数组元素的引用不正确的是( )。
A、a[p - a]
B、*(&a[i])
C、p[i]
D、*(*(a+i))

答案:D

程序填空

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
21.本程序的功能是:假设已有5个整数按升序存放在数组a中,从键盘输入
一个任意的整数n,将它存放到数组a中,使数组中的6个整数仍按升序存放。
输入:10
输出: 3 5 6 7 9 10
输入:4
输出: 3 4 5 6 7 9
输入:1
输出: 1 3 5 6 7 9
/*********Begin**********/
#include<stdio.h>
int main()
{ int a[6]={3,5,6,7,9},i,n;
scanf("%d",____&n____);
for(i=4;___i>=0_____;i--)
if(n>=a[i])
{
a[i+1]=n;
break;
}
else
a[i+1]=a[i];
if(i<0)
____a[0]____=n;
for(i=0;i<6;i++)
printf("%3d",a[i]);
printf("\n");
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
22.本程序的功能是:输出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
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
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
33
26.概率论中,从m个不同的数中抽取n个数的组合(m>=n)。
即 C(m,n)=m!/(n!*(m-n)!),求阶乘的功能用函数fact()实现。

如下为测试结果:
1行输入:5 3
2行输出结果:10

#include<stdio.h>
double fact(int n) //函数首部,n为形参
{
/*********Begin**********/
int i;
double f=1; // 阶乘变量赋初值
for(i=1;i<=n;i++) //计算阶乘
f=f*i;
return f; // 返回阶乘
/********** End **********/
}
int main()
{
int m,n;
printf("请输入m,n:");
scanf("%d%d",&m,&n);
printf("C(%d,%d)=%.0f\n",m,n,fact(m)/(fact(n)*fact(m-n)));
//如下内容请勿修改
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
27.函数fun()功能:判断m是否为素数。如果m是素数,函数fun返回1,否则返回0

在主函数main()中调用该函数,验证其功能,输出100~200之间的所有素数。

#include "stdio.h"
int fun(int m)
{
/*********Begin**********/
int i,k=1;
if(m<=1)
k=0;
for(i=2;i<m;i++)
if(m%i==0)
k=0;
return k;
/********** End **********/
}
int main()
{
int m,k=0;
for(m=100;m<200;m++)
if(fun(m))
{
printf("%4d",m);
k++;
if(k%5==0)
printf("\n");
}
printf("k=%d\n",k);
//以下内容请勿改动
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行输入两个整数 :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()
{
//......
}