C语言代码练习

1、写一个函数,可以逆序一个字符串的内容。

#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>

void reverse(char* str)
{
	int sz = 0;
	sz = strlen(str);
	char* left = str;
	char* right = str+sz-1;
	for (; left <= right;)
	{
		char temp = 0;
		temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main()
{
	char arr[256] = { 0 };
	//scanf("%s", arr);//读取到空格停止
	gets(arr);//读取输入一行的数组,不关注有无空格
	//逆序函数
	reverse(arr);
	printf("arr:%s\n", arr);
	return 0;
}

2、求sn = a+aa+aaa+aaaa+aaaaa的5项之和,其中a是一个数字。

int main()
{
	int a = 0;
	int n = 0;
	scanf("%d%d", &a,&n);
	int i = 0;
	int ret = 0;
	int sn = 0;
	for (i = 0; i < n; i++)
	{
		ret = ret * 10 + a;
		sn += ret;
	}
	printf("%d", sn);
	return 0;
}

3、打印1—10000之间的自幂数(自幂数:它的每个位上的字的 n(位数)次幂之和等于它本身)。

#include <math.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 10000; i++)
	{
		//判断是不是自幂数
		//1.判断位数
		int n = 1;
		int tmp = i;
		int sum = 0;
		while (tmp /= 10)
		{
			n++;
		}
		//2.计算i的每位数的n次方之和
		tmp = i;
		while (tmp)
		{
			sum += pow(tmp % 10,n);
			tmp /= 10;
		}
		//3.比较
		if (i == sum)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

4.打印菱形。

int main()
{
	int line = 0;
	scanf("%d", &line);
	//打印上半部分
	int i = 0;
	for (i = 0; i < line; i++)
	{
		int j = 0;
		int tmp = line;
		for (j = 0; j < tmp-1-i; j++)
		{
				printf(" ");
		}
		for (j = 0; j <(2*i+1) ; j++)
		{
			printf("*");
		}
		printf("\n");
	}
    //打印下半部分
	for (i = 0; i < line-1; i++)
	{
		int j = 0;
		int tmp = line;
		for (j = 0; j <( i + 1 ); j++)
		{
			printf(" ");
		}
		for (j = 0; j < (2*(line-i))-3 ; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

5.题目内容:
 实现一个函数, 可以左旋字符中的x个字符。
 例如:
 ABCD 左旋一一个字符得到BCDA
 ABCD 左旋两个字符得到CDAB
旋转字符串

void left_move(char* arr, int x)
{	
    int i = 0;
	int len = strlen(arr);
	for (i = 0; i < x; i++)
	{
		char tmp = *arr;

		int j = 0;
		for (j = 0; j < len-1; j++)
		{
			*(arr + j) = *(arr + j + 1);
		}
		*(arr + len - 1) = tmp;
	}
}

int main()
{
	char arr[] = "abcdef";
	//char tmp = 0;
	//scanf("%d", &tmp);
	left_move(arr, 2);
	printf("%s\n" , arr);

	return 0;
}

6.写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1=AABCD和s2 = BCDAA, 返回1
给定s1= abcd和s2= ACBD ,返回0。
AABCD 左旋一个字符得到ABCDA
AABCD 左旋两个字符得到BCDAA
AABCD 右旋一个字符得到DAABC

#include <string.h>
#include <string.h>
#include<stdio.h>

void left_move(char* arr, int x)
{	
    int i = 0;
	int len = strlen(arr);
	for (i = 0; i < x; i++)
	{
		char tmp = *arr;

		int j = 0;
		for (j = 0; j < len-1; j++)
		{
			*(arr + j) = *(arr + j + 1);
		}
		*(arr + len - 1) = tmp;
	}
}

int compre(char* s1,char* s2)
{
	int len = strlen(s1);
	int i = 0;
	for (i = 0; i < len; i++)
	{
		left_move(s1, 1);
		int ret = strcmp(s1, s2);
		if (ret == 0)
			return 1;
	}
	return 0;
}

int main()
{
	char arr[] = "abcdef";
	char arrs[] = "cdefab";
	int ret = compre(arr, arrs);
	if (ret = 1)
		printf("yes\n");
	else
		printf("no\n");
}

 7.5位运动员参加

了10米台跳水比赛,有人让他们预测比赛结果。
A选手说:B第二,我第三
B选手说:我第二,E第四
C选手说:我第一,D第二
D选手说:C最后,我第三
E选手说:我第四,A第一
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;
	for (a = 0; a <= 5; a++)
	{
		for (b = 0; b <= 5; b++)
		{
			for (c = 0; c <= 5; c++)
			{
				for(d = 0; d <= 5; d++)
				{
					for (e = 0; e <= 5; e++)
					{
						if (((b == 2) + (a == 3) == 1)
							&& ((b == 2) + (e == 4) == 1)
							&& ((c == 1) + (d == 2) == 1)
							&& ((c == 5) + (d == 3) == 1)
							&& ((e == 4) + (a == 1) == 1))
						{
							if(a*b*c*d*e==120)
								printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
						}
					}
				}
			}
		}
	}

	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值