C语言头歌educoder实训作业答案分享 指针(二)

第1关:字符串与指针

任务描述

本关任务:进行字符串的循环左移。

字符指针与字符数组

字符指针与字符数组的区别在于,字符指针只保存有某一个字符串的地址,而字符数组则是存下了整个字符串。

编程要求

字符串的循环左移,指的是将字符串整体向左移动,左部超出范围的字符回到右边,比如对于字符串123,它循环左移1位的结果是231。

在右侧编辑器中有一个函数Shift,它有两个参数str和n,str存有一个字符串,n为要左移的距离,为非负数。

请在这个函数中,将str循环左移n位,然后输出,占一行。

输入数据由评测系统读取,并传递给Shift函数。具体见测试说明。

测试说明

测试输入:123 1 预期输出:231

测试输入:abc 0 预期输出:abc

每组输入一行,有两个数据,分别对应str和n。

#include <iostream>
#include<cstring>
using namespace std;

/**********   Begin   **********/
//可在此添加其他内容

void Shift(char *str,int n)
{
	int len = 0,i;
	len = strlen(str);
	n %= len;
	while(n--){
		char tmp = str[0];
		for(int i=0;i<len-1;i++){
			str[i] = str[i+1];
		}
		str[len-1] = tmp;
	}
	cout << str << endl;
	//补充代码完成功能
}
/**********   End   **********/

第2关:指针与二维数组

相关知识

数组变量的类型

编程要求

之前我们学习过基于数组的矩阵加法,这次希望你能用指针完成。

右侧编辑器中有一个函数Add,请在这个函数中读取输入数据,计算并输出结果。

输入数据由学员读取,每组输入数据有三行,第一行是这两个矩阵的行、列数,第二行是第一个矩阵的内容,第三行是第二个矩阵的内容。

要求输出也是按照矩阵的格式输出,每一列后面有一个空格(包括最后一列)。具体见测试说明。

测试说明

平台会对你编写的代码进行测试:

测试输入: 2 2 1 2 3 4 1 1 1 1

预期输出: 2 3 4 5

#include <iostream>
using namespace std;

void Add()
{
	/**********   Begin   **********/
	int i,j,i1,j1,t,t1=0,*prt_a[2];
    scanf("%d",&i);
    scanf("%d",&j);
    prt_a[0]=(int*)malloc(i*j*sizeof(int));
    prt_a[1]=(int*)malloc(i*j*sizeof(int));
    for (i1=0,t1=0;i1<i;i1++)
    {
        for (j1=0;j1<j;j1++)
        {
            scanf("%d",&t);
            *(prt_a[0]+t1)=t;
            t1++;
        }
    }
    for (i1=0,t1=0;i1<i;i1++)
    {
        for (j1=0;j1<j;j1++)
        {
            scanf("%d",&t);
            *(prt_a[1]+t1)=t+*(prt_a[0]+t1);
            t1++;
        }
    }
    for (i1=0,t1=0;i1<i;i1++)
    {
        
        for (j1=0;j1<j;j1++)
        {
            printf("%d ",*(prt_a[1]+t1));
            t1++;
        }
        printf("
");
    }
	/**********   End   **********/
}
经验分享 程序员 微信小程序 职场和发展