//利用指针输出数组中的元素(20分)
//题目内容:
//编写程序,把从1到n的n个整数赋予某个int型数组,然后用int型指针输出该数组元素的值。,
//
//输入格式:
//输入参数n
//
//输出格式:
//输出是1到n n个数组元素, 注意最后一个元素之后没有空格。
//
//输入样例:
//9
//
//输出样例:
//1 2 3 4 5 6 7 8 9
#include<iostream>
int main(int argv, char** argc)
{
int n;
std::cin >> n;
int data[100];
int *p;
p = data;
for (int i = 0; i < n; i++)
data[i] = i+1;
for (int i = 0; i < n; i++)
{
std::cout << *p;
p++;
if (i!=n-1)
{
std::cout << " ";
}
}
system("pause");
return 0;
}
//2输出数字的英文名称(20分)
//题目内容:
//编写一个函数,将表示数字的数值(1 - 12)转换成对应的英文名称(小写)。用户输入阿拉伯数字,程序输出对应数字的英文单词。要求必须使用指针数组完成。
//
//输入格式 :
//1 - 12的数字
//
//输出格式:
//输入数字对应的英文单词,均为小写字母
//
//输入样例:
//1
//
//输出样例:
//one
#include<iostream>
int main(int argc, char**argv)
{
int number;
std::cin >> number;
char *word[] = { "one", "two", "three" ,"four","five","six","seven","eight","nine","ten","eleven","twelve"};
std::cout << word[number-1];
system("pause");
return 0;
}
//3去除字符串首尾多余的空格(20分)
//题目内容:
//用户输入一个字符串,首尾有多余的空格,编写程序来去除这些多余的空格。要求必须使用指针来完成本题。
//
//输入格式 :
//一个首尾有多余空格字符串。为了便于标识出尾部的空格,在字符串尾部额外添加了个#号表示字符串结束。字符串内部保证不会出现#号。
//
//输出格式:
//去除空格后的字符串,同样在在字符串尾部额外添加了个#号表示字符串结束。
//
//输入样例:
//my score #
//
//输出样例:
//my score#
#include<iostream>
int main(int argc, char**argv)
{
char str[300];
char *s = str;
std::cin.getline(str,300,'#');
do
{
if (*s !=' ')
{
std::cout << *s;
}
else
{
if (*(s - 1) != ' '&&*(s + 1) != ' '&&*(s + 1) != '\0')
{
std::cout << *s;
}
}
s++;
} while (*s !='\0');
std::cout << '#';
system("pause");
return 0;
}
//4遍历二维数组(20分)
//题目内容:
//用户首先输入两个整数m和n, 然后输入m*n个元素,建立一个m*n的二维数组。要求使用 行指针 来遍历这个二维数组,输出该数组中所有元素的和。
//
//输入格式 :
//首先输入两个整数m和n, 然后依次输入m*n个元素
//
//输出格式:
//二维数组中所有元素的和
//
//输入样例:
//2 3
//1 3 5
//2 4 6
//
//输出样例:
//21
#include <iostream>
using namespace std;
int main()
{
int **a; //指向指针的指针
int n, m;//n行 m列
int i, j;
int sum = 0;
cin >> n >> m; //输入行数和列数
//申请空间
a = new int *[n]; //n个 int 指针 数组
for (i = 0; i<n; i++) //n个大小为m的一维指针数组
{
a[i] = new int[m]; //1个大小为m的一维数组,a[i]是int指针
}
//输入数据
for (i = 0; i<n; i++)
{
for (j = 0; j<m; j++)
{
//cin>>a[i][j];//输入
cin >> *(*(a + i) + j);//同上a相当于行指针
sum = *(*(a + i) + j) + sum;
}
}
cout << sum;
//释放申请的空间!!!
for (i = 0; i<n; i++) //释放n个大小为m的一维数组
{
delete[]a[i];
}
delete[]a;//释放int指针数组
system("pause");
return 0;
}
//5动态申请大数组(20分)
//题目内容:
//本题要求编写两个函数并测试。
//第一个函数原型为 int *new_array(int n); 该函数可以根据参数n动态申请n个元素的整型数组,最后将数组指针返回。
//第二个函数原型为 void init_array(int *p, int n, int c); 将指定的n个元素的数组每个元素的值均初始化为c。
//
//用户输入数组大小n和待初始化的值c, 调用new_array函数申请空间,再调用init_array初始化,最后输出这个数组的所有元素。
//
//输入格式 :
//数组大小n和待初始化的值c
//
//输出格式:
//数组的所有元素, 注意最后一个元素后没有空格
//
//输入样例:
//8 27
//
//输出样例:
//27 27 27 27 27 27 27 27
#include<iostream>
using namespace std;
int *p;
int* new_array(int n)
{
p = new int[n];
return p;
}
void init_array(int*p, int n, int c)
{
for (int i = 0; i < n; i++)
{
p[i] = c;
}
}
int main()
{
int c, n;
cin >> n>> c;
int *w = new_array(n);
init_array(w, n, c);
for (int i = 0; i < n; i++)
{
cout << *w;
w++;
if (i != n-1)
{
cout << " ";
}
}
system("pause");
return 0;
}
//6(本题只记1分)矩阵对角线元素之和。(1分)
//题目内容:
//编写函数,求n阶方阵的对角线元素之和。编写主程序,用户输入矩阵的阶数n,动态申请n*n的存储空间,再输入n行、n列的元素,调用函数求矩阵的对角元素之和,在主函数中输出这个和。设元素均为整数。n >= 1。
//
//
//输入格式 :
//一个正整数n,表示矩阵的阶数。
//n行、n列的矩阵元素。数据间用空格隔开。
//
//输出格式:
//一个正整数
//
//输入样例:
//3
//6 1 2
//1 13 6
//62 4 35
//
//输出样例:
//54
#include<iostream>
using namespace std;
int main()
{
int n;
int **a;
int sum = 0;
cin >> n;
a = new int*[n];
for (int i = 0; i < n; i++)
{
a[i] = new int[n];
for (int j = 0; j < n; j++)
cin >> a[i][j];
}
for (int i = 0; i < n; i++)
{
sum = sum + a[i][i];
}
cout << sum;
system("pause");
return 0;
}
//7(本题只记3分)十进制点分IP转换为32位二进制IP(3分)
//题目内容:
//编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。
//
//请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。
//
//输入格式 :
//十进制点分IP地址(英文句点)
//
//输出格式:
//32位二进制数(二进制字符串)
//
//输入样例:
//202.151.96.33
//
//输出样例:
//11001010100101110110000000100001
#include<iostream>
#include<string.h>
using namespace std;
bool correct(char *str)
{
int num = 0;
int length = strlen(str);
for (int i = 0; i < length; i++)
{
if (str[i] == '.')
{
num++;
}
}
return (num == 3 ? true : false);
}
void two2dec(int dec)
{
int Remain = 1;
int i = 7;
char str2[9] = "00000000";
while (dec != 0)
{
Remain = dec % 2;
dec = dec / 2;
str2[i] = char(Remain + 48);
i--;
}
cout << str2;
}
void transfer(char *str)
{
int length = strlen(str);
int digit = 0;
int number = 0;
for (int i = 0; i <= length;){
if (str[i] != '.' && i != length )
{
digit++;
i++;
}
else
{
for (int j = i - digit; j < i; j++){
number = 10 * number + int(str[j] - 48);
}
two2dec(number);
number = 0;
i++;
digit = 0;
}
}
}
int main()
{
char str1[100];
cin.getline(str1, 100);
if (correct(str1))
{
transfer(str1);
}
else
{
cout << "data error";
}
system("pause");
return 0;
}