资源描述
. . . .
期末综合练习(一)
一、单项选择题(每小题2分,共20分)
1. C语言源程序文件的缺省扩展名为( )。
A. cpp B. exe C. obj D. c
2.设x和y均为逻辑值,则x&&y为真的条件是( )。
A. 它们均为真 B. 其中一个为真
C. 它们均为假 D. 其中一个为假
3. 在以下的符号常量定义中,正确的定义格式为( )。
A. #define M1 B. const int M2 20
C. #define M3 10 D. const char mark
4. for循环语句能够被改写为( )语句。
A. 复合 B. ifC.switchD. while
5. 在下面的一维数组定义中,错误的定义格式为( )。
A. int a[]={1,2,3}; B. int a[10]={0};
C. int a[]; D. int a[5];
6.在下面的函数原型声明中,存在语法错误的是( )。
A. AA(int a, int b); B. AA(int, int);
C. AA(int a; int b;); D. AA(int a, int);
7. 假定a为一个数组名,则下面存在错误的表达式为的()。
A. a[i] B. *a++ C. *a D. *(a+1)
8. 假定有定义为“int a[10], x, *pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的赋值为( )。
A. x=pa[3] B. x=*(a+3) C. x=a[3] D. x=*pa+3
9.字符串"y=%d\n"的长度为________。
A. 5 B.6 C. 4 D. 3
10. 向一个二进制文件中写入信息的函数为( )。
A. fgets() B. fputs() C. fread() D. fwrite()
二、填空题(每小题2分,共26分)
1.一个函数定义由________和函数体两部分组成。
2. 执行“printf("%c",'F'-2);”语句后得到的输出结果为________。
3.int数据类型的长度为________。
4. 表达式25/4的值为________。
5.若x=5,y=10,则执行“if(x<=y) c=3; else c=8;”语句后,c的值为________。
6. 保留字case和default出现在(if/switch/for/while)________语句中。
7. 在函数调用中执行到(return/break/continue/if)________语句时,将完毕所在函数的执行过程,返回到调用该函数的原来位置。
8. 假定二维数组的定义为“char a[M][N];”,则该数组共包含有________个字符元素。
9. 存储字符'a'需要占用存储器的________个字节空间。
10. 若一个字符串的长度为n,则存储它的字符数组的长度至少为________。
11. 假定p所指对象的值为25,p+1所指对象的值为46,则执行表达式(*p)++后,p所指对象的值为________。
12. 假定p是一个指向整数对象的指针,则用________表示该整数对象。
13.假定一个结构类型的定义为“struct B{int a[5]; char* b;};”,则该类型的理论长度为________。
三、写出以下每个程序运行后的输出结果(每小题6分,共30分)
1. #include<stdio.h>
void main() {
int n=4, y=0;
while(n--) y+=3;
printf("y=%d\n",y);
}
输出结果:
2. #include<stdio.h>
void main()
{
int i,s=0;
for(i=1;i<8;i++)
if(i%2==0 || i%3==0) s+=i;
printf("s=%d\n",s);
}
输出结果:
3. #include<stdio.h>
void main() {
char a[]="acdbfkmd";
int i1=0, i2=0, i=0;
while(a[i]) {
if(a[i]<'d') i1++; else i2++;
i++;
}
printf("%d %d\n",i1,i2);
}
输出结果:
4. #include<stdio.h>
void main() {
int a[8]={4,8,12,16,20,24,28,32};
int *p=a, s=0;
do {s+=*p; p+=3;} while(p<a+8);
printf("s=%d\n",s);
}
输出结果:
5. #include<stdio.h>
struct Worker { char name[15]; int age; double pay;};
void main() {
struct Worker a[4]={{"abc",20,2400},{"defa",50,3600},
{"ghin",40,1800},{"jklt",36,2200}};
int i; double s=0;
for(i=0; i<4; i++) s+=a[i].pay;
printf("s=%8.2Lf\n",s);
}
输出结果:
四、根据以下每个函数回答相应问题(每小题6分,共12分)
1. 假定使用SF(30)调用下面函数,则得到的输出结果为______________。
void SF(int x) {
int i=2;
while(x>=i) {
if(x%i==0) {printf("%d ",i); x/=i;}
i++;
}
}
2. 假定结点的结构类型为IntNode,它的数值域为data,指针域为next,请指出下面函数的功能。
void QC(struct IntNode* f) { //f为一个单链表的表头指针
while(f) {
printf("%d ",f->data);
f=f->next;
}
}
函数功能:
五、按题目要求编写程序或函数(每小题6分,共12分)
1. 编写一个主函数,利用while循环计算1+2+4+…+210的值,最后输出计算结果。假定计数变量用i表示,每次累乘2的变量用p表示,每次累加一个数据项值的变量用sum表示。
2. 根据函数原型“int DD(int a[], int n, int MM)”编写函数定义,利用双重for循环统计出数组a[n]中任何两个不同元素的值等于MM值的配对个数,然后返回统计结果。如假定a[i]+a[j]等于MM,同时i≠j,则为一个配对。
参考答案
一、单项选择题(每小题2分,共20分)
1.D 2. A 3. C 4. D 5. C
6. C 7. B 8. D 9. A 10. D
二、填空题(每小题2分,共26分)
1. 函数头 2. D 3.4 4. 6
5. 3 6. switch 7.return8. M*N
9. 1 10. n+1 11. 26 12. *p 13. 24
三、写出以下每个程序运行后的输出结果(每小题6分,共30分)
评分标准:根据答案正确程度酌情给分。
1. y=12
2. s=15
3. 3 5
4. s=48
5. s=10000.00
四、根据以下每个函数回答相应问题(每小题6分,共12分)
评分标准:根据答题的正确与完整程度酌情给分。
1.2 3 5
2.遍历输出由表头指针f所指向的单链表中每个结点的data域的值。
五、按题目要求编写程序或函数(每小题6分,共12分)
评分标准:根据编写程序或函数的正确与完整程度酌情给分。
1. void main()
{
int i=1, p=1, sum=1; //1分
while(i<=10) {p*=2; sum+=p; i++;} //4分
printf("sum=%d\n",sum); //6分
}
2.int DD(int a[], int n, int MM)
{
int i,j,c=0; //1分
for(i=0; i<n; i++) //2分
for(j=i+1; j<n; j++) //3分
if(a[i]+a[j]==MM) c++; //5分
return c; //6分
}
5 / 5
展开阅读全文