linuxC学习第十三天

今天对昨天的字符数组进行实际数据编写

一、对一组字符串中的词组进行逆序

#include <stdio.h>

int len(char *pa)							//计算数组长度
{
	int len=0;
	
	while(*(pa++))
	{
		len++;	
	}
	
	return len;
}
	
void f(char *left,char *right)			//单词逆序
{
	while(left<right)
	{
		char temp=*right;
		*right=*left;
		*left=temp;
		left++;
		right--;
	}
}

char *f1(char *pa)
{	
	if(pa == NULL)
		return;
	
	char *first=pa;
	char *last=pa+len(pa)-1;

	while(*pa)									//找到空格前面的单词,将其单词的首位和末尾开始逆序
	{	
		char *p1=pa;							//p1是单词首位,pa是用了判断是否到空格,也就是单词的末尾
		while(*pa != ' ' && *pa != '\0')
		{
			pa++;	
		}
		f(p1,pa-1);
		
		if (*pa != '\0')
		{
			pa++;
		}
		else								    //判断数组是否结束
			break;		
	}
	f(first,last);							    //将整个数组的单词逆序
	
	return first;
}


int main()
{
	char a[]="i am a good boy";

	printf("%s\n",f1(a));
	
	return 0;
}

编写思路:先利用2个指针找到数组的第一个位置和最后一个位置,将其中的所有单词进行逆序排列。在用一个新的指针指向数组开头,将其往后移,找到是空格并且不是‘\0’的位置,在将这空格前的所有单词逆序。

二、一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数

#include <stdio.h>

void f(int i,int j)
{
	for(i=3;i<=1000;i++)
	{	
		int sum=1;
		for(j=2;j<i;j++)
		{
			if(i%j==0)
			{	
				sum+=j;
			}
		
		}
		if(sum == i)
		{
			printf("%d\n",i);
		}
	}
}

int main()
{	
	int i,j;
	
	f(i,j);
	
	return 0;
}

这题只要明白因数比原来的数,运用for循环将从2开始的数看是否能整出,找出因数。

三、编写程序,打印菱形星号组合(菱形中间空心)

#include <stdio.h>

void f(int n)
{
	int i,j;
	
	for(i=n;i>=-n;i--)									   //确定菱形的行数
	{	
		int m=i;
		if(m<0)
			m=-m;											//m<0是菱形下半部分
		for(j=0;j<2*n+1;j++)
		{	
			if((j == m) || (j == n*2-m))   				//(j == m)是上半部分的‘*’, (j == n*2-m)是下半部分的‘*’
				printf("*");
			else
				printf(" ");
		}
		printf("\n");	
	}
}

int main()
{
	int n;
	scanf("%d",&n);
	
	f(n);
	
	return 0;
}

思路:n是菱形上半部分和下半部分的行数,运用for循环打印出对应的‘*’位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值