2.3 常量

strlen函数:返回s的长度

  1. int strlenn(char s[])
  2. {
  3. int i=0;
  4. while(s[i] != '\0')
  5. ++i;
  6. return i;
  7. }

2.7 类型转换

atoi函数:将字符串s转换为相应的整型

  1. int atoi(char s[])
  2. {
  3. int n = 0;
  4. for (int i = 0; s[i] >= '0' && s[i] <= '9'; i++)
  5. n = 10*n + (s[i] - '0');
  6. return n;
  7. }

lower函数:把字符c转换为小写形式,只对ASCII字符集有效

  1. int lower(int c)
  2. {
  3. if(c >= 'A' && c <= 'Z')
  4. return c + 'a' -'A';
  5. else
  6. return c;
  7. }

rand函数:返回取值在0~32767之间的伪随机数,\(2^{15}\) = 32768

srand函数:为rand()函数设置种子数

  1. unsigned long int next = 1;
  2. int rand()
  3. {
  4. next = next*1103515245 + 12345;
  5. return (unsigned int)(next/65536)%32768;
  6. }
  7. void srand(unsigned int seed)
  8. {
  9. next = seed;
  10. }

练习2-3

编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含数字包括:09,af以及A~F。

  1. int htoi(char s[])
  2. {
  3. int n = 0,i = 0;
  4. if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) i = 2;
  5. for(; s[i] != '\0'; ++i) {
  6. if(s[i] >= '0' && s[i] <= '9')
  7. n = 16*n + (s[i] - '0');
  8. else if(s[i] >= 'a' && s[i] <= 'f')
  9. n = 16*n + (s[i] - 'a' + 10);
  10. else if(s[i] >= 'A' && s[i] <= 'F')
  11. n = 16*n + (s[i] - 'A' + 10);
  12. else break;
  13. }
  14. return n;
  15. }

2.8 自增运算符与自减运算符

squeeze函数:从字符串s中删除字符

  1. void squeeze(char s[], char c)
  2. {
  3. int i,j;
  4. for(i=j=0; s[i] != '\0'; ++i)
  5. if(s[i] != c) //当不相等时才赋值,否则忽略
  6. s[j++] = s[i];
  7. s[j] = '\0';
  8. }

strcat函数:将字符串t连接到字符串s的尾部;s必须有足够大的空间

  1. void strcatt(char s[], char t[])
  2. {
  3. int i=0,j=0;
  4. while(s[i] != '\0')
  5. ++i;
  6. while((s[i++] = t[j++]) != '\0')
  7. ;
  8. }

练习2-4

重写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。

  1. void squeeze2(char s1[], char s2[])
  2. {
  3. int i,j,z;
  4. for(i=j=0; s1[i] != '\0'; ++i) {
  5. for(z=0; s2[z] != '\0'&& s1[i] != s2[z]; ++z)
  6. ;
  7. if(s2[z] == '\0') s1[j++] = s1[i]; //s2没有与之相等的字符
  8. }
  9. s1[j] = '\0';
  10. }

练习2-5

编写函数any(s1,s2),将字符s2中的任一字符在字符串s1中的第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。(标准库函数strpbrk具有同样的功能,但它返回的是指向该位置的指针。)

  1. int any(char s1[], char s2[])
  2. {
  3. int i,j;
  4. for(i=0; s1[i] != '\0'; ++i) {
  5. for(j=0; s2[j] != '\0' && s1[i] != s2[j]; ++j)
  6. ;
  7. if(s2[j] != '\0') return i; //发现s2有相等字符
  8. }
  9. return -1;
  10. }

2.9 按位运算符

getbits 函数:返回x中第p位开始的n位, 如getbits(x,4,3) 返回4,3,2位

  1. unsigned getbits(unsigned x, int p, int n)
  2. {
  3. return (x >> (p-n+1)) & ~(~0 << n);
  4. }

2.10 赋值运算符与表达式

bitcount函数:统计x中值位1的二进制位数

  1. int bitcount(unsigned x)
  2. {
  3. int b;
  4. for(b=0; x!= 0; x >>= 1)
  5. if(x & 01)
  6. ++b;
  7. return b;
  8. }

练习2-9

在求对2的补码时,表达式x &= (x-1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度

  1. int bitcount(unsigned x)
  2. {
  3. int b;
  4. for(b=0; x!= 0; x &= (x-1))
  5. ++b;
  6. return b;
  7. }

练习 2-10

重新编写将大写字母转换为小写字母的函数lower,并用条件表达式替代其中的if-else结构

  1. int lower(int c)
  2. {
  3. return (c >= 'A' && c <= 'Z') ? c + 'a' - 'A' : c;
  4. }

C程序设计语言练习 第二章的更多相关文章

  1. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

  2. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

  3. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  4. win32多线程程序设计笔记(第二章)

    第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...

  5. C程序设计语言笔记-第一章

     The C Programming language notes 一 基础变量类型.运算符和判断循环         char                 字符型  character      ...

  6. C程序设计语言(第二版)习题:第二章

    这一章习题做着很舒服,毕竟很简单.所以很有感觉. 练习 2-1 Write a program to determine the ranges of char , short , int , and ...

  7. 《python语言程序设计》_第二章笔记之2.13_软件开发流程

    #程序1: 设计:由用户键入利率.贷款数以及贷款的年限,系统计算出每月还贷数和总还款数 注意:输入的年利率是带有百分比的数字,例如:4.5%.程序需要将它除以100转换成小数.因为一年有12个月,所以 ...

  8. 《python语言程序设计》_第二章笔记

    #2.2_编写一个简单的程序 项目1: 设计:radius=20,求面积area? 程序: radius=20 #给变量radius复制area=radius*radius*3.14159 #编写ar ...

  9. 《python语言程序设计》_第二章编程题

    2.1 程序: Celsius=eval(input("Enter a degree in Celsius:"))#输入摄氏度的值Celsiusfahrenheit =(9/5)* ...

随机推荐

  1. BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表

    有一个神奇的技巧——打表 code: #include <bits/stdc++.h> #define N 10000007 #define ll long long #define se ...

  2. .NET Core入门程序及命令行练习

    用命令行一步一步新建项目.添加Package.Restore.Build.Run 执行的实现方式,更让容易让我们了解.NET Core的运行机制. 准备工作 安装.NET Core 运行环境,下载地址 ...

  3. PHP-FPM config 文件生产环境

    ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] pid = run/php-fpm.pid error_log = ...

  4. codevs 2780 ZZWYYQWZHZ

    2780 ZZWYYQWZHZ  时间限制: 1 s  空间限制: 32000 KB  题目等级: 青铜 Bronze       题目描述 Description 可爱的小管在玩吹泡泡.忽然,他想到 ...

  5. 48、Spark SQL之与Spark Core整合之每日top3热点搜索词统计案例实战

    一.概述 1.需求分析 数据格式: 日期 用户 搜索词 城市 平台 版本 需求: 1.筛选出符合查询条件(城市.平台.版本)的数据 2.统计出每天搜索uv排名前3的搜索词 3.按照每天的top3搜索词 ...

  6. 设置应用程序的样式并对其进行部署——《Python编程从入门到实践》

    我们将使用应用程序django-bootstrap3为Web应用程序设计样式.我们将把项目"学习笔记"部署到Heroku,这个网站能让我们们将项目推送到其服务器,让任何有网络连接的 ...

  7. 中标麒麟(龙芯CPU)--忘记root密码怎么修改?

    中标麒麟桌面版和服务器版均采用GRUB2为启动器,无法通过单用户模式重置root密码.下面将介绍如何重置中标麒麟系统的root密码: 桌面版 1.修改grub2引导 在正常系统入口上按下"e ...

  8. odoo开发笔记 -- 模型(类)继承的几种机制

    1. 类继承 2. 原型继承 3. 委托继承 待完善 https://www.cnblogs.com/chenshuquan/p/10523626.html

  9. 在Linux下运行引入了外部jar包的java程序

    如图:H.java里引入了commons-io-2.2.jar 代码如下: import org.apache.commons.io.IOUtils; public class H{ public s ...

  10. phpexcel中文手册(转)

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...