c#发展

首页 » 常识 » 常识 » 北京交通大学C语言程序设计专复习
TUhjnbcbe - 2025/2/28 16:59:00
一、单选题1.若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是(A)。for(i=5;i;i--)for(j=0;j4;j++){...}A.20B.25C.24D..若有以下定义:chars=’\’;则该语句(A)。A.使s的值包含1个字符B.定义不合法,s的值不确定C.使s的值包含4个字符D.使s的值包含3个字符3.设x,能正确表示逻辑关系:a=10或a=0的C语言表达式是(D)。A.a=10ora=0B.a=0

a=10C.a=10a=0D.a=10

a=04.设a为整型变量,不能确定表达数学关系10a15的为C语言表达式是(C)。A.10a15B.a==11

a==12

a==13

a==14C.a10a15D.!(a=10)!(a=15)5.设intx=1,y=1;表达式(!x

y--)的值是(B )。A.0
  B.1
  C.2
  D.-16.与y=(x0?1:x0?-1:0);的功能相同的if语句是(A )。A.if(x0)y=1;
  
  B.if(x)elseif(x0)y=-1;
   if(x0)y=1;elsey=0;
  
  
  elseif(x0)y=-1;elsey=0;C.y=-1
  
  
  
  D.y=0;if(x)
  
  
  
  
   if(x=0)if(x0)y=1;
  
  
  
  if(x0)y=1;elseif(x==0)y=0;
  
  
  elsey=-1;elsey=-1;7.以下选项中正确的整型常量是(B)。A.13.B.-20C.1,D..以下叙述中正确的是(B)。A.a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。C.执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0。D.已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。9.与十进制数47相等的十六进制数是(A)。A.2FB.C.32FD..在C语言中,数字0x是一个(D)。A.非法数B.八进制数C.十进制数D.十六进制数11.已知inti,a;执行语句“i=(a=2*3,a*5),a+6;”后,变量a的值是(D)。A.36B.30C.12D..C语言中规定函数的返回值的类型是由(D)。A.return语句中的表达式类型所决定B.调用该函数时系统临时决定C.调用该函数时的主调用函数类型所决定D.在定义该函数时所指定的函数类型所决定二、判断题13.在C语言中,实参与其对应的形参各占独立的存储单元。(A)A.对B.错14.指向不同类型数组的两个指针不能进行有意义的比较。(A)A.对B.错15.一个数组能够存储不同类型的数据。(B)A.对B.错16.内存单元的地址与内存单元中的内容是两个相同的内容。(B)A.对B.错17.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是8。(A)A.对B.错18.只能在循环体内和switch语句体内使用break语句。(A)A.对B.错三、程序题19.下列程序的运行结果是。main(){inta=4,b=3,c=1,d=2,x=0;if(ab){if(cd)x=1;}elsex=2;printf(“%d\n”,x);}参考答案:.补充完整以下程序,实现数组第一个元素和最后一个元素的交换,第二个元素和倒数第二个元素的交换,依次类推。voidfunc(inta[],intn){intj,temp;/*n为数组元素个数*/for(j=0;j=;j++){temp=a[j];;a[n-1-j]=temp;}}main(){intx[5]={2,5,1,7,8},len=5,k;func();/*调用函数*/for(k=0;klen;k++)printf(“%2d”,x[k]);}参考答案:n/2;a[j]=a[n-1-j];x,len21.编写程序,求满足1+2+3+???+n中的最小的n值并输出。参考答案:#includestdio.hmain(){intn=0,sum=0;do{++n;sum=sum+n;}while(sum=);printf(n=%d,n);}北交《C语言程序设计(专)》复习题B四、单选题1.说明语句“int(*p)();”的含义是___C___。A.p是一个指向一维数组的指针变量B.p是指针变量,指向一个整型数据C.p是一个指向函数的指针,该函数的返回值是一个整型D.以上都不对2.以下叙述正确的是(D )。A.do-while语句构成的循环不能用其它语句构成的循环来代替。B.do-while语句构成的循环只能用break语句退出。C.用do-while语句构成的循环,在while后的表达式为非零时结束循环。D.用do-while语句构成的循环,在while后的表达式为零时结束循环。3.下列程序执行后的输出结果是(A)。main(){intx=’f’;printf(“%c\n”,’A’+(x-‘a’+1));}A.G
   B.H
   C.I
  D.J4.执行下面的程序段后,变量k中的值为(A)。intk=3,s[2];s[0]=k;k=s[1]*10;A.不定值
  B.33
  C.30
  D..若已定义:inta[]={0,1,2,3,4,5,6,7,8,9],*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是(D )。A.a[p-a]
  B.*(a)
  C.p
  D.a[10]6.下列程序执行后的输出结果是(A )。voidfunc(int*a,intb[]){b[0]=*a+6;}main(){inta,b[5];a=0;b[0]=3;func(a,b);printf(“%d\n”,b[0]);}A.6
   B.7
  C.8
   D.97.以下不能定义为用户标识符是(D)。Main_0_intsizeof8.合法的数组定义是____D____。A.inta[]=string;B.inta[5]={0,1,2,3,4,5};C.vhsts=string;D.chara[]={0,1,2,3,4,5};9.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是__C__。A.1B.2.0C.2D.2..有下列程序段,while循环执行的次数是__A___。intk=0;while(k=1)k++;A.无数次B.有语法错,不能执行C.一次也不执行D.执行一次11.已知:char*p,*q;,下列选项中正确的语句是___C___。A.p*=3;B.p/=q;C.p+=3;D.p+=q;12.为求出s=10!的值,则变量s的类型应当为___C___。A.intB.unsignedC.longD.以上三种类型均可五、判断题13.在C语言中,for循环的表达式一是必须要的。(B)A.正确B.错误14.对于二维数组a[2][3],则a[1]表示是第二行的首地址。(A)A.正确B.错误15.c语言中,每个函数都必须要有一个且只有一个main函数。(B)A.正确B.错误16.在if-else语句中,配对规则是else总是与最近的未配对的if配对。(A)A.正确B.错误17.一个算法应该具备有穷性、确定性、输入、输出和有效性。(A)A.正确B.错误18.C语言中,函数的隐含存储类别是extern。(A)A.正确B.错误六、程序题19.阅读程序,写出sort函数的功能和整个程序的运行结果。#includestdio.hvoidsort(inta[],intn){inti,j,t;for(i=0;in-1;i+=2)for(j=i+2;jn;j+=2)if(aa[j]){t=a;a=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i10;i++)printf(%d,,aa);printf(\n);}参考答案:sort函数的功能:对奇数单元的倒序排列。运行结果:9,2,7,4,5,6,3,8,1,1.下列程序的运行结果是______________________。#includestdio.h#includemath.hmain(){inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf(“%f\n”,z);}参考答案:13.70021.补全下列程序______________________。已知能被4整除而不能被整除的或者能被整除的年份是润年,则判断某一年是否是润年的程序如下:main(){intyear,leap;scanf(“%d”,year);if____________________leap=1;elseleap=0;if______________________printf(“是润年”);elseprintf(“不是润年”);}参考答案:(year%4==0year%!=0)

year%==0);(leap)北交《C语言程序设计(专)》复习题解析A七、程序题1.简述字符常量和字符串常量的区别。考核知识点解析:本题属于基本概念的考核。答案:字符常量是用单引号括起来的一个字符,字符串常量是由一对双引号括起来的字符序列。字符常量用字符变量来存放,实际存放的是该字符在机器字符集中的ASCII码值,字符串常量是用一个字符数组来存储的,字符串在存储时末尾被系统自动加上转义字符\0。2.编程:输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。例如,a[5]={2,3,4,5,6},b[6]={3,5,7,9,10,-1},则输出3、5。考核知识点解析:首先利用for循环为两个数组元素赋值,然后利用for循环的嵌套判断相同元素。答案:#includestdio.h#defineNA6#defineNB8voidmain(){floata[NA],b[NB];inti,j;for(i=0;iNA;i++)scanf(%f,a);for(i=0;iNB;i++)scanf(%f,b);for(i=0;iNA;i++)for(j=0;jNB;j++)if(a==b[j]){printf(%f\n,a);break;}}3.阅读以下程序swap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}swap(int*p1,int*p2){int*p;*p=*p1;*p1=*p2;*p2=*p;}swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}1)以上三个函数功能是否相同?请写出原因。2)以上哪个函数可以实现两个数的交换?3)对不能实现两个数交换的函数进行修改,使其能实现。考核知识点解析:指针变量是地址变量,即存放地址的变量。本题应了解指针变量的定义方法和使用方法。答案:1)三个函数实现的功能都不同,第一个函数可以实现两个数值的交换;第二个函数不能正常实现两个数值的交换,因为函数中定义的局部指针变量p,没有指向确定的变量,因此p是不确定的值,当执行*p2=*p语句时不能得到预期结果;第三个函数不能实现两个数值的交换,因为main()中pa和pb作为实参分别传给swap()的形参p1和p2,在swap()函数中实现了p1和p2的交换,但是函数调用结束返回main()时,形式参数p1和p2均为释放,不能反向传递给pa和pb,所以不能实现a和b的值的交换。2)第一个函数能够实现两个数的交换。3)第二、三个函数均修改为如下程序可以实现两个数的交换。swap(int*p1,int*p2){intc;int*p=c;*p=*p1;*p1=*p2;*p2=*p;}4.下列程序的运行结果是____________。#includestdio.h#includemath.hmain(){inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf(“%f\n”,z);}考核知识点解析:本题应重点了解各种算术运算符的使用规则,以及优先级。同时了解sqrt函数以及强制类型转换符的使用方法。答案:13.7005.编写程序将一个数组中的数按逆序重新存放并输出(程序中数组的元素个数自定,逆序时不使用辅助数组)。如:输入5个数3、9、7、6、1,逆序存放后数组是1、6、7、9、3。考核知识点解析:利用for循环实现数组元素的交换,重点是如何表示首尾对应的元素,如数组共10个元素,第1个元素的对应元素是第10个元素,第2个元素的对应元素是第9个元素,以此类推。答案:#includestdio.hmain(){inta[10],i,temp;printf(请输入10个整数:\n);for(i=0;i10;i++)scanf(%d,a);printf(\n原始顺序:);for(i=0;i10;i++)printf(%d,a);for(i=0;i5;i++){temp=a;a=a[9-i];a[9-i]=temp;}printf(\n逆序后的顺序:);for(i=0;i10;i++)printf(%d,a);}北交《C语言程序设计(专)》复习题解析B八、程序题1.写出下列程序的输出结果。#includestdio.hmain(){inti,j,a[2][3]={1,2,3,4,5,6},b[3][2];for(i=0;i2;i++){for(j=0;j3;j++){printf(%5d,a[j]);b[j]=a[j];}printf(\n);}for(i=0;i=2;i++){for(j=0;j=1;j++)printf(%5d,b[j]);printf(\n);}}考核知识点解析:本题首先利用for循环的嵌套引用二维数组的元素,将a数组中的元素赋值给b数组中,然后利用for循环的嵌套输出b数组中的元素。答案:2.阅读下列程序,回答下列问题。main(){inti,n=0;for(i=2;i5;i++){do{if(i%3)continue;n++;printf(c);}while(!i);n++;printf(d);}printf(n=%d\n,n);}1)分别写出continue语句运行的次数、第一个n++运行的次数、第二个n++运行的次数。2)写出程序的运行结果。考核知识点解析:continue语句的作用是结束本次循环,即跳过循环体中下面未执行的语句,接着执行下一次是否执行循环的判定,而不是终止整个循环的执行。答案:1)continue语句运行的次数:第一个n++运行的次数是1,第二个n++运行的次数是3。2)运行结果:n=43.阅读程序,写出运行结果。#includestdio.hfunc(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;return(m);}main(){intk=4,m=1,p;p=func(k,m);printf(%d,,p);p=func(k,m);printf(%d\n,p);}考核知识点解析:静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。答案:8,.编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后调用该函数求1——n的偶数和并输出。考核知识点解析:利用for循环和if语句的嵌套依次判断相应数值是否是偶数,如果是偶数则加入到和变量中。答案:#includestdio.hlongsum(intn){inti;longsum=0;for(i=1;i=n;i++){if(i%2==0)sum=sum+i;}returnsum;}main(){intn;longs;printf(\nEntern:);scanf(%d,n);s=sum(n);printf(Thesis%ld,s);}5.使用指针编写程序,输入一行字符,统计出其中字母、数字和其它字符的个数。考核知识点解析:利用while循环遍历字符串,当出现\0字符时,字符串结束;否则依次取出字符,利用if语句判断字符是字母、数字还是其他字符,并用相应的变量计数。答案:#includestdio.hmain(){charch[20],*p;intletter=0,digit=0,other=0;printf(请输入:);scanf(%s,ch);p=ch;while(*p!=\0){if((*p=a*p=z)

(*p=A*p=Z))letter++;elseif(*p=0*p=9)digit++;elseother++;p++;}printf(letter=%d,digit=%d,other=%d,letter,digit,other);}

1