2022年青岛职业技术学院公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、C语言源程序的基本单位是________
2、下面程序段是找出整数的所有因子。请填空。
scanf(\"%d\",&x); i=1;for(;_______;)
{if(x%i==0)printf(\"%3d\",i); i++; }
3、下面程序段中循环体的执行次数是_______。 a=10;b=0;
do{b+=2;a-=2+b;}while(a>=0); 4、请读程序段: int x=1;
printf(\"%d\\n\",~x); 上面程序段的输出结果是_______。 5、请读程序段: unsigned a=16;
printf(\"%d,%d,%d\\n\",a>>2,a=a>>2,a);以上程序段的输出结果是_______。
6、在C语言中,用关键字_______定义单精度实型变量,用关键字_______定义双精度实型变量,用关键字_______定义字符型变量。
7、假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请填空。
a+=_______;b=a-_______;a-=_______; 8、下面程序段的运行结果是_______。 int i=5;char c[6]=\"abcd\"; do{c[i]=c[i-1];}while(--i>0); puts(c);
9、下面程序段的运行结果是_______。
char ch[]=\"600\";int a,s=0;
for(a=0;ch[a]>= '0'&&ch[a]<='9';a++) s=10*s+ch[a]-'o'; printf(\"%d\",s);
10、下面程序可求出图中方括号内的元素之积,请填空。 # include { int x[3][3]={7,2,1,3,4,8,9,2,6}; int s,*p; p=_______; s=*p*_______; printf(\"product=%d\ return(0); } 二、选择题 11、sizeof(float)是( )。 A.一个双精度型表达式 B.一个整型表达式 C.一种函数调用 D.一个不合法的表达式 12、下面4个选项中,是非法常量的选项是( )。 13、以下C程序的运行结果是。(注:口表示空格) #include printf(\"y=%3o\\n\",y); printf(\"y=%8o\\n\",y); printf(\"y=%#8o\\n\",y); return 0; } A.y=口口口2456 B.y=囗口□4630 y=口口口口口口口口2456 y=口口口口口口口04630 y= ########2456 y= ########4630 C.y=2456 D.y=4630 y=口口口口2456 y=口口口口4630 y=口口口02456 y=口口口04630 14、若有以下定义,则正确的赋值语句是( )。 int a,b;float x; A.a=1,b=2, B.b++; C.a=b=5 D.b=int(x); 15、一个C语言程序由( )。 A.一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成 16、在C语言中,一维数组的定义方式为:类型说明符数组名( )。 A.[常量表达式] B.[整型表达式] C.[整型常量]或[整型表达式] D.[整型变量] 17、以下描述中正确的是( ) A.while、do-while、for循环中的循环体语句都至少被执行一次 B.do-while循环中,while(表达式)后面的分号可以省略 C.while循环体中,一定要有能使while后面表达式的值变为“假”的操作 D.do-while 循环中,根据情况可以省略 while 18、C语言规定,简单变量作为实参时,它和对应形参之间的数据传递方式是( ) A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传回给实参 D.由用户指定传递方式 19、设有以下定义: char*cc[2]={\"1234\",\"5678\");则正确的叙述是( )。 A.cc数组的两个元素中各自存放了字符串”1234”和\"5678”的首地址 B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 C.cc是指针变量,它指向含有两个数组元素的字符型一维数组 D.cc数组元素的值分别是1234和5678 20、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( ) int main() {int*p,*q,a,b; p=&a; printf(\"input a:\"); scanf(\"%d\",*p); } A.*p表示的是指针变量p的地址 B.*p表示的是变量a的值,而不是变量a的地址 C.*p表示的是指针变量p的值 D.*p只能用来说明p是一个指针变量 21、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是( )。 w=1;x=2;y=3;z=4: m=(w 22、若运行以下程序时,从键盘输入Total<回车>,则下面程序的运行结果是( )。 #include {charc;int vl=0,v2=0; do {switch(c=getchar()) {case'a':v1+=1; case't':case'T':v2+=1; default:v1+=1;v2+=1; } while(c!='\\n'); printf(\"v1=%d,v2=%d\\n\",v1,v2); return 0; } A.v1=3,v2=4 B.v1=4,v2=4 C.v1=6,v2=8 D.v1=7,v2=9 23、若运行以下程序时,从键盘输入3.62.4<回车>,则下面程序的运行结果是( ) # include # include scanf(\"%f%f\ z=x/y; while(1) if(fabs(z)>1.0){x=y;y=z;z=x/y;} else break; printf(\"%f\\n\ return 0; } A)1.500000 B)1.600000 C)2.000000 D)2.40000024、以下程序的运行结果是( )。 #include return m; int main() {printf(\"m=%d\\n\",fun(10)); return(0); A.m=5 B.m=-6 C.m=6 D.m=-5 25、对两个数组a和b进行如下初始化: char a[]=\"ABCDEF\";charb[]={'A','B','C','D','E','F'};则以下叙述正确的是( )。 A.a与b数组完全相同 B.a与b长度相同 C.a和b中都存放字符串 D.a的长度比b长 三、读程序填空 26、若要求下列程序的输出结果为8.00,则[]中应填入的是_______。 #include 27、以下程序的输出结果为_______。 #include {short i; i=一4; printf(\"\\ni:dec=%d,oct=%o,hex=%x,unsigned=%u\\n\",i,i,i,i); return 0; } 28、下面函数func的功能是_______。 #include num=labs(num); do {k*=num%10; num/=10; }while(num); return(k); } int main() {long n; printf(\"\\nPlease enter a number:\"); scanf(\"%ld\",&.n); printf(\"\\nThe product of its digits is%ld.\",func(n)); return(0); } 29、以下程序可计算1门课程中10名学生成绩的平均分。请填空。 #include float average(float array[10]) {int i;float aver, sum=array[o]; for(i=1;_______;i++) sum+=_______; aver=sum/10; return(aver); } int main() {float score[10],aver;int i; printf(\"\\ninput 10 scores:\"); for(i=0;i<10;i++)scanf(\"%f\",&.score[i]); aver=_______; printf(\"\\naverage score is%5.2f\\n\",aver); return(0); } 30、数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。 # include 31、以下程序的功能是判断输入的某个年份是否是闰年。请填空。 #include scanf(\"%d\",&y); if(y%400==0)f=1; else if(_______)f=1; else_______; if(f)printf(\"%d is\",y); else printf(\"%d is not\",y); printf(\"a leap year\\n\"); return 0; } 32、下面程序的运行结果是_______。 #include for(i=j;i<=2*j;i++) switch(i/j) {case 0: case 1:printf(\"*\");break; case 2:printf(\"#\"); } return 0; } 33、以下程序把一个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组b中,然后输出b数组。(注意:二进制数的最低位放在数组的第一个元素中。)请填空。 #include {int b[16],x,k,r,i; printf(\"Enter a integer:\\n\"); scanf(\"%d”,&x); printf(\"%6d's binary number is:\",x); k=-1; do {r=x%2; k++; *(_______)=r; x/=2; }while(_______); for(i=k;i>=0;i--) printf(\"%1d\",*(_______)); printf(\"\\n\"); return(0); } 四、编程题 34、编写程序实现功能:输入整数a和b,若a2+b2>100,则输出a2+b2百位以上数字,否则直接输出a2+b2的和 35、试利用结构体类型编制一个程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。 参考答案 一、填空题 1、函数 2、i<=x 3、3 4、-2 5、1,4,16 6、【1】float【2】double【3】char 7、【1】b【2】b【3】b 8、aabcd 9、600 10、【1】&x[0][0]【2】(*(p+4))*(*(p+8)) 二、选择题 11、B 12、A 13、D 14、B 15、B 16、A 17、C 18、B 19、A 20、B 21、A 22、D 23、B 24、A 25、D 三、读程序填空 26、3.6 27、i:dec=-4,oct=177774,hex=fffc,unsigned=65532 28、计算整数num的各位数字之积。 29、【1】i<10【2】array[i]【3】average(score) 30、【1】i=1【2】b[i]=a[i]+a[i-1];【3】(i%3) 31、【1】y%4==0&&y%100!=0【2】f=0 32、****# 33、【1】b+k【2】x!=0【3】b+i 四、编程题 34、#include {int a,b,x,y; scanf(\"%d%d\",&a,&.b); x=a*a+b*b; if(x>100) {y=x/100;printf(\"%d\",y);} else printf(\"%d\",a+b); return 0 } 35、#include {struct study int mid; int end; int average; }math; scanf(\"%d%d\",&math.mid,&.math.end); math.average=(math.mid+math.end)/2; printf(\"average=%d\\n\",math.average); return 0; } 因篇幅问题不能全部显示,请点此查看更多更全内容