C程序设计语言练习 第二章
2019-09-23 08:40:18来源:博客园 阅读 ()
C程序设计语言练习 第二章
2.3 常量
strlen函数:返回s的长度
int strlenn(char s[])
{
int i=0;
while(s[i] != '\0')
++i;
return i;
}
2.7 类型转换
atoi函数:将字符串s转换为相应的整型
int atoi(char s[])
{
int n = 0;
for (int i = 0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10*n + (s[i] - '0');
return n;
}
lower函数:把字符c转换为小写形式,只对ASCII字符集有效
int lower(int c)
{
if(c >= 'A' && c <= 'Z')
return c + 'a' -'A';
else
return c;
}
rand函数:返回取值在0~32767之间的伪随机数,\(2^{15}\) = 32768
srand函数:为rand()函数设置种子数
unsigned long int next = 1;
int rand()
{
next = next*1103515245 + 12345;
return (unsigned int)(next/65536)%32768;
}
void srand(unsigned int seed)
{
next = seed;
}
练习2-3
编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含数字包括:0~9,a~f以及A~F。
int htoi(char s[])
{
int n = 0,i = 0;
if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) i = 2;
for(; s[i] != '\0'; ++i) {
if(s[i] >= '0' && s[i] <= '9')
n = 16*n + (s[i] - '0');
else if(s[i] >= 'a' && s[i] <= 'f')
n = 16*n + (s[i] - 'a' + 10);
else if(s[i] >= 'A' && s[i] <= 'F')
n = 16*n + (s[i] - 'A' + 10);
else break;
}
return n;
}
2.8 自增运算符与自减运算符
squeeze函数:从字符串s中删除字符
void squeeze(char s[], char c)
{
int i,j;
for(i=j=0; s[i] != '\0'; ++i)
if(s[i] != c) //当不相等时才赋值,否则忽略
s[j++] = s[i];
s[j] = '\0';
}
strcat函数:将字符串t连接到字符串s的尾部;s必须有足够大的空间
void strcatt(char s[], char t[])
{
int i=0,j=0;
while(s[i] != '\0')
++i;
while((s[i++] = t[j++]) != '\0')
;
}
练习2-4
重写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。
void squeeze2(char s1[], char s2[])
{
int i,j,z;
for(i=j=0; s1[i] != '\0'; ++i) {
for(z=0; s2[z] != '\0'&& s1[i] != s2[z]; ++z)
;
if(s2[z] == '\0') s1[j++] = s1[i]; //s2没有与之相等的字符
}
s1[j] = '\0';
}
练习2-5
编写函数any(s1,s2),将字符s2中的任一字符在字符串s1中的第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。(标准库函数strpbrk具有同样的功能,但它返回的是指向该位置的指针。)
int any(char s1[], char s2[])
{
int i,j;
for(i=0; s1[i] != '\0'; ++i) {
for(j=0; s2[j] != '\0' && s1[i] != s2[j]; ++j)
;
if(s2[j] != '\0') return i; //发现s2有相等字符
}
return -1;
}
2.9 按位运算符
getbits 函数:返回x中第p位开始的n位, 如getbits(x,4,3) 返回4,3,2位
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p-n+1)) & ~(~0 << n);
}
2.10 赋值运算符与表达式
bitcount函数:统计x中值位1的二进制位数
int bitcount(unsigned x)
{
int b;
for(b=0; x!= 0; x >>= 1)
if(x & 01)
++b;
return b;
}
练习2-9
在求对2的补码时,表达式x &= (x-1)
可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度
int bitcount(unsigned x)
{
int b;
for(b=0; x!= 0; x &= (x-1))
++b;
return b;
}
练习 2-10
重新编写将大写字母转换为小写字母的函数lower,并用条件表达式替代其中的if-else结构
int lower(int c)
{
return (c >= 'A' && c <= 'Z') ? c + 'a' - 'A' : c;
}
原文链接:https://www.cnblogs.com/wjundong/p/11563256.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++冒泡排序及优化
下一篇:Qt 自定义QTabWidget
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- 每日干货丨C++语言主流开发工具推荐! 2020-04-28
- C语言实现经典游戏——扫雷! 2020-04-17
- C语言中的宏定义 2020-04-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash