2024年4月27日发(作者:)

C 语言上机考试试题-9

一、选择题 (每小题2分 )

1. 用数组名作为函数的实参时,传递给函数的形参是________。

(A) 数组的首地址

(B) 数组的第1个元素

(D) 数组的元素个数 (C) 数组中的全部元素

2. 下列定义一维数组正确的写法是________。

(A) int a(10);

(C) int n;

(B) int n=10, a[n];

(D) #define SIZE 10

int a[SIZE];

scanf(“%d”,&n);

int a[n];

3. 下述函数头定义形式正确的是________。

(A) int f(int x; int y)

(C) int f(int x, int y)

(B) int f(int x,y)

(D) int f(x,y: int)

4. 以“只读”方式打开文本文件c:xy.txt,下列语句中哪一个是正确的________。

(A) fp=fopen("c:xy.txt","a"); (B) fp=fopen("c:xy.txt","r");

(C) fp=fopen("c:xy.txt","wb"); (D) fp=fopen("c:xy.txt","r");

5. 判断变量x和y中有且只有一个值为0成立的表达式为________。

(A) !(x*y)&&x+y (B) (x*y)&&x+y

(C) x*y==0 (D) x==0&&y!=0

6. 设有如下定义:

struct ss{

char name[10];

int age;

char sex;

} std[3],*p=std;

下面各输入语句中错误的是________。

(A) scanf("%d",&(*p). age);

(C) scanf("%c",&std[0].sex)

(B) scanf("%s",&);

(D) scanf("%c",&(p-> sex));

7. 语句“int a=0; if(a=1) a+=10;” 编译不会出错,但运行后a的值是________。

(A) 0 (B) 11 (C) 10 (D) 出错

8. 设有字符数组: char s[20];,能把一串字符: How do you do?<回车>全部输入的语句是

________。

(A) scanf("%c",&s[i]); (B) scanf("%s",&s);

1

(C) gets(s); (D) scanf("%s",s);

9. 定义语句为“char a[10];”,执行下列语句后的输出结果为________。

printf("%d,%dn",sizeof(a),strlen(strcpy(a,"Windows")));

(A) 7,7 (B) 7,8 (C) 10,7 (D) 10,8

10. 若有定义:int k=1,*q;,下面赋值表达式正确的是________。

(A) q=&k (B) *q=&k (C) q=k (D) *q=k

套数号

9

答案

1.A 2.D 3.C 4.B 5.A 6.B 7.B 8.C 9.C 10.A

二、 判断题 (每小题2分)

1. t=s; if(u>t) t=u;程序段可以实现将变量u, s中的最大值赋给变量t的功能。

2. 在定义了数组int a[5][6];后,第10个元素是a[4][2]。

3. 在C语言中,以下描述“任何子函数必须位于主函数之前”是正确的。

4. 设变量定义为char s[]=“hello”,则数组s中有5个元素。

5. 若x是单精度实型变量,表达式(x=10/4.0)的值是2.5。

6. 若变量已正确定义,表达式x=y=1符合C语言语法。

7. 表达式!(x>0‖y>0)等价于!(x>0&&!(y>0)。

8. 表达式( 0x19<<1)&0x7的值是3。

9. 在C源程序中将语句“if(x==5) y++;”误写成“if(x=5) y++;”,不会导致编译错误。

10. 式子!(a%2==0)在a为奇数时结果为假。

套数号

9

答案

1. T 2. F 3. F 4. F 5. T 6. T 7. T 8. F 9.T 10. F

三、填空题(每小题2分)

1. C语言中用于结构化程序设计的三种基本结构是: 顺序结构、________和循环结构。

2. int x=-17,y; 执行语句 y=x%4 后y的值为_______。

3. int x=10,y=4; float z=x/y; 执行语句printf(“%.2f”,z); 输出________。

4. a是一个值为两位数的整型变量,判断其个位数是大于等于5的奇数,而十位数是偶数的

逻辑表达式为________。

5. 若 a=3、b=8、c=10,条件表达式 ((y=(a+6

第9套

(1)

选择结构 (2)

-1

(3)

2.00 (4) m%10>=5&&

m%2==1&&

m/10%2==0

(5) 20

2

四、程序改错题(每小题5分)

1. 以下程序输入数字:2 4,则程序运行结果为:8 4。

#include "stdio.h"

void f(int a,int *b)

{ a=a+*b;

*b=*b+a;

}

int main()

{ int a,b;

scanf("%d%d",&a,&b);

f(b,a); /* $1 */

printf("%d %dn",a,b);

return 1;

}

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行中的语句f(b,a);有错误,请

改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:在程序中输入:

2 4,得到输出数值:8 4。

参考答案:f(b,&a);

运行样例1行

运行样例1:4 8 运行结果:16 8

2. 以下程序输入数值:0 1 2,则程序运行结果为输出:1 3 7 15。

#include

int main()

{ int i,n[5]={0,0,0,0,0};

printf("please input the nums:");

for(i=0;i<=2;i++)

scanf("%d",n+i);

for(i=1;i<5;i++)

{

n[i]=2*i+1; /*$*/

printf("%3d",n[i]);

}

printf("n");

return 1;

}

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行中的语句n[i]=2*i+1; 有错

误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:在程序

中输入数值:1 2 3,得到输出数值:3 7 15 31。

3

答案:n[i]=n[i-1]*2+1;

运行样例3行

运行样例1:please input the nums: 1 2 3

运行结果:3 7 15 31

3. 下列程序是一个从考生文件夹中的文件ks.c中读出它的内容并显示在屏幕上的程

序。假设文件ks.c中有语句how do you do . C,则程序运行结果为:how do you do . C 。

#include

int main()

{ FILE *fp;

char ch;

fp=fopen("ks.c"," "); /* $1 */

ch=fgetc(fp);

while(ch!=EOF)

{ putchar(ch);

ch=fgetc(fp);

}

printf("n");

fclose(fp);

return 1;

}

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行中的语句fp=fopen("ks.c"," ");

有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:是

一个从文件ks.c中读出它的内容并显示在屏幕上的程序。例如:假设文件ks.c中有语句how

do you do . C,则程序运行结果为:how do you do . C

答案:fp=fopen("ks.c","r");

运行样例1行

运行样例1:在ks.c文件中有语句:how do you do . C 运行结果:how do you do . C

4. 下列程序中函数fun功能实现m=1-2+3-4+…+9-10+…的和, 如果本程序输入数值:4 , 则

程序运行结果为:m=-2。

#include

#include

int fun(int n)

{ int m=0,f=1, i;

for(i=1;i<=n;i++)

{ m=i*f; /* $1 */

f=(-1)*f;

}

return m;

}

int main()

4

{

}

int n;

scanf("%d",&n);

printf("m=%dn",fun(n));

return 1;

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行中的语句m=i*f; 有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:程序中函数

fun功能实现m=1-2+3-4+…+9-10+…的和。例如:假设该程序输入数值:4 ,则程序运行结

果为:m=-2。

答案:m=m+i*f;

运行样例1行

运行样例1:6 运行结果:-3

五、程序填空(每小题5分)

1. 下列程序功能:对变量地址的操作来完成赋值的过程。假设程序输入两个数:6 8,

则程序最后一个printf()输出:8---8。 或者程序输入:1 2,则输出:2---2。根据这两次

输入输出来填空。

#include "stdio.h"

#include

int main()

{

int *p1,*p2;

int a,b;

printf("now input the nums: ");

scanf("%d%d",&a,&b);

p1=&a;

*p1=100;

/* $1 */

*p2=b;

printf("now output the nums: ");

printf("%d---%d",*p1,a);

}

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行是根据程序功能需要填充部

分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:

对变量地址的操作来完成赋值。例如:假设程序输入两个数:6 8,则程序最后一个printf()

输出:8---8。 或者程序输入:1 2,则输出:2---2。

答案:p2=p1;

运行样例2行

运行样例1:now input the nums: 6 8

5

运行结果:now output the nums: 8---8

2. 下列程序功能:实现对一个2维数组的转置(行列互换),请填空。

#include

int main()

{ int a[3][3];

int i,j,temp;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",&a[i][j]);

printf("the first array:n");

for(i=0;i<3;i++)

{ for(j=0;j<3;j++)

printf("%2d",a[i][j]);

printf("n");

}

for(i=0;i<3;i++)

/* $1 */

{ temp=a[i][j];

a[i][j]=a[j][i];

a[j][i]=temp;

}

printf("now the array:n");

for(i=0;i<3;i++)

{ for(j=0;j<3;j++)

printf("%2d",a[i][j]);

printf("n");

}

return 1;

}

操作说明:

在考生目录的**子目录下,有*.c文件,该文件中“/*$1*/”行是根据程序功能需要填充部

分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:

实现对一个2维数组的转置(行列互换)。

答案:for(j=i;j<3;j++)

运行样例7行

运行样例1:1 2 3 4 5 6 7 8 9

运行结果 : first array: 1 2 3 now the array:1 4 7

4 5 6 2 5 8

7 8 9 3 6 9

6

程序设计(每小题10分)

1. 操作说明

编制程序:从程序中输入m,其中要求输入的m必须大于0且小于等于20。求表达式

sum=1+1/2+1/3+1/4+~~~~~~+1/m的和sum,并将sum保留两位小数输出。

参考答案:

#include "stdio.h"

int main()

{ int m, i;

double sum=0.0,flag=1.0;

do

{ printf("now input the num: ");

scanf("%d",&m);

}while(m<0||m>20);

for(i=1;i<=m;i++)

{ sum=sum+1/flag;

flag++;

}

printf("%0.2f",sum);

return 1;

}

运行样例2行

运行样例1:now input the num: 2 结果:1.50

运行样例2:now input the num: 10 结果:2.93

2. 操作说明

编制程序,计算输入字符串的长度及字符串中数字的个数,并输出。

参考答案

#include

void main( )

{ char c[80];

int i=0,s=0,j=0;

scanf("%s",c);

while(c[i++]!= '0')

{

s++;

if(c[i]>='0'&& c[i]<='9')

j++;

}

printf("%d %dn",s,j);

}

运行样例1行

运行样例1:abcd123 结果:7 3

7