第8周编程练习(nfuifbefe)

1输出数字的英文名称(20分)
题目内容:

编写一个函数,将表示数字的数值(0-12)转换成对应的英文名称(小写)。用户输入阿拉伯数字,程序输出对应数的英文单词。要求必须使用指针数组完成。

输入格式:

0-12的数

输出格式:

输入数字对应的英文单词,均为小写字母

【提示】:函数格式: char * digitName(int n);

输入样例:

1

输出样例:

one

//输出数字的英文名称
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int N;
	cin >> N;
	char str[][10] = { "zero","one", "two", "three" ,"four","five","six","seven","eight","nine","ten","eleven","twelve" };
	char(*p)[10] = str;
	cout << p[N];
	return 0;
}

2去除字符串首尾多余的空格(20分)
题目内容:

用户输入一个字符串,首尾有多余的空格,编写程序来去除这些多余的空格。要求必须使用指针来完成本题。

输入格式:

一个首尾有多余空格字符串。为了便于标识出尾部的空格,在字符串尾部额外添加了个#号表示字符串结束。字符串内部保证不会出现#号。

输出格式:

去除空格后的字符串,同样在在字符串尾部额外添加了个#号表示字符串结束。

输入样例:

my score #

输出样例:

my score#

//去除字符串首尾多余的空格
#include<iostream>
using namespace std;
char * deletespace(char*);
int main()
{
	char s[100];
	cin.getline(s, 100, '\n');
	char *p=deletespace(s);
	cout << p;
	return 0;
}
char *deletespace(char* s)
{
	char* q = s;
	char* p = s;
	while (*p == ' ')
		p++;//去掉前面的空格
	while (*q!='#')
		q++;//q指向末尾
	q--;
	while (*q == ' ')
		q--;//从后往前
	*(q + 1) = '#';
	*(q + 2) = 0;
	return p;
}

3遍历二维数组(20分)
题目内容:

用户首先输入两个整数m和n,然后输入mn个元素,建立一个mn的二维数组。要求使用 行指针 来遍历这个二维数组,输出该数组中所有元素的和。

输入格式:

首先输入两个整数m和n,然后依次输入m*n个元素

输出格式:

二维数组中所有元素的和

输入样例:

2 3

1 3 5

2 4 6

输出样例:

21

提示:动态申请二维数组的方法

//动态申请大数组
#include<iostream>
using namespace std;
int* new_array(int n); //该函数可以根据参数n动态申请n个元素的整型数组,最后将数组指针返回。
void init_array(int* p, int n, int c); //将指定的n个元素的数组每个元素的值均初始化为c。
int main()
{
	int* p;
	int n, c;
	cin >> n >> c;
	p = new_array(n);
	init_array(p, n, c);
	for (int i = 0; i < n - 1; i++)
		cout << p[i] << " ";
	cout << p[n-1];
	delete[] p;
	return 0;
}
int* new_array(int n)
{
	int* 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;
}

5矩阵对角线元素之和(20分)
题目内容:

编写函数,求n阶方阵的对角线元素之和。编写主程序,用户输入矩阵的阶数n,动态申请n*n的存储空间,再输入n行、n列的元素,调用函数求矩阵的对角元素之和,在主函数中输出这个和。设元素均为整数。n>=1。

函数格式:int sumDiagonal(int *a,int n);

输入格式:

一个正整数n,表示矩阵的阶数。

n行、n列的矩阵元素。数据间用空格隔开。

输出格式:

一个整数

输入样例:

3

6 1 2

1 13 6

62 4 35

输出样例:

54

//矩阵对角线元素之和
#include<iostream>
using namespace std;
int** new_array(int n);//动态申请n*n的空间
void input(int**, int);//输入数据
int getsum(int**, int);//计算对角线元素之和
void mydelete(int**, int);//释放空间
int main()
{
	int n;
	cin >> n;
	int** p;
	p = new_array(n);
	input(p, n);
	int sum = getsum(p, n);
	cout << sum;
	mydelete(p, n);
	return 0;
}
int** new_array(int n)
{
	int** p;
	p = new int* [n];
	for (int i = 0; i < n; i++)
		p[i] = new int[n];
	return p;
}
void input(int** p, int n)
{
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> p[i][j];
}
int getsum(int** p, int n)
{
	int sum = 0;
	for(int i=0;i<n;i++)
		for (int j = 0; j < n; j++)
		{
			if (i == j)
				sum += *(*(p + i) + j);
		}
	return sum;
}
void mydelete(int** p, int n)
{
	for (int i = 0; i < n; i++)
		delete[] p[i];
	delete[] p;
}

6(本题只记3分)十进制点分IP转换为32位二进制IP(3分)
题目内容:

编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。

请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。

输入格式:

十进制点分IP地址(英文句点)

输出格式:

32位二进制数(二进制字符串)

输入样例:

202.151.96.33

输出样例:

11001010100101110110000000100001

提示:十进制转换为二进制。对整数部分,除2取余,直到商为0。例如

13/2=6…1(低位)

6/2=3…0

3/2=1…1

1/2=0…1

转换后的二进制数位1101

//十进制点分IP转换为32位二进制IP
#include<iostream>  
using namespace std;
int main()
{
    char ch[33];
    char s[100], * p;
    int a[4], n, l = 0, i;
    cin.getline(s, 99);
    p = s;//p指向s的第一个字符
    for (i = 0; i < 4; i++)
    {
        if ((*p > '9' || *p < '0') && *p != '.')
            break;
        n = 0;
        while ((*p) != '.' && *p != 0)
        {
            n = n * 10 + *p - 48;
            p++;
        }
        a[i] = n;
        if (*p == '.' && *(p + 1) == '.')
            break;

        if (i == 3 && *p != 0)
            i++;

        p++;
    }
    if (i == 4)
    {

        for (int k = 0; k < 4; k++)
        {
            int t = k * 8;
            for (int j = 7; j >= 0; j--)
            {
                ch[t + j] = a[k] % 2 + 48;
                a[k] = a[k] / 2;
            }
            if (a[k] != 0)
            {
                cout << "data error" << endl;
                l = 1;
                break;
            }

        }

        if (l == 0)
        {
            ch[32] = '\0';
            cout << ch << endl;
        }
    }
    else
        cout << "data error" << endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值