C语言
血小板自动机
Acmer蒟蒻,深度学习炼丹师,DB魔法师,二次猿
展开
-
【C程序设计语言第二版】统计字符数、行数以及单词数
1.统计字符数我们可以利用getchar函数,来进行字符的读入,并对读入的字符进行判断。EOF:文件结束符,这个特殊值常量与任何实际字符都不相同。这里我们用int类型来接收getchar返回的字符的的原因:为了让变量ccc能存下EOF这个常量值。各种数据类型能表示的数值范围由编译器决定。char类型在有些编译器中定义的范围为0∼2550 \sim2550∼255,另外一些编译器中定义的范围...原创 2019-06-25 21:23:13 · 1060 阅读 · 2 评论 -
【C程序设计语言第二版】练习3-3:将a-z等速记符进行扩展
解题思路我们每次先读入一个字母,然后判断字母以及字母之后的值是否是-和另一个大于它的字母,如a-b这种形式,如果满足,则进行扩展,否则进行下一个读入。void expand(char s1[], char s2[]){ char c; int i, j; i = j = 0; while((c = s1[i++]) != '\0) { if(s1[i] == '-' &&...原创 2019-07-14 15:52:58 · 605 阅读 · 0 评论 -
【C程序设计语言第二版】2-9:x& (x - 1)的妙用
知识点x & (x - 1)可以快速计算x中1的个数,比单纯的移位运算收敛的更快,效率更高,为什么可以这样呢,我们观察到,x - 1实际上是把x的最后一个1变成了0,这样与运算后,可以最右边的1就被清除掉了。...原创 2019-07-13 22:44:06 · 266 阅读 · 0 评论 -
【C程序设计语言第二版】练习2-8:将x循环右移n位
解题思路我们可以用一个变量rbit来记录x最右边的位移到最左端的位置(len(x) - 1),然后我们把x右移一位,再对右移后的x与rbit进行或操作,这就完成了一次对x的循环右移操作,我们操作n次即可完成。//计算出运行程序的计算机所使用的字长int wordlength(){ int i; unsigned v = (unsigned) ~0; for(int ...原创 2019-07-13 22:35:56 · 1329 阅读 · 0 评论 -
【C程序设计语言第二版】2-7将x中从p开始的n个位求反
解题思路要对n个位进行求反,我们可以使用异或操作,即相同得0,不同的1,即让那n个位分别于1进行异或操作,若原数位为1,则的0,若原数位为0,则得1。unsigned invert(unsigned x, int p, int n) { return x ^ (~(~0 << n) << (p - n + 1));}...原创 2019-07-13 22:21:28 · 613 阅读 · 0 评论 -
【C程序设计语言第二版】练习2-6:将x中从第p位开始的n个位设置成y中最右边n位的值
解题思路为了把x从第p位开始的n个位设置成y最右边的n个位,我们首先需要对x中的n个位进行清零,然后对y中的其他位(除最右边的n个位)清零,并将这n个位左移到x对应的n个位上。对x清零,我们需要让x和一个屏蔽码进行与运算,这个屏蔽码从p位置开始的n个位都是0,其余位都是1,对y同理。//对x中n个位清零xxxnnnxxx111000111xxx000xxx//对y的n个位清零yy...原创 2019-07-13 22:17:21 · 2075 阅读 · 0 评论 -
【C程序设计语言第二版】atoi和atof函数的实现
知识点atoi函数:将字符串转换为整型atof函数:将字符串转换为浮点类型这里我们需要用到字符与ascii码一一对应的知识,对于atof函数我们可以首先忽略小数点,每次取一个数,再将上次得到的数乘以10求和,得到一个大整数后再将小数点左移即可。而atoi函数可以借助atof函数+取整完成。**注:**这里需要对字符串进行去除空白以及符号进行特判。#include <bits/st...原创 2019-07-13 21:57:27 · 403 阅读 · 0 评论 -
【C程序设计语言第二版】练习1-23 删除c语言语句中的注释内容
代码思路在c语言中,有单行注释和多行注释需要进行处理,所以我们可以对输入分两种情况来处理,并自定义两个函数,一个用来处理多行注释in_comment1(),一共用来处理单行注释in_comment2()。一旦确定是注释,我们就需要读取并丢弃注释内容。#include <stdio.h>void recomment(int c);void in_comment1(); //处理...原创 2019-06-26 21:49:14 · 398 阅读 · 0 评论 -
【C程序设计语言第二版】练习1-18 删除行末空格及制表符并删除完全是空格的行
代码思路注:这里定义了两个函数:my_getline函数和my_remove函数,没有借助库函数,所以没有使用strlen函数来计算字符串长度,且不能命名为remove,会与stdio库函数冲突。#include <stdio.h>#define MAXLINE 1000 /* 运行的输入行的最大长度 */int my_getline(char *line, int maxl...原创 2019-06-25 22:43:14 · 975 阅读 · 0 评论 -
【C程序设计语言第二版】打印多行文本中最长的一行文本
代码思路这里我们定义了两个函数:my_getline函数和copy函数,第一个函数的作用是为了从输入中读取一行字符,第二个函数的作用是为了把最大长度的文本行拷贝到字符数组中。mygetline函数:第一个参数为字符数组,第二个参数为文本行最大长度。copy函数:第一个参数为拷贝目标字符数组,第二个参数为被拷贝字符数组。注意:我们不能给把函数名命名成getline函数,这样会与stdio库函...原创 2019-06-25 22:03:30 · 516 阅读 · 2 评论 -
【C程序设计语言第二版】练习1-12 纯getchar()函数实现读入一个单词并打印输出
代码思路我们可以利用单词统计的思路,标记目前的状态是在字符内部还是在字符的外部,然后做出相应的处理即可。#include <stdio.h>#define IN 1 /* 在单词内 */#define OUT 0 /* 在单词外 */int main(void){ int c, state; state = OUT; while((c = getc...原创 2019-06-25 21:44:25 · 235 阅读 · 0 评论 -
【C程序设计语言第二版】练习3-4:itoa处理最大负数
解题思路我们观察最初的itoa函数:void itoa(int n, char s[]){ int i, sign; if((sign = n) < 0) n = -n; i = 0; do { s[i++] = n % 10 + '0'; } while((n / 10) > 0); if(sign < 0) s[i++] = '-'; s[i] =...原创 2019-07-14 16:04:06 · 380 阅读 · 0 评论