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

作业4 - 参考答案

选择题

1
2
3
4
5
6
7
1. 若k为int型变量,则以下程序段的执行结果是()。
k=8567;
printf("|%6d|\n",k);
A、|%6D|
B、| 8567|
C、|8567 |
D、格式描述符不合法,输出不确定值

答案:B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2. 下列程序段的输出为结果()。
#include<stdio.h>
int main()
{
int k,g;
k=011;
g=33;
printf("%d\t",k);
printf("%x\n",g);
return 0;
}
A、11 33
B、11
33
C、9 21
D、9
21

答案:C

1
2
3
4
5
3. 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是()。
A、a=a+b, b=a-b, a=a-b;
B、a=t; t=b; b=a;
C、t=a; a=b; b=t;
D、t=b; b=a; a=t;

答案: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
7
8
9
10
11
12
13
14
15
16
6.有如下程序段:
int main()
{
float x=2.0,y;
if(x<0.0) y=0.0;
else
if(x<10.0) y=1.0/x;
else y=1.0;
printf("%f\n",y);
return 0;
}
该程序的输出结果是( )。
A、0.500000
B、0.250000
C、1.000000
D、0.000000

答案:A

1
2
3
4
5
6
7
8
7.若i为整型变量,则以下循环执行次数是()。
for(i=2;i==0;)
printf("%d",i--);

A、0
B、1
C、2
D、无限次

答案:A

1
2
3
4
5
6
7
8.设j和k都是int类型,则for循环语句()。
for(j=0,k=0; j<=9 && k!=876; j++)
scanf("%d",&k);
A、循环体一次也不执行
B、最多执行9
C、是无限循环
D、最多执行10

答案:D

1
2
3
4
5
6
9.以下for循环的执行次数是()。
for(x=0,y=0;(y=123) && (x<4); x++)
A、3
B、是无限循环
C、4
D、循环次数不定

答案:C

1
2
3
4
5
10.以下定义语句中不正确的是()。
A、char c1[]={'1','2','3','4','5'};
B、double x[5]={2.0,4.0,6.0,8.0,10.0};
C、int y[5]={0,1,3,5,7,9};
D、char c2[]={'\x10','\xa','\x8'};

答案:C

1
2
3
4
5
6
7
8
11.执行下面的程序段后,变量k中的值为
int k=3, s[2];
s[0]=k;
k=s[1]*10;
A、33
B、10
C、30
D、不定值

答案:D

1
2
3
4
5
6
7
8
9
12.有如下程序片段,用于给数组所有元素输入数据:
int a[10],i=0;
while(i<10)
scanf("%d", );
以下四个选项中,可以正确填入横线位置的是()。
A、&a[i+1]
B、a+i
C、&a[++i]
D、a+i++

答案:D

1
2
3
4
5
13.C语言中函数调用的方式有()。
A、函数调用作为函数表达式一种
B、函数调用作为语句、函数表达式或函数参数三种
C、函数调用作为语句或函数表达式两种
D、函数调用作为语句一种

答案:B

1
2
3
4
5
14.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。
A、传递方式由用户指定
B、地址传递
C、由实参传给形参,再由形参传回实参
D、单向值传递

答案:D

1
2
3
4
5
15.C语言中,如果函数不需要返回值,函数类型应该定义为()。
A、double
B、int
C、void
D、float

答案:C

1
2
3
4
5
16.对于建立函数的目的,正确的说法是
A、提高程序的执行效率
B、减少程序的篇幅
C、减少程序文件所占的内存
D、提高程序的可读性

答案:D

1
2
3
4
5
17.若有int i=3,*p;p=&i;下列语句中输出结果为3的是()。
A、printf("%d",*p);
B、printf("%d",*i);
C、printf("%d",p);
D、printf("%d",&p);

答案:A

1
2
3
4
5
18.若有说明: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
19.具有相同类型的指针变量p与数组a,不能进行的操作是(  )。
A、p=&a[0];
B、p=a;
C、p=&a;
D、*p=a[0];

答案:C

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. 本程序的功能是:统计一维数组中高于平均值的数据个数。
输出:6
#include<stdio.h>
int main()
{
double sum=0,ave;
int count=0;
int a[10]={78,58,90,23,66,88,98,37,78,87};
for(int i=0;i<10;i++){
sum=sum+___a[i]___;
}
ave=sum/10;
for(int i=0;i<10;i++){
if(a[i]>__ave___){
count++;
}
}
printf("%d\n",__count__);
return 0;
}
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
22.本程序的功能是:从键盘输入一串小写英文字符,统计每个字符出现的次数。
输入:hellochina
输出:
a:1
c:1
e:1
h:2
i:1
l:2
n:1
o:1

#include<stdio.h>
#include<string.h>
int main()
{
char s[100];
int idx;
int a[26]=_{0}__;
gets(s);
int n=__strlen(s)__;
for(int i=0;i<n;i++){
idx=s[i]-'a';
a[idx]++;
}
for(int i=0;i<26;i++){
if(a[i]!=_0_){
printf("%c:%d\n",'a'+i,a[i]);
}
}
return 0;
}

程序改错

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
23.本程序的功能是输入一个字符串(不超过20个字符),判断是否为回文串。
所谓回文串,是指一个字符串顺读和反读是一样的,如"123454321"是回文串,
"abcddba"不是回文串。

输入:123454321
输出:Yes

输入:abcddba
输出:No

/*********Begin**********/
#include<stdio.h>
#include<string.h>
#define N 20
int main()
{ char s[N];
int i,j,n;
gets(s);
n=strlen(s);
for(i=0,j=n;i<j;i++,j--)
if(s[i]!=s[j])
continue;
if(i<j)
printf("No\n");
else
printf("Yes\n");
return 0;
}
/********** End **********/

示例代码:
答案1:j=n-1
答案2:break

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
24.本程序的功能是将包含N个元素的一维数组中对称位置的元素交换后输出。
输出结果为:
89 99 58 77 63 15 14 31 22 13

/*********Begin**********/
#include<stdio.h>
#define N 10
int main()
{ int i,j,t;
int a[N]={13,22,31,14,15,63,77,58,99,89};
for(i=0,j=N;i<j;i++,j--)
{ t=a[i];
a[i]=a[j];
a[i]=t;
}
for(i=0;i<N;i++)
printf("%3d",a[j]);
printf("\n");
return 0;
}
/********** End **********/

示例代码:
答案1:j=N-1
答案2:a[j]=t
答案3:printf(“%3d”,a[i])

程序设计

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
27.功能:从键盘输入任意位数的正整数n,输出其逆序数。
完善函数reverse(),实现该功能。
程序运行后,
输入:789456
输出:654987

#include<stdio.h>
long reverse(long n)
{
/*********Begin**********/
long m=0;
int a=0;
while(n>0){
a=n%10;
m=m*10+a;
n=n/10;
}
return m;
/********** End **********/
}
int main()
{
long n;
scanf("%ld",&n);
printf("%ld\n",reverse(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
28.编写递归函数f(),功能是:返回斐波那契数列的第n项。斐波那契数列的递推公式如下:

程序运行结果为:
1 1 2 3 5 8 13 21 34 55

#include<stdio.h>
long f(int n)
{
/*********Begin**********/
if(n==1||n==2){
return 1;
}
else{
return f(n-1)+f(n-2);
}
/********** End **********/
}
int main ()
{
int i;
for(i=1;i<=10;i++){
printf("%ld\t",f(i));
}
//以下内容请勿改动
void TestFunc();
TestFunc();
return 0;
}
void TestFunc()
{
//省略···
}