c语言对标识符的命名具有以下的规则,其主要有以下三条:
1.标识符必须以大小写英文字母或者下划线作为首字母。
2.标识符中只能包含大小写英文字母、数字、下划线,不允许出现如“ ! 、@、#、¥、%、^、&、*、(、)、/、?等其他标点,而且C语言中的标识符不能使用任何中文字符,包括汉字、中文标点。
3.标识符不能与c语言的保留字或者库函数名相同。
除以上三条外,在命名标识符时,还需要注意C语言对大小写敏感,因此,相同的字母的不同大小写是不同的标识符。
c语言定义数组的方法是:C语言中,同变量一样;数组也必须先定义后使用。一维数组的
定义形式。 1、类型标识符,数组名[常量表达式];例如int a[10];其中a为地址常量。 2、如变量的定义一样,inta;double a;floata等;数组的定义只是把后面的变量名改 为数组名而已。 3、int a[10]就是定义了一个数组名为a的数组;此数组有10个元素。其中各元素从a[0] 到a[9];并没有a[10]元素。
1 整型,包括short, int, long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型。
2 实型,即浮点型,包括float, double等,用来表示实数,相对于整型,该类型可以表示带有小数部分的数值。需要注意的是,实型在计算机语言中为近似值表示,并非准确值,在多次计算后可能会出现真值偏差。
3 字符型,即char型,用来表示各种字符,与ascii码表一一对应。除可以用来表示各类字符外,char型的其它规则与整型相同,可以认为char是一种特殊的整型。
整型 确定进制,查看各位数的范围是否超界。
8进制常量以前导 0 开始,每位数只能到7 例如:05188 非法
16进制常量以 0x 开始,每位从 0 ~ f 例如:0xfg00非法
后缀u为unsigned,l为long,f为float带后缀u(表示无符号整型常量),其他读者可自行理解,可复合使用ul(无符号长整型)
在C语言的输出中,%m.nf意义:
1、f表示输出的数据是浮点数;
2、n表示输出的数据保留小数点后n位小数,第n+1位四舍五入,若不足n位则补0;
3、m表示输出数据在终端设备上占有m个字符,并右对齐,如果实际的位数小于m时,左边用空格补足,如果实际位数大于7时,向右扩展输出。
scanf里面只有%*d和%.*d有意义
(1) %*d(仅它有意义:忽略掉它本身,并重新匹配:)
int a=0,b=0,c=0;
scanf("%*d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=34,b=56,c=0
相当于:忽略掉第一个输入12(它本身), 并将a与第二个数匹配,b与第三个数, 所以c没有匹配的输入,故c还是原来的值0. 1 2 3 4 5 6 7 8 9 10 下面的2种情况给你参考:
/****************************************/
scanf("%d%*d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=12,b=56,c=0
相当于:忽略掉第二个输入34(它本身)
scanf("%d%d%*d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=12,b=34,c=0
相当于:忽略掉第三个输入56(它本身) 1 2 3 4 5 6 7 8 9 10 11 12 (2) %.*d(仅它有意义:忽略%*d的下一个输入,并重新匹配)
scanf("%.*d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=12,b=56,c=0
相当于:忽略掉第二个输入34(它的下一个) 所以a和第一个输入匹配,b和第三个输入匹配, 中间那个输入被忽略了,所以c也就没有匹配上。 1 2 3 4 5 6 7 下面的2种情况给你参考:
/****************************************/
scanf("%d%.*d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=12,b=34,c=0
相当于:忽略掉第三个输入56(它的下一个)
scanf("%d%d%.d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
输入:12 34 56
输出:a=12,b=34,c=56
相当于:忽略掉第四个输入(它的下一个:空气) 所以最后这种没有意义!和没有加.一样。 1 2 3 4 5 6 7 8 9 10 11 12 13
<2>printf: 注意:在printf里没有限制,%c,%d,%s,%f,%lf都可以加或.,都有意义。 但是,他们的意义却不相同:
(1) %*d(意义:肯定会输出全部,根据实际情况补空格)
int a=123;
printf("a=%*d",2,a);
输出:a=123
(输出全部123,长度>2,不需要补空格)
跟没指定一样!
printf("a=%*d",10,a);
输出:a=空格空格空格空格空格空格空格123
(往前补7个空格,补够总共10个位)
1
2
3
4
5
6
7
8
9
10
(2) %.*d(意义:肯定会输出结果,根据实际在前面补0)
printf("a=%.*d",2,a);
输出:a=123
(输出全部123,长度>2,不需要补0)
跟没指定一样!
printf("a=%.*d",10,a);
输出:a=0000000123
(往前补7个0,补够总共10个位)
很显然这种情况意义不大,因为我们很少需要补0. 所以基本不用这种写法。 1 2 3 4 5 6 7 8 9 10 11 (3) %*f(意义:肯定会输出全部,根据实际补空格) 注意,%f默认小数点后面6位数:小数点也算一位!
float a=12;
printf("a=%*f",3,a);
输出:a=123.000000 默认小数点后面6位。而且肯定会输出全部, 所以10位>指定的3位,跟没指定一样!
printf("a=%*f",13,a);
输出:a=空格空格空格123.000000 默认小数点后面6位。而且肯定会输出全部10位, 剩下3位,所以在前面填3个空格(小数点也算一位)
1 2 3 4 5 6 7 8 9 10 11 (4) %.*f(意义:指定小数点后面几位,跟%.nf是一样的)
1 2 (5)%*s(意义:也是根据实际情况在前面加空格)
char *a="123456";
printf("a=%*s",5,a);
输出:a=123456;因为5<6,所以跟没指定的一样
printf("a=%*s",10,a);
输出:a=空格空格空格空格123456 1 2 3 4 5 6 (6)%.*s(意义:指定截取前面几位数)
char *a="123456";
printf("a=%.*s",4,a);
输出:a=1234; 截取前面4位数
printf("a=%.*s",10,a);
输出:a=123456 截取前面10位数,因为只有6位, 所以跟没指定的一样!
scanf不是关键字,是库函数的一种
signed是关键字,通常省略,用于有无符号位
type不是关键字
变量
变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。
变量必须先定义后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。变量名实际上是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找出相应的内存地址,从该存储单元中读取数据。
常量
在程序运行过程中,其值不能被改变的量称为常量。
逻辑运算符两侧运算对象的数据类型 可以是任意类型,原则为:非0即1。