⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 04.cpp

📁 从一个随机文件读取256字节数据形成数据区DArea
💻 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 + -