目录
前言
一个程序的执行主要包含两方面消息:对数据的描述(数据结构)和对操作的描述(算法)。数据是操作的对象,操作的目的是对数据进行加工,以得到期望的结果。通过C语言的语句把程序描述出来让计算机理解并执行,就是学习C程序设计的目的。
一、结构
在C语言中,一个程序由一个或多个源程序文件组成,而一个源程序文件通常包括3个部分:
1、预处理指令
#include <标准头文件> //包含头文件
#define 宏名 值 //创建宏定义
2、声明
类型名 变量名; //数据声明
类型名 函数名(形参列表); //函数声明
3、函数定义
int main() //主函数(入口),一个C程序有且只有一个main函数
{
语句; //执行语句
……
return 0; //返回值
}
类型名 函数名(形参列表) //自定义函数
{
语句; //执行语句
……
return 表达式; //返回值,void型无需返回值
}
二、数据
在C语言中,数据有常量和变量两种表现形式,用数据类型加数值表示。
三、算法
为了提高算法的质量,使算法的设计和阅读方便,人们规定出3种基本结构,然后由这些基本结构按一定规律组成一个算法结构。
1、顺序结构
语句1;
语句2;
……
语句n;
2、选择结构
/*条件语句*/
if(表达式) //表达式值为真时,执行下列花括号内语句
{
语句;
……
}
else //表达式值为假时,执行下列花括号内语句
{
语句;
……
}
/*开关语句*/
switch(表达式) //根据表达式的值选择相应语句执行
{
case 常量1: 语句1; break;
case 常量2: 语句2; break;
……
case 常量n: 语句n; break;
default: 语句n+1; //找不到相应条件是执行此语句
}
3、循环结构
/*先判断再执行*/
while(表达式) //表达式值为真时,执行下列花括号内语句
{
语句;
……
}
/*先执行再判断*/
do
{
语句;
……
}
while(表达式) //表达式值为真时,执行上述花括号内语句
/*按次数循环*/
for(表达式1; 表达式2; 表达式3) //先执行表达式1,判断表达式2真假
{ //执行完花括号内语句后执行表达式3
语句;
……
}
四、范例
用C语言解决蓝桥杯——等差素数列问题
问题说明
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
设计思路
该项目采用枚举法计算结果
1、定义一个数组prime。当其序号是素数时,赋值为1;当其序号不是素数时,赋值为0。
2、利用循环结构寻找等差数列(算术级数 arithmetic progression)。按从小到大的顺序搜索公差为d的数列,用数组prime[i]的值判断数列成员是否为素数,并用变量len记录当前数列的长度。
3、若长度等于10时,则结束循环,输出当前数列公差。
4、若全部搜索完毕后,长度小于10,则初始化变量len,公差自增,重复第2个步骤。
程序代码
/*预处理指令*/
#include <stdio.h>
/*全局变量声明*/
const int RANGE = 10001; //定义搜索范围
const int LENGTH = 10; //定义数列长度
/*主函数定义*/
int main()
{
//获得素数数组prime,下标为素数时,其值为1;下标为非素数时,其值为0
int prime[RANGE] = {0}; //定义整型数组prime,所有元素赋值为0
for (int i = 2; i < RANGE; i++) //将数组从下标为2的元素开始,全部赋值为1
prime[i] = 1;
for (int i = 2; i < RANGE; i++) //通过两重循环,将非素数赋值为0
for (int j = 2; j <= i/2; j++)
{
if (i % j == 0)
prime[i] = 0;
}
//搜索长度为LENGTH的等差素数列
for (int i = 2; i < RANGE; i++) //枚举素数列首项
for (int d = 2; d < RANGE/LENGTH; d++) //枚举公差
{
int len = 0; //定义数列长度计数变量
for (int j = 0; j < LENGTH; j++) //计算数列长度
{
if (prime[i + d * j])
len++;
else
break;
}
if (len == LENGTH) //判断数列长度是否符合条件
{
printf("%d", d);
return 0;
}
}
}