北京化工大学C语言复习题.docx
《北京化工大学C语言复习题.docx》由会员分享,可在线阅读,更多相关《北京化工大学C语言复习题.docx(15页珍藏版)》请在冰豆网上搜索。
![北京化工大学C语言复习题.docx](https://file1.bdocx.com/fileroot1/2022-11/16/c8a507a2-e49c-4260-bb43-3052181541b3/c8a507a2-e49c-4260-bb43-3052181541b31.gif)
北京化工大学C语言复习题
C语言期末总复习参考试卷
一、选择题(共22分)
1.下列变量名中合法的是____。
A) B.C.Tom B)3a6b C)_6a7b D) $ABC
2.C程序的执行是从____开始执行
A)第一条语句 B)主函数 C)命令行 D)第一个出现的函数
3.已知ch是字符型变量,下面不正确的赋值语句是____。
A)ch=‘a+b’; B) ch=‘\0’; C)ch=‘7’+‘9’; D)ch=5+9;
4.与语句while(x);等价的语句是______。
A)while(x==0); B)while(x!
=0); C)while(x!
=1); D)while(~x);
5.已知inti;floatf;下列语句正确的是______。
A)(intf)%i B)int(f)%i C)int(f%i) D)(int)f%i
6.若inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;,则数值为6的表达式为_____。
A)*(p+6) B)*p+6 C)*p+=5 D)p+6
7.以下为一维整型数组a的正确说明是_________.
A)inta(10); B)intn=10,a[n];
C)intn; D)#defineSIZE10
scanf("%d",&n); inta[SIZE];
inta[n];
8.温度华氏和摄氏的关系是:
C=5/9(F-32)。
已知:
floatC,F;由华氏求摄氏的正确的赋值表达式是____。
A)C=5/9(F-32) B)C=5*(F-32)/9 C)C=5/9*(F-32) D)三个表达式都正确
9.若有以下说明和语句:
structworker
{ intno;
char*name;
}work,*p=&work;
则以下引用方法不正确的是____。
A)work.no B)(*p).no C)p->no D)work->no
10.为了判断两个字符串s1和s2是否相等,应当使用____。
A)if(s1==s2) B)if(s1=s2) C)if(strcpy(s1,s2)) D)if(strcmp(s1,s2))
11.下述程序的输出是______。
main()
{charc='A';
if('0'<=c<='9')printf("YES");
elseprintf("NO");
}
A)YES B)NO C)YESNO D)语句错误
二、读程序写结果(共18分)
1.下面程序段的运行结果是__________.
intn=0;
while(n++<=2);
printf("%d",n);
2.下面程序的运行结果是__________.
#include
voidmain()
{ inta=15,b=21,m=0;
switch(a%3)
{ case0:
m++;break;
case1:
m++;
switch(b%2)
{ default:
m++;
case0:
m++;break;
}
}
printf("%d\n",m);
}
3.下面程序的运行结果是______。
#include
voidmain()
{ intx=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf(“%d,%d\n”,x,y);
}
4.下面程序的运行结果是______。
#include
voidmain(){
inti,j,p,s;
s=0;
for(i=1;i<=4;i++){
p=1;
for(j=1;j<=i;j++)
p=p*j;
s=s+p;
}
printf(“s=%d\n”,s);
}
5.下面程序的运行结果是______。
#include
#include
voidmain()
{ char*p=“abcdefg\0hjik\0”;
printf(“%d\n”,strlen(p));
}
6.下面程序的运行结果是______。
#include
intFun(intx)
{ staticinty=0;
y+=x;
returny;
}
voidmain()
{ int x=10,y=0,k;
for(k=0;k<2;k++)
{ y=Fun(x);
printf("y=%d\n",y);
}
}
三、程序填空(共14分)
1.下面程序可求出矩阵a的主对角线上的元素之和。
#include
voidmain()
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)sum=sum+ A ;
printf("sum=%d\n",sum);
}
2.下面程序用于求含有50个元素的一维数组中的最小值及负数的个数;其中一维数组中的每个元素是由公式y[j]=600*sin(j*0.16)得到的。
#include
voidmain()
{ floaty[50],min;
intj,num=0;
voidfun(floaty[50],float*min,int*num);
for(j=0;j<50;j++)
y[j]=600*sin(j*0.16);
A ;
printf(“min=%f,Thenumberofnegativeis=%d”,min,num);
}
voidfun(floaty[50],float*min,int*num)
{ intj;*min=y[0];
for(j=0;j<50;j++){
if(*min>y[j]) B ;
if(y[j]<0) C ;
}
}
3.下面的程序对用户输入的一串字符进行处理,统计出其中小写字母字符的个数。
#include
voidmain(){
chars[100];
intletter=0,i=0;
printf("pleaseinputsomecharacters\n");
A ;
while( B ){
if( C )
letter++;
i++;
};
printf("letternum=%d”,letter);
}
四、改写程序(3分)
1.该程序的功能是根据键盘输入的学生考试分数,判断学生是否通过考试。
(60分以上为通过)
#include
void main()
{ ints;
scanf("%d",&s);
if(s>=60) printf("通过考试");
else printf("没有通过考试");
}
请用条件运算符 ?
:
判断结构改写程序中的if else 判断结构。
答案:
一、选择题:
CBABDCDBDDA
1.C
只能有字母、数字、下划线,但是第一个字符不可是数字
2.B
3.A
‘’中只能是一个字符,a+b不可以
‘\0’是转义字符,可以
数字是可以的(实际上就是输入了对应字符的ASCII码,char和int是近亲)
4.B
(D中~是位运算符号,40学时中没讲到)
5.D
%两侧必须是整数,注意强制转换符,括号的位置
6.C
数组下标从0开始
7.D
数组在定义的时候,中括号里必须是常量,不能是变量,否则系统不知道在定义的时候应该给这个数组多少存储空间;但是#define是符号常量,也是常量,可以。
8.B
乘号不可以省略,主页君编程的时候经常忘记乘号;
5/9在C语言中得0;5.0/9就不是0了。
9.D
结构体引用的三种方式:
(假设有一个结构体work有一个指针p指向work)
work.no
(*p).no
p->no
第三种,左边必须是一个指针项,不可以是常项,所以错;
10.D
字符串不可以直接比大小要使用strcmp函数
11.A
‘0’<=c<=’9’:
先计算’0’<=c,得1;再计算1<=’9’,得1;所以输出YES
如果要实现数学上的“区间”概念,应该改写成’0’<=c&&c<=’9’
注意,一旦出现||和&&运算符,要考虑这两个符号的“短路问题”
即:
如果||的左边非零,||一定成立,右边的就不做了,即使右边有赋值,++符号等也不做了。
如果&&左边为零,%%一定不成立,右边也就不做了,同上。
二、读程序写结果
1.答案:
4
注意:
(1)while后面执行的是空语句;
(2)n++的意义是:
先把n拿出来用,参与运算,运算完了之后n再++
最后一次循环,也就是n等于3的时候,n++<=2是先判断n<=2,为假,准备退出循环,这个时候n再++,所以n=4
2.答案:
1
注意:
switch(b%2)嵌套在switch(a%3)之内的,所以case0后面执行了break,跳出大的switch,所以第二个switch就不执行了。
3.答案:
20,0
注意:
(1)有个逗号;
(2)if后面执行的语句理论上只有一句,如果想要在if后面执行好多句,需要加{}
此处没有加,所以t=x不执行,但x=y和y=t执行,所以答案是那样子。
4.答案:
s=33
注意:
(1)相当于求1的阶乘,2的阶乘,3的阶乘,4的阶乘,再把这四个加起来
(2)注意s=不能丢掉
5.答案:
7
注意:
strlen字符串长度统计函数,统计到第一个‘\0’之前有多少个字符,‘\0’不算在内
注意sizeof与之不同
charstr[10