东北大学c语言编程试题及其答案
东北大学C语言题库
第一部分(选择题)
1、构成C语言的基本单位是________。你的答案是:正确答案是:B
过程
函数
语句
命令
2、设x为整型变量,不能正确表达数学关系:5 5<=""> x>5&&x<10 x==6||x==7||x==8||x==9 !(x<=5)&&(x<10) 3、在C语言中,逻辑运算符的优先级从高到低的排列顺序为_____。你的答案是:正确答案是:D &&、||、! ||、&&、! &&、!、|| !、&&、|| 4、下面语句中,正确的是_____。你的答案是:正确答案是:D printf("%c\n","student"); printf("%c\n","c"); printf("%s\n",&a); printf("%s\n","hello"); 5、对于for(表达式1;;表达式3)可以理解为_____。你的答案是:正确答案是:B for(表达式1;0;表达式3) for(表达式1;1;表达式3) for(表达式1;表达式1;表达式3) for(表达式1;表达式3;表达式3) 6、执行下面程序段的结果是_____。main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d",a,b); }你的答案是:正确答案是:B a=1,b=1 a=2,b=1 a=1,b=0 a=2,b=2 7、执行下面程序段的结果是_____。int x=0;do { printf(“%2d”,x--);}while(x);你的答案是:正确答案是:D 打印出321 打印出23 不打印任何结果 陷入死循环 8、设x=10,y=5;z=15,执行下面一段程序后z的结果是_____。If(x>y)if(y>z)x=y;else z=y;你的答案是:正确答案是:C 7 6 5 4 9、如果一个函数被说明为static,那么_____。你的答案是:正确答案是:B 该函数只能被main函数调用 该函数能被当前文件的函数调用,但不能被其他文件的函数调用 该函数不能被当前文件的函数调用,可以被其他文件的函数调用 任何文件的函数都可以调用该函数 10、下面关于局部变量的描述中,错误的是_____。你的答案是:正确答案是:D 函数的局部变量的有效范围只能在本函数 函数的形式参数也是局部变量 局部变量的名称不能和函数同名称 不同的函数中不能定义相同名称的局部变量 11、下列初始化字符数组的语句中,错误的是_____。你的答案是:正确答案是:A char str[5]="hello"; char str[]={'h','e','l','l','o','\0'}; char str[5]={"hi"}; char str[100]=""; 12、引用数组元素时,数组下标可以是_____。你的答案是:正确答案是:D 整型常量 整型变量 整型表达式 以上均可 13、已知:char str[10],*p=str; 下面的语句中正确的是_____。你的答案是:正确答案是:B str="ABC"; p="ABC"; *str="ABC"; *p="ABC"; 14、下面语句中,错误的是_____。你的答案是:正确答案是:D int i;int *p;p=&i; int i,*p;p=&a; int i,*p=&a; int i,*p;*p=i; 15、下面对于结构体类型的描述正确的是_____。你的答案是:正确答案是:A 结构体类型的大小为各成员变量所占内存的总和 结构体类型变量与简单数据类型变量的引用规则一致。 结构体类型的大小为其成员中所占内存空间最大的变量的大小 结构体类型的大小为其最后一个成员中所占内存空间的大小 16、C语言规定:在一个源程序中,main函数的位置________。你的答案是:正确答案是:C 必须在最开始 必须在系统调用的库函数的后面 可以任意 必须在最后 17、表达式18/4*sqrt(4.0)/8值的数据类型是________。你的答案是:正确答案是:C int float double 不确定 18、在c语言中,char型数据在内存中的存储形式是________。你的答案是:正确答案是:D 补码 反码 原码 ASCII码 19、阅读以下程序,当输入的数据形式为:25,13,10 x+y+z=48 x+y+z=35 x+z=35 不能确定 20、有如下程序void main() { float x=2.0,y;if(x<0.0) y=0.0;else if(x<10.0) y=1.0/x;else y=1.0;printf(“%f\n”,y);}该程序的输出结果是()。你的答案是:正确答案是:C 0.000000 0.250000 0.500000 1.000000 21、判断char型变量s是否为小写字母的正确表达式是______。你的答案是:正确答案是:C 'a'<=s<='z' (s>='a')&(s<='z') (s>='a')&&(s<='z') ('a'<=s)and('z'>=s) 22、执行以下语句后,y 的值为______。int x,y,z; x=y=z=0; ++x || ++y && ++z;你的答案是:正确答案是:A 1 2 不确定值 23、有如下程序段:int number=0; while(number++<=3) printf(“%d\n”,number++);则正确的执行结果是______。你的答案是:正确答案是:C 2 3 4 0 1 2 1 3 2 4 24、有如下程序void main() { int n=9;while(n>6) { n--;printf(“%d”,n);} } 该程序段的输出结果是______。你的答案是:正确答案是:B 987 876 8765 9876 25、要使以下程序段输出10个整数,请在空格中填入一个整数。for(i=0;i<=______;printf("%d\n",i+=2));你的答案是:正确答案是:B 15 18 20 10 26、设函数fun的定义形式为:fun(char ch,float x){…}则以下对函数fun的调用语句中正确的是______。你的答案是:正确答案是:B fun(“abc”,3) t=fun(‘D’,5) fun(‘ab’,3) fun(‘78’,1) 27、函数求sum(int n)的功能是计算自然数1到n的和,即1+2+…+n。Main() { printf("The sum=%d\n",sum (10)); } int sum(int n){ int s=0,i; for(i=0;i<=n;i++) ____________ }请从备选答案中选择一答案,补全程序。你的答案是:正确答案是:B s=s+n;return s; s=s+i;return s; return s; return s+=I; 28、设函数fun的定义形式为int fun(int a[],int n) { int s=0,i=0; for(i=0;i 3 5 7 9 29、若有说明:int a[10];则对数组元素的正确引用是________。你的答案是:正确答案是:D a[10] a[3,5] a(5) a[10-10] 30、以下不正确的定义语句是________。你的答案是:正确答案是:B double x[5]={2.0,4,0,6,0,8,0,10.0}; int y[5]={0,1,3,5,7,9}; char c1[]={'1','2','3','4','5'}; char c2[]={'\x10','\xa','\x8'}; 31、下面程序的运行结果是________。#include "stdio.h" main() { char str[]="SWLIA",c; int k; for(k=0;(c=str[k])!='\0';k++) { switch(c) { case 'I':++k;break; c你的答案是:正确答案是:B SWA SW* SW*A SW 32、以下能正确进行字符串赋值操作的是______。你的答案是:正确答案是:D char s[5]={"12345"}; char s[5]={'1','2','3','4','5',‘6’}; char *s;*s="12345"; char *s="12345"; 33、以下程序段的运行结果是______。Char a[ ]="program", *p; p=a; while (*p!='g') { printf("%c", *p-32); p++; }你的答案是:正确答案是:C PROgram PROGRAM PRO proGRAM 34、若有说明:char *pc[ ]={"aaa", "bbb", "ccc", "ddd"};,则以下叙述正确的是______。你的答案是:正确答案是:C *pc[0]代表的是字符串"aaa"的首地址 *pc[0]代表的是字符'a'的首地址 pc[0]代表的是字符串"aaa"的首地址 pc[0]代表的是字符'a'的首地址 35、下列程序的运行结果是______。#include GAGGAGA AGAAGAG GFEDCBA AGADAGA 36、定义如下的结构体描述同学信息struct Student { unsigned long id; char name[30]; char class[30]; }s;假设此同学的序号为1002,姓名为黎明,班级为冶金3班,则描述正确的为_____。你的答案是:正确答案是:C id=1002; name=黎明; class=冶金3班; id=1002; name=”黎明”; class=”冶金3班”; s.id=1002; https://www.360docs.net/doc/8210730092.html,=”黎明”; s.class=”冶金3班”; s.id=1002; https://www.360docs.net/doc/8210730092.html,=黎明; s.class=冶金3班; 37、用来描述C程序中注释的是_____。你的答案是:正确答案是:C // /* /**/ ** 38、下列变量中合法的定义是_____。你的答案是:正确答案是:A short _a=2-1 long if=0xabcL double 1_d=1.5e2 float a=1.5e2.7 39、当c的值不为0时,能够将c的值赋给变量a和b的是_____你的答案是:正确答案是:C c=b=a (a=c)||(b=c) (a=c)&&(b=c) a=c=b 40、设有以下程序段,执行后的输出结果是_____int x=100,y=200;printf("%d",(x,y));你的答案是:正确答案是:B 100 200 100,200 编译出错 第二部分(程序设计题) 1编程:要求输入整数a和b,若a*a+b*b大于100,则输出a*a+b*b百位以上的数字,否则输出两数之和a+b。 #include main() { int a,b,c; printf("please input a="); scanf("%d",&a); printf("please input b="); scanf("%d",&b); if(a*a+b*b>100) { c=(a*a+b*b)/100; printf("%d",c); } else printf("%d\n",a+b); } 2编程:根据以下函数关系:当x<=0,y=0;当0 #include #include main() { int x; float y; printf("please input x="); scanf("%d",&x); if(x<=0) { y=0; } else if((0 { y=x; } else if ((10 { y=10; } else y=sin(x); printf("%f\n",y); } 3编程:根据以下函数关系:当x 4编程:输入三个正整数x,y,z,将这三个数由小到大输出。 #include #include main() { int a[3],i,max,j; printf("please input the 3 numbers:"); for(i=0;i<3;i++) { scanf("%d",&a[i]); } for(i=0;i<3;i++) { for(j=0;j<2;j++) if(a[j]>a[j+1]) { max=a[j]; a[j]=a[j+1]; a[j+1]=max; } } printf("the result is"); for(i=0;i<3;i++) printf(" %d",a[i]); printf("\n"); } #include main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a;a=b;b=t; } if(a>c) { t=a;a=c;c=t; } if(b>c) { t=b;b=c;c=t; } printf("The answer is:%d,%d,%d\n",a,b,c); } 5编程:从键盘输入一个年号,判断该年号是否为闰年,并输出结果。闰年是能被4整除但不能被100整除;或能被100整除且能被400整除的年号。练习书上有,第一页 6编程实现四位电话号码的升位。原来电话号码为1、3、5、7、9打头的号码前加2,原来电话号码为2、4、6、8打头的加3,例如:输入1234,则输出:21234。 #include main() { long x,y; printf("please input telephone number "); scanf("%d",&x); y=x/1000; switch(y) { case 1: case 3: case 5: case 7: case 9:x=2*10000+x;break; case 2: case 4: case 6: case 8:x=3*10000+x;break; } printf("the result is %ld\n",x); } 7编程实现四位电话号码的升位。原来电话号码为1、2、3、4、5打头的号码前加3,原来电话号码为6、7、8、9打头的加2,例如:输入1234,则输出:31234。参考6 8编程:已知分段函数:当x>10时,y=2*x+1;当1 9编程:输入3个正整数,判断能否组成三角形,如果能够组成三角形,则输出三角形的面积,否则输出错误。三角形面积公式:area=sqrt(s(s-a)(s-b)(s-c)),其中s=1/2(a+b+c)。(提示:sqrt(x)属于math.h) #include #include main() { float x,y,z; float area,s; printf("please input:"); scanf("%f%f%f",&x,&y,&z); if((x+y<=z)||(z+y<=x)||(x+z<=y)) printf("no\n"); else { s=(x+y+z)/2; area=sqrt(s*(s-x)*(s-y)*(s-z)); printf("%f\n",area); } 10编程:已知分段函数,当x<=0时,y=3*x;当0 11编程:判定用户输入一个不大于999的正整数是否为一个回文数。回文数是指正读和反读都相同的数。 #include main() { int a,x,y,z; printf("please input a number "); scanf("%d",&a); if(0 { x=a/100; y=(a-100*x)/10; z=a%10; if(x==0) { if(y==z) printf("Yes\n"); else printf("no\n"); } else if(x==z) printf("yes\n"); else printf("no\n"); } } 12编程:从键盘输入一个两位数的正整数a,将其转换形成一个整数b并输出b。转换的方式是:将a中较大的数码作为b的十位,剩余的数码作为b的个位。例如,当输入a=49,则结果b=94。 #include main() { int a,b,x,y; printf("please input a number "); scanf("%d",&a); if(0 x=a/10; y=a%10; if(x>=y) { b=a; } else { b=10*y+x; } printf("the result is %d",b); } else printf("a wrong number"); } 13编程:从键盘输入一个两位数的正整数a,将其转换形成一个整数b并输出b。转换的方式是:将a中较小的数码作为b的十位,剩余的数码作为b的个位。例如,当输入a=54,则结果b=45。参考12 14初始化数组a中包含10个不同的整数,要求从键盘输入一个整数,若这个整数在数组中则从数组中删除这个整数并输出删除后的数组,否则输出no。 #include main() { int a[10]={2,3,4,1,5,6,7,8,9,10},i,x,j,k; printf("please input a number "); scanf("%d",&x); for(i=0;i<10;i++) { if(a[i]==x) { for(j=i;j<10;j++) a[j]=a[j+1]; for(k=0;k<9;k++) printf("%3d",a[k]); break; } else if(i==9) printf("no"); } } 15初始化一字符串(字符串中的每个字符各不同),要求从键盘输入一个字符,删除字符串中和输入字符相同的字符,输出处理后的字符串。 #include main() { char a[7]={"howare"}; char b[1]; int i,j,k; printf("please input the string :"); gets(b); for(i=0;i<7;i++) { if(a[i]==b[0]) { for(j=i;j<5;j++) { a[j]=a[j+1]; } for(k=0;k<5;k++) printf("%c",a[k]); printf("\n"); break; } else if(a[i]=='\0') { printf("no\n"); break; } } } 16计算一个4*4矩阵的主对角线的元素之和以及最大元素的值。要求初始化矩阵,输出计算结果并输出该矩阵。 #include main() { int a[4][4]={{2,123,1,5},{4,22,56,23},{5,7,89,23},{1,2,3,4}}; int i,sum=0,max,j; for(i=0;i<4;i++) sum=sum+a[i][i]; max=a[0][0]; for(i=0;i<4;i++) for(j=0;j<4;j++) if(max max=a[i][j]; } printf("the sum is %d and the max number is %d\n",sum,max); } 17计算一个3*3矩阵的所有元素之和以及所有元素中的最大元素的值。要求初始化矩阵,输出计算结果并输出该矩阵。参考16,懒得弄了 18初始化一字符串(长度小于20个字符),取出第3个字符到第7个字符组成的子串,输出该子串。 #include main() { char a[20]={"asldfkjasldkf"}; int i; puts(a); for(i=2;i<7;i++) printf("%c",a[i]); printf("\n"); } 19编程计算一个a[3][4]数组的最小值所在位置,输出该位置以及a[3][4]矩阵。要求初始化矩阵。参考16 20初始化一矩阵a[4][4],计算每行的最大元素值,要求输出原始矩阵以及每行的最大元素值。 #include main() { int a[4][4]={{2,123,1,5},{4,22,56,23},{5,7,89,23},{1,2,3,4}},i,j,max; for(i=0;i<4;i++) { max=a[i][0]; for(j=0;j<4;j++) { printf("%3d",a[i][j]); } printf("\n"); } for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(max max=a[i][j]; } } printf("the max number is %d\n",max); } 21初始化一矩阵a[4][4],计算每列的最大元素值,要求输出原始矩阵以及每列的最大元素值。参考20 22编程计算a[3][4]数组的最大值所在位置,输出该位置以及a[3][4]矩阵。要求初始化矩阵。参考20 23编程实现:计算矩阵a[3][4]每行元素的和。要求输出原始矩阵以及每行元素的和值。要求初始化矩阵。参考20 24编程实现:计算矩阵a[3][4]每列元素的和。要求输出原始矩阵以及每列元素的和值。要求初始化矩阵。参考20 25一维数组中存放任意10个整数,从第四个数据开始直到最后一个数据,依次向右移动一个位置。输出原始数据和移动后的结果。要求初始化数组。例如:原始数据为:6 10 2 9 8 7 17 18 23 45,输出结果为:6 10 2 9 9 8 7 17 18 23 45。 #include main() { int a[11]={6,10,2,9,8,7,17,18,23,45},i; printf("the origin strings is"); for(i=0;i<10;i++) printf("%3d",a[i]); printf("\n"); for(i=10;i>3;i--) a[i]=a[i-1]; printf("the changed strings is"); for(i=0;i<11;i++) printf("%3d",a[i]); printf("\n"); } 26编程实现:在任意字符串a中将与字符c相同的所有元素的下标值分别存放在数组b 中,输出字符串a和数组b。要求初始化数组a。懒得弄,太简单 27初始化一个存放10个整数的数组,删除其中所有的小于0的数据。例如:当前的数据为1 –1 –6 8 9 6 6 –5 6 9 ,则输出结果为1 8 9 6 6 6 9。 #include main() { int a[10]={1,-1,-6,8,9,6,6,-5,6,9}; int i; printf("the origin string is"); for(i=0;i<10;i++) printf("%3d",a[i]); printf("\n"); printf("the change string is"); for(i=0;i<10;i++) { if(a[i]>0) printf("%3d",a[i]); } printf("\n"); } 28已知4X4矩阵,求行下标和列下标均为偶数的元素之和, 要求输出原始矩阵以及和值。提示:例如A[0][0]、A[0][2]的行下标和列下标均为偶数。要求初始化矩阵。 #include main() { int a[4][4]={{2,123,1,5},{4,22,56,23},{5,7,89,23},{1,2,3,4}}; int i,sum=0,j; for(i=0;i<3;i=i+2) { for(j=0;j<3;j++) printf("%d",a[i][j]); } for(i=0;i<3;i=i+2) { for(j=0;j<3;j=j+2) sum=sum+a[i][j]; } printf("the result is %d\n",sum); } 29已知4X4矩阵,求行下标和列下标均为奇数的元素之和, 要求输出原始矩阵以及和值。例如A[1][1]、A[1][3]的行下标和列下标均为奇数。要求初始化矩阵。参考28 30函数void fun(int a[],int n,int *small,int *big),该函数的功能是分别求出一维数组a中所有奇数项中的最小值与所有偶数项中的最大值,形参n给出数组中数据的个数;利用指针small返回奇数项中的最小值,利用指针big返回偶数项中的最大值。要求:在主调函数中初始化一个一维数组,并在主调函数中调用函数fun后,在主调函数中输出结果。 #include void fun(int a[],int n,int *small,int *big) { int max,min,i,j; min=a[0]; max=a[1]; if(n%2==0) { for(i=0;i<=n-2;i=i+2) { if(min>a[i]) min=a[i]; } for(j=1;j<=n-1;j=j+2) { if(max max=a[j]; } *small=min; *big=max; } else { for(i=0;i<=n;i=i+2) { if(min>a[i]) min=a[i]; } for(j=1;j<=n-1;j=j+2) {