高分求解简单C语言题
希望会的人多多帮忙新手, 分要不够给的话, 我会记住你们的ID, 在以后的文章里, 多给你们加分的, 一分耕耘一分收获!
1)中文到底占几个字符啊,为什么我可以用一个字符读出中文,用fputc( '的 ', fp);却无法写入文本文件中呢?写进的是乱码
2)程序运行时需要和文件进行操作,一次读写多少字符,可以使程序效率达到最高,有哪些标准可以参考呢?或者怎么测试呢?
3)include 命令包含头文件时,会不会因为包含的头文件过多,而导致程序编译后占用更多空间?
4)学习C99标准,介绍几本中文版的书
5)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
int main(void)
{
FILE *fp;
if ((fp = fopen( "test.txt ", "r ")) == NULL)
{
printf( "Cannot open file test.txt\n ");
exit(0);
}
//为什么输出结果为3276543, 编译器VC6, 文本内容只有整数 10
printf( "%d\n ", getw(fp));
fclose(fp);
return 0;
}
6)附一数学题
X: 1 2 3 4 5
Y: 1 3 5 3 1
画出图象是抛物线, 选择y = a * x ^ 2 + b * x + c 这个模型, 为什么代任意三点都不行呢?哪里出问题? 我想知道原因.
[解决办法]
1)中文到底占几个字符啊,为什么我可以用一个字符读出中文,用fputc( '的 ', fp);却无法写入文本文件中呢?写进的是乱码
弄明白中文在计算机中是怎么编码的,各种编码方式同一个汉字编码出的字符数是不一样的,
比如UNICODE和GB2312都是两个字节,utf8则是三个字节。用fputc( '的 ', fp)可以写进文件,只是打开这个文件的程序不知道这是什么编码方式,按默认的编码方式打开可能是错误的。你可以先用下记事本的另存为功能,选择不同的编码方式看将同一个汉字存成文件后看看数据都是什么,windows会加上自己的文件头来表示这个数据是什么编码方式。
2)程序运行时需要和文件进行操作,一次读写多少字符,可以使程序效率达到最高,有哪些标准可以参考呢?或者怎么测试呢?
理论上将当然一次越多越好,读取存储器中的操作算是IO操作相对比较慢,但这得看具体得文件系统读写API是怎么实现的,现在的操作系统这中间有太多层次。可以用timer或者直接读取系统的clock计时测试。
3)include 命令包含头文件时,会不会因为包含的头文件过多,而导致程序编译后占用更多空间?
include只是一种程序的表示方式,你分为再多的头文件也是告诉编译器同样的内容,增加的只是编译时间,合理的分离成各个头文件可以让程序更具有可读性。
4)学习C99标准,介绍几本中文版的书
实践
5)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
int main(void)
{
FILE *fp;
if ((fp = fopen( "test.txt ", "r ")) == NULL)
{
printf( "Cannot open file test.txt\n ");
exit(0);
}
//为什么输出结果为3276543, 编译器VC6, 文本内容只有整数 10
printf( "%d\n ", getw(fp));
fclose(fp);
return 0;
}
3276543的16进制是31EFFF,弄懂了第一个问题这个问题你也就懂了
[解决办法]
2程序运行时需要和文件进行操作,一次读写多少字符,可以使程序效率达到最高,有哪些标准可以参考呢?或者怎么测试呢?
-->
这个没有定数的。如果要研究这个的话, 需要很多因素如和很强的数学来做做模拟。:)
3include 命令包含头文件时,会不会因为包含的头文件过多,而导致程序编译后占用更多空间
-〉
这个和你所用到的库函数有多少有关,一般这也不是问题。要知道编译,链接的时候只是找到你include的文件中所被用到的函数而已。如果你的程序连这点空间都想省的话,那就不能完成你的功能了。(当然你要想自己编相同功能的函数也可以, 赫赫 不过一般和库函数相比较都是既费时间,又费空间)
4 学习C99标准,介绍几本中文版的书
-〉
prime c v5
5 -〉不知道, 没用过
6-〉不知道你说的什么意思
[解决办法]
1、
中文是两个字节,而且楼主要记住的就是在计算机中显示中文,是画出来的。
在以前使用那些老东东的时候,由于没有硬盘,把中文显示出来,做成字库是
不现实的,所以就有了汉卡(好像求伯君冒病写过一个汉卡程序),把那些
汉字信息存储在了硬件上,供程序使用。
后来随着PC的发展,我们就把汉字信息,做成了字库供程序调用。就有了后来的
HZ_16(16点阵) HZ_24(24点阵)等等。到了现在windows里面使用了很多的字体,
其实那些所谓的字体,就是一种字库文件。
但是无论怎么说,汉字仍然还是被画出来的,被画出来的文字还有韩文、以及乃那些
畜生使用的“日文”等等很多。
2、程序和文件打交道的时候,一个很重要的原则就是减少打开、关闭文件的次数、减少
读写文件的次数。
凡是学过计算机组成原理的人都知道,在当前计算机存储设备中访问速度从高到低依次是
CPU高速二级缓存(Cache)、内存(RAM)、硬盘、光盘、软盘。所以呢,我们在程序中
要尽量的减少跟永久存储数据的存储设备打交道(如:硬盘、光盘、软盘)。所以我们就会
设一个数据缓冲区,先把数据缓冲区里面,然后再使用,这样效率会大大提高。
由于Cache性能的影响,我们在开 buffer 的时候应尽量的保证是2的整次方。如:256、512、
1024等。关于Cache可以参考我对一道百度面试题的解析。
http://blog.csdn.net/ammana_babi/archive/2006/09/20/1254261.aspx
3、上面有人答复的很不错了。
4、 练。
5、仔细的去理解和体会你问的第一个问题。最好弄个字库文件,HZ_16在以前最通用,找本书
做做试验。你如果要在纯dos下显示汉字,必须要字库,而不是你所想象的那么一个简单的
printf或 fputc等等就可以显示的,你要把汉字信息读到buffer里面,然后再一个点一个点的
去画。而如果在VC6下,你使用 puts( "你好 "); 应该是可以支持的了,因为这个函数已经对
字符的处理做了修改了。