广东海洋大学C程序设计试卷(第1套)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广东海洋大学 —— 学年第 学期 《 C 程序设计 》课程试题 课程号: 16232110 √ 考试 □ A 卷 √ 闭卷 □ 考查 □ B 卷 □ 开卷
一、单项选择题(25分,每题1分) 1. 正确的c 语言标识符是____________. A. 2name B. DATA_FILE C. (break ) D. A @COM 答案:B 知识点:标识符 难度:C 2. 在c 语言中,数组元素的下标从__________开始. A. 0 B. 1 C. 2 D. 任意 答案:A 知识点: 数组 难度:C 3. 执行下列程序后,a 的值是___________. Int a=9, b, c; a+=2; A. 2 B. 10 C. 11 D. 8 答案:C 知识点:运算符 难度:B 4. 若有以下定义和语句,且, 则___________是对数组元素的正确表示. int a[ ]={1,2,3,4,5}, *p; p=a; A. &(a+2) B. a++ C. p[2] D. &p 答案:C 知识点:数组 难度:A 5 为避免嵌套条件支语句if~else 的二义性,C 语言规定,else 总是与__________组成配对
关系.
A. 缩排位置相同的if
B. 同一行的if
C. 在其之前未配对的最近的if
D.在其之前未配对的if
答案:C 知识点:分支语句 难度:C
6. 若a=10,b=20,c=30,则表达式________的值为真.
A. !(a!=0)
B. (a<b)&&(a>c)
C. (b>c)||(b>a)
D. (c= =a)|| (c= =b)
答案:C 知识点:表达式 难度:B
班
级
:
姓名: 学号:
试题共
页
加白纸
张
密
封
线
7. 若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是__________
A.p+1 B.a+1 C.a++ D.++p
答案:C 知识点:指针难度:A
8. 若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是_______________
int t[3][3], *pt([3], k;
for (k=0;k<3;k++)pt[k]=&t[k][0];
A.t[2][0] B.t[2][2] C.t[l][2] D.t[2][l]
答案:C 知识点:数组与指针难度:A
9.设x和y均为int型变量,则下列语句
x+=y; y=x-y; x-=y;
的功能是()。
A.把x和y按从大到小排序
B.把x和y按从小到大排序
C.无确定结果
D.交换x和y的值
(难度系数B,知识点:+=,-=)答案:D
10.下述描述中不正确的是()。
A. 字符型数组中可以存放字符串
B. 可以对字符型数组进行整体输入、输出
C. 可以对整型数组进行整体输入、输出
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值
(难度系数B,知识点:数组)答案:C
11.以下4个选项中,不能看作一条语句的是()
A. {;}
B. a=0,b=0,c=0;
C. if(a>0);
D. if(b==0) m=1;n=2;
(难度系数C,知识点:单行语句)答案:D
12.若已定义: 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[10]
(难度系数C,知识点:数组元素)答案:D
13.若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是()
A.1
B.2
C.3
D.4
数组运算(难度系数C)答案:D
14.用数组名作为函数的实参时,传递给形参的是()。
A. 数组的首地址
B. 数组的第1个元素
C. 数组中的全部元素
D. 数组的元素个数
函数调用(难度系数C)答案:A
15.表达式'A'+4*25.0-'b'的正确结果是()。
A.67 B.67.0 C. 不确定D. 67L
C语言表达式运算(难度系数B)答案:B
16.能表示条件0≤x≤100的表达式是()。
A.0<=x<=100 B.)x>=0,x<=100
C.0≤x≤100 D.)x>=0&&x<=100
C 语言表达式运算(难度系数C )答案:D
17.对字符串"Boy"进行完整赋值的操作是( )。
A .char s[3] = {'B','o','y'}; B. char s[] = "Boy";
C .char s[3] = {"Boy"}; D.char s[3]; s="Boy";
字符串数组运算(难度系数C )答案:B
18.若有代数式bc
xy 8,则不正确的C 语言表达式是( )。
A .x/b/c*y*8 B. 8*x*y/b/c
C .8*x*y/b*c D. x*y/c/b*8
C 语言表达式(难度系数B )答案:C
19、下列可以正确表示字符型常数的是 。
A."B"
B. '\010'
C. 68
D. D
(知识点 字符型常数 难度系数C )正确答案:B
20、 以下程序的输出结果是 。
void main()
{int a[]={1,2,3,4,5,6},*p;
p=a; *(p+3)+=1;
printf(“%d,%d\n ”,*p,*(p+3));}
A. 0,5
B. 1,5
C. 0,6
D. 1,6
(难度系数B )(答案:B )(知识点:指针)
21、若变量a 是int 类型,并执行了语句:a='D'+3.5; 则正确的叙述是:
A. a 的值是字符D
B.a 的值是3
C. 不允许字符型和浮点型相加
D. a 的值是字符'D'的ASCII 值加上3
(知识点 字符 难度系数B )正确答案:D
22. 若有说明语句:int a, b, c, *d=&c;, 则能正确从键盘读入三个整数
分别赋给变量a 、b 、c 的语句是( )。
A. scanf("%d%d%d",&a,&b,&d);
B. scanf("%d%d%d",&a,&b,d);
C. scanf("%d%d%d",a,b,d);
D. scanf("%d%d%d",a,b,*d);
(知识点 键盘读入 难度系数C )正确答案:B
23.为判断变量m 是否是数字,可用表达式 ( ) 。
A.0<= m && m<=9
B.'0'<=m && m<='9'
C."0"<=m && m<="9"
D.、三个答案都错
(知识点 变量 难度系数B )正确答案:A
24、对于"int *pa[5];"的描述中, 是正确的。
A. pa 是一个指向数组的指针,所指向的数组是5个int 型元素
B. pa 是一个指向某数组中第5个元素的指针,该元素是int 型变量
C. pa[5]表示某个元素的第5个元素的值
D. pa 是一个具有5个元素的指针数组,每个元素是一个int 型指针
(知识点 指针 难度系数B )正确答案:D
25、下列程序段的输出结果是 。
func(int a,int b)
{ int c;
c=a+b;
return c;
}
main( )
{ int x=6,y=7,z=8,r;
r=func(x--,y++,x+y),z--);
printf("%d\n",r);
}
A. 18
B. 22
C. 21
D. 19
(知识点函数难度系数A)正确答案:C
二、填空题(20分,每题2分)
1. 下列程序的输出结果是()。
#include
main( )
{ char b[30];
strcpy(&b[0],"C H");
strcpy(&b[1],"D EF");
strcpy(&b[2],"ABC");
printf("%s \n",b);
}
答案:CDABC 知识点:内部函数,字符数组难度:A 2. 下列程序的输出结果是()。
int t(int x,int y,int cp,int dp)
{ cp=x*x+y*y;
dp=x*x-y*y;
}
main( )
{ int a=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d %d \n",c,d);
}
答案:5 6 知识点:函数难度:B
3.十进制数1385转换成十六进制数为___________
答案:569 知识点:进制转换难度:B:考试大-计算机二级考试
4.语句:printf("%d",(a=2)&&(b= -2);的输出结果是_________ 答案:1 知识点:运算符难度:C
5. 以下程序的输出结果是_____________
{ int x=10,y=10,I;
for(i=0;x>8;y=++i)
printf("%d,%d ",x--,y);}
答案:10 10 9 1 知识点:for循环难度:B
6、若有说明:int a[3][4]={{1,2},{0},{4,6,8,10}},则a[1][2]=
(知识点数组难度系数C)答案:0
7、已知x=2.5,a=7,y=4.7,则x+a%3*(int)(x+y)%2/4的值为:______
(知识点变量难度系数B)答案:2.5
8、设i,j均为int型变量,则执行完下面的for循环后,k的值为。
for(i=1,j=10; i<=j; i++,j--) k=i+j;
(知识点变量难度系数B)答案:50
9、定义b为共有10个元素的一维数字数组、同时定义p为指向a数组首地址的指针变量的
语句为。
(知识点数组难度系数B)答案:int b[20] ,*p=a;
10、若b=10,则(++b)+( ++b)+( ++b) 的值为:
(知识点 ++运算符难度系数A)答案:39
三、判断题(10分,每题1分)
1、()所有的变量在使用前都必须予以申明。
(难度系数C,知识点:变量声明)答案:错
2、()switch选择结构中必须有default子句。
(难度系数C,知识点:switch选择结构)答案:错
3、()求余运算符%只能用于两个整数操作数。
(难度系数C,知识点:求余运算符%)答案:对
4、()若有说明int c;则while (c=getchar());是错误的C语句。
(难度系数B,知识点:while语句)答案:错
5、()使用continue和break语句,都可以使得C程序的执行直接从循环中跳出。
(难度系数C,知识点:跳出循环语句)答案:错
6、()注释内容太多会影响程序的执行效率。
知识点:C程序执行(难度系数C)答案:错
7、()C程序执行的入口是main()函数,所以main函数必须放在程序的开头。
知识点:C程序执行(难度系数C)答案:错
8、()若定义的函数没有参数,则函数名后的圆括号可以省略。
知识点:函数定义(难度系数C)答案:错
9.( )在一个函数内中定义的变量可以在本函数范围内有效。
(知识点函数难度系数B)答案:对
10.( )全局变量和静态变量没有初始时,初始值为0。
(知识点变量难度系数B)答案:对
四、程序填空题(10分,每题5分)
1、下面程序的功能是:求一个5×5矩阵对角线元素之和。
#define N 5
main( )
{ int a[N][N], sum=0;
int i, j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
scanf("%d", &a[i][j]);
for (i=0; i<N; i++)
printf("sum=%4d\n", sum);
}
(难度系数B,知识点:二维数组求和)答案:sum=sum+a[i][i];
2、输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。
用下标为0元素统计字符“0”的个数,下标为1的元素统计字符“1”的个数。
程序如下
#include “stdio.h”
void main()
{ char c[80];int i=0,k,a[10]={0};
gets(c);
while( ① )
{ k=c[i]-48;
② ; i++;}
for(i=0;i<10;i++)
printf("\n %d", ③ );
}
(知识点数组难度系数B)答案:①c[i]!='0' ②a[k]++或a[k]+1 ③a[i]
五、读程序写结果(5分,每题5分)
1、#include<stdio.h>
#include<string.h>
struct Worker {
char name[15]; //姓名
int age; //年龄
float pay; }; //工资
void main()
{Worker x;
char *t="WeiRong";
int d=45; float f=4000;
strcpy(,t);
x.age=d; x.pay=f;
printf("%s %d %f \n", , x.age, x.pay);}
该程序的运行结果是:___________________________________
(知识点指针,字符难度系数B)答案:WeiRong 45 4000
六、编程题(30分,每题10分)
1、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
答案:
#include "stdio.h"
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
知识点:循环结构,分支结构难度:B
2、编写程序判断某一个数m是否为素数,如果是则输出"m is a prime",否则就输出"m is not a prime"。
(难度系数C,知识点:素数)答案:
main( ) { int i, m;
printf("please input a number m:\n");
scanf("m=%d", &m);
for (i=2; i<m; i++)
{ if (m%i==0)
{ printf("%d is a prime\n", m); break ; }
else continue ; }
if (i==m) printf("%d is not a prime\n", m);
}
3.编程将字符数组中的字符串逆序存放并将前后结果输出,要求在一个函数中用指针来实现字符串逆序存放。
C语言指针使用(难度系数A)答案:
char strrev(char *s)
{char *head=s,*tail;
char temp;
tail=s+(strlen(s)-1);
while(head<tail)
{ temp=*tail;
*tail=*head;
*head=temp;
tail--;head++; }
}
main()
{char test[]={“this is the test.”};
printf(“%s\n”,test);
strrev(test);
printf(“%s\n”,test);
}
(注:文档可能无法思考全面,请浏览后下载,供参考。
)。