2014年2月

C 不用与或改一个循环语句 小解枚举型变量

题目:

for (i = 0;i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
    s[i] = c;
不用&&和||的条件下编写一个与上面的for循环语句等价的循环语句

题目看着不难,我当时就想着用whileif的结合就OK了吧,结果思路方向错了,我想先ifwhile可是这样就跳过了两个条件的重复利用,先whileif才是正解,正好答案中还有枚举型的出现,就码来研究了一下。

- 阅读剩余部分 -

C 将字符串s转换为相应的整数型

将字符串s(实际上是数字)转换为相应的整数型。

来看一下这个:

int atoi(char s[])
{
    int i, n;

    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
        n = 10 * n + (s[i] - '0');

    return n;
}

刚开始的时候没看懂为什么n = 10 * n + (s[i] - '0');,然后就试着运行了一下,发现确实,如果输入56的话,输出就是56(但肯定改变了类型)

虽然还没有学到数组那个章节,可是根据前面所说的,字符串其实是字符分开储存成数组(最后有\0[当然可以忽略NULL]),他字符一格格储存的,换句话说s[0] = 5; s[1] = 6;差不多类似于这种,然后就好理解了。

关于'0'可见:http://codesky.me/archives/c-variable-const-type.wind

C 编写函数统计字符串长度

这个函数貌似挺能让人接受的OTZ……功能与<string.h>里的strlen()功能一模一样

int strlen(char s[])
{
    int i;

    i = 0;
    while (s[i] != '\0')
        ++i;
    return i;
}

这种类型的代码我们已经屡见不鲜了吧

C 转义字符序列

\a 响铃符
\b 回退符
\f 换页符
\n 换行符
\r 回车符
\t 横向制表符
\v 纵向制表符
\\ 反斜杠
\? 问号
\' 单引号
\" 双引号
\ooo 八进制数
\xhh 十六进制数
\0 空字符(NULL)

其中\ooo代表1-3个八进制数,\xhh代表一个或多个十六进制数。
举例可见http://codesky.me/archives/c-variable-const-type.wind

NULL表示值为0的字符,其数字值是0
字符串内部使用一个空字符\0作为结尾,所以储存字符串的物理单元比双引号内的字符数多一个。

可见:http://codesky.me/archives/c-variable-const-type.wind

C 编写程序确定各种类型变量取值范围

题目:

编写一个程序以确定分别由signed和unsigned限定的char、short、int与long类型变量的取值范围。

书中说用两种,暂时只会一种,另一种说是用位运算符,难度系数就略高了……

我的输出是:

signed char min:-128
signed char max:127
int max:2147483647
int min:-2147483648
long max:2147483647l
long min:-2147483648l
short max:32767
short min:-32768
unsigned char max:255
unsigned int max:4294967295
unsigned long max:4294967295l
unsigned short max:65535

具体是要取决于你的编译器的,这里以code::blocks为例而已。关于这点,见C 变量与常量 数据类型

- 阅读剩余部分 -

C 格式说明

%d 按照十进制整数型打印
6d 按照十进制整数型打印,至少6个字符宽
%f 按照浮点数打印
%.2f 按照浮点数打印,小数点后有两位小数

什么是字符宽请见:http://codesky.me/archives/c-str-width.wind

printf()还支持以下格式:
%o 表示八进制数
%x 表示十六进制数
%s 表示字符串
%% 表示百分比

复习一下PHP中:

八进制符号数值前加0;十六进制加0x。
表达式计算结果都以十进制输出。

From:http://codesky.me/archives/php-scalar-type.wind

C 变量与常量 数据类型

终于正式开始学C做笔记了 本来想一长篇说点的,想想还是边看边记,记得少点搜索起来方便。

变量与常量的命名规范与PHP类似,常量全部用大写字母,而变量使用小写字母,C也同样区分大小写,命名时不要以下划线_开头。局部变量一般使用较短的变量名,外部变量一般使用较长的名字。

保留字符的问题就不多说了,差不多就是那回事。

- 阅读剩余部分 -

C 删除C语言程序中的所有注释

题目:

编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。

还是看答案吧,毕竟是导言,我并不指望自己能写出来,代码还是勉强能看懂的,就是处理引号部分还不大明白(如为什么echo_quote里搜索\\),留待以后回头再看看这个问题。

另外这个程序一个问题就是分段落输出,这样比较无力……不晓得是不是我码错了什么……换言之,确实它值得改进的地方还有很多,注释也自己乱加了点OTZ。

- 阅读剩余部分 -

C 规范注释方法

标准C中的注释方法只有/* */一种,虽然code::blocks或者vs都吃// rcomment,不过还是不规范……题目中发现的问题。