C语言:基础——程序的初步设计

目录

前言

一、结构

二、数据

三、算法

四、范例

问题说明

设计思路

程序代码

运行结果


前言

一个程序的执行主要包含两方面消息:对数据的描述(数据结构)和对操作的描述(算法)。数据是操作的对象,操作的目的是对数据进行加工,以得到期望的结果。通过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;
            } 
        }
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值