Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4528895
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类:

2008-09-22 18:30:12

Reship from:http://zywangyan54.blog.163.com/blog/static/318103582008666255895/
排错

一:编译前
1.编译前检查一遍,找出明显的错误
2.编译时可以找到错误
3.改错误时不用一次把全部错误改掉,因为当你改掉一部分错误的时候,其他错误很可能就随之消失

二:跟踪调试方法
1.手工一步步执行程序(最笨的方法)
2.为了预防“语义”错误,可以在程序中重要变量转换的地方加入printf()函数可以观察变量具体变化过程。
3.用debugger检查程序,好的debugger可以一步一步执行程序,并且可以显示执行的是哪一个语句。



数据类型:

整型:

char:8bit(All) 一般用于"letter" 例如:char grade = 'a'将变量grade初始化为a(数值形)。如果没有‘’则C将认为a为一变量 如果是“a”则C将认为是一个字符串

int:   32bit(在多数32位操作系统中)  16bit(ansi C规定的最小)

short: 16bit(All)

long:32bit(All)       例:7L是长型(用于小数位但要求长数位)

long long:64bit(All)   例:7LL (ll也可以但为了避免与1混淆所以要用LL)

unsigned int(或unsigned)是没有负数的数。16bit的unsigned int的range是0 to 65535不是-32768 to 32768
 

string(字符串):用char定义,用scanf输入。
与char不同之处是"x"
string中的x表示'x'和'\0';char的'x'就是单一的x字符。
('\0':表示字符串结束)
      




短数据类型是不是可以节省内存呢?(当程序并不需要32bit以上的数据类型时那么用char,short数据类型是不是就会节省内存呢?)

Portable types:inittypes.h(c99)

浮点类型:

float: 科学技术法,有效位数为6,10的N次幂为-37~38 (all)

double:有效位数为18,10的N次幂为-4931~4932 (苹果机)
                 有效位数为15,10的N次幂为-307~308(linux,windows)
                 有效位数为6,10的N次幂为-37~38(ANSI C)

long double:有效位数为18,10的N次幂为-4931~4932(苹果机,linux,windows)
有效位数为6,10的N次幂为-37~38(ANSI C)


数据类型的打印(printf)

dec:%d来打印(10进制)   %i 用于负数
octal:%o来打印,%#o用#来表示8进制即有前缀(8进制)
hex:%x来打印,%#x同8进制(16进制)


事例:
printf("dec = %d; octal = %o; hex = %x\n",x, x, x);
printf("dec = %d; octal = %#o; hex = %#x\n",x, x, x);

打印结果为:
dec = 100; octal = 144; hex = 64
dex = 100; octal = 0144; hex = 0x64
__________________________________________________________________________

short, long, long long and unsigned类型的打印

short:%hd或%d打印
long:%ld打印
long long:%lld打印
unsigned:%u打印

char类型的打印

char:用%c打印字符,用%d打印字符的ASCII码









__________________________________________________________________________

%f(%F)用于float, double, long double
%e(%E)为科学计数法
%a(%A)用于float类型hexadecimal digits and p-notation(P-notation)
%g(%G)是对%f或%e(%E)的条件选择。当精度>=0.0001时用%e其余时候用%f














————————————————————————————————
字符串的打印用%s打印
__________________________________________________________________________
%%用于打印%数
%p用于指针


__________________________________________________________________________

printf中转意字符的数据修正

flag:有5个flags,(-,+,space,#,0)

"-"
例:"%-20s"
int a=123456;                      int a = 123456;
printf("*%-10d*", a);             printf("*%-10d*", a);
输出结果为:*123456    *        输出结果是:*    123456*

"+"
例:"%6.2f"
const double RENT = 3852.99;
printf("*%+4.2f*, RENT");
输出结果为:*+3852.99*
作用是如果是负数就表示为负号如果是正数就表示为正号。

"space"
例:"% 6.2f"在数字前有个'space'
作用说明,如果被表示的变量为一个负数则符号将替代space,如果是一个正数则就是一个space

"#"
例:"%#o", "%#8.0f","%+#10.3E"
作用说明:为%o提供一个"0",为%x(%X)提供一个0x(0X)。为float保证能打印出小数点后的数字(即使是没有小数位)。为%f(%F)跟踪0

"0"
例"%010d","%08.3f"
作用与space相同,当有负数要加符号,当是正数时于space不同,数字前面没有空格
_________________________________________________________________________________________

digit(s)和.digti(s)
例"%4d","%4.2d"
"%4d"意思是一个整数最小数位是4。如果位数比4小,就按照数字的位数。
"%4.2"意思是一个float总共有4位数(连同小数位),并且有2为小数位




_________________________________________________________________________________________

"h"
例"%hu","%hhx","%6.4hd"
作用是指定short int 或者unsigned short int

"hh"
例"%hhu","%hhx","%6.4hhd"
作用是指定signed char 或者 unsigned char

"j"
例"%jd","%8jX"
作用是指定一个intmax_t 或者 uintmax_t

"l"
例"%ld","%8lu"
作用指定long int 或 unsigned long int

"ll"
例"%lld","%8llu"
作用指定long long int 或者 unsigned long long int

"L"
例"%Lf","%10.4Le"
作用指定long double

"t"
例"%td","%12ti"
作用指定一个prdiff_t(一种为2个指针通信的数据类型C99)

"z"
例"%zd","%12zx"
作用指定size_t(C99),是sizeof的返回值




数据类型输入(scanf)

%c:输入一个字符
%d输入一个10进制数字
%e,%f,%g,%a(C99)输入一个float数字
%E,%F,%G,%A(C99)输入一个float数字
%i 输入一个signed decimal integer
%o 输入一个signed octal integer
%p 输入一个指针(一个地址)
%s 输入一个字符串(没有空格)
%u 输入一个unsigned decimal intger
%x(%X) 输入一个signed hexadecimal intger



转意符总结

\a                alert警笛(ansi C)
\b                backspace
\f                 from feed(换页符)
\n                 Newline
\r                 Carriage return
\t                 Horizontal tab水平制表符
\v                Vertical tab 垂直制表符
\\                Backslash(\)
\'                  Single quote
\"                 Double quote
\?                 ?
\0oo            Octal value (o表示10进制的位数)
\xhh             16进制(h同o)
\ddd             八进制(这个表示3位的)

转义符被赋予一个变量时必须要加“”变为字符




可读性

1.要使用有意义的变量
2.给程序加注释
3.使用空行将函数块分开
4.使用空行将函数里面的语句分开




函数调用

c语言编译器在处理函数返回值时首先要知道函数返回值的类型,你用2种选择:
1.提前定义#define
2.在main函数前声明所要调用函数的类型如:

double power(double n, int p); // ANSI prototype
int main(void)
这样做的好处是可以避免提前声明的种种麻烦,如果提前声明了那么在整个main函数中所有power函数都将是你所声明的类型。但此种做法并不是c-style不过灵活是c的风格,为什么不可以这样呢?


_________________________________________________________________________
字符串函数getchar(),putchar()
ch = getchar() 作用相当于 scanf("%c", &ch);
putchar(ch)用于打印ch。作用相当于printf("%c", ch);
2个函数之对字符创有作用所以都比scanf和printf快



循环

c语言的循环while,for, do while

while循环:
while(条件)
    statements;
说明当条件为真时执行statements当条件为假时跳过statements向下执行

for循环:
for(定义;条件;update)
    statements;
说明……

do……while循环
do
statements
while(条件)
说明do……while循环不管条件如何都会执行一次循环的



C语言中的逻辑预算号

Operator                                         Meaning
&&                                                  and
||(shift+\)                                         or
!                                                       not




网络摘抄(C)

一、typedef的用法

在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:

typedef    int       INT;
typedef    int       ARRAY[10];
typedef   (int*)   pINT;

typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。

二、#define的用法

#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编

译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:

#define   INT             int
#define   TRUE         1
#define   Add(a,b)     ((a)+(b));
#define   Loop_10    for (int i=0; i<10; i++)

在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。

三、typedef与#define的区别

从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量

,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#define

INT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的

编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗

长的类型的别名。

宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变

量的功能。请看上面第一大点代码的第三行:

typedef    (int*)      pINT;
以及下面这行:
#define    pINT2    int*

效果相同?实则不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;

表示定义了一个整型指针变量a和整型变量b。

____________________________________________________________________

fabs和abs函数

fabs和abs都是表示取绝对值,不过参数不同,返回的类型也不同,返回类型和参数一样,fbas(double),abs(int).

____________________________________________________________________
C语言中单引号和双引号的区别和用法

''表示字符,""表示是字符串。
''里面只能放一个字符,""里面表示是字符串,系统自动会在串末尾补一个0,二者长度和内容都是不一样的。

比如'a'表示是一个字符,"a"表示一个字符串相当于'a'+'\0'。


另外,用双引号括起来的字符串可以直接付给指针,而''实际上表示字符对应的ACSII码,是一个常量,不能直接赋值给指针。
阅读(3137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~