//在屏幕上输出以下图案
//*
//***
//*****
//*******
//*********
//***********
//*************
//***********
//*********
//*******
//*****
//***
//*
//思路:
//先将’‘最多的一行以字符串的形式保存起来;
//再通过指针指向该字符串位置的改变来改变打印’'的数目:
//使该指针指向字符串末尾,通过指针前移改变指针指向字符串的长度,
//指针位置每改变2,打印输出指针指向字符串,
//直到指针指向字符串的长度大于该字符串的长度;
//最后通过指针后移,改变指针指向该字符串的长度,
////指针位置每改变2,打印输出指针指向字符串,
//直到指针指向该字符串的长度小于0;
#include<stdio.h>
#include<stdlib.h>
//打印函数
void Print(char str[],int len){
int n = len; //定义一个变量n,保存字符串原始长度
char *p = str + sizeof(str[0])*len; //使指针p指向字符串的末尾(即*p等于'\0')
char *q; //定义一个辅助输出指针q
/*通过指针p逆向移动使输出的*由少至多*/
while (len > 0){ //若len大于0
--p; //指针p向前移
--len; //字符串长度减1
q = p; //使指针q指向p
printf("%s\n", q); //打印输出指针q指向的字符串
--p; //指针p向前移
--len; //字符串长度减1
}
//通过指针p正向移动使输出的*由多至少
while ( len < n ){ //若len小于n
++p; //指针p向后移
++len; //字符串长度加1
q = p; //使指针q指向p
if (len > 0){ //若字符串长度大于0(即跳过q指向str[0]时的输出)
printf("%s\n", q); //打印输出指针q指向的字符串
}
++p; //指针p向后移
++len; //字符串长度加1
}
}
//主函数
int main(){
char str[] = "*************"; //定义字符串,并赋值
int len = strlen(str); //获取字符串长度,并保存
Print(str,len); //调用打印函数
system("pause");
return 0;
}
本文介绍了一种使用C语言指针技巧打印金字塔图案的方法。通过定义一个包含最多星号'*'的字符串,利用指针指向该字符串的不同位置,控制星号的输出数量,从而形成金字塔形状。文章详细解释了指针的逆向和正向移动过程,以及如何通过改变指针位置来调整输出图案。
849

被折叠的 条评论
为什么被折叠?



