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、假设m是一个3位数,从左到右依次用a、b、c表示各位的数字,则从左到右各位数字是b、a、c的3位数的表达式是_______。
5、表达式pow(2.8,sqrt(double(x))值的数据类型为_______。
6、设x是一个整数(16bit),若要通过xly使x低8位置1,高8位不变,则y的八进制数是_______。
7、鸡兔共有30只,脚共有90只,下面程序段是计算鸡兔各有多少只。
请填空。
for(x=0;x<=30;x++)
{y=30一x;
if(_______)printf("%d,%d\n",x,y);
}
8、下面程序段的运行结果是_______。
int i=5;char c[6]="abcd";
do{c[i]=c[i-1];}while(--i>0);
puts(c);
9、下面程序段将输出computer。
请填空。
char c[]="It is a computer";
for(i=0;_______;i++)
{_______;printf("%c",c[j]);}
10、下面程序段的运行结果是_______。
Char a[]="123456789",*p;
inti=0;p=a;
while(*p)
{if(i%2==0)*p='*';
p++;i++;
}
puts(a);
二、选择题
11、下列4组选项中,不是C语言关键字的选项是。
()
A.define
B.getc
C.include
D.while
IF char scanf go
Type printf case pow
12、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( )
A.7
B.8
C.6
D.2
13、C语言规定:在一个源程序中,main函数的位置( )
A.必须在最开始
B.必须在系统调用的库函数的后面
C.可以任意
D.必须在最后
14、以下叙述正确的是
A.在C程序中,main函数必须位于程序的最前面
B.C程序的每行中只能写一条语句
C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误
15、以下不能对二维数组a进行正确初始化的语句是()。
A.int a[2][3]={0};
B.int a[][3]={{1,2},{0}};
C.int a[2][3]={{1,2},{3,4},{5,6}};
D.int a[][3]={1,2,3,4,5,6);
16、根据下面的程序及数据的输入方式和输出形式,程序中输入语句的正确形式应该为。
(注:口表示空格)
#include<stdio.h>
int main()
{char ch1,ch2,ch3;
输入语句
printf("%c%c%c",ch1,ch2,ch3);
return0;
}
输入形式:A口BOC<回车>
输出形式:A口B
A.scanf("%c%c%c",&ch1,&ch2,&ch3);
B.scanf("%c,%c,%c",&&ch1,&ch2,&ch3);
C.scanf("%c%c%c",&ch1,&ch2,&ch3);
D.scanf("%c%c",&ch1,&ch2,&ch3);
17、下面程序段的运行结果是()。
char pl[]="abcdefgh",*p=pl;
p+=3;
printf("%d\n",strlen(strcpy(p,"ABCD")));
A.8
B.12
C.4
D.7
18、在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是()
A.extern
B.register
C.auto
D.static
19、若有如下语句:
int x=3;
do {printf("%d\n",x-=2);}while(!(--x));
上面程序段( )。
A.输出1
B.输出1和-2
C.输出3和0
D.是死循环
20、以下不是无限循环的语句为()。
A.for(y=0,x=1;x>++y;x=i++)i=x;
B.for(;;x++=i):
C.while(1){x++;}
D.for(i=10;;i-一)sum+=i;
21、以下程序的输出是()。
#include <stdio.h>
int main()
{int a=5,b=8,c=3,max;
max=a;
if(c>B.
if(c>A.
max=c;
else
if(b>A.
max=b;
printf("max=%d\n",max);
return 0;
}
A.max=8
B.max=5
C.max=3
D.无输出结果
22、下面程序的功能是将字符串s中所有的字符c删除。
请选择填空()。
#include<stdio.h>
int main()
{char s[80];inti,j;
gets(s);
for(i=j=0;s[i]!= '\o';i++)
if(s[i]!='c)[ ];
s[j]='\o';
puts(s);
return 0;
}
A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[];j++ D)s[j]=s[i]
23、下面程序的运行结果是()。
#include <stdio.h>
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
24、折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位
于中间点元素的值。
如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。
函数binary的作用是应用折半查找法从存有10个有序整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。
请选择填空。
int binary(int a[10],int m)
{int low=0,high=9,mid;
while(low<=high)
{mid=(low+high)/2;
if(m<a[mid])high=mid-1;
else if(m>a[mid])【】;
else return(miD.;
return(一1);
}
A.high=mid-1
B.low=mid+1
C.high=mid+1
D.low=mid-1
25、以下程序段的功能是计算一个整数的各位数字之和,请选择填空()。
int n,m=1;
scanf("%d",&n);for(;nl=0;)
{m【】;
n/=10;
}
printf("%d',m);
A.+=n%10
B.=n%10
C.+=n
D.=n/10
三、读程序填空
26、以下程序的输出结果为_______。
#include<stdio.h>
int main()
{charc='x';
printf("c:dec=%d,oct=%o,hex=%x,ASCIl=%c\n",c,c,c,c);
return 0;
}
27、以下程序的运行结果是_______。
#include <stdio.h>
int main()
{int m=177;
printf("%o\n",m);
return 0;
}
28、下面程序的运行结果是_______。
#include <stdio.h>
int sub(int n);int main()
{int i=5;
printf("%d\n",sub(i));
return(0);
}
int sub(int n)
{int a;
if(n==1)return 1;
a=n+sub(n一1);
return(a);
}
29、以下函数fun的功能是:统计一个数中位值为零的个数,以及位值为1的个数。
若输入111001,则输出位值为零的个数为2,位值为1的个数为4,请填空。
void fun(long n)
{int coun0=0,counl=0,m;
do
{m=_______;
if(m==0)coun0++;
if(m==1)counl++;n=_______;
}while(n);
printf("coun0=%d,coun1=%d\n",coun0,counl);
int main()
{long n;
printf("\ninput n:\n");scanf("%ld",8.n);printf("n=%ld\n",n);fun(n);
return(0);
}
30、用0~9之间不同的3个数构成一个3位数,下面程序将统计出共有多少种方法。
请填空。
#include<stdio.h>
int main()
{int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(_______)continue;
else
for(k=0;k<=9;k++)
if(_______) count++;
printf("%d",count);
return 0;
}
31、下面程序的功能是在3个字符串中找出最小的。
请填空。
#include<stdio.h>
#include<string.h>
int main()
{char s[20],str[3][20];int i;
for(i=0;i<3;i++) gets(str[i]);
strcpy(s,(strcmp(str[0],str[1])<0?_______));
if(strcmp(str[2],s)<0)strcpy(s,str[2]);
printf("%s\n",_______);
return 0;
}
32、以下程序的输出结果是_______。
#include<stdio.h>
int main()
{intx,y;x=5;switch(x)
{case1:
case2:
case3:
case 4:printf("x<5\n");
case 5:printf("x=5\n",x);
default:printf("The value of x is unknown.\n");
}
return0;
}
33、若有以下输入,则下面程序的运行结果是_______。
basic<回车>
fortran<回车>
pascal<回车>
c++<回车>
java<回车>
#include <stdio.h>
#include <string.h>
int main()
{int j,k;
char*qstr[5],str[5][40],*change;
for(k=0;k<5;k++)qstr[k]=str[k];
printf("enter 5 strings(1 string on each line)\n");for(k=0;k<5;k++)scanf("%s",qstr[k]);
for(k=0;k<5;k++)
{for(j=k+1;j<5;j++)
{if(strcmp(*(qstr+k),*(qstr+j))>0){change=*(qstr+k);
*(qstr+k)=*(qstr+j);
*(qstr+j)=change;
}
}
}
printf("The sorted strings are:\n");
for(k=0;k<5;k++)printf("%s\n",qstr[k]);
return(0);
}
四、编程题
34、以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。
已有初始值
x0=3.1415/4,要求绝对误差不超过0.001,函数f用来计算迭代公式中x n的值,请编写f函数。
牛顿迭代公式是:
X n+1=x n-f(x n)/f’(x n)
即
X n+1=x n-(cosx n-x n)/(sinx n-1)
#include <stdio.h>
#include<math.h>
#define Pl3.1415
float f(float xo)
double f(double xo)
{
}
int main()
{intt=0,k=100,n=0; double x0=Pl/4,x1;
while(n<k)
{x1=f(x0);
if(fabs(x0-x1)<0.001)
{t=1;break;}
else{x0=xl;n=n+1;}
if(t==1)printf("\nFangcheng geng is%10.5f",xl);
else printf("\nSorry,not found!");
return 0
}
35、以下程序的功能是应用弦截法求方程x3-5x2+16x-80=0的根,其中f函数
可根据指定的x的值求出方程的值;函数xpoint可根据x1和x2求出f(x1)和f(x2)的连线与x轴的交点;函数root用来求区间(x1,x2)的实根。
请编写root函数。
#include <stdio.h>
#include <math.h>
float root(float xl,float ×2)
{
}float f(float x)/*略*/
{
}
float xpoint(float x1,floatx2)/*路*/
{
}
int main()
{float xl,x2,fl,f2,x;
do
{printf(“input xl,x2:\n");
scanf("%f%,8&x1,8.x2);
printf("xl=%5.2f,x2=%5.2f\n",xl,x2);f1=f(x1);
f2=f(×2);
}while(fl*f2>=0);
x=root(x1,x2);
printf("A root of equation is%8.4f",x);return(0);
}
参考答案
一、填空题
1、【1】scanf("%d%f%f%c%c”,&a,&.b,8.c1,8.c2);【2】3囗6.5囗12.6aA<回车>
(注:答案中的囗代表空格)
2、【1】.c【2】.obj【3】.exe
3、【1】编译【2】连接
4、m/10%10*100+m/100*10+m%10
5、双精度型(或double型)
6、0377
7、2*x+4*y==90
8、aabcd
9、【1】i<=7【2】j=i+8
10、*2*4*6*8*
二、选择题
11、A
12、B
13、C
14、C
15、C
16、A
17、C
18、D
19、B
20、A
21、B
22、A
23、B
24、C
25、A
三、读程序填空
26、c:dec=120,oct=170,hex=78,ASCII=x
27、261
28、15
29、【1】n%10【2】n/10
30、【1】i==j【2】k!=i&&k!=j
31、【1】?str[0]:str[1]【2】s
32、x=5
The value of x is unknown.
33、Basic
C++
fortran
java
pascal
四、编程题
34、double f(float xo)
{double x1;
x1=(cos(x0)-x0)/(sin(x0)+1);x1=x1+xo;
return x1;
}
35、float root(float x1,float x2){int i;floatx,y,y1;
y1=f(x1);
do
{x=xpoint(x1,x2);
y=f(x);
if(y*y1>0){y1=y;x1=x;}
Else x2=x;
} while(fabs(y)>=0.0001);
return(x);
}。