⒒编写两个程序:
⑴实现通过凯撒密码对字符串加密,密钥通过键盘输入。
⑵实现上一程序的解密。
#include <iostream>
using namespace std;
char *Encrypty (char *str, int offset);
char *Decode (char *str, int offset);
int main (void)
{
char str[80];
cout << "Please enter what you want to encrypt (< 80): " << endl;
cin.getline (str, 80);
int offset;
cout << "Please input the value of offset: " << endl;
cin >> offset;
cout << "The encrypted content is "<< '\n' << Encrypty (str, offset);
printf ("\n\n");
system ("pause");
printf ("\n\n");
char Str[80];
cout << "Please enter what you want to decode (< 80): " << endl;
cin >> Str;
int key;
cout << "Please input the value of offset: " << endl;
cin >> key;
cout << "The encrypted content is "<< '\n' << Decode (Str, key) << endl;
system ("pause");
return 0;
}
char
*Encrypty (char *str, int offset)
{
char *p = NULL;
p = str;
while (*p != '\0')
{
if (*p >= 'a' && *p <= 'z')
{
*p = ((*p - 'a') + offset) % 26 + 'a';
}
else if (*p >= 'A' && *p <= 'Z')
{
*p = ((*p - 'A') + offset) % 26 + 'A';
}
p ++;
}
return str;
}
char
*Decode (char *str, int offset)
{
char *p = NULL;
p = str;
while (*p != '\0')
{
if (*p >= 'a' && *p <= 'z')
{
*p = ((*p - 'a') + (26 - offset)) % 26 + 'a';
}
else if (*p >= 'A' && *p <= 'Z')
{
*p = ((*p - 'A') + (26 - offset)) % 26 + 'A';
}
p ++;
}
return str;
}
⒓输入一个二十人班级的一门课程的成绩,输入一个分数查找是否有该成绩,如果有则输出序号,没有打印提示!
#include <iostream>
using namespace std;
#define MAXN 20
void GetPos (double array[], double target);
int main (void)
{
double score[MAXN];
printf ("Please input %d students' scores: \n", MAXN);
for (int i = 0; i < MAXN; i ++)
{
scanf ("%f", &score[i]);
}
double target;
printf ("Please input the target number: ");
scanf ("%f", &target);
GetPos (score, target);
system ("pause");
return 0;
}
void
GetPos (double array[], double target)
{
bool bFlag = false;
double *p = NULL;
for (p = array; p < array + MAXN; p ++)
{
if (target == *p)
{
printf ("The score located in %d \n", p - array);
bFlag = true;
}
}
if (bFlag == false)
{
printf ("Not found this score! \n");
}
}
⒔判断一个字符串是否为回文,如果是输出“Yes”,不是输出 “No”。
如: ABCDCBA、ABCCBA是回文。
#include <iostream>
using namespace std;
int MyStrlen (char *str);
bool isPalindrome (char *str);
const char * msg[] = {"No", "Yes"};
int main (void)
{
char str[80];
cout << "Please input string (< 80): " << endl;
cin.getline (str, 80);
bool bFlag = isPalindrome (str);
printf ("%s. \n\n", msg[bFlag]);
system ("pause");
return 0;
}
int
MyStrlen (char *str)
{
if (str == NULL)
{
return -1;
}
int returnSize = 0;
while (*str != '\0')
{
returnSize ++;
*str ++;
}
return returnSize;
}
bool
isPalindrome (char *str)
{
int len = MyStrlen (str);
for (int i = 0; i <= len / 2; i ++)
{
if (str[i] != str[len - 1 - i])
{
return false;
}
}
return true;
}
⒕输入4×4的矩阵,求该矩阵周边元素之和,输出结果。
#include <iostream>
using namespace std;
#define MAXN 4
void MatrixSum (double (*p)[MAXN]);
int main (void)
{
double matrix[MAXN][MAXN];
printf ("Please input numbers in %d x %d matrix: \n", MAXN, MAXN);
for (int i = 0; i < MAXN; i ++)
{
for (int j = 0 ; j < MAXN; j ++)
{
cin >> matrix[i][j];
}
}
MatrixSum (matrix);
system ("pause");
return 0;
}
void
MatrixSum (double (*p)[MAXN])
{
double dSum = 0.0;
for (int i = 0; i < MAXN; i ++)
{
for (int j = 0; j < MAXN; j ++)
{
if (i == 0 || j == 0 || i == MAXN - 1 || j == MAXN - 1)
{
dSum += *(*(p + i) + j);
}
}
}
printf ("\n");
printf ("The sum of the elements around the matrix is %.2f \n", dSum);
}
⒖输入5×4的数组a,计算每行数据元素的最大值存入一维数组b[5]中,输出结果.
#include <iostream>
using namespace std;
#define ROW 5
#define COL 4
void GetMax (double (*p)[COL]);
int main (void)
{
double a[ROW][COL];
printf ("Please input numbers in %d x %d matrix: \n", ROW, COL);
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
cin >> a[i][j];
}
}
GetMax (a);
system ("pause");
return 0;
}
void
GetMax (double (*p)[COL])
{
double b[ROW] = {0.0};
int index = 0;
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
if (*(*(p + i) + j) > b[index])
{
b[index] = *(*(p + i) + j);
}
}
index ++;
}
double *q = NULL;
for (q = b; q < b + ROW; q ++)
{
printf ("The maximum value of the %d row of the matrix is %.2f \n", q - b, *q);
}
}
⒗输入5×4的数组a,计算每列数据元素的平均值存入一维数组b[4]中,输出结果。
#include <iostream>
using namespace std;
#define ROW 5
#define COL 4
void GetAverage (double (*p)[COL]);
int main (void)
{
double a[ROW][COL];
printf ("Please input numbers in %d x %d matrix: \n", ROW, COL);
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
cin >> a[i][j];
}
}
GetAverage (a);
system ("pause");
return 0;
}
void
GetAverage (double (*p)[COL])
{
double b[COL] = {0.0};
int index = 0;
for (int i = 0; i < COL; i ++)
{
double dSum = 0.0;
for (int j = 0; j < ROW; j ++)
{
dSum += *(*(p + j) + i);
}
b[index ++] = dSum / ROW;
}
double *q = NULL;
for (q = b; q < b + COL; q ++)
{
printf ("The average value of the %d column of the matrix is %.2f \n", q - b, *q);
}
}
⒘ 将如下定义的表示十六进制的字符串,转化为对应的十进制整形输出(不使用系统函数)。 字符串定义如下:
char szStr[ ] = “1a2b”;
#include <iostream>
using namespace std;
#define HEX 16
int MyPow (int num, int n);
int MyStrlen (char *str);
int HexToDec (char *str);
int main (void)
{
char szStr[] = "1a2b";
printf ("The Hex: %s to Dec: %d \n", szStr, HexToDec (szStr));
system ("pause");
return 0;
}
int
MyPow (int num, int n)
{
int iRes = 1;
for (int i = 0; i < n; i ++)
{
iRes *= num;
}
return iRes;
}
int
MyStrlen (char *str)
{
if (str == NULL)
{
return -1;
}
int returnSize = 0;
while (*str != '\0')
{
returnSize ++;
*str ++;
}
return returnSize;
}
int
HexToDec (char *str)
{
int len = MyStrlen (str);
int iAns = 0;
char *p = NULL;
p = str + len - 1;
while (p - str >= 0)
{
if (*p >= 'A' && *p <= 'F')
{
iAns += (10 + (*p - 'A')) * MyPow (HEX, len - (p - str) - 1);
}
else if (*p >= '0' && *p <= '9')
{
iAns += (*p - '0') * MyPow (HEX, len - (p - str) - 1);
}
else if (*p >= 'a' && *p <= 'f')
{
iAns += (10 + (*p - 'a')) * MyPow (HEX, len - (p - str) - 1);
}
p --;
}
return iAns;
}
⒙输入一个四阶方阵,求原矩阵与其转置之和,输出结果。
#include <iostream>
using namespace std;
#define ROW 4
#define COL 4
int **Transpose (int **p);
int GetSum (int **p, int **q);
void MatrixPrint (int **p);
int main (void)
{
int **matrix = (int **)malloc (sizeof (int *) * ROW);
for (int i = 0; i < COL; i ++)
{
matrix[i] = (int *)malloc (sizeof (int) * COL);
}
printf ("Please input number in %d x %d matrix: \n", ROW, COL);
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
cin >> *(*(matrix + i) + j);
}
}
printf ("\nAfter transpose: \n");
int **p = NULL;
p = Transpose (matrix);
MatrixPrint (p);
printf ("\nThe sum of the two matrices is %d \n", GetSum (matrix, p));
system ("pause");
return 0;
}
int
**Transpose (int **p)
{
int **q = NULL;
q = p;
for (int j = 0; j < ROW; j ++)
{
for (int i = 0; i <= j; i ++)
{
int temp = *(*(p + j) + i);
*(*(p + j) + i) = *(*(p + i) + j);
*(*(p + i) + j) = temp;
}
}
return q;
}
int
GetSum (int **p, int **q)
{
int iSum = 0;
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
iSum += (*(*(p + i) + j) + *(*(q + i) + j));
}
}
return iSum;
}
void
MatrixPrint (int **p)
{
for (int i = 0; i < ROW; i ++)
{
for (int j = 0; j < COL; j ++)
{
printf ("%d ", *(*(p + i) + j));
}
printf ("\n");
}
}
19.输入一个二进制字符串,将其转换为有符号整数。
#include <iostream>
using namespace std;
#define BIN 2
int MyPow (int num, int n);
int MyStrlen (char *str);
int BinToDec (char *str);
int main (void)
{
char szStr[20];
printf ("Please input binary number (< 20): \n");
cin.getline (szStr, 20);
printf ("The Bin: %s to Dec: %d \n", szStr, BinToDec (szStr));
system ("pause");
return 0;
}
int
MyPow (int num, int n)
{
int iRes = 1;
for (int i = 0; i < n; i ++)
{
iRes *= num;
}
return iRes;
}
int
MyStrlen (char *str)
{
if (str == NULL)
{
return -1;
}
int returnSize = 0;
while (*str != '\0')
{
returnSize ++;
*str ++;
}
return returnSize;
}
20. 输入一个无符号短整型,输出其对应的二进制。
#include <iostream>
using namespace std;
#define MAXN 16
char *DecToBin (unsigned short int Dec);
int main (void)
{
unsigned short int dec;
cout << "Enter an unsigned short integer: ";
cin >> dec;
printf ("The result to Bin is %s \n", DecToBin (dec));
system ("pause");
return 0;
}
char
*DecToBin (unsigned short int Dec)
{
char *bin = (char *)malloc (sizeof (char) * MAXN);
int index = 0;
for (int i = 16; i >= 0; i --)
{
if (Dec & (1 << i))
{
*(bin + index) = '1';
}
else
{
*(bin + index) = '0';
}
index ++;
}
return bin;
}