2022年文华学院公共课《C语言》科目期末试卷B(有答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年文华学院公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、已有定义int a;float b,x;char cl,c2;为使a=3、b=6.5、x=12.6、
cl='a'、c2='A',正确的scanf函数调用语句是_______,数据输入的形式应为
_______。
2、C语言源程序的基本单位是________
3、一个C语言源程序由若干函数组成,其中至少应含有一个________
4、若有定义语句:int x=3,y=2;float a=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为_______。
5、若x和a均是int型变量,则执行表达式(1)后的x值为_______,执行表达式(2)后的x值为_______。
(1)x=(a=4,6*2)(2)x=a=4,6*2
6、请读程序段:
int a=-1;
a=a|0377;
printf("%d,%o\n",a,a);以上程序段的输出结果是_______。
7、下面add函数的功能是求两个参数的和,并将和值返回调用函数。
函数中错误的部分
是_______,改正后为_______。
void add(float a,float b)
{float c;
c=a+b;
return c;
}
8、设有以下宏定义:
#define WIDTH 80
#define LENGTH WIDTH+40
则执行赋值语句:v=LENGTH*20;(v为int型变量)后,v的值是_______。
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、定义语句int*f();int(*f)();的含义分别为_______和_______。
二、选择题
11、下面4个选项中,是不合法的浮点数的选项是( )。
A.160.
B.123
C.-18
D.-e3
12、下面4个选项中,是非法常量的选项是( )。
13、C语言规定:在一个源程序中,main函数的位置( )
A.必须在最开始
B.必须在系统调用的库函数的后面
C.可以任意
D.必须在最后
14、以下叙述不正确的是( )
A.一个C源程序可由一个或多个函数组成
B.一个C源程序必须包含一个main函数
C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面
15、下面程序段(每行代码前面的数字表示行号)()。
1 float a[10]={0.0};
2 int i;
3 for(i=0;i<3;i++)scanf("%d",&a[i]);
4 for(i=1;i<10;i++)a[0]=a[0]+a[i];
5 printf("%f\n",a[o]);
A.没有错误
B.第1行有错误
C.第3行有错误
D.第5行有错误
16、以下针对scanf函数的叙述中,正确的是()。
A.输入项可以为一实型常量,如scanf("%f",3.5);
B.只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf
("%4.2f",&f);
D.当输入数据时,必须指明变量的地址,如scanf("%f",&f);
17、下面能正确进行字符串赋值操作的是()。
A.char s[5]={"ABCDE');
B.char s[5]={'A','B','C','D','E'};
C.char*s;s="ABCDE";
D.char*s;scanf("%s",s);
18、以下程序有语法性错误,有关错误原因的正确说法是()。
#include <stdio.h>
int main()
{int G=5,k;
void prt_char();
-----
k=prt_char(G);
---
}
A.语句void prt_char();有错,它是函数调用语句,不能用void说明
B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾
D.函数名不能使用下划线
19、下面有关for循环的正确描述是()。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break 语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
20、设有程序段:
t=0;while(printf("*"))
{t++;if(t<3)break;
}
下面描述正确的是()。
A.其中循环控制表达式与0等价
B.其中循环控制表达式与'0'等价
C.其中循环控制表达式是不合法的
D.以上说法都不对
21、以下程序()。
#include<stdio.h>
int main()
{int a=5,b=0,c=0;
if(a=b+C.printf("***\n");
else printf("$$$\n");
return 0;
}
A.有语法错不能通过编译
B.可以通过编译但不能通过连接
C.输出***
D.输出$$$
22、下面程序段的运行结果是()。
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,B.;
printf("%c",a[5]);
A.口
B.\0
C.e
D.f(其中口表示1个空格)
23、下面程序段的运行结果是()。
int a[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf("%3d",a[i]) ;
}
A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0
24、以下程序的运行结果是()。
#include <stdio.h>
int f(int x,int y)
{return(y-x)*x;}
int main()
{int a=3,b=4,c=5,d;
d=f(f(a,C.,f(a,B.+f(c,B.);
printf("%d\n",D.;
return(0);
}
A.-48
B.58
C.-58
D.47
25、下面程序段的运行结果是()。
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
A.x=27,y=27
B.x=12,y=13
C.x=15,y=14
D.x=y=27
三、读程序填空
26、以下程序的输出结果为_______.
#include <stdio.h>
int main()
{printf("*%f,%4.3f*\n",3.14,3.1415);
return0;
}
27、已知字母A的ASCII码值为65。
以下程序的输出结果是_______。
#include<stdio.h>
int main()
{char a,b;
a='A'+'4'-'3';
b='A'+'6'-2';
printf("a=%d,b=%c\n",a,b);
return0;
}
28、下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的x的值。
请填空。
π2=1+
1
3
+
1
3
∗
2
5
+
1
3
∗
2
5
∗
3
7
+⋯
# include<conio.h> # include<math.h>
# include<stdio.h>
double pi(double eps)
{ double s=0.0,t=1.0; int n;
for(_______;t>eps;n++)
{s+=t;
t=n*t/(2*n+1);
}
return(_______);
}
int main()
{ double x=0.0005;
printf("\ neps=% lf, π =% If",x, pi(x));
return(0);
}
29、以下程序的功能是根据输入的y(Y)与n(N),在屏幕上分别显示出This is YES.与This is NO.。
请填空。
#include <stdio.h>
void YesNo(char ch)
{switch(ch)
{case'y':
case'Y':printf("\nThis is YES.\n");_______;
case'n':
printf("\nThis is NO.\n");
}
int main()
{char ch;
printf("\nEnter a char'y','Y"or'n','N':");
ch=[2];
printf("ch:%c",ch);
YesNo(ch);
return(0);
}
30、等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有数的和。
请填空。
#include<stdio.h>
int main()
{int a=2,d=3,sum=0;
do
{sum+=a;
a+=d;
if(_______)printf("%d\n",sum);
}while(sum<200);
}
31、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符,则输出该字符在数组中第一次出现的位置(下标值);否则输出一1。
请填空。
#include <stdio.h>
#include<string.h>
int main()
{charc='a',t[50];int n,k,j;
gets(t);
n=_______;
for(k=0;k<n;k++)
if(_______){j=k;break;}
else j=-1;
printf("%d",j);
return 0;
}
32、以下程序a对应的数学表达式是_______;程序b对应的数学表达式是_______。
程序a 程序b
# include<stdio.h> # include<stdio.h>
int main() int main()
{ int a,b; { int a,b;
scanf("%d",&a); scanf("%d",&a);
if(a<0) b=-1; b=0;
else if(a==0) if(a!=0)
b=0; if(a>0) b=1;
else b=1; else b=-1;
printf("a=%d,b=%d\n",a,b); printf("a=%d,b=%d\n",a,b);
return 0; return0;
} }
33、以下程序的运行结果是_______。
#include <stdio.h>
int sub(int*s);
int main()
{int i,k;
for(i=0;i<4;i++)
{k=sub(&i);
printf("%3d",k);
}
printf("\n");
return(0);
}int sub(int*s)
{static intt=0;
t=*s+t;
return t;
}
四、编程题
34、已知head指向双向链表的第一个结点。
链表中每个结点包含数据域(info)、后继元素指针域(next)和前趋元素指针域(pre)。
请编写函数print1用来从
头至尾输出这一双向链表。
35、通过循环按行顺序为一个5×5的二维数组a赋1~25的自然数,然后输出该数
组的左下三角。
试编程。
参考答案
一、填空题
1、【1】scanf("%d%f%f%c%c”,&a,&.b,8.c1,8.c2);
【2】3囗6.5囗12.6aA<回车>
(注:答案中的囗代表空格)
2、函数
3、主函数(或main函数)
4、1
5、【1】12【2】4
6、-1,177777
7、【1】void add(float a,float b)【2】float add(float a,float b)
8、880
9、600
10、【1】返回一个指向整型值的指针的函数。
【2】指向一个返回整型值的函数的指针。
二、选择题
11、B
12、A
13、C
14、D
15、C
16、D
17、C
18、C
19、D
20、B
21、D
22、D
23、C
24、A
25、C
三、读程序填空
26、*3.140000,3.142*
27、a=66,b=E
28、【1】n=1【2】2.0*s
29、【1】break【2】getchar()
30、sum%4==0
31、【1】strlen(t)【2】t[k]==c
32、【1】
33、0 1 3 6
四、编程题
34、#include<stdio.h>
#include <stdlib.h>
struct student
{int info;
struct student*pre;
struct student*next;
};
void print1(struct student*head)
{struct student*p;
printf("\n the linklist is:");
p=head;
if(head!=NULL)
do
{printf("%d",p->info);
p=p->next;
while(p!=NULL);
printf("\n");
}
35、#include <stdio.h>
int main()
{int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=n++;
printf("The result is:\n");
for(i=0;i<5;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
return 0;
}。