博文

C/C++ 常见误区 (2006-02-07 02:54:00)

摘要:C/C++ 常见误区     在此论坛上发现了一些特别的问题,这些问题在其他地方并不存在,猜想是因为这里以学生为主,而 学校的教材和教师与IT发展脱节严重。 1. C++虽然主要是以C的基础发展起来的一门新语言,但她不是C的替代品,不是C的升级,C++和C是兄弟 关系。没有谁比谁先进的说法,更重要的一点是C和C++各自的标准委员会是独立的,最新的C++标准是 C++98,最新的C标准是C99。因此也没有先学C再说C++的说法,也不再(注意这个"不再")有C++语法是C 语法的超集的说法。 2. C++/CLI 和 C# 是微软的,它们与C和C++没有任何关系,虽然部分语法相似。但哪两种语言不相似呢 ?都是abc这26个字母。 3. 不要使用TC/TC++/BC/CB等古老的编译器来学习C/C++,因为它们太古老了,不支持新的C/C++标准。不 要使用CBX/VC++6.0/VC2005等对C/C++标准支持不好的编译器,虽然这些编译器适合工作,但不适合学习 ,因为它们中的语法陷阱很多。记住唯一适合学习的编译器是gcc/mingw。[antigloss注:Dev-C++ 使用 的编译器就是gcc & g++] 4. 不要用""代替<>来包含系统头文件,虽然有些编译器允许你这样做,但它不符合C/C++标准。
错误的示例:#include "stdio.h",#include "iostream"。[antigloss注:<> 用于包含标准头文件和系 统头文件,"" 用于包含自定义头文件。标准似乎没有明确规定不准用 "" 包含标准头文件和系统头文件 。使用 "" 包含标准头文件或者系统头文件只能说是一种不良风格。] 5. 不要将main函数的返回类型定义为void,虽然有些编译器允许你这样做,但它不符合C/C++标准。不要 将函数的int返回类型省略不写,在C++中要求编译器至少给一个警告。错误的示例:void main() {}, main() {} [antigloss注:C99和C++98都要求编译器对省略int至少发出一个警告] 6. 不要把VC++中的 #include "stdafx.h" 贴出来,它是预编译头文件。如同上菜时不要把厨师也放到托 盘中......

阅读全文(3868) | 评论:0

C语言编程易犯毛病集合(2006-01-27 19:12:00)

摘要:C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。
1.书写标识符时,忽略了大小写字母的区别。
main()
{
int a=5;
printf("%d",A);
}
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main()
{
float a,b;
printf("%d",a%b);
}
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;
c="a";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;......

阅读全文(3206) | 评论:1

C语言函数大全(2006-01-24 17:32:00)

摘要:http://www.72up.com/c/function.htm......

阅读全文(3558) | 评论:0

C语言库函数举例说明(二)(2006-01-24 15:04:00)

摘要:V字母开头 函数名: vfprintf 
功  能: 送格式化输出到一流中 
用  法: int vfprintf(FILE *stream, char *format, va_list param); 
程序例:  #include  
#include  
#include   FILE *fp;  int vfpf(char *fmt, ...) 

   va_list argptr; 
   int cnt;     va_start(argptr, fmt); 
   cnt = vfprintf(fp, fmt, argptr); 
   va_end(argptr);     return(cnt); 
}  int main(void) 

   int inumber = 30; 
   float fnumber = 90.0; 
   char string[4] = "abc";     fp = tmpfile(); 
   if (fp == NULL) 
   { 
      perror("tmpfile() call"); 
      exit(1); 
   }     vfpf("%d %f %s", inumber, fnumber, string);&n......

阅读全文(3072) | 评论:0

C语言库函数举例说明(一)(2006-01-24 14:28:00)

摘要:O字母开头 函数名: open 
功  能: 打开一个文件用于读或写 
用  法: int open(char *pathname, int access[, int permiss]); 
程序例: 
#include  
#include  
#include  
#include   int main(void) 

   int handle; 
   char msg[] = "Hello world";     if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1) 
   { 
      perror("Error:"); 
      return 1; 
   } 
   write(handle, msg, strlen(msg)); 
   close(handle); 
   return 0; 
}  
   
   函数名: outport 
功  能: 输出整数到硬件端口中 
用  法: void outport(int port, int value); 
程序例:  #include  
#include   int main(void) 

   int value = 64;&nbs......

阅读全文(4281) | 评论:0

C语言32个关键字解释(2006-01-24 14:05:00)

摘要:[color=Teal]C语言小知识:[/color]
auto :声明自动变量 一般不使用
double :声明双精度变量或函数
int: 声明整型变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
else :条件语句否定分支(与 if 连用)
long :声明长整型变量或函数     
switch :用于开关语句  
case:开关语句分支   
enum :声明枚举类型   
register:声明积存器变量  
typedef:用以给数据类型取别名(当然还有其他作用)
char :声明字符型变量或函数
extern:声明变量是在其他文件正声明(也可以看做是引用变量)   
return :子程序返回语句(可以带参数,也看不带参数)   
union:声明联合数据类型   
const :声明只读变量   
float:声明浮点型变量或函数
short :声明短整型变量或函数
unsigned:声明无符号类型变量或函数
continue:结束当前循环,开始下一轮循环  
for:一种循环语句(可意会不可言传)      
signed:生命有符号类型变量或函数   
void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
default:开关语句中的“其他”分支  
goto:无条件跳转语句     
sizeof:计算数据类型长度   
volatile:说明变量在程序执行中可被隐含地改变  
do :循环语句的循环体
while :循环语句的循环条件
static :声明静态变量
if:条件语句......

阅读全文(39886) | 评论:20

编程与数学建模(2006-01-22 13:26:00)

摘要:           那什么是数学建模?     数学建模是指对现实世界的一特定对象,为了某特定目的,做出一些重要的简化和假设,运用适当的数学工具得到一个数学结构,用它来解释特定现象的现实性态,预测对象的未来状况,提供处理对象的优化决策和控制,设计满足某种需要的产品等。一般来说数学建模过
程可用如下框图来表明:       数学是在实际应用的需求中产生的,要解决实际问题就必需建立数学模型,从此意义上讲数学建模和数学一样有古老历史。例如,欧几里德几何就是一个古老的数学模型,牛顿万有引力定律也是数学建模的一个光辉典范。今天,数学以空前的广度和深度向其它科学技术领域渗透,过去很少应用数学的领域现在迅速走向定量化,数量化,需建立大量的数学模型。特别是新技术、新工艺蓬勃兴起,计算机的普及和广泛应用,数学在许多高新技术上起着十
分关键的作用。因此数学建模被时代辅予更为重要的意义。        大学生数学建模竞赛自1985年由美国开始举办,竞赛以三名学生组成一个队,赛前有指导教师培训。赛题来源于实际问题。比赛时要求就选定的赛题每个队在连续三天的时间里写出论文,它包括:问题的适当阐述;合理的假设;模型的分析、建立、求解、验证;结果的分析;模型优缺点讨论等。数学建模竞赛宗旨是鼓励大学师生对范围并不固定的各种实际问题予以阐明、分析并提出解法,通过这样一种方式鼓励师生积极参与并强调实现完整的模型构造的过程。以竞赛的方式培养学生应用数学进行分析、推理、证明和计算的能力;用数学语言表达实际问题及用普通人能理解的语言表达数学结果的能力;应用计算机及相应数学软
件的能力;独立查找文献,自学的能力,组织、协调、管理的能力;创造力、想象力、联想力和洞察力。他还可以培养学生不怕吃苦、敢于战胜困难的坚强意志,培养自律、团结的优秀品质,培养正确的数学观。这项赛事自诞生起就引起了越来越多的关注,逐渐有其他国家的高校参加。我国自1989年起陆续有高校参加美国大学生数学建模竞赛。1992年起我国开始举办自己的大学生数学建模竞赛,并成为......

阅读全文(4357) | 评论:1

堆和栈的区别   <转>(2006-01-20 22:10:00)

摘要: 堆和栈的区别    堆和栈的区别                     (不知堆栈者请看最后)
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序 
这是一个前辈写的,非常详细 
//main.cpp 
int a = 0; 全局初始化区 
char *p1; 全局未初始化区 
main() 

int b; 栈 
char s[] = "abc"; 栈 
char *p2; 栈 
char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
static int c =0; 全局(静态)初始化区 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
分配得来得10和20字节的区域就在堆区。 ......

阅读全文(2787) | 评论:1