1、打开项目hello2.cwp,按照要求编辑hello2.c,并描述所产生的错误:将代码行SayHello()修改为SayHello(。
代码修改后, SayHello(
这一写法会导致语法错误。
因为在C语言里,函数调用时若函数有括号,括号必须配对,而 SayHello(
缺少右括号,编译器无法识别这是一个完整的函数调用语句,会提示语法错误信息。
2、找出以下每个代码片段中的错误:a. printf( Hello, world ); b. int myInt myOtherInt; c. myInt =+ 3; d. printf( “myInt = %d” ); e. printf( “myInt = “, myInt ); f. printf( “myInt = %d”, myInt ); g. myInt + 3 = myInt; h. int main( void ) { int myInt; myInt = 3; int anotherInt; anotherInt = myInt; return 0; }
- a. 缺少双引号,应改为
printf( "Hello, world" );
。 - b. 变量声明缺少逗号分隔,应改为
int myInt, myOtherInt;
。 - c. 应是
+=
而不是=+
。 - d. 缺少第二个参数,这是运行时错误。
- e. 第一个参数缺少
%d
,这是运行时错误。 - f. 此代码无错误。
- g. 赋值语句左右两侧写反,赋值号左边必须是变量。
- h. 变量
anotherInt
的声明跟在非声明语句之后。
3、计算每个代码片段执行后 myInt 的值:a. myInt = 5; myInt = (3+4) * 2; b. myInt = 2; myInt = ( (3 4) / 2 ) - 9; c. myInt = 2; myInt /= 5; myInt–; d. myInt = 25; myInt /= 3 * 2; e. myInt = (3 4*5) / 9; myInt -= (3+4) * 2; f. myInt = 5; printf( “myInt = %d”, myInt = 2 ); g. myInt = 5; myInt = (3+4) * 2; h. myInt = 1; myInt /= (3+4) / 6;
a. 70;b. -6;c. -1;d. 4;e. -8;f. 2;g. 14;h. 1
4、以下每个代码片段有什么问题:a. if i i++; b. for ( i=0; i<20; i++ ) i–; c. while ( ) i++; d. do ( i++ ) until ( i == 20 ); e. switch ( i ) { case “hello”: case “goodbye”: printf( “Greetings.” ); break; case default: printf( “Boring.” ); } f. if ( i < 20 ) if ( i == 20 ) printf( “Lonely…” ); g. while ( done = TRUE ) done = ! done; h. for ( i=0; i<20; i*20 ) printf( “Modification…” );
- a.
if
语句的表达式应被括号包围; - b. 在
for
循环的表达式中递增i
,又在循环体中递减i
,循环不会结束; - c.
while
循环有括号但缺少表达式; - d.
do
语句格式应为do statement while ( expression );
; - e.
switch
语句中每个case
包含字符串,这是非法的,且case default
应写为default
; - f. 内层
if
条件i == 20
与外层if
条件i < 20
矛盾,printf()
永远不会被调用; - g. 这里使用了赋值运算符(
=
)而不是比较运算符(==
),会导致逻辑错误; - h.
for
循环的第三个表达式i*20
不会改变i
的值,循环条件不会改变,可能导致无限循环。
5、修改 nextPrime.c 程序,计算 1 到 100 之间的素数。
以下是修改后的代码:
#include <stdio.h>
#include <math.h>
#define true 1
#define false 0
int main( void ){
int candidate, isPrime, i, last;
printf( "Primes from 1 to 100: 2, " );
for ( candidate = 3; candidate <= 100; candidate += 2 ){
isPrime = true;
last = sqrt( candidate );
for ( i = 3; (i <= last) && isPrime; i += 2 ){
if ( (candidate % i) == 0 )
isPrime = false;
}
if ( isPrime )
printf( "%d, ", candidate );
}
return 0;
}