C程复习资料文档格式.docx
- 文档编号:671875
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:53
- 大小:38.91KB
C程复习资料文档格式.docx
《C程复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《C程复习资料文档格式.docx(53页珍藏版)》请在冰点文库上搜索。
6.写出判断一个年份为闰年的C语言表达式:
______________________。
(year%4==0&
&
year%100!
=0)||(year%400==0)。
这道题大家做得还可以,错的同学大概本来就不知道怎么判断闰年……
7.下列程序段的输出结果是_____。
intk=1,s=0;
switch(k){
case1:
s+=10;
case2:
s+=20;
break;
default:
s+=3;
}
printf("
k=%ds=%d"
k,s);
k=1s=30。
这道题是开始学C语言的同学要特别注意的问题。
在C语言中遇到匹配的case语句并不直接跳出swich程序体,跳出swich循环体的条件只有两个,一个是遇到break语句,另外就是执行完swich中的所有语句。
这道题错的人非常多。
对于补充习题,请大家先思考,写出自己的答案,然后再上机实践一下,这样知识掌握得才牢固,而且印象深刻。
*************************************************************************************************************
补充习题解答2:
1.C语言源程序文件经过编译连接之后生成一个后缀为______的文件。
A.”.c”B.“.obj”C.“.exe”D.“.bas”
C,编译后形成.obj的目标文件,连接后形成.exe的可执行文件。
2.______是合法的用户自定义标识符。
A、b-b
B、float
C、<
fr>
D、_isw
题目有两个要求:
全法、自定义。
3.设变量定义为“inta,b;
”,执行下列语句时,输入_____,则a和b的值都是10。
scanf("
a=%d,b=%d"
&
a,&
b);
A、1010
B、10,10
C、a=10
b=10
D、a=10,b=10
D,scanf中除了输入格式控制符外其他的字符号在输入时都要原封不动地输入。
4.表达式______的值是0。
A.3%5B.3/5.0C.3/5D.3<
5
C,这道题目基本上没问题。
5.表示“x≥y≥z”的C表达式是___x>
=y&
y>
=z___。
6.设ch是字符型变量,判断ch为英文字母的表达式是___(ch>
='
A'
ch<
Z'
)||(ch>
a'
z'
)___。
注意这里不要写成ASCII的值,那样代码不容易理解。
7.计算下列分段函数的if语句是______。
1
x>
y=
0
x=0
-1
x<
if(x>
0)y=1;
elseif(x<
0)y=-1;
elsey=0;
这里有超过一半的同学还在使用赋值运算符=作为判断相等的运算符==,请大家特别注意。
另外,与0比较要写成浮点数的形式,即==0.0而不要写成==0。
8.下列程序段的输出是
。
main()
{
intk;
for(k=1;
k<
5;
k++){
if(k%2)
*"
);
elsecontinue;
#"
*#*#。
这里的if语句参考上次作业补充题的第5题。
程序填空
9.输入1个正整数n,计算并输出s的前n项的和。
S=1-1/2+1/3-1/4+1/5-1/6+……
#include<
stdio.h>
voidmain()
intk,flag,n;
floats;
flag=1;
s=0;
scanf("
%d"
&
n);
for(k=1;
=n;
k++){
s=s+
(1)
;
(2)
}
sum=%f\n"
s);
(1):
(double)flag/k;
(2):
flag=-flag;
请大家注意一个细节,在程序中能用+-运算的不要使用*/运算,即不要写成flag=flag*(-1),这样效率更高。
10.输入以-1结束的一批整数,输出其中的最大值。
例如:
输入-3
-8
-10
-1后,输出:
max=-3。
intmax,x;
x);
if(x!
=-1){
(3)
while(
(4)
){
if(max<
x)max=x;
(5)
printf("
max=%d\n"
max);
(3):
max=x;
(4):
x!
=-1;
(5):
补充习题解答3:
1.表达式!
(x>
0||y>
0)等价于_____。
A.!
0||!
0B.!
0)||!
(y>
0)C.!
0&
!
0D.!
0)&
0)
D,有个别同学选C估计是没看清题目吧。
2.若变量已正确定义并赋值,表达式______不符合C语言语法。
A.4&
3B.+a
C.a=b=5
D.int(3.14)
D,应写成(int)3.14。
3.若变量已正确定义,执行语句scanf("
%d%d%d"
k1,&
k2,&
k3);
时,______是正确的输入。
A.203040
B.203040
C.20,3040
D.20,30,40
B。
4.执行语句printf("
______"
2);
将得到出错信息。
A.%dB.%oC.%xD.%f
D,2是int型,应用%d,否则不能够正确获得输入数值,但程序编译是通过的,所以大家写程序时一定要小心避免此类错误。
5.若x是整型变量,表达式(x=10.0/4.0)的值是_____。
A.2.5B.2.0C.3D.2
D,将浮点数赋值给整型将舍去小数点后的数据。
6.若变量已正确定义并赋值,表达式-k++等价于______。
A.-(k++)B.(-k)++C.-(k+1)
D.-(++k)
A,-(负号而不是减号)与++优先级相同,结合性从右至左。
填空题
1.设字符型变量ch的值是小写英文字母,将它转换为相应大写字母的表达式是______。
ch-'
+'
,再次提高不要写相应的ASCII码,否则影响程序的可读性。
2.表达式1<
0<
5的值是______。
1,结合性从左至右,等价于(1<
0)<
5,即0<
5。
3.下列程序段的输出结果是_____。
intk,s;
for(k=0,s=0;
10;
k++)
if(s>
k)break;
elses+=k;
k=4s=6。
阅读题
1.输入c2470f?
<
回车>
后,下列程序的输出结果是_______,该程序的主要功能是_______。
#include"
stdio.h"
intmain()
{
charch;
longnumber=0;
while((ch=getchar())<
'
0'
||ch>
6'
)/*滤掉第一个字母c*/
while(ch!
?
ch>
){/*读到7时循环终止*/
number=number*7+ch-'
%ld#"
number);
ch=getchar();
2#18#。
2.输入4<
后,下列程序的输出结果是_______。
#include"
intmain()
intj,k,n;
floatf,s;
s=0;
f=1;
k<
k++){
for(j=1;
j<
k;
j++)
f=f*k;
s=s+f;
%.0f#"
s);
1#3#21#1173#,作用:
将第一个每个数字为0~6的七进制数转化成十进制数。
k
f
s
初始
1
0
1#
2
3
3#
3
18
21
21#
4
1152
1173
1173#
补充习题解答4:
1.下列运算符中,优先级从高到低依次排列为_____。
A.!
,&
,||B.||,&
,!
C.&
,||,!
D.&
,||
A。
单目运算符(只有一个操作数)的优先级高于双目运算符(有两个操作数),&
的优先级高于||。
2.有程序段如下:
inta=1,b=2,c=3;
if(a>
b)
c=a;
a=b;
b=c;
执行该程序段后,变量a,b,c的值是_____。
A.a=1,b=2,c=3
B.a=2,b=3,c=3C.a=2,b=3,c=1
D.a=3,b=2,c=1
B,注意if语句后面没有大括号,而且几个表达式是用分号而不是逗号连接的。
3.假设所有变量均为int类型,则表达式(a=2,b=5,b+1,a+b)的值为______。
A.7B.8C.6D.2
A,逗号表达式优先级最低而且结合性是从左向右。
4.
以下叙述正确的是______。
A.在C程序中,main()函数必须位于程序的最前面。
B.C程序的每一行中只能写一条语句。
C.在对C程序进行编译的过程中,可发现注释中的拼写错误。
D.C语言本身没有输入、输出语句。
D,C语言本身没有输入输出语句,能且只能通过scanf()和printf()这两个函数来实现输入输出。
1.设ch为字符变量,写出判断ch为数字字符的C语言表达式______。
-'
9'
这里很多同学误写成了ch>
1'
2.表达式!
50的值是______。
1或true。
50的值为0,故!
50等价于!
(!
50)其值为1(int型输出)或true(bool型输出)。
3.下列程序段的输出结果是______。
%x\n"
(0x19<
1)&
0x17);
12。
0x19写成二进制为(前面不足位数补0)11001,左移一位为110010,0x17写成二进制为10111,两者按位求与为10010,对应16进制数为12。
4.inta=3,则表达式a+=a-=a*a的值是_____。
不确定,与编译器有关。
在一个表达式中读取一个被修改过的变量的值是很危险的,因为编译器并不能够保证读取的值是原来的值还是修改过的值,本例中先执行a*a,原式等价于a+=a-=9;
此后执行a-=9,原式等价于a+=-6且a的值为-6;
问题在于最后一步,此时的a为3还是-6是和编译器相关的,也就是不同的编译器可能得出不对的结果,所以大家在写程序的时候要避免类似的写法,将其写成多条语句。
5.表达式3<
5<
2的值是_____。
的结合性从右至左。
关于结合性的总结:
只有三大类的运算符的结合性是从右向左的,其余大部分都是从左向右的,这三类运算符为:
除.、()、->
、[]的所有单目运算符、赋值运算符=以及类似的+=、%=等的运算符、?
=运算符。
6.表达式~(4<
2)的值是______。
-17。
将4写二进制左移2位后按位取反,注意此时的数是用补码表示的,转换成真值后为-17。
7.执行下面的程序段后,a和b的值分别是_____。
inta=3,b=5,c;
c=(a>
--b)?
a++:
b--;
3,3。
(a>
--b)值为假,且修改b的值为4,此后只执行b--。
8.下列程序段执行后s的值是:
_____。
Inti=1,s=0;
while(i++)
if(!
(i%3))
break;
elses+=i;
printf(“s=%d\n”,s);
2。
1.设变量x,y,z已正确定义和赋值,请仔细阅读程序段A,然后在程序段B中填入正确的内容,使程序段A和程序段B的输出结果一样(每空只能写一个赋值表达式)。
程序段A
x=x+y;
y=x-y;
x=x-y;
z=x+y;
%d,%d,%d"
x,y,z);
程序段B
(1)
(2)
y=z;
(1)z=x;
(2)x=y;
程序段A实际上就是交换x和y的值,题目不难,要有点耐心:
)
1.下列程序的输出结果是_______。
intx=1,y=0,a=0,b=0;
switch(x)
{
switch(y)
case0:
a++;
case1:
b++;
a++;
b++;
case3:
printf(“a=%d,b=%d\n”,a,b);
a=2,b=1。
2.下列程序的输出结果是_______。
int
i,j,x=0;
for(i=0;
i<
2;
i++)
{x++;
for(j=0;
3;
{if(j%2)
continue;
x++;
printf(“x=%d\n”,x);
x=8。
补充习题解答5:
选择题
1.若变量已正确定义,表达式(j=3,j++)的值是_____。
A、3
B、4
C、5
D、0
逗号表达式,先计算表达式1,再计算表达式2,结果是表达式2。
j++为先取值后加1。
2.判断i和j至少有一个值为非0的表达式是_____。
A、i!
=0&
j!
=0
B、i*j!
C、!
(i==0||j==0)
D、i||j
这是编程常用的简略写法,在C和C++语言中bool型和int型变量可以混合使用。
3.要调用数学函数时,在#include命令行中应包含_____。
A、”stdio.h”
B、”string.h”
C、”math.h”
D、”ctype.h”
C。
4.若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。
A、scanf(”%d,%f”,&
c);
B、scanf(”d=%d,c=%f”,&
C、scanf(”%d%f”,&
D、scanf(”%d%f”,a,c);
请注意使用其他几个选项时输入数据的格式要与其对应。
5.在C程序中,若对函数类型未加说明,则函数的隐含类型为_____。
A、int
B、double
C、void
D、char
不过建议大家明确写出函数的返回值类型。
1.写出下列程序段的输出结果。
floatx1,x2;
x1=3/2;
x2=x1/2;
%d,%.1f"
(int)x1,x2);
1,0.5。
对于3/2,int型与int型的运算结果仍为整数,最后将这个int型的结果赋值给x1。
对于x1/2,fload与int型运算结果为double型。
2.表达式(7<
1>
>
2^2)的值是_______。
1。
^的优先级最低,<
与>
的优先级相同,结合性自左向右,故原式等价于((7<
1)>
2)^2。
^运算符为按位异或,不同为1,相同为0。
3.写出下列程序段的输出结果。
intk,x;
for(k=0,x=0;
=9&
=10;
x+=2;
%d,%d"
k,x);
5,10。
如果没做对就单步调一下看每次循环的结果吧。
4.输入12345#后,写出下列程序的输出结果。
voidmain()
charc;
for(c=getchar();
getchar()!
#'
c=getchar())
putchar(c);
13。
注意对于getchar()!
这条语句并没有保存输出的变量。
5.下列程序段的输出是_____。
#include<
intf(intx)
staticy=1;
y++;
x+=y;
returnx;
voidmain()
k=f(3);
%d
%d\n"
k,f(k));
58。
static变量的生存期为整个程序的运行期,所以第二次调用f时y的值是受前面的影响的。
程序阅读题
1.若输入3
3<
则以下程序的输出结果是_______。
#include"
inti,j,n,a[10];
for(i=0;
i<
n;
i++)
a);
i++)
for(j=0;
j<
j++)
%d,"
a[(i+j)%n]);
1,2,3,2,3,1,3,1,2,。
注意最后面的逗号和空格。
2.输入0
10
7后,下列程序的输出结果是_______。
voidp(intv[])
inti,k,temp;
for(i=1;
4;
for(k=i-1;
k>
v[k]<
v[k+1];
k--){
temp=v[k];
v[k]=v[k+1];
v[k+1]=temp;
intk,a[4];
for(k=0;
k++)
a[k]);
p(a);
k++)
%d"
a[k]);
10720。
该程序就是冒泡排序的算法。
1.验证哥德巴赫猜想:
任何一个大于6的偶数均可表示为两个素数之和。
要求将6~100之间的偶数都表示成两个素数之和。
素数指只能被1和自身整除的正整数,1不是素数,2是素数。
intprime(intn)
/*判断n是否为素数*/
f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习资料