博文
[008] 关键字必须小写 [该说法错误(后改)](2006-02-15 13:55:00)
摘要: 因为C语言对大小写敏感, 即区分大小写,所以关键字大写后被认为是用户自定义的标志符。如:if 为关键字,而 IF 为用户自定义标志符。
######################################更正########################################经网友指点(见评论),改正如下: 因为C语言对大小写敏感, 即区分大小写,所以关键字必须规范书写。否则更改大小写的关键字会被认为是用户定义的标志符。如:if 为关键字,而 IF 为用户自定义标志符。关键字 _Bool 和 _Complex ,如果写成 _BOOL和_COMPLEX,或写成 _bool和_complex 都是不对的。会被做为用户自定义的标志符处理。
由此联想到,如果自定义标志符与关键字冲突了(即为关键字),可以通过更改某部分的大小写来解决, 但用不好的话, 可能自己都会弄混, 所以还是不用的好 ^_^......
[007] C语言中标志符的长度(2006-02-13 14:30:00)
摘要: C语言规定标识符只能由字母、数字、和下划线三种字符组成,且第一个字符必须为字母或下划线。C语言中区分大小写。 ANSI C 标准没有规定标识符的长度(字符个数),但各个c编译系统都有自己的规定。有的系统(如IMB PC的MSC)取8个字符,假如程序中出现的变量名长度大于8个字符,则只有前面8个字符有效,后面的不被识别。例如,有两个变量:student_name和student_number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们改为stud_name和stud_num,以使之区别。Turbo C则允许32个字符。因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上面的混淆。这种错误并不反映在编译过程中(即语法无错误) ,但运行结果显然不对。为了程序的可移植性(即在甲机器上运行的程序可以基本上不加修改,就能移到乙机器上运行)以及阅读程序的方便,★ 建议变量名的长度不要超过8个字符。......
[006] 百鸡问题(2006-02-15 14:28:00)
摘要: 张丘建《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?分析:公鸡-cocks ,母鸡-hens,小鸡-chicks cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100★ 关键: 受百钱买百鸡的约束有 0≤cocks≤19, 0≤hens≤33, 0≤chicks≤100★ 思路: 累试法(枚举法) 依次取cocks值域中的值,然后求其余两数,看是否满足题意算法描述:cocks=0 当cocks≤19时 { 找满足题意的hens,chicks数 cocks加1 }细化:cocks=0 当cocks≤19时 { hens=0 当hens≤33时 { 找满足题意的chicks数 hens加1&nbs......
[005] 一个C程序总是从main函数开始执行(2006-02-12 13:33:00)
摘要:#include "stdio.h"int max(int x,int y){ int z; if (x>y) z=x; else z=y; return(z);}void main(){ int a, b, c; scanf("%d %d",&a, &b); c=max(a, b); printf("max=%d\n",c);}
★ C程序总是从main函数开始执行......
[004] 整形变量以字符输出时的范围(2006-02-10 23:54:00)
摘要: 字符变量在计算机内占一个字节,而整形变量占两个字节,因此整形变量在可输出字符的范围内(ASCII码为0~255这间的字符)是可以与字符数据互相转换的.如果在此范围外,则不能代替.
#include <stdio.h>main(){ int a, b; printf("请输入两个整数 a, b:\n"); scanf("%d,%d",&a,&b); printf("按字符输出为:\n"); printf("%c,%c\n",a,b); char c1, c2; c1 = a; c2 = b; printf("转换为字符型后按整数输出为:\n"); printf("%d,%d\n",c1,c2);}
运行结果:========================================请输入两个整数 a, b:97,289↙按字符输出为:a,!转换为字符型后按整数输出为:97,33========================================★ c1,c2是字符型变量,只占一个字节,只能存放0~255范围内的整数,97为a的ASCII码,而289超过了255,所以只将b在内存中的低8位赋值绐c2 (b按字符输出时同理) , 289-255=33 而33为!的ASCII码.
★ Turbo C 把字符处理成带符号的整数。######################################更正########################################经网友指出, 做如下改正:289-255=33显然是错误的, 应该是289-256=33。从0~255共是256个,所以应该减去256而非255。换成二进制就清楚了,289是100100001,按字符输出时取后8位001000......
[003] 连续用两个getchar函数时字符的输入(2006-02-10 23:19:00)
摘要:<谭> 4.10
#include <stdio.h>main(){ char c1, c2; printf("请输入两个字符 c1, c2: \n"); c1 = getchar(); c2 = getchar(); printf("用putchar语句输出结果为:\n"); putchar(c1); putchar(c2); printf("\n"); printf("用printf语句输出结果为:\n"); printf("%c,%c\n", c1, c2);}
结果:==========================================请输入两个字符 c1, c2:ab↙用putchar语句输出结果为:ab用printf语句输出结果为:a,b==========================================★ 输入时不应以如下方法输入:a↙b↙否则第一个回车符会被赋于c2......
[002] scanf读入字符时与回车冲突的处理(2006-02-10 22:24:00)
摘要: <谭>4.6 scanf函数输入数据的练习
#include <stdio.h>main(){ int a, b; float x, y; char c1, c2; scanf("a=%d b=%d", &a, &b); scanf("%f %e", &x, &y); scanf("%c %c", &c1, &c2); printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c\n", a, b, x, y, c1, c2);}
动行结果:====================================a=1 b=2↙1.1 2.2↙m n↙a=1,b=2,x=1.100000,y=2.200000,c1=,c2=m====================================★ 原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符
★ 解决方法:<方法一> 在读字符函数中首位置加入一个空格
#include <stdio.h>main(){ int a, b; float x, y; char c1, c2; scanf("a=%d b=%d", &a, &b); scanf("%f %e", &x, &y); scanf(" %c %c", &c1, &c2); /*第一个%c前加入一个空格......
