📄 c91_21.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>练习题</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<script language="javascript">
function init(){
err1=err1div.style;
cor1=cor1div.style;
err2=err2div.style;
cor2=cor2div.style;
err3=err3div.style;
cor3=cor3div.style;
err4=err4div.style;
cor4=cor4div.style;
err5=err5div.style;
cor5=cor5div.style;
err6=err6div.style;
cor6=cor6div.style;
err7=err7div.style;
cor7=cor7div.style;
err8=err8div.style;
cor8=cor8div.style;
}
function show(obj){
obj.display='';
}
function hide(obj){
obj.display='none';
}
function judge1(){
var s1=document.form1.T1.value;
if(s1=="ok"){
hide(err1);
show(cor1);
}else{
hide(cor1);
show(err1);
}
return false;
}
function judge2(){
var s2=document.form2.T1.value;
if(s2=="HELLO"){
hide(err2);
show(cor2);
}else{
hide(cor2);
show(err2);
}
return false;
}
function judge5(){
var s5=document.form5.T1.value;
if(s5=="3"){
hide(err5);
show(cor5);
}else{
hide(cor5);
show(err5);
}
return false;
}
function judge6(){
var s6=document.form6.T1.value;
if(s6=="27"){
hide(err6);
show(cor6);
}else{
hide(cor6);
show(err6);
}
return false;
}
</script>
</head>
<body bgcolor="#ccefcc" onLoad="init()">
<blockquote>
<p>问题1: 程序的运行结果是什么?<br>
#define HELLO "ok"<br>
main()<br>
{<br>
printf(HELLO);<br>
}</p>
<form name="form1" onSubmit="judge1();return false">
<p>答案:<input type="text" name="T1" size="12"></p>
<div id="cor1div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!</font>
</p>
</div><div id="err1div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div>
</form>
<hr>
<p>问题2: 程序的运行结果是什么?<br>
#define HELLO "ok"<br>
main()<br>
{<br>
printf("HELLO");<br>
}</p>
<form name="form2" onSubmit="judge2();return false">
<p>答案:<input type="text" name="T1" size="12"></p>
<div id="cor2div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!注释:
宏替换不可发生在引号括起来的串里。</font> </p>
</div><div id="err2div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div>
</form>
<hr>
<p>问题3: 读下面的程序, 它能运行吗?<br>
#define area(x) (3.14*x*x)<br>
main()<br>
{<br>
printf("%f\n",area(2.5));<br>
}</p>
<form name="form3">
<p><input type="button" value="能" name="B1" onClick="hide(err3);show(cor3)">
<input type="button" value="不能" name="B2" onClick="hide(cor3);show(err3)"></p>
<div id="cor3div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!</font></p>
</div><div id="err3div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div>
</form>
<hr>
<p>问题4: 读下面的程序,它能运行吗?<br>
#define area (x) (3.14*x*x)<br>
main()<br>
{<br>
printf("%f\n",area(2.5));<br>
}</p>
<p><input type="button" value="能" name="B1" onClick="hide(cor4);show(err4)">
<input type="button" value="不能" name="B2" onClick="hide(err4);show(cor4)"></p>
<div id="cor4div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!</font>注释:
我们应该注意在 "area" 和 "(x)"
之间没有空格。第一个空格结束了宏定义名。</p>
</div><div id="err4div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div><hr>
<p>问题5: 运行下面程序后, 它的结果是什么?<br>
#define sqr(n) (n*n)<br>
main()<br>
{<br>
printf("%d\n",27/sqr(3));<br>
}</p>
<form name="form5" onSubmit="judge5();return false">
<p>答案:<input type="text" name="T1" size="12"></p>
<div id="cor5div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!</font>
</p>
</div><div id="err5div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div>
</form>
<hr>
<p>问题6: 运行下面程序后, 它的结果是什么?<br>
#define sqr(n) n*n<br>
main()<br>
{<br>
printf("%d\n",27/sqr(3));<br>
}</p>
<form name="form6" onSubmit="judge6();return false">
<p>答案:<input type="text" name="T1" size="12"></p>
<div id="cor6div" style="display:'none'"><font color="#0000FF"><p>正确! 做得很好!!</font>
注释: 应该注意用括号来确保运算的顺序。例如, 在这个练习里, (n*n)
比 n*n 更好。什么是最好的呢? ((n)*(n)) 将是最好的。</p>
</div><div id="err6div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div>
</form>
<hr>
<p>问题7: 在这个函数里, 我们将看到宏函数的副作用。读下面的程序,
然后决定结果是否正确。</p>
<table border="1" width="92%">
<tr>
<td width="51%">main()<br>
{<br>
int i=1;<br>
while (i<=10)<br>
printf("%d\n",sqr(i++));<br>
}<br>
sqr(int n)<br>
{<br>
return(n*n);<br>
}</td>
<td width="39%"><input type="button" value="结果正确" name="B1"
onClick="hide(err7);show(cor7)"><input type="button" value="结果错误" name="B2"
onClick="hide(cor7);show(err7)"><div id="cor7div" style="display:'none'"><font
color="#0000FF"><p>正确! 做得很好!!</font></p>
</div><div id="err7div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div></td>
<td width="10%" align="right" rowspan="2">输出:<br>
1<br>
4<br>
9<br>
16<br>
25<br>
36<br>
49<br>
64<br>
81<br>
100</td>
</tr>
<tr>
<td width="51%">#define sqr(n) (n*n)<br>
main()<br>
{<br>
int i=1;<br>
while (i<=10)<br>
printf("%d\n",sqr(i++));<br>
}</td>
<td width="39%"><input type="button" value="结果正确" name="B1"
onClick="hide(cor8);show(err8)"><input type="button" value="结果错误" name="B2"
onClick="hide(err8);show(cor8)"><div id="cor8div" style="display:'none'"><font
color="#0000FF"><p>正确! 做得很好!!</font>问题是 sqr(i++) 被代换为 (i++ *
i++), 因为替代串定义为 (n*n)。记住, C 的预处理并不知道 C
语言。它只是简单地, 不加思索地,
逐字逐句地用一个串代替另一个串。副作用的发生依赖于不同的C语言编译器。</p>
</div><div id="err8div" style="display:'none'"><font color="#FF0000"><p>错误!
请再试一遍!!</font> </p>
</div></td>
</tr>
</table>
<p align="center"><a href="javascript:close()">关闭</a></p>
</blockquote>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -