2022年北京科技大学公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、为建立如图10-5所示的存储结构(即每个结点两个域,data是数据域,next是指向结点的指针域),请将定义补充完整。
struct s{char data; _______ }node;
2、C语言的源程序必须通过【 】和【 】后,才能被计算机执行。 3、在C语言源程序中,一个变量代表【 】。
4、若x和n均是int型变量,且x和n的初值均为5,则执行表达式x+=n++后x的值为_______,n的值为_______。
5、C语言中的标识符可分为关键字、_______和_______3类。
6、设x的二进制数是11001101,若想通过x&y运算使x中的低4位不变,高4位清零,则y的二进制数是_______。
7、下面程序段是找出整数的所有因子。请填空。
scanf(\"%d\",&x); i=1;for(;_______;)
{if(x%i==0)printf(\"%3d\",i); i++; }
8、设有如下定义:
#define SWAP(T,X,Y){T=X;X=Y;Y=T;}
以下程序段将通过调用宏实现变量x和y内容的交换,请填空。
Double x=2.5,y=6.4,z;SWAP(_______); 9、下面程序wdm的运行结果是_______。
int i,x[10]={2,3,0,3,0,2,3,2,1,3},y[4]={0}; for(i=0;i<10;i++)y[x[i]]++; printf(\"%d\\n\",y[3]);
10、若想输出b数组的10个元素,则下面存在错误的程序行是_______。(每个程序行前面的数字代表行号。)
1 int main()
2 {int b[10]={1,3,5,7,9,2,4,6,8,10},k; 3 for(k=0;k<10;k++,b++) 4 printf(\"%4d\",*b); 5 return0; 6 }
二、选择题
11、下面4个选项中,是合法浮点数的选项是。( ) A.+1e+1 B.-.60 C.123e D.-e3
5e-9.4 12e-4 1.2e-4. 8e-4 03e2 -8e5 +2e-1 5.e-0 12、下列4组选项中,不是C语言关键字的选项是。( ) A.define B.getc C.include D.while
IF char scanf go
Type printf case pow
13、C语言规定:在一个源程序中,main函数的位置( ) A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后 14、一个C语言程序由( )。
A.一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成 15、若有以下程序段:
int a[]={4,0,2,3,1},i,j,t; for(i=l;i<5;i++) {t=a[i];j=i-1; while(j>=0&&t>a[j] {a[j+1]=a[j];j--;} a[j+1]=t;
则该程序段的功能是( )。
A.对数组a进行插入排序(升序)B.对数组a进行插入排序(降序) C.对数组a进行选择排序(升序)D.对数组a进行选择排序(降序) 16、以下C程序的运行结果是。(注:口表示空格)
#include int main(){int y=2456;
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 17、若有说明语句,则以下不正确的叙述是( )。
char a[]=\"It is mine\";char*p=\"It is mine\"; A.a+1表示的是字符t所在存储单元的地址 B.p指向另外的字符串时,字符串的长度不受 C.p变量中存放的地址值可以改变 D.a中只能存放10个字符
18、以下程序有语法性错误,有关错误原因的正确说法是( )。
#include int main(){int G=5,k; void prt_char(); -----
k=prt_char(G); ---
}
A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线
19、以下for循环的执行次数是( )。
for(x=0,y=0;(y=123)&&(x<4);x++); A.是无限循环 B.循环次数不定 C.执行4次 D.执行3次 20、语句while(!E);中的表达式!E等价于( )。 A.E==0 B.E!=1 C.E!=0 D.E==1
21、若变量都已正确定义,则以下程序段的输出是( )。 a=10;b=50;c=30; if(a>B.a=b,b=c; c=a;
printf(\"a=%db=%dc=%d\\n\".a,b,C.;
A.a=10 b=30 c=10 B.a=10 b=50 c=10 C.a=50 b=30 c=10 D.a=50 b=30 c=50
22、下面程序的运行结果是( )。 #include int main(){char str[]=\"SSSWLIA\",c;int k; for(k=2;(c=str[k])!=\\o';k++) {switch(C.
{case'I':++k;break; case'L':continue;
default:putchar(C.;continue; putchar('*’); }
return 0; }
A.SSW* B.SW* C.SW*A D.SW
23、下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。( )
#include int main(){char s[80],c1,c2='';int i=0,num=0; gets(s); while(s[i]!='\\o')
{ c1=s[i];
if(i==0)c2=''; else c2=s[i-1]; if(【】)num++; i++;
printf(\"There are%d words.\\n\",num); return 0; }
A.c1==′′&&c2=='' B.cl!= ''&&c2=='' C.c1==''&&c2!=''D.cl!=''&&c2!=''
24、以下程序的正确运行结果是( )。
#include #define MAX10void sub2(),sub1(),sub3(int*A.; int a[MAX],i; int main()
{printf(\"\\n\");subl();sub3(a);sub2();sub3(a); return(O); void sub2( ) {int a[MAX],i,max; max=5;
for(i=0;ia[i]=i; }void subl()
{for(i=0;iA)0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 B)0 1 2 3 40 2 4 6 8 10 12 1416 18 C)0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
D)0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18
25、以下能正确计算1×2×3×…×10的程序段是( )。 A) do B) do C) i=1;s=1; D) i=1;s=0;
{i=1;s=1; {i=1;s=0; { do; { do; s=s*i; s=s*i; s=s*i; s=s*i;
i++; i++; i++; i++;
}while(i<=10); }while(i<=10); }while(i<=10); }while(i<=10);
三、读程序填空
26、以下程序的输出结果为_______。 #include int main() {short i; i=一4;printf(\"\\ni:dec=%d,oct=%o,hex=%x,unsigned=%u\\n\",i,i,i,i); return 0;
}
27、以下程序的运行结果是_______。
#include int main() {int n=100; char c; float f=10.0; double x;x=f*=n/=(c=48);
printf(\"%d%d%3.1f%3.1f\\n\",n,c,f,x); return 0;
}
28、以下程序的运行结果是输出如下图形。请填空。
# include void a(int i) { intj,k;for(j=0;j<=7-i;j++) printf(\"\");
for(k=0;k<_______;k++) printf(\"x\"); printf(\"\\n\"); }
int main() {int i;
for(i=0;i<3;i++)_______; for(i=3;i>=0;i--)_______;
return(0); }
29、当输入的数值x为4,y为3时,以下程序运行后t的值是_______。
#includelong fun(long x,long y) {int i;longt=1; for(i=1;i<=y;i++) t=t*x%100; return t; }
int main() {longx,y,t;
printf(\"\\ninput xand y:\\n\"); scanf(\"%ld%ld\",8&.x,8.y); t=fun(x,y);
printf(\"\\nx=%1d,y=%ld,last=%ld\\n\",x,y,t); return(0); }
30、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,下面的程序统计卖完所需的天数。请填空。
#include int main()
{int day=0,x1=1020,x2;
while(_______){x2=_______;x1=x2;day++;} printf(\"day=%d\\n\",day); return 0; }
31、下面程序的运行结果是_______。
#include int main(){int a[10]={1,2,2,3,4,3,4,5,1,5}; int n=0,i,j,c,k; for(i=0;i<10-n;i++) {c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{for(k=j;k<10-n;k++) a[k]=a[k+1];n+十;
}
for(i=0;i<(10-n);i++) printf(\"%d\",a[i]); return 0;
}
32、以下程序的功能是:输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其他字符不变。请填空。
#include int main() {char ch;scanf(\"%c\",8&.ch); if(_______)ch=ch+32;
else if(ch>='a′8.&ch<='z′)_______; printf(\"%c\",ch); return 0;
}
33、若从键盘输入:2<回车>,则下面程序的运行结果是_______。 #include int main(){char*b[]={\"English\",\"Physics\",\"Maths\",\"Pascal\",\"Chemistry\",\"End\",\"Error\;int num;
printf(\"Enter a integer that should be between 0 to 9\\n\"); scanf(\"%d”,&.num); if(num>=0&&num<=9)
if(num>=1&&num<=5)
printf(\"The chosen class is:%s.\\n\",b[num-1]);
else
printf(\"No class is chosen.%s!!\\n\",b[5]); else
printf(\"Your input is:%s!!\\n\",b[6]); return(0); }
四、编程题
34、从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中每两个字符之间插入一个空格,如原串为abcd,则新串为a□b□c□d(□代表空格)。要求在函数insert中完成新串的产生;并在函数中完成所有相应的输入和输出。
35、已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next)。请编写函数实现如图10-8所示链表的逆置。 若原链表为:
逆置后的链表应为:
参
一、填空题
1、structs*next; 2、【1】编译【2】连接 3、内存中的一个存储单元 4、【1】10【2】6
5、【1】用户标识符【2】预定义标识符 6、00001111 7、i<=x
8、z,x,y或z,y,x
9、4
10、第3行
二、选择题
11、B 12、A
13、C 14、B
15、B 16、D 17、D
18、C 19、C 20、A 21、B 22、B 23、B 24、D 25、C
三、读程序填空
26、i:dec=-4,oct=177774,hex=fffc,unsigned=65532 27、24820.020.0
28、【1】2*i+1【2】a(i)【3】a(i) 29、
(注:函数fun的功能是求整数x的y次方的低2位值。例如,整数4的3次方低2位值为。)
30、【1】x1【2】x1/2-2 31、1 2 3 4 5
32、【1】ch>='A'&&.ch<='z'【2】ch=ch-32
33、The chosen class is:Physics.
四、编程题
34、#include#include void insert(char*p); int main() {char str[80];printf(\"Input a string:\\n\"); gets(str); insert(str);
printf(\"Result is:%s\\n\",str); return(0); }
void insert(char*p) {int i;
for(i=strlen(p);i>0;i--)
{*(p+2*i)=*(p+i); *(p+2*i-1)=''; } }
35、typedef int datatype; typedef struct node {datatype data; struct node *next;
}linklist; :
INVERT(linklist*head) {linklist*p,*q;
p=head->next;if(p!=NULL) {head->next=NULL;do {q=p->next;
p->next=head->next; head->next=p; p=q; }
while(p!=NULL); }