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
发布评论