C语言X天学习计划——撸码篇(二)

全篇都是很多书上的源码和一些自己模仿的代码

  • 第一个程序:百兔问题
/*
	2021年1月17日19:10:07
	百兔问题:公鸡一只值钱五,母鸡一只值钱三,小鸡三只值一块,
	用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
	《C语言从入门到精通》
*/
# include <stdio.h>

int main(void)
{
	int i, j, k;

	for (i=0; i<=20; i++)		// 公鸡只数
		for (j=0; j<=33; j++)	// 母鸡只数
		{
			k = 100-i-j;		// 小鸡只数
			
			if (5 * i + 3 * j + k / 3.0 == 100)
			printf("公鸡有%d只 母鸡有%d只 小鸡有%d只\n", i, j, k);
		}

	return 0;
}

/*
-------------------------------------------------------------------
在VC++6.0中运行结果为:
公鸡有0只 母鸡有25只 小鸡有75只
公鸡有4只 母鸡有18只 小鸡有78只
公鸡有8只 母鸡有11只 小鸡有81只
公鸡有12只 母鸡有4只 小鸡有84只
-------------------------------------------------------------------
*/
  • 第二个程序:判断大于2的整数是否为素数
/*
	2021年1月19日12:19:02
	判断大于2的数是否为素数
	《C语言从入门到精通》
*/
# include <stdio.h>

int main(void)
{
	int i, m, flag;
	flag = 1;	// 标志性变量 用于判断 m 是否为素数
	
	printf("请输入一个大于2的整数:");
	scanf("%d", &m);

	for (i=2; i<m; i++)
	{
		if (m % i == 0)
		{
			flag = 0;
			break;
		}
	}

	// 1表示是素数 ,0表示不是素数
	if (flag)
		printf("%d 该数是素数!\n", m);
	else
		printf("%d 该数不是素数!\n", m);

	return 0;
}

/*
--------------------------------------------
在VC++6.0中运行结果为:
请输入一个大于2的整数:32
32 该数不是素数!
请输入一个大于2的整数:5
5 该数是素数!
--------------------------------------------
*/
  • 第三个程序:100-200之间不能被3和7同时整除的数
/*
	2021年1月19日12:38:51
	100-200之间不能被3和7同时整除的数
	《C语言从入门到精通》
*/

# include <stdio.h>

int main(void)
{
	int i, m;
	for (i=100; i<200; i++)
	{
		if ((i % 3 == 0) && (i % 7 == 0))
		{
			continue;
		}
		
		printf("%d\t", i);
		m++;
		if (m % 10 == 0)
		{
			printf("\n");
		}
	}

	return 0;
}

/*
-----------------------------------------------------------------------------
在VC++6.0中运行结果为:
100     101     102     103     104     106     107     108     109     110
111     112     113     114     115     116     117     118     119     120
121     122     123     124     125     127     128     129     130     131
132     133     134     135     136     137     138     139     140     141
142     143     144     145     146     148     149     150     151     152
153     154     155     156     157     158     159     160     161     162
163     164     165     166     167     169     170     171     172     173
174     175     176     177     178     179     180     181     182     183
184     185     186     187     188     190     191     192     193     194
195     196     197     198     199
------------------------------------------------------------------------------
*/
  • 第四个程序:简易计算器
/*
	2021年1月19日13:48:49
	简易计算器
	《C语言从入门到精通》
*/

# include <stdio.h>

int main(void)
{
	char command_begin;		// 开始字符	Enter
	double first_number;	// 第一个数字
	char character;			// +-*/
	double second_number;	// 第二个数字
	double value;			// 运算结果
	
	printf("简易计算器\n");
	printf("在'>'后按照提示进行相关操作:\n");
	printf("是否开始?(Y/N)>");
	scanf("%c", &command_begin);		// 输入Y or N
	while ((command_begin == 'y') || (command_begin == 'Y'))
	{
		/*当接受到y或者Y时 开始执行计算器*/
		printf("请输入一个简单的算式:");
		scanf("%lf %c %lf", &first_number, &character, &second_number);
		switch (character)
		{
		case '+':
			value = first_number + second_number;
			printf("等于%lf\n", value);
			break;
		case '-':
			value = first_number - second_number;
			printf("等于%lf\n", value);
			break;
		case '*':
			value = first_number * second_number;
			printf("等于%lf\n", value);
			break;
		case '/':
			while (second_number == 0)
			{
				printf("由于除数为0 不符合算数运算请重新输入:\n");
				scanf("%lf %c %lf", &first_number, &character, &second_number);
			}
			value = first_number / second_number;
			printf("等于%lf\n", value);
			break;
		default:
			printf("非法输入!\n");
		}
		
		printf("是否继续运算(Y/N)>");
		fflush(stdin);	// 清空缓冲区
		scanf("%c", &command_begin);

	}
	
	printf("程序退出!\n");

	return 0;
}

/*
----------------------------------------------------
在VC++6.0中运行结果为:
简易计算器
在'>'后按照提示进行相关操作:
是否开始?(Y/N)>y
请输入一个简单的算式:9+4
等于13.000000
是否继续运算(Y/N)>y
请输入一个简单的算式:6/2
等于3.000000
是否继续运算(Y/N)>y
请输入一个简单的算式:6/0
由于除数为0 不符合算数运算请重新输入!
6/4
等于1.500000
是否继续运算(Y/N)>y
请输入一个简单的算式:9*5.2
等于46.800000
是否继续运算(Y/N)>y
请输入一个简单的算式:96.52-43.86
等于52.660000
是否继续运算(Y/N)>n
程序退出!
----------------------------------------------------
*/
  • 第五个程序:完数
/*
	2021年1月19日15:23:43
	1000以内所有的完数:6 = 1 + 2 + 3
	《C语言从入门到精通》
*/

# include <stdio.h>

int main(void)
{
	int i, j, sum;

	for (i=1; i<=1000; i++)
	{
		sum = 0;
		for (j=1; j<i; j++)
		{
			if (i % j == 0)
			{
				sum += j;
			}
		}
		if (sum == i)
			printf("%d 是完数\n", i);
	}

	return 0;
}

/*
-----------------------------------------
在VC++6.0中运行结果为:
6 是完数
28 是完数
496 是完数
-----------------------------------------
*/
  • 第六个程序:一维数组的和及平均值
/*
	2021年1月20日12:51:07
	一维数组的和及平均值
	《C语言从入门到精通》
*/
# include <stdio.h>
# define MAX 5		// 数组范围0-4

int main(void)
{
	int i;
	int code[MAX];
	int sum = 0;

	for (i=0; i<MAX; i++)		// 0-4
	{
		printf("请输入一个数:");
		scanf("%d", &code[i]);
	}

	for (i=0; i<MAX; i++)
	{		
		printf("code[%d] = %d\n", i, code[i]);
		sum += code[i];
	}

	printf("一维数组的和为%d, 平均值为 %.2f\n", sum, 1.0 * sum/MAX);	

	return 0;
}

/*
------------------------------------------------------------------------
在VC++6.0中运行结果为:
请输入一个数:5
请输入一个数:8
请输入一个数:9
请输入一个数:3
请输入一个数:6
code[0] = 5
code[1] = 8
code[2] = 9
code[3] = 3
code[4] = 6
一维数组的和为31, 平均值为 6.20
-------------------------------------------------------------------------
*/
  • 第七个程序:截弦法求方程的根
/*
	2021年1月22日16:25:20
	截弦法求方程的根
	求 x^3 - 5x^2 + 16x - 80 = 0 在区间[-3, 6]内的根
	《C语言从入门到精通》
*/

# include <stdio.h>
# include <math.h>

float func(float x)		
{
	float y;
	y = pow(x, 3) - 5*x*x + 16*x - 80.0f;
	return y;
}

float point_x(float x1, float x2)	// 两点连线与x 轴的交点
{
	float y;
	y = (x1 * func(x2) - x2 * func(x1)) / (func(x2) - func(x1));
	return y;
}

float root(float x1, float x2)
{
	float x, y, y1;
	y1 = func(x);
	do
	{
		x = point_x(x1, x2);
		y = func(x);
		if (y * y1 > 0)
		{
			y1 = y;
			x1 = x;
		}
		else
		{
			x2 = x;
		}
	}while(fabs(y) >= 0.0001);		// |f(x)| < ξ ξ为很小的数 程序中设为0.0001 此时 f(x) ≈ 0
	
	return x;
}

void main()
{
	float x1, x2;

	printf("请输入两个数字:");
	scanf("%f %f", &x1, &x2);
	printf("x1 = %f, x2 = %f\n", x1, x2);

	float t = root(x1, x2);
	printf("方程的根为: %f\n", t);
}

/*
--------------------------------------------------
在VC++6.0中运行结果为:
请输入两个数字:-3 6
x1 = -3.000000, x2 = 6.000000
方程的根为: 5.000000
--------------------------------------------------
*/
  • 第八个程序:该日是该年的第几天
/*
	2021年1月23日22:50:38
	该日是该年的第几天
	《C语言从入门到精通》
	目的:工程思想
*/
// control.c
# include <stdio.h>

extern int days();		// 定义外部函数
extern int year, month, day;

void main()
{
	printf("输入年、月、日:\n");
	scanf("%d%d%d", &year, &month, &day);
	printf("%d月%d日是 %d 年的第%d天\n",month, day, year, days());
}

------------------------------------------------------------------------
// day.c
int year, month, day;
int days()
{
	int i, count = 0;
	int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	if ((year % 100) && (year % 4) || (year%400))
	{
		a[2] = 29;
	}
	for (i=0; i<month;i++)
	{
		count += a[i];
	}
	count += day;
	return count;
}

/*
---------------------------
在VC++6.0中运行结果为:
输入年、月、日:
2804 5 30
5月30日是 2804 年的第151天
----------------------------
*/
  • 第九个程序:
  • 第十个程序:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想前

看客 多少意思意思

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值