《C和指针》练习
文章平均质量分 70
好好du书
这个作者很懒,什么都没留下…
展开
-
第14章--预处理器
我们将使用条件编译来实现这个魔术,你的函数应该叫做cpu_type,它不接受任何参数,当你的函数被编译时,在下面表中“已定义”列中的符号之一可能会被定义,你的函数应该从“返回值”列中返回对应的符号,如果左边列中的所有符号均未定义,那么函数就返回CPU_UNKNOWN这个值,如果超过一个符号被定义,那么其结果就是未定义的。为了扩展潜在市场,这个程序以几个不同的版本进行销售,每个版本有不同选项的组合–选项越多,价格就越高,你的任务是为一个打印函数实现代码,这样它可以很容易进行编译,产生程序的不同版本。原创 2023-11-04 14:00:00 · 70 阅读 · 0 评论 -
第13章--高级指针话题
4、编写一个名叫sort的函数,它用于对一个任何类型的数组进行排序,为了使函数更为通用,他的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供,比较函数接受两个参数,也就是两个指向需要进行比较的值的指针,如果两个值相等,返回0,如果第一个值小于第二个返回小于零的整数,否则,返回大于零的整数。当所有以一个横杆开头的参数被处理完毕后,你应该返回一个指向下一个命令行参数的指针的指针(也就是一个诸如&argv[4]或argv+4的值)。1.一个指向需要排序的数组的第一个值的指针。原创 2023-10-28 14:30:00 · 74 阅读 · 0 评论 -
第12章--使用结构和指针
你可以假设节点数据结构在头文件singly_linked_list_node.h中定义,函数的第一个参数是一个指向链表根指针的指针,第二个参数是一个指向欲移除的节点的指针,如果链表并不包含该指针,函数就返回假,否则它就移除这个节点并返回真,把一个欲移除的节点的指针而不是欲移除的值作为参数传递给函数有哪些优点?1、编写一个函数,用于计数一个单链表的节点个数,它的唯一参数是一个指向链表第一个节点的指针,编写这个函数时,你必须知道哪些信息?4、编写一个函数,反序排列一个单链表中所有的节点。原创 2023-10-22 13:00:00 · 59 阅读 · 0 评论 -
第11章--动态内存分配
2、编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组,函数通过观察EOF判断输入是否结束,数组的第一个数是数组包含的值的个数,它的后面就是这些整数值。3、编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制。1、请你尝试编写calloc函数,函数内部使用malloc函数来获取内存。4、编写一个程序,创建一个链表,包含一个链表头和三个动态分配的对象。原创 2023-10-14 13:00:00 · 48 阅读 · 0 评论 -
第10章--结构和联合
你的声明同时必须有一个名叫addr的unsigned short类型字段,可以访问所有的16位值,在你的声明中使用typedef来创建一个新类型,称为machine_inst。它还包括三个号码,你使用的那个号码,你呼叫的那个号码,以及你付账的那个号码,这些号码的每一个都由三个部分组成:区号,交换台和站号码,请为这些记帐信息编写一个结构声明。在许多机器中,由于不同的指令具有不同的格式,解码过程被复杂化了,在某个特定的机器上,每个指令的长度都是16位,并实现了下列各种不同的指令格式。位是从右向左进行标记的。原创 2023-10-09 11:10:17 · 32 阅读 · 0 评论 -
第9章--字符串、字符和字节
函数必须把密钥中的所有字符要么转换成大写,要么转换成小写(随你选择),并从单词中去除重复的字母,然后再用字母表中剩余的字母按照你原先所选择的大小写形式填充到key数组中去,如果处理成功,函数将返回一个真值,如果key参数为空或包含任何非字母字符,函数将返回一个假值。这个函数类似于strchr,但它的第三个参数指定ch字符在str字符串中第几次出现,例如,第三个参数为1,这个函数的功能就和strchr一样,如果参数为2,这个函数就返回一个指向ch字符在str字符串中第二次出现的位置的指针。原创 2023-10-01 13:00:00 · 81 阅读 · 0 评论 -
第8章--数组
提示:如果你采用一种叫做回溯法的技巧,就很容易编写出这个程序,编写一个函数,把皇后放在某行的第一列,然后检查它是否与棋盘上的其他皇后互相攻击,如果存在互相攻击,函数把皇后移到该行的第二列再进行检查,如果每列都存在互相攻击的情况,函数就应该返回,但是如果皇后可以放在这个位置,函数接着应该递归的调用自身,把一个皇后放在下一行,当递归调用返回时,函数再把原先那个皇后移到下一列。m1是一个x行y列的矩阵,m2是一个y行z列的矩阵,这两个矩阵应该相乘,结果存储于r中,它是一个x行z列的矩阵。原创 2023-09-23 14:00:00 · 24 阅读 · 0 评论 -
第7章--函数
5、实现一个简化的printf函数,它能够处理%d,%f,%s和%c格式码,根据ANSI标准的原则,其他格式码的行为是未定义的,你可以假定已经存在函数print_integer和print_float,用于打印这些类型的值,对于另外两种类型的值,使用putchar来打印。它把amount表示的值转化为单词形式,并存储于buffer中,这个函数可以在一个打印支票的程序中使用。提示:这个技巧很简单,你每发现一个数字,把当前值乘以10,并把这个值和新数字所代表的值相加。的值是40,请编写一个递归函数,计算。原创 2023-09-17 14:00:00 · 95 阅读 · 0 评论 -
第6章--指针
接着,再回到列表的头部重新开始,此时列表中尚未被剔除的第一个数是3,所以在3之后把每逢第3个数的倍数剔除,完成这一步骤之后,再回到列表开头,3后面的下一个数是4,但它是2的倍数,已经被剔除,所以将其跳过,轮到5,将所有5的倍数全部剔除,这样以此类推,反复执行,最后列表中未被剔除的数均为质数。函数的第二个参数不能被修改。注意除了2以外,所有的偶数都不是质数,稍微多想一下,你可以使程序的空间效率大为提高,方法是数组中的所有元素只对应奇数,这样,你在相同的数组空间内,你可以寻找到的质数的个数大约是原先的两倍。原创 2023-09-10 13:00:00 · 28 阅读 · 0 评论 -
第5章--操作符和表达式
2、编写一个程序,从标准输入读取字符,并把它们写到标准输出中,所有非字母字符都完全按照它的输入形式输出,字母字符在输出之前进行加密。加密的方法很简单:每个字母被修改为在字母表上距其13个位置(前或后)的字母,例如,A被修改为N,B被修改为O,Z被修改为M,以此类推,注意大小写字母都应该被转换。第一个函数把指定的位设置为1,第二个函数把指定的位清零,如果value的值为1,第三个函数就把指定的位清零,否则置1,至于最后一个函数,如果参数中指定的位不为零就返回真,否则返回假。假定整数中的位是从右向左进行编号。原创 2023-09-02 15:00:00 · 28 阅读 · 0 评论 -
第4章--语句
这个函数将数组src中的字符串复制到数组dst,但是有这些要求:刚好n个字符被存储到dst数组,如果src字符串的长度比n小,那么你需要添加足够的NULL字符使得有n个字符被存储,如果src中字符串的长度大于或等于n,那么复制n个字符后停止,这种情况下不是以NULL结尾,注意调用copy_n时应该在dst[0]到dst[n-1]存储,与src的长度无关。当函数发现一个或多个地方有一个或连续多个的空格组成,就把它们改成单个字符,注意当你遍历整个字符串时要确保它以NUL字符结尾。原创 2023-08-25 13:00:00 · 29 阅读 · 0 评论 -
第2章--基本概率
1、写一个程序,包含三个函数分别位于不同的文件中,第一个函数increment接受一个整型参数并且返回这个参数加一后的值,这个函数位于文件increment.c中,第二个函数叫做negate,同样接受一个整型参数并且返回它的相反数,最后一个函数是main函数,需要调用其他两个函数并且用10,0,-10的值测试并打印出来。2、写一个程序从标准输入中读取c源程序并且确定花括号是否正确的配对,提示:你不用担心括号出现在注释中,字符串中或者字符常量中。原创 2023-08-19 15:37:42 · 29 阅读 · 0 评论 -
第1章--快速上手
3、写一个程序从标准输入中读取字符之后在标准输出中写出,同时应该计算checksum并把它写在字符的后面,checksum用一个signed char变量计算并初始化为-1,每从标准输入读取一个字符,checksum的值就增加,checksum变量的值溢出部分忽略,当所有的字符被写入时,checksum作为一个整型数写出,它可能是个负数,确定在checksum的后面加个换行符,计算时使用ASCII码,如果运行你的程序时输入hello world!1、写一个程序,它打印出一行hello world!原创 2023-08-13 15:00:00 · 25 阅读 · 0 评论