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 **********/
}
