C 三种基本结构程序设计

一、顺序结构程序设计

所谓的顺序结构程序设计,就是按照解决问题的顺序写出相应的语句即可.如下图示:
在这里插入图片描述
例题:将华氏温度转为摄氏温度:
步骤:
<1>输入华氏温度
<2>代入公式 t = 5 / 9 ( f − 32 ) t=5/9(f-32) t=5/9(f32)
<3>输出结果t
程序:

#include<stdio.h>
int main()
{
	float t,f;
	printf("请输入华氏温度f:\n");
	scanf("%f", &f);
	t = (5.0/9)*(f - 32);
	printf("f = %f\nt = %f\n", f, t);
	return 0;
}

结果:
在这里插入图片描述
以上程序若是在VS上运行时会编译不通过,可通过以下两种方法解决:
<1>将scanf改成scanf_s
<2>或者是在开头添加 #define _CRT_SECURE_NO_WARNINGS

二、选择结构程序设计

由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要再进行下一个操作之前先要进行条件判断,C语言有两种选择语句:
<1>if 语句,用来实现两个分支的选择结构
<2>switch 语句,用来实现多分支的选择结构

在这里插入图片描述

用if语句实现选择结构

例题:输入两个整数,按从小到大的顺序输出

#include<stdio.h>
int main()
{
	int a, b, tmp;
	printf("请输入两个数:\n");
	scanf("%d %d",&a, &b);
	if (a > b)
	{
		tmp = a;
		a = b;
		b = tmp;
	}
	printf("%d %d\n",a, b);
	return 0;
}

结果:
在这里插入图片描述

if语句的一般形式

/*一般形式
if(表达式) {语句1}
[else {语句2}]

根据if语句的一般形式,if语句有最常用的三种形式
<1>有else子句部分
if(表达式) {语句1}
else {语句2}

<2>无else子句部分
if(表达式) {语句1}

<3>在else部分又嵌套了多层的if语句
if(表达式1) {语句1}
else if(表达式2) {语句2}
else if(表达式3) {语句3}
.......
else if(表达式n) {语句n}
else            {语句n+1}
*/
  • 其中,表达式可以是关系表达式、逻辑表达式,甚至是数值表达式等
  • []中的语句可有可无

用switch实现多分支的选择结构

废话不多说,上个简单的例子:
要求按照考试成绩输出百分制分数段,90-100 A,80~89 B,70-79 C,60-69 D,60以下为E.

#include<stdio.h>
int main()
{
	char score;
	printf("Please Input Your Score:");
	scanf("%c", score);
	printf("Your Score:");
	switch (score)
	{
		case 'A': printf("90~100\n");break;
		case 'B': printf("80~89\n");break;
		case 'C': printf("70~79\n");break;
		case 'D': printf("60~69\n");break;
		case 'E': printf("<60\n");break;
		default:  printf("Enter Data Error!\n");
	}
	return 0;
}

结果:
在这里插入图片描述
由这个例题可以看出:switch语句的作用是根据表达式的值,是流程跳转到不同的语句.

switch语句的一般形式

/*
switch(表达式)
{
	case 常量1: 语句1;
	case 常量2: 语句2;
	......
	case 常量n: 语句n;
	default:    语句n+1;
}
*/

说明:
<1> ()中的表达式,其值的类型应为整数类型(包括字符型).
<2> case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置;执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句.
<3>在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句.

更加详细说明可见“《C语言程序设计》 谭浩强 著 第四版“第103-104页.

三、循环结构程序设计

while循环

在这里插入图片描述
一般形式:

/*
while(表达式)
{
	语句;
}
*/

其中,表达式为循环条件,语句为循环体.当此循环条件为真(非0)时,执行循环语句,当为假(0)时,就不执行循环体.
特点:先判断条件表达式,再决定是否执行循环体.
例题:求1+2+3+4+…+100.

#include<stdio.h>
int main()
{
	int n, sum = 0, i = 1;
	printf("请输入数字:");
	scanf("%d", &n);
	while (i <= n)
	{
		sum = sum + i;
		++i;
	}
	printf("sum为: %d\n", sum);
	return 0;
}

结果:
在这里插入图片描述

do…while循环

在这里插入图片描述
一般形式:

/*
do
{
	语句
}
while (表达式)
*/

特点;先无条件的执行循环体,然后判断循环条件是否成立.
用do…while循环求1+2+3+4+…+100.

#include<stdio,h>
int main()
{
	int n, i = 1, sum = 0;
	printf("请输入数字:");
	scanf("%d", &n);
	do
	{
		sum = sum + i;
		i++;
	}
	while (i < n);
	printf("sum为:%d\n", sum);
}

结果:
在这里插入图片描述

用for语句实现循环

在这里插入图片描述
for语句的一般形式:

/*
for(表达式1; 表达式2; 表达式3) 
{
	语句;
}
*/

3个表达式的主要作用;
表达式1:设置初始条件,只执行一次.可以为零个、一个或多个变量设置初值.
表达式2;是循环条件表达式,在每次执行循环体前先执行此表达式.
表达式3:作为循环的调整,是在执行完循环体后才进行的.

注意:

  • 表达式1可以省略,但表达式1后的";"不能省略.例如for(;i<=100;i++).应当注意: 由于省略了表达式1,未对循环变量赋初值,因此,为了能正常执行循环,应在for语句之前给循环变量赋以初值.
  • 表达式2可以省略,但此时循环会无终止地进行下去,也就是认为表达式2始终为真.
  • 表达式3亦可以省略,但此时程序设计者应另设法保证循环能正常结束.

几种循环的嵌套

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套.
在这里插入图片描述

改变循环执行的状态

<1>break语句提前终止循环,使流程跳到循环体之外,接着执行循环体下面的语句.
<2>continue语句结束本次循环,返回继续执行下一次是否循环的判定.

例题:
要求输出1~50能被3整除的数.

#include<stdio.h>
int main()
{
	int i = 1
	for (; i <= 50; i++)
	{
		if (i % 3 != 0)
		{
			continue;//所有i%3!=0的都跳过
		}
		printf("%d ", i);
	}
	printf("\n");
	return 0;
}

结果:
在这里插入图片描述

循环程序举例

<1>求斐波那契数列的前n个数
1,1,2,3,5,8,13,…
该数列的特点就是从第三个数开始,该数时前面两个数之和.

#include<stdio.h>
int main()
{
	int f1 = 1;
	int f2 = 1;
	int f3, n;
	printf("Please Input Number:");
	scanf("%d", &n);
	int i = 1;
	printf("%d %d ", f1, f2);
	for (; i <= n; i++)
	{
		f3 = f1 + f2;
		printf("%d ", f3);
		f1 = f2;
		f2 = f3;
	}
	printf("\n");
	return 0;
}

比如说前15个数:
在这里插入图片描述
<2>求100–200之间的全部素数
素数:在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.

#include<stdio.h>
//判断一个数是否为素数
/*int main()
{
	int n,i;
	printf("Please Input num:");
	scanf("%d", &n);
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			break;
		}
	}
	if (i < n)
	{
		printf("%d不是素数", n);
	}
	else
	{
		printf("%d是素数", n);
	}
	return 0;
}*/

//输出100-200之间的全部素数
int main()
{
	for (int n = 100; n <= 200; n++)
	{
		int i = 2;
		for (; i < 200; i++)
		{
			if (n % i == 0)
			{
				break;
			}
		}
		if (i >= n)
		{
			printf("%d ", n);
		}
	}
	printf("\n");
	return 0;
}

结果:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值