这一章习题做着很舒服,毕竟很简单。所以很有感觉。

练习 2-1

Write a program to determine the ranges of char , short , int , and long variables, both signed and unsigned , by printing appropriate values from standard headers and by direct computation. Harder if you compute them: determine the ranges of the various floating-point types. 

 #include <stdio.h>
#include <limits.h>
int main()
{
printf("char max : %d min : %d\n",CHAR_MAX, CHAR_MIN);
printf("unchar max : %u min : %u\n",UCHAR_MAX, );
printf("int max : %d min : %d\n",INT_MAX, INT_MIN);
printf("unsigned int max : %lu min : %d\n",UINT_MAX, );
printf("long max : %ld min : %ld\n",LONG_MAX, LONG_MIN);
printf("unsigned long max : %lu min : %d \n",ULONG_MAX ,); return ;
}

ps :假如unsigned int 最大值不用 %lu 而用 %lld 会导致 后面变量发生无法预知的错误,  %ld 无法装下unsigned int 最大值

练习 2-2

Exercise 2-2 discusses a for loop from the text. Here it is:

 int main(void)
{
/*
for (i = 0; i < lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)
s[i] = c;
*/ int i = ,
lim = MAX_STRING_LENGTH,
int c;
char s[MAX_STRING_LENGTH]; while (i < (lim - ))
{
c = getchar(); if (c == EOF)
break;
else if (c == '\n')
break; s[i++] = c;
} s[i] = '\0'; /* terminate the string */ return ;
}

练习 2-3

Write the function htoi(s) , which converts a string of hexadecimal digits (including an optional 0x or 0X) into its equivalent integer value. The allowable digits are 0 through 9,a through f, and A through F .

 #include <stdio.h>
char A[]; int main(int argc, char const *argv[])
{
scanf("%s", A);
int v = _atoi(A);
printf("%d\n", v);
return ;
} int _atoi(char s[]){
int i, n, hex;
n = ;
for(i=;s[i]>='' && s[i]<='' || s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i] <= 'Z'; ++i){
if(s[i]>='' && s[i]<='')
hex = s[i] - '';
if(s[i]>='a' && s[i]<='z')
hex = s[i] - 'a' + ;
if(s[i]>='A' && s[i]<='Z')
hex = s[i] - 'A' + ;
n = * n + hex;
}
return n;
}

练习 2-4

Write an alternate version of squeeze(s1,s2) that deletes each character in the string s1 that matches any character in the string s2 

 #include <stdio.h>
#include <string.h>
char a[];
char b[]; int lenth(char b[]);
void strcat_1(char s[], char t[]); int main() {
scanf("%s", a);
scanf("%s", b);
strcat_1(a ,b);
printf("%s", a);
} void strcat_1(char s[], char t[]){
int i, j, k, l, tlen;
tlen = lenth(t);
for(i=;s[i] != '\0';i++){
k=;
if(s[i] != t[k])
continue;
l = i;
while(s[l++] == t[k++]) {
if(t[k]=='\0')
break;
}
if(t[k] == '\0'){
while(s[l-tlen]!='\0'){
s[l-tlen] = s[l];
l++;
}
i+=tlen;
}
}
} int lenth(char b[]){
int i;
for(i=;b[i]!='\0';++i);
return i;
}

Friend 's version

#include <stdio.h>

void squeeze(char s[], char t[]) {
int i, j, k; k = ;
for(i = ; s[i] != '\0'; ++i) {
for(j = ; t[j] != '\0'; ++j) {
if(s[i] == t[j])
break;
}
if(t[j] == '\0')
s[k++] = s[i];
}
s[k] = '\0';
} int main() {
char s[] = "You are e a pig!!!";
char t[] = "Not me";
squeeze(s, t);
printf("%s\n", s);
return ;
}

练习 2-5

Write the function any(s1,s2) , which returns the first location in the string s1 where any character from the string s2 occurs, or -1 if s1 contains no characters from s2 . (The standard library function strpbrk does the same job but returns a pointer to the location.) 

 #include <stdio.h>
#include <string.h>
char s1[];
char s2[]; int any(char s1[], char s2[]){
int i, j, len1, len2;
len1 = strlen(s1);
len2 = strlen(s2);
for(i=;i<len1;++i){
for(j=;j<len2;++j)
if(s1[i] == s2[j])
return i+; }
return -;
} int main(int argc, char const *argv[])
{
int t;
scanf("%s", s1);
scanf("%s", s2);
t = any(s1, s2);
printf("%d\n", t);
return ;
}

练习 2-6

Write a function setbits(x,p,n,y) that returns x with the n bits that begin at position p set to the rightmost n bits of y, leaving the other bits unchanged. 

 #include <stdio.h>
unsigned getbits(unsigned x, int p, int n);
unsigned setbits(int x, int p, int n, int y);
int main(int argc, char const *argv[])
{
unsigned a, y, result;
int b, c, count;
scanf("%d %d %d %d", &a, &b, &c, &y);
//result = getbits(a, b, c);
result = setbits(a, b, c, y);
printf("The result is : %d\n", result);
return ;
} unsigned setbits(unsigned x, int p, int n, int y){
return ( x & ~(~(~ << n) << (p+-n))) | ( (y & ~(~ << n)) << (p+-n) ) ;
} unsigned getbits(unsigned x, int p, int n){
return (x >> (p+-n)) & ~(~ << n);
}

练习 2-7

Write a function invert(x,p,n) that returns x with the n bits that begin at position p inverted (i.e., 1 changed into 0 and vice versa), leaving the others unchanged. 

 #include <stdio.h>
unsigned invert(unsigned x, int p, int n);
int main(int argc, char const *argv[])
{
unsigned a, result;
int b, c, count;
scanf("%d %d %d", &a, &b, &c);
result = invert(a, b, c);
printf("The result is : %d\n", result); return ;
} unsigned invert(unsigned x, int p, int n){
return (x & ~(~(~ << n) << (p+-n))) | (x >>(p+-n) ^ ~(~ << n)) << (p+-n) ;
}

练习 2-8

Write a function rightrot(x,n) that returns the value of the integer x rotated to the right by n bit positions. 

递归法:

 #include <stdio.h>

 void show(unsigned x, int step) {
if(step < )
show(x >> , step + );
printf("%d", x&);
} unsigned rightrot(unsigned x, int n) {
return (x<<(-n))|(x>>n);
} int main() {
unsigned x = ;
show(x, );
printf("\n");
show(rightrot(x, ), );
printf("\n");
return ;
}

练习 2-9

In a two's complement number system, x&=(x-1) deletes the rightmost 1-bit in x . Explain why. Use this observation to write a faster version of bitcount

 #include <stdio.h>

 int bitcount(unsigned x) {
int b; for(b = ; x != ; x >>= )
if(x & )
b++;
return b;
} int bitcount2(unsigned x) {
int b; for(b = ; x != ; x &= (x-))
b++;
return b;
} int main() {
printf("%d, %d\n", bitcount(), bitcount2());
printf("%d, %d\n", bitcount(), bitcount2());
return ;
}

练习 2-10

Rewrite the function lower, which converts upper case letters to lower case, with a conditional expression instead of if-else

 #include <stdio.h>
char A[];
int main(int argc, char const *argv[])
{
int i;
scanf("%s", A);
for(i=;A[i]!=;++i)
A[i] = higher(A[i]);
printf("%s\n", A);
return ;
} int lower(int c){
return c >= 'A' && c <='Z' ? c + 'a' - 'A' : c;
} int higher(int c){
return c >= 'a' && c <='z' ? c + 'A' - 'a' : c;
}

C程序设计语言(第二版)习题:第二章的更多相关文章

  1. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...

  2. 《数据结构与算法Python语言描述》习题第二章第三题(python版)

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  3. 《数据结构与算法Python语言描述》习题第二章第二题(python版)

    ADT Date: #定义日期对象的抽象数据类型 Date(self, int year, int month, int day) #构造表示year/month/day的对象 difference( ...

  4. 《数据结构与算法Python语言描述》习题第二章第一题(python版)

    题目:定义一个表示时间的类Timea)Time(hours,minutes,seconds)创建一个时间对象:b)t.hours(),t.minutes(),t.seconds()分别返回时间对象t的 ...

  5. javascrit2.0完全参考手册(第二版) 第2章第2节 语言特性

    脚本执行顺序     js代码是按照它们在html中出现的顺序一行一行被解释的.这表明把函数定义和变量声明放到<head>中会很好.这保证了函数的代码和事件相关的处理程序不会立即执行. 大 ...

  6. python语言程序设计基础(第二版)第五章答案随笔

    1.实现isOdd()函数,参数为整数,如果整数是奇数,返回True,否则返回False def isOdd(num):    if num % 2 == 0:        return True  ...

  7. C++ Primer Plus(第6版)习题(第二章)

    1..编写一个C++程序,它显示您的姓名和地址. #include<iostream> using namespace std; int main() { string name,addr ...

  8. javascrit2.0完全参考手册(第二版) 第1章第2节:javascript的历史和使用

    javascript曾经带给人许多误解,例如如果你不了解它的历史,那么你可能困惑它和java有什么关系,其实它们一点关系都没有.网景公司1995年在Navigator 2.0 中引入这门语言时它叫Li ...

  9. javascrit2.0完全参考手册(第二版) 第2章第4节 基本的数据类型

    每一个变量都有一个确定的类型表明它存储什么样的数据.js基本的数据类型有strings字符串.numbers数字.Booleans布尔类型.字符串是使用双引号或单引号包含的一串字符:数字包括整数或浮点 ...

  10. javascrit2.0完全参考手册(第二版) 第1章第1节 在XHTML文档中增加javascript

    通常,向文档中增加script脚本使用<script>元素,在HTML中增加脚本的方式有4中: (1)放到<script></script>块中: (2)<s ...

随机推荐

  1. Arcgis sde 10.1您不能创建在安装后的空间库,提示User has privileges required to create database objects.

    Geodatabase在10.1版本号也有较大的改进和更新,在用户体验和性能上都有变化,在实际的工作中可能会碰到各种奇怪的问题(事实上都是有原因的,须要我们对其工作机制有所了解才干避免其发生):近期须 ...

  2. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理

    用qtconfig(或者qtconfig-qt4)设置字体后,汉澳sinox视窗界面以跟winxp媲美的界面出现,爽心悦目. 并且视窗使用非常稳定.非常少出现死机无响应现象,堪称完美. 引入unico ...

  3. android台 cocos2d-x 翻阅相册数据

    现在解决 程序如下所示: 1.采用 jni 转让 java 办法 启动专辑选择框 2.采用java得到的图片将被保存到本地 3.采用Cocos2d-x于 CCImage 阅读 JAVA码如下面:   ...

  4. 使用 CXF 做 webservice 简单例子[转]

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量 ...

  5. 【网络流量-二部图最大匹配】poj3041Asteroids

    /* 这个问题将是每行一个x作为节点x,没有列y作为节点y,障碍物的坐标xy来自x至y的 边缘.图建的问题后,变成,拿得最少的点,因此,所有这些点与相邻边缘,即最小 点覆盖,与匈牙利算法来解决. -- ...

  6. 接收终端Request.InputStream阅读

    接收终端Request.InputStream阅读请求页面参数,最后字符串. byte[] byts = new byte[HttpContext.Current.Request.InputStrea ...

  7. 豆瓣api之OAuth认证

    豆瓣api通过OAuth允许第三方应用访问用户数据,所以OAuth认证就是我们整个project的基础了. OAuth认证听起来挺神秘,其实挺简单的. 现在的大型网站的开放平台的认证几乎都是采用OAu ...

  8. Android Application.java以及它的作用

    What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...

  9. android ndk通过遍历和删除文件

           在做移动开发过程,难免有些本地文件管理操作.例如,很常见app随着微博.微信要清除缓存功能,此功能是走app文件夹.然后删除所有缓存文件.使用java的File类能够实现本地文件遍历及删 ...

  10. gpu显存(全局内存)在使用时数据对齐的问题

    全局存储器,即普通的显存,整个网格中的随意线程都能读写全局存储器的任何位置. 存取延时为400-600 clock cycles  很easy成为性能瓶颈. 訪问显存时,读取和存储必须对齐,宽度为4B ...