12-20学习记录

  今天练习了一些新代码包括

  一.编写一个函数,它从一个字符串中提取一个子字符串。

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

int substr(char dst[], char src[], int start, int len)
{
	assert(dst);
	assert(src);
	int i = 0;
	for (i = 0; i < len; i++)
	{
		dst[i] = src[start - 1];
		start++;
	}
	dst[i] = 0;
	printf("\n复制的字符串为:");
	for (i = 0; i < len; i++)
	{
		printf("%c", dst[i]);
	}
	return (strlen(dst));
}
int main()
{
	int i = 0;
	int flag = 1;
	int start = 0;
	int len = 0;
	char dst[10], src[10];
	printf("请输入字符串(小于十个字符):");
	while (flag)
	{
		scanf("%c", &src[i]);
		if (src[i] == '\n')
		{
			flag = 0;
		}
		i++;
	}
	printf("\n请输入从第几个字符开始复制:");
	scanf("%d", &start);
	printf("\n请输入要复制几个字符:");
	scanf("%d", &len);
	printf("\n复制的字符串长度为:%d\n", substr(dst, src, start, len));
	system("pause");
	return 0;
}

  二.有一个分数序列 2/1+3/2+5/3+8/5+13/8+…求出这个数列前 20 项的和。  

#include<stdio.h>

int main()
{
	float dem = 2.0, num = 1.0, sum = 0.0;
	int n = 0;
	printf("请输入n=");
	scanf("%d", &n);
	for (num = 1; num <= n; num++)
	{
		sum += dem / num;
		dem += num;
	}
	printf("%f\n", sum);
	system("pause");
	return 0;
}

  三.一个球从 100 米高的地方自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。

求第10次落地时,共经过多少米,第 10 次反弹多高。

#include<stdio.h>

int main()
{
	float high = 100.0, dis = 0.0;
	int n = 10;
	for (n = 0; n < 10; n++)
	{
		dis += high + high / 2.0;
		high /= 2.0;
	}
	printf("high=%f\n", high*2);
	printf("distance=%f\n", dis-high/2.0);
	system("pause");
	return 0;
}

  四.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个。第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个,到第 10 天早上想再吃的时候,就剩下一个桃子。求第一天共摘多少个桃子。

#include<stdio.h>

int main()
{
	int num = 1;
	int i = 0;
	for (i = 0; i < 9; i++)
	{
		num = (num + 1) * 2;
	}
	printf("num=%d\n", num);
	system("pause");
	return 0;
}

  五.实现一个函数,将一个数的二进制序列逆序,然后输出逆序所得二进制序列所对应的数字。

#include<stdio.h>

unsigned int reverse_bit(unsigned int num)
{
	int i = 0;
	unsigned int nnum = 0;
	for (i = 0; i < 32; i++)
	{
		if (num % 2 == 1)
		{
			nnum=nnum << 1;
			nnum = nnum | 1;
		}
		else
		{
			nnum=nnum << 1;
		}
		num /= 2;
	}
	return nnum;
}

int main()
{
	unsigned int num = 0;
	printf("num=");
	scanf("%d", &num);
	unsigned int ret = reverse_bit(num);
	printf("逆序数字为:%u\n", ret);
	system("pause");
	return 0;
}

  收获很多,有时候还是犯一些低级错误。继续努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值