程序设计实践——第二章

一、字符加密

编写程序,将“China”译成密码。密码规律:用原来的字母后面第4个字母代替原来的字母,例如:字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”并输出。

程序分析:

  1. 字符型数据在C语言当中实际上是以ASCII码的形式存储在内存单元中,例如‘a’的ASCII码值为97,字符b的ASCII码值为98。ASCII买包
  2. 由上图可知,字符’a’+1的值与字符’b‘的ASCII的码值相同。
    示例代码
#include "stdio.h"
int main()
{
	char c='a',c2='b';
	c=c+1;
	printf("c=%c,c2=%c\n",c,c2);
	return 0;
}

输出结果
在这里插入图片描述
3.由此可知,若需要将密码翻译为字母后4位,只需要在原来的基础上把ASCII的码值加4即可。
示例代码

#include "stdio.h"
int main()
{
	char c1='C',c2='h',c3='i',c4='n',c5='a';
	c1+=4;
	c2+=4;
	c3+=4;
	c4+=4;
	c5+=4;
	printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);
	
	return 0;
}

在这里插入图片描述
知识扩展
根据ASCII码表可知,大写字母和小写字母之间的码值相差32,即可得:
字符大写转小写 +32
字符小写转大写 -32

  • 下面是一个字母大小写字符转换的程序案例。
#include "stdio.h"
int main()
{
	char c1='*';
	scanf("%c",&c1);
	if(c1>='A' && c1<='Z')//大写字母 
	{
		c1=c1+32;	//由于在ASCII码表中,大小写字符的差值为32,所以+32转换成小写 
	}
	else if(c1>='a' && c1<='z')//小写字母 
	{
		c1=c1-32;	//转换成大写 
	}
	printf("%c",c1);
	return 0; 
}

输出结果
在这里插入图片描述
补充:

  1. (逻辑与)&&:
    在两个条件同时达成时,条件为真。
    例如:if( a>=3 && a<=8 )
    则当a的值为 3~8之间时,if语句里面的条件才成立,否则都不成立

二、数值拆分

编写程序,将一个三位数整数256的个位、十位和百位分离后输出,输出结果为a=2,b=5,c=6。
程序分析

  1. 运算符
    ‘/’:取整运算符
    ‘%’取余运算符
    任何大于10的数都不可以被10整除,所以任何数对10取余都可以得到这个数的个位。
    例:
#include "stdio.h"
int main()
{
	int a;
	scanf("%d",&a);
	printf("%d",a%10) ;
	return 0;
}

输出结果
在这里插入图片描述
2. 我们现在已经可以获取个位的值了,那么怎么获得一个数的十位呢?我们只需要把这个数/10%10就可以得到这个数的10位,它的原理是通过取整10抹掉这个数的最后一位,然后十位就变成了个位,我们再进行取余就可以获得十位上的数值了!

#include "stdio.h"
int main()
{
	int a;
	scanf("%d",&a);
	printf("%d",a/10%10) ;
	return 0;
}

输出结果
在这里插入图片描述
3.依次类推,下面是获取256每一位值的程序代码。

#include "stdio.h"
int main()
{
	int x=256;
	int a=x/100%10;
	int b=x/10%10;
	int c=x%10;
	printf("a=%d\n",a) ;
	printf("b=%d\n",b) ;
	printf("c=%d",c) ;
	
	return 0;
}

输出结果
在这里插入图片描述

三、浮点数运算

已知x=3.6,y=4.2。编写程序,求表达式x+y及(int)x%(int)(x+y)的值。

程序分析:

  1. 取余运算
    取余运算只能进行整数之间的运算,所以我们在进行小数之间的取余运算时,需要先把小数类型转换为整数类型,再进行运算。
  2. 类型转换
  • 隐式类型转换(自动转换)

在有多种数据类型混合计算的时候,若未人为控制类型,系统会自动进行类型转换
转换的规则是:存储长度较短的转换成存储长度较长的,且不丢失数据
char—>short—>int—>unsigned int(—>long—>unsigned long)—>double

float-------

  • 强制类型转换

隐式类型转换或赋值转换有时不会得到我们预期的结果,这时我们可以使用强制类型转换来实现我们想要的类型转换结果。
强制类型转换:人为地将某类型转换为另一类型
强制类型转换符:()括号

3.下面是强制类型转换的示例代码

#include "stdio.h"
int main()
{
	float x=3.6,y=4.2;									
	int c;
	c=(int)x%(int)(x+y); //通过(int)将float类型强制转换为整数,然后进行取余运算。 
	printf("x+y=%f, (int)x%%(int)(x+y)=%d \n",x+y,c);
	return 0;
}

运行结果
在这里插入图片描述

补充:

  • 运算优先级

C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。
运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

此处例程先进行强制类型转换,然后再进行取余运算。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 译者序 前言 第1章 风格 1 1.1 名字 2 1.2 表达式和语句 4 1.3 一致性和习惯用法 8 1.4 函数宏 14 1.5 神秘的数 15 1.6 注释 18 1.7 为何对此费心 22 第2章 算法与数据结构 23 2.1 检索 23 2.2 排序 25 2.3 库 27 2.4 一个Java快速排序 29 2.5 大O记法 31 2.6 可增长数组 33 2.7 表 35 2.8 树 39 2.9 散列表 43 2.10 小结 46 第3章 设计与实现 48 3.1 马尔可夫链算法 48 3.2 数据结构的选择 50 3.3 在C中构造数据结构 51 3.4 生成输出 54 3.5 Java 56 3.6 C++ 59 3.7 Awk和Perl 61 3.8 性能 63 3.9 经验教训 64 第4章 界面 67 4.1 逗号分隔的 67 4.2 一个原型库 69 4.3 为别人用的库 72 4.4 C++实现 79 4.5 界面原则 82 4.6 资源管理 84 4.7 终止、重试或失败 86 4.8 用户界面 90 第5章 排错 93 5.1 排错系统 94 5.2 好线索,简单错误 95 5.3 无线索,难办的错误 98 5.4 最后的手段 101 5.5 不可重现的错误 103 5.6 排错工具 105 5.7 其他人的程序错误 107 5.8 小结 108 第6章 测试 110 6.1 在编码过程中测试 110 6.2 系统化测试 114 6.3 测试自动化 118 6.4 测试台 120 6.5 应力测试 123 6.6 测试秘诀 125 6.7 谁来测试 126 6.8 测试马尔可夫程序 127 6.9 小结 129 第7章 性能 130 7.1 瓶颈 130 7.2 计时和轮廓 135 7.3 加速策略 138 7.4 代码调整 140 7.5 空间效率 144 7.6 估计 145 7.7 小结 147 第8章 可移植性 149 8.1 语言 149 8.2 头文件和库 154 8.3 程序组织 156 8.4 隔离 159 8.5 数据交换 160 8.6 字节序 161 8.7 可移植性和升级 164 8.8 国际化 165 8.9 小结 167 第9章 记法 169 9.1 数据格式 169 9.2 正则表达式 174 9.3 可编程工具 180 9.4 解释器、编译器和虚拟机 182 9.5 写程序程序 186 9.6 用宏生成代码 189 9.7 运行中编译 190 后记 195 附录:规则汇编 197 索引 200

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值