5.1

题目:

  略

解答代码:

  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. char ch;
  6.  
  7. while (((ch = getchar()) != EOF) && (ch != 'z'))
  8. {
  9. if (ch >= 'A' && ch <= 'Z')
  10. {
  11. ch += 'a' - 'A';
  12. }
  13. putchar(ch);
  14. }
  15.  
  16. getchar();
  17. return ;
  18. }

5.2

题目:

  略

解答代码:

  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. char ch;
  6.  
  7. while (((ch = getchar()) != EOF) && (ch != 'z')) //输入z时退出
  8. {
  9. if (((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'))) //加密
  10. {
  11. if ((ch <= 'M') || (ch <= 'm'))
  12. {
  13. ch += 'n' - 'a';
  14. }
  15. else if ((ch >= 'N') || (ch >= 'n'))
  16. {
  17. ch -= 'n' - 'a';
  18. }
  19. }
  20. putchar(ch);
  21. }
  22.  
  23. getchar();
  24. return ;
  25. }

5.3

题目:

  编写函数,函数返回值把参数的二进制位模式从左到右变换一下后的值。

函数原型:

  unsigned int reverse_bits(unsigned int value);

解答代码:

  1. #include <stdio.h>
  2.  
  3. #define NUM 0xA5
  4.  
  5. unsigned int reverse_bits(unsigned int value)
  6. {
  7. unsigned int i;
  8. unsigned int valuebak = ;
  9. char list[] = { };
  10.  
  11. for (i=; i!=; i<<=)
  12. {
  13. valuebak <<= ;
  14. valuebak |= (value & 0x01);
  15. value >>= ;
  16. }
  17.  
  18. return valuebak;
  19. }
  20.  
  21. int main(void)
  22. {
  23. unsigned int rev;
  24. rev = reverse_bits(NUM);
  25. printf("0x%X\n", NUM);
  26. printf("0x%X\t\t%d\n", rev, rev);
  27.  
  28. getchar();
  29. return ;
  30. }

5.4

5.5

题目:

  编写函数,把一个给定的值存储到一个整数中指定的几个位。假定整数中的位是从右向左进行编号,起始位的位置不会小于结束位的位置。

函数原型:

  int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit);

提示:

  创建一个掩码

  用掩码的反码对原值AND操作

  将新值左移,使与待存储值对齐

  把移位后的值与掩码进行AND操作

  把结果值与原值进行位OR操作

解答代码:

  1. #include <stdio.h>
  2.  
  3. #define ORI_VALUE 0xFFFF
  4. #define VALUE_STORE 0x123
  5. #define START_BIT 13
  6. #define END_BIT 9
  7.  
  8. int store_bit_field(int original_value, int value_to_store,
  9. unsigned starting_bit, unsigned ending_bit)
  10. {
  11. unsigned int int_bit = sizeof(unsigned) * ;
  12.  
  13. if ((starting_bit <= int_bit) && (ending_bit <= int_bit) && (ending_bit < starting_bit))
  14. {
  15. unsigned int maskt = ~;
  16. unsigned int mask = ;
  17. unsigned int i;
  18.  
  19. for (i=starting_bit; i>=ending_bit; i--) //生成掩码
  20. {
  21. mask |= (<<i);
  22. }
  23. original_value &= ~mask;
  24. value_to_store <<= ending_bit;
  25. value_to_store &= mask; //待存储数据与掩码匹配
  26. original_value |= value_to_store;
  27. }
  28. else
  29. printf("Data format error!\n");
  30.  
  31. return original_value;
  32. }
  33.  
  34. int main (void)
  35. {
  36. int value;
  37. value = store_bit_field(ORI_VALUE, VALUE_STORE, START_BIT, END_BIT);
  38. printf("0x%X\n", value);
  39.  
  40. getchar();
  41. return ;
  42. }

《C和指针》章节后编程练习解答参考——第5章的更多相关文章

  1. 《C和指针》章节后编程练习解答参考——第10章

    10.1 #include <stdio.h> typedef struct { unsigned ]; unsigned ]; unsigned ]; }TelphoneNumber; ...

  2. 《C和指针》章节后编程练习解答参考——第9章

    9.1 #include <stdio.h> #include <ctype.h> #include <string.h> #define N 100 int ma ...

  3. 《C和指针》章节后编程练习解答参考——第8章

    8.1 #include <stdio.h> int main (void) { int a, b, c, d; // 不使用嵌套花括号初始化 unsigned ][][][] = { , ...

  4. 《C和指针》章节后编程练习解答参考——6.2

    <C和指针>——6.2 题目: 编写一个函数,删除源字符串中含有的子字符串部分. 函数原型: int del_substr(char *str, char const *substr); ...

  5. 《C和指针》章节后编程练习解答参考——6.3

    <C和指针>——6.3 题目: 编写一个函数,把参数字符串中的字符反向排列. 函数原型: void reverse_string(char *string); 要求: 使用指针而不是数组下 ...

  6. 《C和指针》章节后编程练习解答参考——6.6

    <C和指针>——6.6 题目: 在指定的下限.上限之间使用数组方法查找质数,并将质数提取出来. 要求: 略 解答代码: #include <stdio.h> #define U ...

  7. 《C和指针》章节后编程练习解答参考——6.4

    <C和指针>——6.4 题目: 质数是只能被1和本身整除的整数. 在1到1000之间的质数,在数组中剔除不是质数的数. 解答代码: #include <stdio.h> #de ...

  8. 《C和指针》章节后编程练习解答参考——6.1

    <C和指针>——6.1 6.1 题目: 编写一个函数,在一个字符串中进行搜索,查找另一子字符串中出现的字符. 函数原型如下: char *find_char(char const *sou ...

  9. DSAPI多功能组件编程应用-参考-Win32API常数

    DSAPI多功能组件编程应用-参考-Win32API常数 在编程过程中,常常需要使用Win32API来实现一些特定功能,而Win32API又往往需要使用一些API常数,百度搜索常数值,查手册,也就成了 ...

随机推荐

  1. js 日期插件 datepicker

    点击图片出现  时间 ,增加一个点击事件 <label for="" class="width80">创建日:</label> < ...

  2. Java NIO使用及原理分析(二)

    在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如 ...

  3. HTML5 简单画图,切片,变形

    本人是在校学生,由于这段时间不知道怎么回事,心情比较无聊没有事干,所以利用这段时间学一下HTML5,发博客的目的是为了以后可以查询,也希望各位大神能够指导像我们这样的菜鸟,告别菜鸟的时段 我学东西时候 ...

  4. chrome下老是弹出网页显示 true

    事实上这个问题是chrome下安装了一些插件的原因,一般来说是安装迅雷插件会出现这个问题,删除迅雷插件就好了.

  5. [ES7] Exploring ES2016 Decorators

    Original artial --> link How descorator looks like: @mydecorator function myFun(){ ... } Descorat ...

  6. Android开发之TextView的下划线添加

    如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...

  7. .net缓存应用与分析

    在 ASP.NET 提供的许多特性中,相比 ASP.NET 的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET 开发人员可以接受使用开销很大的控件(例如,Dat ...

  8. CentOS隐藏nginx版本号

    在/usr/local/nginx/conf/目录中,修改nginx.conf文件 在http {  }段中加入 http { server_tokens off; }

  9. HDU 5637 Transform

    题意: 有两种变换: 1. 改变此数二进制的某一位(1变成0 或者 0变成1) 2. 让它与给出的n个数当中的任意一个做异或运算 给你两个数s, t,求从s到t最少要经过几步变换,一共m组查询思路: ...

  10. php并发处理

       最近某个项目用php生成文件,但是由于文件量太大,单个进程生成需要很长的时间,所以想并发进行处理.    网上查找了下相关的资料,php本身是没有多线程的概念的,那就只能用多进程了,再找资料却是 ...