C语言习题求助,编译通过,运行错误,高分求解
展开全部
由于 C 语言本身的最大特点就是:其不仅是编程格式上非常地自由,而且在对其进行编译时也是非常自由的(编译器能够放过去很多它认为不是问题的问题),但自由的同时也给程序员带来了程序调试和运行上的困难。有些错误在编译的时候是能够发现的(例如:程序语法错误)、而有些错误在编译程序的时候却是不能够被发现的,只有到了执行程序的时候,才会发现程序的运行结果错误。你可以参考我下面提供的类型,希望能够对你有些帮助。
Warning 警告类型错误有很多种。例如:(1)、虽然定义了某个变量,但是没有对其是否成功初始化就使用、(2)、把赋值符号的等于(=)写成了逻辑相等(==),等等。
例如对于(1)而言:
#include <stdlib.h> /* malloc( ) 函数原型在此头文件中定义 */
void main( )
{
char * p ;
p = (char *)malloc(10000)*sizeof(char) ; /* 为指针变量 p 动态分配内存 */
if( p == NULL ) /* 内存分配失败,返回 NULL */
{ /* 该段代码用于判断是否为指针变量 p 成功分配到内存,是必不可少的 */
printf("Memory allocation failured !\n") ;
exit(1) ; /* 若内存分配失败,退出应用程序,否则的话,严重的话,就有可能使系统崩溃!!! */
}
strcpy(p, "This is a test string") ; /* 内存分配成功,将字符串的内容复制到 p 中 */
}
例如:再对于(2)而言:
void main( )
{
int num ;
scanf("%d", &num) ;
if( num == 10 )
printf("You input number is: 10 !\n" ) ;
else
printf("You input number is not 10 !\n" ) ;
}
但是如果在这个程序中,把双等号:== 误写成了:=,那么该语句就变成了:if( num = 10 )
那么该语句产生的效果就是:无论你在 scanf( ) 语句中输入任何数字(任意的正数也好、负数也好),程序总是把 10 这个整数赋给变量 num,那么其逻辑表达式的值总为 1,所以则该程序的运行结果总是:You input number is: 10。
像这样的程序错误都属于 Warning 错误,在编译的时候是发现不了的,只有到运行程序的时候,才会发现程序的运行结果不正确。
Warning 警告类型错误有很多种。例如:(1)、虽然定义了某个变量,但是没有对其是否成功初始化就使用、(2)、把赋值符号的等于(=)写成了逻辑相等(==),等等。
例如对于(1)而言:
#include <stdlib.h> /* malloc( ) 函数原型在此头文件中定义 */
void main( )
{
char * p ;
p = (char *)malloc(10000)*sizeof(char) ; /* 为指针变量 p 动态分配内存 */
if( p == NULL ) /* 内存分配失败,返回 NULL */
{ /* 该段代码用于判断是否为指针变量 p 成功分配到内存,是必不可少的 */
printf("Memory allocation failured !\n") ;
exit(1) ; /* 若内存分配失败,退出应用程序,否则的话,严重的话,就有可能使系统崩溃!!! */
}
strcpy(p, "This is a test string") ; /* 内存分配成功,将字符串的内容复制到 p 中 */
}
例如:再对于(2)而言:
void main( )
{
int num ;
scanf("%d", &num) ;
if( num == 10 )
printf("You input number is: 10 !\n" ) ;
else
printf("You input number is not 10 !\n" ) ;
}
但是如果在这个程序中,把双等号:== 误写成了:=,那么该语句就变成了:if( num = 10 )
那么该语句产生的效果就是:无论你在 scanf( ) 语句中输入任何数字(任意的正数也好、负数也好),程序总是把 10 这个整数赋给变量 num,那么其逻辑表达式的值总为 1,所以则该程序的运行结果总是:You input number is: 10。
像这样的程序错误都属于 Warning 错误,在编译的时候是发现不了的,只有到运行程序的时候,才会发现程序的运行结果不正确。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询