2022年河套学院公共课《C语言》科目期末试卷A(有答案)
一、填空题
1、设x=10100011,若要通过x*y使x的高4位取反,低4位不变,则y的二进制数是_______。
2、C语言的源程序必须通过【 】和【 】后,才能被计算机执行。 3、C语言源程序的基本单位是________
4、在C语言中,用关键字_______定义单精度实型变量,用关键字_______定义双精度实型变量,用关键字_______定义字符型变量。
5、若x和n均是int型变量,且x的初值为12,n的初值为5,则执行表达式x%=(n%=2)后x的值为_______。 6、若有以下定义和语句: int*p[3],a[6],i; for(i=0;i<3;i++) p[i]=8&a[2*i];
则*p[0]引用的是a数组元素_______,*(p[1]+1)引用的是a数组元素_______。 7、下面程序段的运行结果是_______。 x=2;
do{printf(\"*\");x--;)while(!x==0);
8、假设变量a、b和c均为整型,以下语句借助中间变量t把a、b和c中的值进行交换,即把b中的值给a,把c中的值给b,把a中的值给c。例如:交换前,a=10、b=20、c=30;交换后,a=20、b=30、c=10。请填空。
_______;a=b;b=c;_______;
9、已有定义int a;float b,x;char cl,c2;为使a=3、b=6.5、x=12.6、cl='a'、c2='A',正确的scanf函数调用语句是_______,数据输入的形式应为_______。
10、假设M为已经声明的符号常量,则定义一个具有M×M个元素的双精度型数组a,且所有元素初值为0的形式是_______。
二、选择题
11、已知各变量的类型说明如下: int k,a,b;
unsigned long w=5;
double x=1.42;则以下不正确的表达式是( )。 A.x%(-3) B.w+=-2
C.k=(a=2,b=3,a+B. D.a+=a-=(b=4)*(a=3) 12、表达式18/4*sqrt(4.0)/8值的数据类型为( ) A.int B.float C.double D.不确定
13、以下能正确地定义整型变量a,b和c并为其赋初值5的语句是( )。 A.int a=b=c=5; B.int a,b,c=5;C.a=5,b=5,c=5;D.a=b=c=5; 14、若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( )
A.scanf(\"%d%lx,%le\",&x,&y,&z); B.scanf(\"%2d*%d%1f\",&x,&y,&z); C.scanf(\"%x%*d%o”,&x,&y);
D.scanf(\"%x%0%6.2f\",&x,&y,&z);
15、若有说明:inta[3][4];,则对a数组元素的非法引用是( )。 A.a[o][2*1] B.a[1][3] C.a[4-2][ o] D.a[o][4] 16、一个C语言程序由( )。
A.一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成 17、在下面的程序段中( )。
Int t,x;
for(t=1;t<=100;t++) {scanf(\"%d”,&x); if(x<0)continue; printf(\"%3d\",t); }
A.当x<0时整个循环结束 B.x≥0时什么也不输出
C.printf函数永远也不执行 D.最多允许输出100个非负整数 18、以下程序有语法性错误,有关错误原因的正确说法是( )。
#include int main() {int G=5,k; void prt_char(); -----k=prt_char(G); ---
}
A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线
19、若要对a进行++运算,则a应具有下面说明( )
A.int a[3][2];B.char*a[]={\"12\",\"ab\;C.char(*A.[3];D.int b[10],*a=b; 20、若有说明语句,则以下不正确的叙述是( )。
char a[]=\"It is mine\";char*p=\"It is mine\"; A.a+1表示的是字符t所在存储单元的地址 B.p指向另外的字符串时,字符串的长度不受 C.p变量中存放的地址值可以改变 D.a中只能存放10个字符
21、以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
#include #include float f(float,float); int main(){floatx,y,z,sum;
scanf(\"%f%1%f\",8.x,&y,8.z); sum=f(【】)+f(z+y,z-y); printf(\"sum=%fNn\",sum); return(0); }
float f(float a,float B. {float value; value=a/b; return(value); }
A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y 22、下面程序的运行结果是( )。
#include int main(){char ch[7]={\"12ab56\; int i,s=0; for(i=0;ch[i]>= '0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'o'; printf(\"%d\\n\",s); return0; }
A.1 B.1256 C.12ab56 D.15
23、下面程序段的运行结果是( )。
char a[7]=\"abcdef\"; char b[4]=\"ABC\"; strcpy(a,B.; printf(\"%c\",a[5]);
A.口 B.\\0 C.e D.f(其中口表示1个空格) 24、执行以下程序段后的输出是( )。 Int i=-1;
if(i<=0)printf(”****\\n\") else
printf(\"%%%%\\n\");
A.**** B.有语法错,不能正确执行 C.%%%%C D.%%%% 25、下面程序的运行结果是( )。 #include int main() {int y=10; do{y--;} while(--y);printf(\"%d\\n\",y--); return 0; }
A)-1 B)1 C)8 D)0
三、读程序填空
26、已有定义int d=-2;执行以下语句后的输出结果是_______。
printf(\"*d(1)=%d*d(2)=%3d*d(3)=%-3d*\\n\",d,d,d); printf(\"*d(4)=%o*d(5)=%7o*d(6)=% 7o*\\n\",d,d,d); 27、以下程序的输出结果是_______。
#include int main() {int x=1,y=2;printf(\"x=%dy=%d*sum*=%d\\n\",x,y,x+y); printf(\"10 Squared is:%d\\n\",10*10); return 0; }
28、以下程序的功能是:输入一个小写字母,将字母循环后移5个位置后输出。例如’a’变成’f’,w’变成b’。请填空。
#include int main() {char c; c=getchar();if(c>='a'8&&.c<='u')【l】: else if(c>='v√8&8.c<='z)_______; putchar(c);
return 0; }
29、以下程序的运行结果是_______。
# include int main() { intx,y,z; x=3; y=3; z=x==y;printf(\"z=%d\\n\ return 0; }
30、当运行以下程序时,从键盘输入“China#<回车>”,则下面程序的运行结果是_______。
#include int main(){int vl=0,v2=0;char ch;
while((ch=getchar())!='#’) switch(ch) { case'a’: case'h': default:v1++; case′o':v2++;
printf(\"%d,%d\\n\",v1,v2); return 0; }
31、以下程序可计算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); }
32、下面程序的功能是求矩阵a的两条对角线上的元素之和。请填空。
#include int main(){int a[3][3]={1,3,6,7,9,11,14,15,17},s1=0,s2=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j)s1=s1+a[i][j]; for(i=0;i<3;i++) for(_______;_______;j--) if((i+j)==2)s2=s2+a[i][j]; printf(\"s1=%d,s2=%d\\n\",s1,s2);
return 0;
}
33、若有以下输入(口表示空格),则下面程序的运行结果是_______。
7□8口5口4口6口7口9口10口3口2口4口-1<回车> #include int main(){int b[51],i,n=1,p,*q=b+1; scanf(\"%d\",q);
while(*q>-1){q++;n++;scanf(\"%d\",q);} p=1;
for(i=2;i<=n;i++) if(*(b+i)>*(b+p))p=i;
printf(\"p=%2d,b[%1d]=%3d\\n\",p,p,*(b+p)); return(0); }
四、编程题
34、编写程序实现功能:对于给定的一个百分制成绩,改用相应的五级分成绩表示。设:90分以上为A,80~分为B,70~79分为C,60~69分为D,60分以下为E(要求用switch语句实现)。
35、编写程序,统计d输入的命令行中第二个参数所包含的英文字符个数。
参
一、填空题
1、11110000
2、【1】编译【2】连接 3、函数
4、【1】float【2】double【3】char 5、0
6、【1】a[0]【2】a[3] 7、**
8、【1】t=a【2】c=t
9、【1】scanf(\"%d%f%f%c%c”,&a,&.b,8.c1,8.c2); 【2】3囗6.5囗12.6aA<回车> (注:答案中的囗代表空格) 10、double a[M][M]={0};
二、选择题
11、A 12、C 13、A 14、D 15、D
16、B
17、D 18、C 19、D 20、D 21、B 22、A 23、D 24、B 25、D
三、读程序填空
26、*d(1)=-2*d(2)=囗-2*d(3)=-2囗**d(4)=177776*d(5)=囗177776*d(6)=177776囗* (注:答案中的囗代表空格)
27、x=1 y=2*sum*=310 Squared is:100 28、【1】c=c+5【2】c=c-21 29、z=1 30、5,5
31、【1】i<10【2】array[i]【3】average(score) 32、【1】j=2【21j>=0 33、p=8,b[8]=10
四、编程题
34、#include int main(){int score,temp,log; char grade; log=1; while(log)
{printf(\"enter score:\"); scanf(\"%d”,8.score); if((score>100)|l(score<0)) printf(\"\\n error,try again!\\n\"); else log=0;
if(score==100)temp=9;
else temp=(score-score%10)/10;switch(temp)
{case 0:case 1:case 2: case 3:case 4:
case 5: grade='E';break; case 6:grade='D';break; case 7:grade='C';break; case 8:grade='B';break; case 9:grade='A';
printf(\"score=%d,grade=%c\\n\",score,grade); return 0; }
35、#include #include int main(int argc,char*argv[]) {char*str; int num=0; if(argc==2)
{str=argv[1]; while(*str)
if(isalpha(*str++))num++; printf(\"\\nThe count is:%d.\\n\",num); }
return 0; }