您的位置:首页 > 编程语言 > C语言/C++

C++第八周mooc在线测评—第8周 按址操作(2)——指针与数组、字符串、结构体,动态数组

2016-11-06 19:23 1916 查看
//利用指针输出数组中的元素(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个 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
;
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*
;

for (int i = 0; i < n; i++)
{
a[i] = new int
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: