📄 04.cpp
字号:
/* 032223 Chen Chao
实验六 S-替换与P-置换的编程实现
(一)实验内容
从一个随机文件读取256字节数据形成数据区DArea,再应用实验一所给的方法生成0~255的一个全排列DTab。试分别写出"求DArea中全部数据经
(1)以DTab为S-盒;
(2)以DTab为P置换
变换后数据"的程序。
(二)实验要求
程序计算结果须与与手工推算一致。
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 256
void Permutation(int DTab[]){ //生成全排列
int i,j;
srand(time(NULL)); //时间种子
for(i=0;i<MAX;i++){
DTab[i]=rand()%MAX; //随机产生一个数
for(j=0;j<i;j++) //判断
if(DTab[i]==DTab[j]){ //如果有与之前的任何一个数相同
i--; //不保存,重新生成随机数
break;
}
}
printf("全排列DTab:\n"); //输出结果
for(i=0;i<MAX;i++)
printf("%4d",DTab[i]);
putchar('\n');
putchar('\n');
}
void S_Replacement(int DArea[],int DTab[]){ //S-盒子置换
printf("经S-盒子置换后数据:\n");
for(int i=0;i<MAX;i++)
printf("%4d",DTab[DArea[i]]); //S-盒子置换就是使用对应的数替代
putchar('\n'); //数据区DArea中是替代的数所在序号
putchar('\n'); //即,用DTab中的数替换
}
void P_Replacement(int DArea[],int DTab[]){ //P-置换
printf("经P-置换后数据:\n");
for(int i=0;i<MAX;i++)
printf("%4d",DArea[DTab[i]]); //P-置换类似于移位
putchar('\n'); //即,将据区DArea中的数据重排
putchar('\n');
}
void main(){
int i,j;
int DArea[MAX],DTab[MAX];
FILE *fp;
char filename[20];
printf("请输入数据区DArea所在文件名:");//输入文件
scanf("%s",filename);
srand(time(NULL));
if((fp=fopen(filename,"rb+"))==NULL){ //如果文件不存在则随机生成
if((fp=fopen(filename,"wb+"))==NULL){
printf("ERROR!");
exit(-1);
}
for(i=0;i<MAX;i++)
DArea[i]=rand()%MAX;
fwrite(DArea,sizeof(int),MAX,fp); //并保存
}
else fread(DArea,sizeof(int),MAX,fp); //如果存在则读出数据
fclose(fp);
printf("数据区DArea:\n"); //输出数据
for(i=0;i<MAX;i++){
printf("%4d",DArea[i]);
}
putchar('\n');
putchar('\n');
Permutation(DTab); //调用函数
S_Replacement(DArea,DTab);
P_Replacement(DArea,DTab);
}
/*
请输入数据区DArea所在文件名:DArea
数据区DArea:
133 143 7 13 29 49 27 28 75 218 206 61 123 206 158 2 200 82 17 238
122 28 84 135 205 8 33 172 245 12 229 41 94 110 35 137 56 52 19 44
51 221 144 153 135 78 49 20 56 15 181 116 152 183 164 47 13 165 51 183
20 241 104 9 134 162 128 130 27 34 142 245 44 239 100 252 189 146 182 139
186 213 125 203 129 49 154 37 161 134 188 156 225 15 131 97 133 148 230 161
204 225 210 162 189 120 19 14 35 131 120 143 215 12 50 155 61 112 126 146
17 17 132 6 100 76 126 89 225 171 28 142 85 91 39 89 111 224 102 120
196 7 190 70 21 28 156 142 213 94 152 157 230 176 82 155 164 145 160 27
36 78 236 240 189 118 215 66 200 143 34 226 165 7 207 219 255 110 131 74
80 226 47 111 167 202 239 3 169 199 51 204 213 231 28 112 13 28 41 135
82 237 18 243 208 108 244 116 26 104 175 119 182 227 140 47 220 198 36 231
123 212 125 151 125 221 117 181 76 52 100 77 149 99 253 84 76 28 117 58
240 115 232 190 16 75 248 6 14 14 183 239 35 162 199 162
全排列DTab:
133 11 151 204 19 56 207 41 40 181 102 121 64 157 93 196 113 131 176 112
10 152 211 210 179 162 147 52 225 92 215 81 15 132 139 245 42 98 165 201
14 173 202 122 134 124 249 84 254 68 108 119 208 6 13 219 168 246 170 188
198 136 197 54 70 117 36 76 21 171 248 39 231 45 71 163 88 166 229 48
34 174 51 100 161 149 29 141 148 44 69 105 83 252 255 118 35 128 106 230
60 57 4 74 142 78 79 143 59 87 91 28 94 247 194 66 164 221 67 216
234 123 222 25 22 103 217 129 218 61 97 244 212 146 237 156 3 99 236 5
206 58 186 250 20 120 114 126 200 233 159 223 191 50 89 63 95 232 214 203
135 80 38 144 226 0 177 209 169 16 12 111 30 192 153 228 104 62 227 90
86 82 96 140 251 115 130 37 72 49 239 243 184 158 240 224 235 187 26 23
8 116 190 43 155 85 193 125 33 253 160 47 205 213 32 1 77 27 24 9
180 172 185 183 75 31 73 2 7 220 189 65 182 127 55 175 241 199 17 46
101 145 242 150 137 195 53 109 138 110 107 18 154 178 238 167
经S-盒子置换后数据:
146 250 41 157 92 68 52 225 163 24 193 136 25 193 214 151 8 51 131 17
222 225 161 156 85 40 132 30 195 64 220 173 255 91 245 99 168 208 112 134
119 172 20 50 156 229 68 10 168 196 82 164 191 140 226 84 157 0 119 140
10 145 142 181 237 38 218 97 52 139 186 195 134 46 60 154 49 114 96 5
130 213 103 43 61 68 89 98 80 237 72 95 31 196 244 128 146 200 189 80
155 31 160 38 49 234 112 93 245 244 234 250 1 64 108 63 136 94 217 114
131 131 212 207 60 88 217 44 31 111 225 186 149 105 201 44 28 75 4 234
235 41 239 248 152 225 95 186 213 255 191 232 189 104 51 63 226 120 135 52
42 229 241 101 49 67 1 36 8 250 139 73 0 41 125 9 167 91 244 71
34 73 84 28 209 190 46 204 16 23 119 155 213 65 225 94 157 225 173 156
51 199 176 150 33 59 137 164 147 142 228 216 96 2 206 84 180 26 42 65
25 205 103 223 103 172 221 82 88 208 60 166 233 230 178 161 88 225 221 170
101 66 182 239 113 163 138 207 93 93 140 46 245 38 23 38
经P-置换后数据:
91 61 157 208 238 13 116 221 51 226 210 17 134 145 15 13 12 142 255 215
206 230 119 175 74 236 142 152 221 225 47 213 2 85 120 75 144 230 118 237
158 7 18 132 39 100 14 129 199 27 35 146 26 27 206 231 200 248 34 169
41 111 28 164 142 112 56 189 28 226 14 44 77 78 245 240 161 215 52 56
35 207 116 204 78 94 12 7 213 135 34 120 203 35 162 126 137 225 19 100
20 165 29 100 190 182 139 70 183 37 156 245 131 6 28 128 189 212 130 220
253 6 125 8 84 162 198 171 36 241 148 16 182 156 28 164 13 161 76 49
244 51 239 183 122 17 50 126 82 99 27 151 204 181 134 9 97 149 140 243
89 186 19 21 117 133 110 104 143 200 123 143 229 213 176 76 189 104 181 188
154 125 133 196 239 155 28 52 44 15 58 190 167 160 240 125 84 3 33 135
75 61 51 153 155 49 231 76 110 162 36 20 108 227 94 143 146 172 205 218
80 165 202 111 252 41 239 7 28 123 199 162 47 89 47 219 115 135 82 49
225 28 232 152 224 112 183 131 102 120 14 17 82 131 117 66
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -