首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

高分求简单C语言有关问题

2012-02-08 
高分求简单C语言问题1)(10分)intmain(){return0}上面的返回值 0 有什么作用,换成1或者其他数字,又什么

高分求简单C语言问题
1)   (10分)
            int   main()
            {
                    return   0;
            }
        上面的返回值 "0 "有什么作用,   换成1   或者其他数字,   又什么什么差别与意义?

2)   (5分)   如何用VS.NET2003编辑C程序。(具体步骤)

3)   (5分)   在C语言中,   if   语句与   switch   语句在效率上有差别吗,   谈论范围仅限效率.

4)   (30分)(两程序,各15分)
      以下两程序在TC可以正常运行,   在VC6.0环境下出现异常,   我认为应该属于同一问题,   如果是同一问题,   我仍然赠送30分.

file1.c
#include <stdio.h>

int   main()
{
void   copy_string(char   from[],   char   to[]);

char   *a   =   "I   am   a   teacher. ";
char   *b   =   "You   are   a   student. ";

printf( "string   a   =   %s\nstring   b   =   %s\n ",   a,   b);

printf( "copy   string   a   to   string   b:   \n ");
                  //经过调试,问题出现在下面的函数调用,   可不知道为什么
copy_string(a,   b);
printf( "string   a   =   %s\nstring   b   =   %s\n ",   a,   b);

return   0;
}


void   copy_string(char   from[],   char   to[])
{
int   i   =   0;

while   (from[i]   !=   '\0 ')
{
to[i]   =   from[i];
i++;
}
to[i]   =   '\0 ';
}
-------------------------------
file2.c
#include <stdio.h>

int   main()
{
void   copy_string(char   *from,   char   *to);

char   *a   =   "I   am   a   teacher. ";
char   *b   =   "You   are   a   student. ";

printf( "string   a   =   %s\nstring   b   =   %s\n ",   a,   b);

printf( "copy   string   a   to   string   b:   \n ");
                  //经过调试,问题出现在下面的函数调用,   可不知道为什么
copy_string(a,   b);
printf( "string   a   =   %s\nstring   b   =   %s\n ",   a,   b);

return   0;
}


void   copy_string(char   *from,   char   *to)
{
for   (;   *from   !=   '\0 ';   from++,   to++)
{
*to   =   *from;
}

*to   =   '\0 ';
}



[解决办法]
1) (10分)
int main()
{
return 0;
}
上面的返回值 "0 "有什么作用, 换成1 或者其他数字, 又什么什么差别与意义?
返回0值是主程序向操作系统返回的值,表示程序正常结束,返回非0值表示有异常产生
[解决办法]
char *a = "I am a teacher. "; //其实a为常量指针了,所以调用 copy_string(a, b) 就有问题
char *b = "You are a student. ";
[解决办法]
2.VS2003写C程序,
  新建VC++项目,选择Win32控制台,在弹出的属性页上选择空项目,
然后再加入(或新建).H,.C文件


[解决办法]
问题1:
有些记不太清了,好像在某本书上看到,main()函数的返回值可以告诉操作系统这个程序的调用是否成功,一般情况下成功返回0,如果有错误发生则返回相应的错误代码,不过一般用得不多,返回0是最常见的。
问题2:
VS.Net2003中不能对直接打开的C文件进行编译
如果是控制台项目,步骤如下:
新建--> 项目--> Visual C++项目--> Win32-> Win32控制台项目,输入项目名,点完成即可。
“解决方案资源管理器”里有一个以项目名命名的.cpp文件,这个是主文件,stdafx.cpp一般不用作修改,如个多个文件同时使用相同的include,可以打在stdafx.h文件中。
在这里自动生成的主函数是_tmain(),其实和main()是一样的。
问题3:
个人认为如果需要判断的情况很多时,用switch明显比if结构要快很多。
问题4:
两个程序中的子函数copy_string()写的都是正确的,但是在main()函数是从字符串a、b的定义来看,所作的操作是在程序中定义两个字符串常量,然后将这两个字符串常量的地址传给a和b,在程序中,常量和变量在内存中的存储位置是不同的,决定了变量可以被修改,而常量不可以,程序的改正方法很简单:
方法1:

char *a = "I am a teacher. ";
char *b = "You are a student. ";
改为
char a[] = "I am a teacher. ";
char b[] = "You are a student. ";

方法2:

char *a = "I am a teacher. ";
char *b = "You are a student. ";
改为
char a[100] = "I am a teacher. ";
char b[100] = "You are a student. ";
(注:100是字符串最大长度,也可改成其它的值)

两种方法都可以通过,但是方法2与更安全,因为使用方法1有一个限制,由于方法1的定义方法中定义的字符数据的长度是字符串长度加1,空间相对而言是有限的,使用方法1时如果a的长度比b大,那么程序还是会报错。
如果使用方法2,那么设定一个最大长度,相对于方法1会安全许多。
[解决办法]
(1)返回值 "0 "表示程序在这个地方结束了,个人认为返回其他值也行.

(4)你这两个属于同一个问题:char *b = "You are a student. "; "You are a student. "这是字符串常量存在常量区,不可修改!!b是指向这个常量区的指针.

你现在想把字符串a里的copy到b里,这样就修改了b指向的内容,当然是非法的!

在上面两个程序中把char *b = "You are a student. ";
改成 char b[] = "You are a student. ";
应该就没问题了..
[解决办法]
解决的方法
修改工程配置
改成Release工程可以通过
因为Debug工程会对指针进行检查

原因是你的指针
char *a = "I am a teacher. "; char *b = "You are a student. ";
是常量指针
改成字符数组 
就可以了

热点排行