C语言编程常见错误与解决方案

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值