C代码练手记录之一

 C类语言是面向机器和算法的语言,对于了解计算机的底层原理有很大帮助,C类语言的鼻祖C语言以其语法简单,关键字不多,支持位运算,且拥有指针的加持,使得这类语言在底层开发中的应用不可或缺,是建造其他很多高级语言的基本元素,但这类语言不大适合做面向业务的开发,虽然用这类语言也是可以实现的,但效率很低,但C类语言作为最能展现计算机运作原理的高级语言,一直以来都是作为计算机工业的底层驱动力推动和伴随着计算机的行业的发展。C语言在计算机历史上的重要作用和地位无可撼动,学习这类语言其实还是蛮愉快的,很多人还没有入门就放弃了,的确很可惜。

C代码的可读性不是很好,这也是C代码的灵活性带来的另一种副作用,但C代码通过规范的书写是可以规避很多晦涩难懂的书写方式的,常常看C的代码的话,其实也没觉得和其他语言书写的代码有太多的差异,熟能生巧,常常用的东西,自然不会感觉太难懂。读别人的代码,难懂的部分通常是不清楚作者通篇的思路和局部处理的着眼点在哪里,这和学习写作是一样的,多读多练,读写能力就自然慢慢提高了。

下面部分代码实现的功能:是从键盘接收一个受限长度的字符串,回车为结束符,另一个函数的功能是从给定的数组中找出M个元素(0<M<4),如果元素的和与SUM相等,输出这些元素的下标。

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

#define character_len 32

#define str_len character_len+1

int input_name(char*);

int choose(int,int);

int main(int argc, char** argv) {
	char name[str_len] = { '\0' };
	//输入姓名
	while (input_name(name))
	{
		puts("please input your name!");
	}
	choose(atoi(argv[1]), atoi(argv[2]));
	return 0;
}
/*
获取键盘输入的字符
*/
int input_name(char* str) {
	int i = 0, asc = 0;
	while (i < (str_len - 1))
	{
		asc = getchar();
		if (asc == '\n')
		{
			break;
		}
		else
		{
			str[i] = asc;
			i++;
		}

	}
	if (str[0] == '\0')
	{
		return 1;
	}
	printf("%s\n", str);
	return 0;
}

/*
从给定的数中,选取M个数字,它们的和等于SUM,输出下标值
*/
int choose(int M,int SUM) {
	int num[] = { 8,9,3,1,6,18,5,3,15,99,9,18,1000,15,500 };
	int len = sizeof(num) / sizeof(int);
	int i = 0;
	if (M == 1)
	{
		while (i < len)
		{
			if (num[i] == SUM) {
				printf("%2d,", i);
			}
			i++;
		}
		printf("\b \n");
	}
	if (M == 2)
	{
		for (size_t i = 0; i < len; i++)
		{
			if (num[i] >= SUM)continue;
			int another = SUM - num[i];
			for (size_t j = i + 1; j < len; j++)
			{
				if (num[j] == another)
				{
					printf("%d-%d\n", i, j);
				}
			}
		}
	}
	if (M == 3)
	{
		for (size_t i = 0; i < len; i++)
		{
			if (num[i] >= SUM) continue;
			int another = SUM - num[i];
			for (size_t j = i + 1; j < len; j++)
			{
				if (num[j] >= another) continue;
				int end = another - num[j];
				for (size_t k = j + 1; k < len; k++)
				{
					if (num[k] == end)
					{
						printf("%d-%d-%d\n", i, j, k);
					}
				}
			}
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值