求问简单的C语言字符串走马灯

字符串走马灯(20分)
题目内容:
多彩的霓虹灯点缀了我们的夜生活,很多店铺都用各式各样的霓虹灯来招徕顾客。
你是一家新店的店主,决定采用霓虹灯和传统走马灯结合的方式来展现商品信息。

走马灯的规则如下:
对于给定的字符串abc(不超过20),走马灯应该连续出现:
abc
bca
cab
abc
如此循环往复(第一行出现的字符串和最后一行的字符都和输入一模一样)
输入格式:
一个字符串,如abc
输出格式:
abc
bca
cab
abc
输入样例:
abc
输出样例:
abc
bca
cab
abc

#include <stdio.h>
#include <string.h>
int main()
{
    char a[20]={0};
    gets(a);
    int i ,temp,k;
    k=strlen(a);
    for(i=1;i<=k;i++){
        temp = a[1];
        a[1] = a[k];
        a[k] = temp;
            printf("%s\n",a);
    }
}

图片说明

#include <stdio.h>
#include <string.h>
int main()
{
    char a[20] = { 0 };
    gets_s(a,19);
    int i, temp, k, j;
    k = strlen(a);
    for (i = 0; i <= k; i++) {
        printf("%s\n", a);
        for (j = 0; j < k - 1; j++) {
            temp = a[j];
            a[j] = a[j+1];
            a[j + 1] = temp;
        }
    }
}

#include <stdio.h>
#include <string.h>
int main()
{
char a[90] = { 0 };
fgets(a,89,stdin);
int i, temp, k, j,temp1;
k = strlen(a);
for (i = 0; i < k; i++)
{printf("%s",a);

   temp=a[0];
    for (j = 0; j <k - 2; j++)
    {
        temp1=a[j];
        a[j]=a[j+1];
        a[j+1]=temp1;
    }

}

}

#include<stdio.h>
#include<string.h>
main()
{
char a[20],temp;
    int i,b,j;
    gets(a);
    b=strlen(a);
    if(b==1)
        puts(a);
    else
    for(i=0;i<=b;i++)
    {
        puts(a);
        temp=a[0];
        for(j=0;j<=b-1;j++)
        {
            a[j]=a[j+1];
        }    
        a[b-1]=temp;
    
    } 
return 0;
}

\\本人菜鸡,按照题目要求可以跑出来但是感觉优化空间很大,期待大佬的指点