学校首页  教务选课  本站首页  计算中心简介  部门工作  对外交流  C语言学习  大学计算机  PAT考试  咨询与投诉 
 首页 > C语言学习 > C语言学习讨论 > 正文 更多C语言学习讨论
程序结果不对时的提示与查错导引

2013年01月06日17:51  来源:计算中心  访问量:27756

  0、快速检查(常规预检)
  (1)是否将类似“scanf("%?"...)”的代码写成了“scanf("%?\n"...)”或“scanf("%? "...)”?
    ※ 请注意scanf("%c")和scanf(" %c")在效果上的区别!
  (2)让scanf输入数据的普通变量前是否忘记了取地址符“&”?
  (3)scanf/printf里的%?和对应的数据之类型是否匹配?

  (4)简易跟踪:读入数据执行后,相应的变量中是否有该有的数据?
         输出数据前,相应的变量中的数据是否正确?

  (5)自己生成的字符串是否在正确的位置放置了字符串结束标记'\0'。
  (6)是否将判断相等的“==”写成了“=”,为了避免此类问题,建议平时养成习惯:将类似if (tmp == 3)的语句写成 if (3 == tmp)。
  (7)if、while、for等语句后是否多写了“;”?函数原型声明后是否少了“;”、函数定义后是否多了“;”?switch、for、while里是否该有break却没有?
  (8)该赋初值的变量是否赋了初值?

  一、输入输出
  (0)空白字符:包括空格、回车、制表符(TAB)。

  (1)使用scanf读入数据:
    %d十进制整数  %o八进制整数  %x十六进制整数
    %c字符,空白字符也作为有效字符读入
    %s字符串,遇到第一个空白字符时结束
    %f或%e实数 float型数据,小数或指数形式远均可——%lf或%le double型数据
    %3d读入十进制整数,最多读3位数    %3s读入字符串,最多读3个字符
    %3lf读入实数到double型变量中,最多读3位(含小数点)
    xmwn=%%%lf读入实数到到double型变量中(%%表示一个%),且用户输入数据的形式必须类似为xmwn=%78.32(此时实际读到变量中的数据为78.32)。
    *修饰输入时表示忽略相应的数据,例如对于scanf("%d%*f%d", &num1, &num2)和键盘输入123 890.2322 5672,则num1中的数为123、num2中的数为5672。

  (2)使用scanf读入数据时,应注意数据间的分隔符,分隔符不会当作数据读入。若未在程序中给予限定,则默认为空白字符。
    ※ 所写程序中设定的输入格式与题目中是否一致?例如程序的运行效果示例的输入格式举例为“10000,8”,正确的输入设计应为“scanf("%d,%d"...)”,但考生则可能设计为“scanf("%d%d"...)”或“scanf("%d %d"...)”并且自己运行时的测试输入为“10000 8”,结果与题目中的运行效果示例几乎一样,但传到系统中得到的评分结果就是0分——因为评分系统在测试时自动输入的数据格式将类似“10000,8”。

  (3)是否将类似“scanf("%d %d"...)”的代码写成了“scanf("%d %d\n"...)”?
   ※ 请注意scanf("%c")和scanf(" %c")在效果上的区别!

  (4)让scanf输入数据的普通变量前是否忘记了取地址符“&”?

  (5)使用printf输出数据,其格式转换说明符与scanf基本相同,但应注意:
   %x与%X:均表示以无符号十六进制整数形式输出,区别在于小写与大写,效果见示例printf("%x %X\n", 47, 47)。
   %f:与scanf不同的是,输出时无论是double型还是float型,均使用%f,其原因是编译时,输出的实数均会被自动先转换成double型。
   %%:输出一个%
   ※ 请注意%5d  %05d  %-5d在输出效果上的差异
   ※ 将n1,n2定义成int并反复赋与不同的值去执行代码printf("%*d\n", n1, 123)、printf("%*.*f xx\n", n1, n2, 2.123),看看效果的差异并领会其用处

  (6)输出格式与题目要求是否一致?请使用题目中提供的编程素材(复制粘贴到程序中,又快又准)、避免无谓的失分——这也是系统提供编程素材的主要目的。

  (7)scanf/printf的格式转换说明符与提供数据的变量之类似是否一致?例如%d对应的变量却是一double/float,%f对应的却是一int,或者有多个%d%f却与之对应的提供数据的变量却不够!

  (8)更多因输入/输出格式而导致的问题,请阅读为什么在自己的计算机上程序的运行结果是对的,但传到系统却未得满分甚至是0分?如何分析定位故障原因? 

  二、运算的优先级与期望的不一致,建议:不写复杂的表达式,拿不准时或较难分清时使用括号
  (1)是否将(*Count)++写成了*Count++?

  (2)是否将((ch = getchar()) != '\n')写成了(ch = getchar() != '\n')?

  (3)是否将((fp = fopen("data", "r")) == NULL)写成了(fp = fopen("data", "r") == NULL)?

  三、结构体的使用
  请参考Struct用例

  四、其它
  (1)输出的字符串中出现很多类似于“烫”的内容:请检查字符串是否在正确的位置放置了字符串结束标记'\0'。

  (2)是否将判断相等的“==”写成了“=”,为了避免此类问题,建议平时养成习惯:将类似if (tmp == 3)的语句写成 if (3 == tmp)。

  (3)if、while、for等语句后是否多写了“;”?函数原型声明后是否少了“;”、函数定义后是否多了“;”?

  (4)注意:2*Num与2.0*Num、1/Num与1.0/Num是有区别的。
   ※ 当评分系统提示“结果较大时或者大数计算正确”时,应考试存储结果的变量的数据类型是否合适,运算过程中是否有溢出。

  (5)变量的初值问题:是否没有赋值?(特别是显示结果类似-858993460、-925596313493...时) 或者是否需要每次循环开始前赋初值或清0?

  (6)边界问题:数组是否越界使用?例如int a[n],却使用了a[n]或for (i=0; i<=n; i++)时不该=n。

  (7)是否将' '、'a'写成了" "、"a"?

  (8)对于ch=getchar() ch=fgetc(..),ch是否定义成int?

  (9)int foo( ) 不等于 int foo(void),int foo( )真正意思是函数可以接受任意数目的参数。

  (10)程序在编译/连接时若报告以下等信息,请阅读VC6编译与链接过程中常见的出错提示
    unresolved external symbol _main
    _main already defined in xxxx.obj
    unknown character '0x##'
    undeclared identifier
    'fun' : must return a value
    'atoi' undefined; assuming extern returning int
    '=' : 'int *' differs in levels of indirection from 'int '
    'fun' : different types for formal and actual parameter 2
    ......

  五、Raptor流程图编程
  (1)如何实现以下输入?
    printf("Please input x:");
    scanf("%d", &x);
  建议:使用input框即可完成上述两行代码功能:在Prompt处填写"Please input x:",在其下的变量域处填写x。

  (2)如何实现以下输出?
  printf("\nF(%d) = %f", x, Fx);
  建议:使用output框,填写"F(" + x + ") = " + Fx。


 附 件Struct用例
 前一条:使用复印的C答案的危害 (2011-04-19)
 后一条:无
相关报道
·使用复印的C答案的危害 (2011-04-19)
·第1章 为什么要学C语言 (2011-12-13)
·第2章 C数据类型 (2011-12-13)
·第3章 简单的算术运算和表达式 (2011-12-13)
·第4章 键盘输入和屏幕输出 (2011-12-13)
·第5章 选择控制结构 (2011-12-13)

 

◆ MOOC+SPOC

C语言程序设计MOOC
Office高级应用MOOC
大学计算机MOOC(56学时)
大学计算机MOOC(32学时)

◆ 英语工具(*=机房开放)

离线词典:有道词典(绿色版)
离线翻译:金山快译(绿色版)
* 谷歌翻译
* 百度词典/翻译/论文写作助手
* 金山词霸/翻译/写作批改
必应词典/翻译
有道词典/翻译/简历助手

◆ 重要公告

2024 年(第17届)中国大学…
2023-2024学年第2学期《Offi…
第三届“成都信息工程大学团…
20232学期非计算机类《C语言…
第二届成都信息工程大学新生…
第十五届蓝桥杯全国软件和信…
20231学期非计算机类《C语言…
20222学期非计算机类《C语言…
2022-2023第2学期《Office高…
20221学期非计算机类《C语言…

◆ 校园热线

教学平台 数字图书 招生就业
学生事务 心灵之约 邮件服务
后勤管理
四川·成都市西南航空港经济开发区学府路一段24号  邮编:610225
学校值班电话:028-85966502     联系计算中心:电话028-85966005  电子邮件  留言
Copyright©成都信息工程大学计算中心 2008-2011  建议使用IE5.5,1024*768以上浏览