为数据结构打基础,跨专业学习:
一、数据类型:
例一:
整型变量的数据溢出:
#include<stdio.h>
int main()
{
short a,b;
a = 32767;
b = 1;
printf(" %d %d %d\n",a,b, a+b);
printf(" %d %d %d\n",a,b, (short)(a+b));
return 0;
}
注意各种变量在内存中的位数,以免计算的时候出现数据溢出!
short,long,int ,unsigned int,
float,double,
char,string
a[ ], struct
例二:
实型变量的舍入误差:
#include<stdio.h>
int main()
{
double a,b;
a = 1234567.42e4;
b = a + 20.0;
printf(" %f\n %f\n\n\n",a,b);
printf(" %f\n %f\n",(float)a,(float)b);
return 0;
}
#include<stdio.h>
void main()
{
float a,b;
a=123456.72e5; //a的值很大
b=a+20; //与a相比,20很小
printf("%f \n %f\n",a,b);
一个大数在加一个很小的数的时候,有可能发生忽略的情况,所以要避免两个相差很大的数直接相加!
例三:
转义字符
#include<stdio.h>
void main()
{
//printf("a\n"); // \n 换行
//printf("a\t"); // \t 相当于Tab
//prinft("a\b"); // \b 退格
//printf("a\r"); // \r 回车
//printf("a\\"); // \\ 反斜杠
//printf("a\'"); // \' 单引号
//printf("a\""); // \" 双引号\
//printf("a\a"); // \a 鸣铃
//printf("\001"); // \ddd 1~3位八进制代表的字符 ASCII
//printf("\x01"); // \xhh 1~2位十六进制数代表字符
//printf("a\a\bc\0415074\x74y\\q\rwe\"\n");
}
例四:
字符变量
#include<stdio.h>
int main()
{
char a=0x0061,b; // a = 0x1261 - - - - a = 0x0061; 只取后两位;
int c = 0x1261,d;
b=a-96;
d=c-96;
printf("%c,%c\n%d,%d\n%d,%d\n",a,b,a,b,c,d);
return 0;
}
字符变量只占八位二进制,在赋值的时候,只取后面的八位,前面的自动忽略;
自增自减
#include<stdio.h>
void main()
{
int i=5,x;
x=i++;
printf("i=%d,x=%d\n",i,x);
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
}
记着正常用法即可;
逗号运算符
#include <stdio.h>
int main()
{
int a,x;
x=(a=3,6*3);
printf("a=%d,x=%d\n",a,x);
x=a=3,6*a;
printf("a=%d,x=%d\n",a,x);
x=(a = 3, a+5 , a*3);
printf("a=%d,x=%d\n",a,x);
return 0;
}
出现逗号运算符的时候,一般只取最后一个表达式即可,
需要注意的是,前面的赋值语句一样起作用!
如:
x=(a=3,6*3);
此时a的值为3
例七:
复制转换高位丢失
#include <stdio.h>
void main()
{
short a=289;
char c;
long b=98304;
c=a; //截取a的低八位给c
a=b; //截取b的低十六位给a
printf("a=%d\t c=%d\n",a,c);
}
赋值的时候,如果大数据赋值给小数据,可能发生高位数据丢失的情况;
强制转不会改变定义的类型
#include <stdio.h>
void main()
{
float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
}
强制类型转换仅仅在输出时变化,本身数据不发生变化;
格式:( int )( 表达式 ) ……
例九:
计算类型长度运算符
#include <stdio.h>
void main()
{
int a;
float b;
printf("char:%d byte\n",sizeof(char));
printf("int:%d byte\n",sizeof(int));
printf("a:%d byte\n",sizeof(a));
printf("b:%d byte\n",sizeof(b+1.2));
}
通过计算机计算各类型的长度,不必特意去记,