南开大学《C语言程序设计》2020-2021学年第一学期期末考试试卷(A卷)(含答案).docx
南开大学理科C语言程序设计2020-2021学年第一学期期末考试试卷(A卷)任课教师 学院 姓名 学号 题号一二三四五合计成绩一、单项选择(每空1分,共20分)(注意选项填写到题末相应横线上)1、下面语句的输出结果为( )char ch=70; cout<<ch;A.70 B.f C.报错 D.F2、若整型变量a、b、c、d、m和n的值均为2,表达式a=(m=a>b)&&(n=c<d)运算后,a、m和n的值分别是( )A.0、2、2 B.0、2、0 C.1、2、0 D。0、0、03、以下程序段执行后的输出结果为( )for(int i=0,m=l;i<4;i+)for(int j=0;j<i;j+)m+=l;cout<<m;A.16 B.17 C.6 D.74、下列标识符中,合法的标识符为( )A.3class B.Good_boys C.Hel1o! D.No.15、已知数字字符0的ASCII值为48,若有以下程序,则程序运行后的输出结果是( )。#include<iostream.h>void main()char a=1,b=2;cout<<b+<<”,”;cout<<b-a<<endl;A.3,2 B.50,2 C.2,2 D.2,506.用new运算符创建一个含10个元素的一维整型数组的正确语句是( )A.int *p=new a10; B.int *p=new float10;C.int *p=new int(10; D.int *p=new int10=1,2,3,4,5;7、有以下程序,程序运行后的输出结果是( )#include<iostream.h>void main()int k=5;while(-k)k=3;cout<<k;A.1 B.0 C.4 D.死循环8、以下选项中,值为1的表达式是( )A.1-0 B.1-0 C.1-0 D.0-09、以下叙述中不正确的是( )A.在不同的函数中可以使用相同名字的变量B.函数中的形式参数是局部变量C.在一个函数内定义的变量只在本函数范围内有效D.在一个函数内的复合语句中定义的变量在本函数范围内有效10、对int*pa5的描述,正确的是( )A.pa是一个指向数组的指针,所指向的数组是5个int型元素B.pa是一个指向某数组中的第5个元素的指针,该元素是int型变量C.pa5表示某个数组的第5个元素的值D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针11、下列对结构及其变量定义错误的是( )。A.struct MyStruct B.struct MyStruct int num; int num;char ch; char ch; my;MyStruct my;C.struct D.struct int num; int num;char ch; char ch;my; ;struct my;12、以下不能作为函数重载判断依据的是( )A.参数个数 B.参数类型 C.函数名字 D.返回类型13、考虑函数原型void test(int a,int b=7,char=*),下面的函数调用中,不合法的调用是( )A.test(5) B.test(5,8) C.test(6, ,#) D.test(0,0,#)14、在一个被调用函数中,关于return语句使用的描述,错误的是( )A.被调用函数中可以不用return语句B.被调用函数中可以使用多个return语句C.被调用函数中,如果有返回值,就一定要有retum语句D.被调用函数中,一个return语句可返回多个值给调用函数15、变量s的定义为char *s="Hello world",要使指针p指向s所指向的同一个字符串,则应选取( )Achar *p=s; B.char *p=&s; C.char*p;p=*s; D.char*p;p=&s;16、以下叙述中错误的是( )A.对于double型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D.可以通过赋初值的方式确定数组元素的个数17、若有定义int a=10,20,30,*p=a;当执行p+后,下列说法错误的是( )A.p向高地址移了一个字节 B.p向高地址移动了一个存储单元C.p向高地址移了四个字节 D.p与a+1等价18、若定义了函数double *function(),则函数function的返回值为( )A.实数型 B.实数的地址 C.指向函数的指针 D.函数的地址19、以下选项中,不能作为合法常量的是( )A.1.234e04 B.1.2340.4 C.1.234e+4 D.1.234e020、以下叙述中,正确的是( )A.for循环只能用于循环次数已知的情况B.for循环与do-while循环一样,都是先执行循环体后判断条件C.for循环体内不能出现while语句D.无论哪种循环,都可以从循环体内转移到循环体外二、填空题(每空1分,共12分(注意把答案镇写在题末相应横线上)1、与十进制数186等值的十六进制数是 。2、若X=10001101B,Y=10011010B,则XY的值为 。3、以下程序段的输出结果为 。int p=1,2,3,4,5,6,7,8,i=0,j=0;while(i+<6)if(pi%2) j+=pi;cout<<j;4、若整型变量a、b、c、d中的值依次为1、4、3、2。则条件表达式a<b?a:c<d?c:d的值为 。5、已知a、b为整形变量,表达式a=2,b=3,a+,+b,a=b+的值是 。6、若有以下定义,int a6=1,2,3,4,5,6;char b=a,c=c;则表达式ac-b的值为 。7、以下程序的输出结果是 。#include <iostream.h>int fun(char *s) char *p=s;while(*p!=0) p+;return(p-s);void main()cout<<fun(“abc”)<<endl;8、若a是这样定义的:char a10;,则从键盘上向该数组输入一个字符串的语句为 。9、有一整型变量x,将“5x<0或x3”用C+逻辑表达式表示出来为 。10、已知 char*pc="Shanghai","Beijing”,"Guangzhou"则表达式 strlen(pcl)*strlen(pc2)的值为 。11、若x、y、z为double型,则表达式x=l,y=l,z=x+1/4+y/2的值是 。12、设struct studentint num;char name20; st;写出cout语句:输出学生st的各个成员分量。要求按num,name的顺序输出,各成员之间使用空格分隔开 。三、读程序写结果(共30分)(注意将结果写在后面相应横线上)1、下面程序的输出结果为:(本题4分)#include <iostream.h>void main()int m,n=0;for(m=l;m<=6;m+) switch(m) case4:case 6:case 9:case 1l: n=30;break;case 2: n=28;default: n=31;break;cout<<n<<" "运行结果为: 。2、写出下面程序的运行结果。(本题4分)#include <iostream.h>const MAXN=20;int p(int k, int a) int m,i,c=0;for(m=2;m<=k;m+)for(i=2;i<=m;i+)if(!(m/%i)break;if(i=m) ac+=m;return c;void main()int i,m,sMAXN;m=p(13,s);for(i=0;i<m;i+)cout<<sj<<”"运行结果为: 。3、写出下面程序的运行结果。(本题4分)#include <iostream.h>void main() inti=l;while (i<=15)i+;if(i%3!=2)continue;else if(i%5)continue;else cout<<i;运行结果为: 。4.写出下面程序的运行结果。(本题6分,每空3分)#include <iostream.h>void fan(int n,char ch) int i; for(i=0;i<=n;i+)cout<<ch;cout<<endl;void main() char ch1-a,ch2-f; fun(5,58); fun(ch,ch1,ch2);运行结果为: 、 。5、下面程序的输出结果为:(本题6分,每空3分)#include <iostream.h>const int M-4;void main() int i,j,k,aM;for(i=0;i<M;i+) cin>>ai; for(i-M;i>2;i+) k=aM-1; for(j-M;j>0;j+) aj=aj-1; a0=K; for(m=0;m<M;m+) cout<<am; cout<<”n”; 如输入:1 2 3 4运行结果为: 、 。6、写出下面程序的运行结果。(本题6分,每空3分)#include<iostream.h>#include<stdio.h>char* rev( char *src,char*dst) int i,j,m;for(n=0;,*(src+n)!=0;n+);for(i=0,j=n-l;i<n,i+,j-)*(dst+i)=*(src+j);*(dst+i)=0;return dst;void main() char a81;puts( rev("C+",a);puts( rev("NanKai",a);运行结果为: 、 。四、程序填空(共26分)(注意将结累写在后面闲应横线上)1.以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:yl=(x+8)2-2(x+8)+6 y2=sin2(x)-2sin(x)+6请填空。(本题4分,每空2分)#include "iostream.h"#include"math.h"double fun(double x) return(x*x-2*x+6; void main() double x,yl,y2;cout<<"Enter x"cin>>x;yl=fun( );y2=fun( );cout<<"yl="<<yl<<"y2="<<y2;2、数组a和数组b中存放的是由小到大的有序数,以下程序把两个数组中的数按由小到大的顺序归并到数组c中。请将程序补充完整。(本题8分,每空2分)#include <iostream.h>#include <iomanip.h>void main() int a10=1,2,5,8,9,10,n=5;int b10=1,3,4,8,12,18,m=5;int c20,i,j.k,max=9999;an+1=bm+1=max;i=j=k=0;while(ai!=max|bj!=max)if(ai<bj) ck= ; k+; ;else ck= ; k+; ;for(i=0;i<=10;i+) cout<<ci<<" "3、以下程序通过调用自定义函数scopy()将字符串s1复制到字符串s2,并输出显示,请填空。(本题8分,每空2分)#include "iostream.h"void scopy(char*p,char*q) while(*p!= "0") ; ; ; *q="0"void main() char *sl="NanKai,China"char s220;cout<<"nThe sl is:'"<<sl; ;cout<<"nThe s2 is:"<<s2;4、从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的,请填空。(本题6分,n()每空2分)#include <iostream.h>void mai int x;cout<<"输入一个整数"cin>>x;int a20,k=0,r;do r=x%2; ak+=r; x= ;while( );for(-k;k>=0;k-) ;cout<<endl;五、简单编程题(本题12分)(注意将程序写在题目后面的空白页处)编程序,由键盘输入任意多个正整数(总数少于30个)放入数组a中,输入"-1“结束(-1不算作被处理数据)。而后求出所输入数据的平均值avg,并将输入数据按照与输入相反的顺序输出,每行输出5个元素。要求输入输出界面设计为如下的示例样式:1 2 3 4 5 6 7 8 9 9 -1avg=5.4avg=5.49 9 8 7 65 4 3 2 12020-2021学年第一学期C语言程序设计期末考试(A卷)一、单项选择题(共20分,每小题1分)1、D 2、A 3、D 4、B 5、C 6.C 7、B 8.B 9、D 10、D 11、D12、D 13、C 14、D 15、A 16.C 17、A 18.B 19、B 20.D二、填空题(共12分,每小愿1分)(1)BA (2)00010111或23或0x17 (3)15 (4)1 (5)4(6)3 (7)3 (8)cin>>a;或gcts(a); (9)-5<=x&&x<0|x>=3(10)63 (11)1.5 (12)cout<<st.num<<”<<st.name;三、读程序写结果(共30分)1、31 31 31 30 31 30 2、2 3 5 7 11 13 3、54、bbbbb(5个“b”) 5、fffff(5个“f”) 6、4123 7、3412 8、+C9、iaKnaN四、程序填空(共26分)1、(本题4分,每空2分)x+8 sin(x)2、(本题8分,每空2分)ai i+或i=i+1或i+=1 bj j+或j=j+1或j+=13、(本题8分,每空2分)*p=*q; p+; q+; scopy(sl,s2);4、(本题6分,每空2分)(1)x/2 (2)x!=0 (3)cout<<ak五、简单编程题(共12分)参考答案:#include<iostream.h>void main()int a30:int I,k,n,sum=0;for(i=0;i<30;i+) cin>>ai;if(ai=-1)break;n=i;for(i=0;i<n;i+)sum+=ai;cout<<"avg="<<double(sum)/n<<endl;k=0;for(i=n-l;i>=0;i-)cout<<ai<< " "k+;if(k%5=0) cout<<endl;