在主程序中以自己的姓名拼音的连续大写英文字母初始化一个my_name[ ]字符数组,作为原码,以自己的9位学号为密钥定义整形数组变量key[9],编写加密函数void encrypt(char*p,int n),其中n为名字my_name[ ]字符数组的元素个数,对my_name逐个字符进行加密变换,即my_name[1]=my_name[1]+ key[1],my_name字符超出9个的尾部不做变换,在主程序中调用encrypt函数,并输出加密后的字符数组元素。编写程序并完成上机调试实现以上功能要求。(希望有人可以answer一下me,三克油!♥)
我的思路如下:
1、定义一个全局整数数组key,用于向加密函数cnrypt传入学号。
2、定义加密函数encrypt, 用一个while循环遍历姓名字符串,当姓名字符串结束或达到第9个字符后停止加密过程,
循环体用于加密姓名字符串的前9个字符,用姓名字符串当前字符加上学号数组相应位置的整数赋值给姓名字符串的相应元素。
3、mian函数先获取姓名字符串输入(可以直接用姓名字符串初始化姓名字符数组),
然后获取学号,把学号每一位分解存储学号数组(这里可以直接用学号初始化学号数组),
然后调用加密函数encrypt加密姓名字符串,
最后打印加密后的姓名字符串。
代码如下:
#include <stdio.h>
#include <string.h>
//存储学号,这里可以直接初始化为自己的学号,因为encrypt函数没有int指针参数,所以这里定义一个全局int数组,用于把学号传入函数
int key[9];
void encrypt(char *p,int n){
int i=0;
while(i<n&&i<9){
p[i] = p[i]+key[i];
i++;
}
//p[n]='\0';
}
int main(void){
char my_name[20]; //存储姓名 ,这里可以直接初始化为自己的姓名
printf("请以大写字母形式输入姓名的拼音:\n");
gets(my_name); //获取姓名
// puts(my_name);
// while(getchar()!='\n'){
// continue;
// }
int id;
printf("请输入9位的学号:\n");
scanf("%d",&id); //获取学号,可以在int数组key定义时直接初始化
int i=8;
int temp;
while(id!=0){ //把学号的每一位分解出来赋值给学号数组
temp= id%10;
id/=10;
key[i]=temp;
i--;
}
//调用加密函数
encrypt(my_name,strlen(my_name));
//打印加密后的姓名字符串
printf("加密后的姓名字符串为:%s\n",my_name);
return 0;
}