当前位置: 首页 > article >正文

C语言典型例题59

《C程序设计教程(第四版)——谭浩强》

题目:


例题4.11 译密码。为使电文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译回原文。
例如,可以按以下规律将电文变为密码:
将字母A变成字母E,a变为e,即变成其后的第4个字母,W变为A,X变为B,Z变为D


代码:

//《C程序设计教程(第四版)——谭浩强》
//例题4.11 译密码。为使电文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译回原文。
//例如,可以按以下规律将电文变为密码:
//将字母A变成字母E,a变为e,即变成其后的第4个字母,W变为A,X变为B,Z变为D

#include <stdio.h>
#include <stdlib.h>

int bianyi(char arr1[]);//将密码编译为原文

int main()
{
	char arr[100];//充足的原文空间
	int size=0;
	int panduan=0;
	char arr1[]={};
	char arr1_1[]={};
	int ch='a';
	
	printf("请输入你的编译原文:\n");
	scanf("%99s",&arr);// 限制输入字符的数量,防止溢出,最多99个字符 + '\0'
	
//	printf("%s\n",arr);
	
	size=sizeof(arr)/sizeof(arr[0]);
//	printf("%d\n",size);
	
	int i=0;
	for(i=0;i<=size;i++)
	{
		if(arr[i]=='\0')
		{
			break;
		}
		
		if((arr[i]>=65 && arr[i]<=90)||(arr[i]>=97 && arr[i]<=122))
		{
			panduan=1;
			if((arr[i]>=65 && arr[i]<=86)||(arr[i]>=97 && arr[i]<=118))
			{
				arr1[i]=arr[i]+4;
				
			}
			else
			{
				if(arr[i]>=87 && arr[i]<=90)
				{
					arr1_1[i]=90-arr[i]-3;
					arr1[i]=65+abs(arr1_1[i]);
				}
				else
				{
					arr1_1[i]=122-arr[i]-3;
					arr1[i]=97+abs(arr1_1[i]);
				}
			}
		}
		else
		{
			panduan=0;
			break;
		}
			
		
	}
	
//判断密码是否接受,是否无效,当panduan为1时,接受密码;当panduan为0时,输出无效!!!	
	if(panduan==1)
	{
		printf("将译文转化为密码的内容是:%s\n",arr1);
	}
	else
	{
		printf("!!!您的原文输入无效,请重新输入!!!\n");
	}
	
	printf("\n");
	printf("**********************************************\n");
	printf("你是否为收报人,是否想对接受到的密码进行编译!\n");
	printf("********************注意**********************\n");
	printf("******编译请按y键,不想编译为原文请按n键******\n");
	printf("**********************************************\n");
	printf("\n");
	
	getchar();

	ch=getchar();
	if(ch=='y')
	{
		printf("编译的原文:\n");
		bianyi(arr1);
	}
	else
	{
		printf("结束程序\n");
	}
	

	
	
	return 0;
}

int bianyi(char arr1[])//将密码编译为原文
{
	int panduan1=0;
//	char arr1_2[];
//	printf("%s",arr1);

	int j=0;
	for(j=0;j<=100;j++)
	{
		if(arr1[j]=='\0')
		{
			break;
		}
		
		if((arr1[j]>=65 && arr1[j]<=90)||(arr1[j]>=97 && arr1[j]<=122))
		{
			panduan1=1;
			if((arr1[j]>=69 && arr1[j]<=90)||(arr1[j]>=101 && arr1[j]<=122))
			{
				arr1[j]=arr1[j]-4;
				
			}
			else
			{
				if(arr1[j]>=65 && arr1[j]<=68)
				{
					arr1[j]=arr1[j]+22;
				}
				else
				{
					arr1[j]=arr1[j]+22;
				}
			}
		}
			
		
	}
	
//判断密码是否接受,是否无效,当panduan1为1时,接受密码;当panduan1为0时,输出无效!!!	
	if(panduan1==1)
	{
		printf("将译文重新转化为密码:%s\n",arr1);
	}

	return 0;
}

运行结果:

编写代码中遇到的问题:

数组名本身就是地址,不需要使用取地址符&

【错误做法】

【正确做法】


http://www.kler.cn/a/287377.html

相关文章:

  • 【ACM独立出版|高校主办】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • 有限状态机(续)
  • 网关在能源物联网中扮演了什么角色?
  • 2025年法定节假日日历
  • docker 安装之 windows安装
  • Halcon HImage 与 Qt QImage 的相互转换(修订版)
  • Leetcode Day18 堆
  • 大数据技术之HBase API(3)
  • 数据结构链串的简单代码实现(C语言代码版)
  • chapter11-枚举和注解——(枚举类)——day14
  • DMDSC集群安装
  • 【网络安全】ASP.NET网站中的文件上传RCE
  • SQL 五十周年:何去何从?
  • 极狐GitLab 如何管理 Kubernetes 集群?
  • docker实战基础二(Docker基础命令)
  • 015_GUI_in_Matlab中实现GUI开发
  • 【C++】list的使用和list的模拟实现和迭代器失效问题
  • django外键表查询
  • 随手记:小程序体积超出2M包大小如何优化
  • Superset安装
  • World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone
  • RocketMQ高级特性二-消息重试与流控
  • Sentieon 应用教程 | 使用CNVscope进行CNV检测分析
  • 精通Redis-CLI:命令行玩转高效缓存
  • Java设计模式之外观模式详细讲解和案例示范
  • Git分支原理、操作及实际开发中如何规范使用分支