使用指针打印数组
#include <stdio.h>
int main()
{ int a[]={1,2,3,4,5,6,7};
int *p=a;
int i=0;
int n=sizeof(a)/sizeof(a[1]);
while (i<n)
{
printf("%d ",*(p+i));
i++;
}
return 0;
}
字符串逆序利用指针实现
#include <stdio.h>
int main()
{ char a[]="abcdefg";
char *p=a;
int i=0;
int len=sizeof(a)/sizeof(a[1]);
int left=0;
int right=sizeof(a)/sizeof(a[1]);
char temp;
while (i<len)
{
printf("%c ",*(p+i));
i++;
}
i=0;
while (i<=(len/2))
{
temp=*(p+right);
*(p+right)=*(p+left);
*(p+left)=temp;
right--;
left++;
i++;
}
i=0;
while (i<=len)
{
printf("%c ",*(p+i));
i++;
}
return 0;
}
计算求和
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
#include <stdio.h>
int main()
{ int a;
int b;
int n;
int i;
int sum;
printf("请输入数字和计算次数:\n");
scanf("%d %d",&a,&n);
b=a;
for(i=1;i<=n;i++)
{
if(i==n)
{
printf("%d=",b);
sum=sum+b;
} else
{
printf("%d+",b);
sum=sum+b;
b=b*10+a;
}
}
printf(" %d",sum);
return 0;
}
打印水仙花数
#include <stdio.h>
#include <math.h>
double countnum(int x)
{ double count=0.0;
while (x)
{
count++;
x=x/10;
}
return count;
}
int thirdmath(int x)
{
int a[6]={0};
int i;
int *p=a;
int sum=0;
int n=countnum(x);
for(i=0;i<6;i++)
{
*(p+i)=0;
}
i=0;
while (x)
{
*(p+i)=x%10;
x=x/10;
i++;
}
for(i=0;i<6;i++)
{
sum=sum+pow(*(p+i), n);
}
return sum;
}
int main()
{ int a;
int i;
printf("100000内水仙花数有:");
for(i=1;i<=100000;i++)
{
countnum(i);
if (i==thirdmath(i))
{
printf(" %d ",i);
}
}
return 0;
}
打印菱形
参考
#include <stdio.h>
int main()
{
int n = 0;
//输入一个奇数
scanf("%d", &n);
int down = n / 2; //上半部分的行数
int up = n - down; //下半部分的行数
//打印上半部分
for (int i = 0; i < up; i++) //控制行
{
//打印空格
//通过规律可以发现是up - 1 - i
for (int j = 0; j < up - 1 - i; j++)
{
printf(" ");
}
//打印 *
//因为*是奇数且递增的,所以也不难发现是2 * i + 1
for (int j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
//切记每打完一行都要换行
printf("\n");
}
//打印下半部分
for (int i = 0; i < down; i++) //控制下半部分的行
{
//打印空格
//空格的个数恰好就是下半部分的行数
for (int j = 0; j <= i; j++)
{
printf(" ");
}
//打印 *
//这个规律也不难发现。它是奇数且递减
for (int j = 0; j < 2 * (down - i) - 1; j++)
{
printf("*");
}
//打印完一行别忘记换行
printf("\n");
}
return 0;
}