#程序设计# #算法技巧#

本文探讨了C语言中的程序设计与算法技巧,包括如何判断素数、嵌套循环的实现、程序优化以及乘法口诀表的打印。通过实例讲解了循环控制和流程分析,强调了内层循环初始化和程序设计的优化方法。
摘要由CSDN通过智能技术生成

程序设计与算法技巧:

分支与循环语句的全部语法特点与使用方法,在前面的章节中都已经介绍完毕。在此基础之上,我们就将开始永无止境的程序设计与算法技巧研究了。例如:求100以内有哪几个整数是素数,或者打印乘法99阵列,打印19x19的菱形阵列等等。计算机程序设计能够解决成千上万的数学应用课题,举不胜举。

求一个整数是否为素数

素数 (prime number)又称质数,一个大于1的自然数除了1和它本身外不能被其他自然数整除,否则称为合数。例如:2、3、5、7、11等都是素数,而6可以由2乘3得到所以是合数,8可以由2乘4得到因此是合数,依次类推。

例4-19输入一个整数判断是不是素数

#include <stdio.h>

int main()

{//flag为0时代表是素数,为1代表合数

int n,flag = 0;

int i = 2;

printf("请输入一个大于1的数字:");

scanf("%d", &n);

while (i < n)

{

if (n%i == 0)

{

flag = 1;

break;

}

++i;

}

if (flag == 0)

printf("%d是素数!\n",n);

else

printf("%d不是素数!\n",n);

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a) 观想输入一个整数之后程序的运行流程,猜测循环结束之后的打印结果是什么;

b)最好能在调试模式下单步执行,观察程序在循环体内反复执行以及程序中途退出或最终结束的过程;

判断中途退出的方法

在实际的应用程序开发时常常需要判断,循环过程是否是某个条件成立时中途退出的。有两种方法可以实现这个判断:

a)定义一个标志变量,例如:flag为1时代表中途退出的,0代表循环不是中途条件成立时退出的;

b)不定义标志变量,而是在循环之后对比递增变量达到目标总数,相等代表不是中途退出。

例4-20输入一个整数判断是不是素数

#include <stdio.h>

int main()

{

int n,i=2;

printf("请输入一个大于1的数字:");

scanf("%d", &n);

while (i < n)

{

if (n%i == 0)

break;

++i;

}

if (i == n)

printf("%d是素数!\n",n);

else

printf("%d不是素数!\n",n);

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观想输入一个整数之后程序的运行流程,猜测循环结束之后的打印结果是什么;

b)最好能在调试模式下单步执行,观察程序在循环体内反复执行以及程序中途退出或最终结束的过程;

嵌套循环:(多层循环)

嵌套循环也叫多层循环,就是循环体内部还有一层循环。例如,要打印m行n列的矩形数据阵列,内层循环实现每行n列数据。再让这n列的数据打印执行m次,也就是外层循环是m行。

例4-21单行n列数据的打印

#include <stdio.h>

int main()

{

int m,n,i=0;

printf("请输入m和n的数值用于打印m行n列矩阵:");

scanf("%d%d",&m,&n);

while(i<n)

{

printf("* ");

++i;

}

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观想输入m和n两个整数之后程序的运行流程,猜测循环结束之后的打印结果是什么;

b)最好能在调试模式下单步执行,观察程序在循环体内反复执行以直到最终循环结束的过程;

结论:

先把内层循环做好之后再在外面加一层循环,这样就能比较容易地实现一个嵌套循环的程序设计。
注意:内层循环在每次开始之前,一定要重新初始化!

例4-22使用嵌套循环打印m行n列的阵列

#include <stdio.h>

int main()

{

int m,n,i=0,j=0;

printf("请输入m和n的数值用于打印m行n列矩阵:");

scanf("%d%d",&m,&n);

while(j<m)

{

i=0;

while(i<n)

{

printf("* ");

++i;

}

printf("\n");

++j;

}

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观想输入m和n两个整数之后程序的运行流程,猜测每次外层循环执行完之后打印的结果是什么;

b)最好能在调试模式下单步执行,观察每次内层循环结束打印的内容直到外层循环结束为止;

优化程序设计

如果一个程序要执行m次循环,可以使用i<m作为循环条件,循环的过程i从0开始逐渐递增。也可以采用m>0作为循环条件,循环的过程m自身逐渐递减,这样就可以比前面的方法省略一个变量i。

例4-23 优化循环程序设计

#include <stdio.h>

int main()

{

int m,n,i=0;

printf("请输入m和n的数值用于打印m行n列矩阵:");

scanf("%d%d",&m,&n);

while(m)

{

i = 0;

while(i<n)

{

printf("* ");

++i;

}

printf("\n");

--m;

}

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观想输入m和n两个整数之后程序的运行流程,猜测每次外层循环执行完之后打印的结果是什么;

b)最好能在调试模式下单步执行,观察每次内层循环结束打印的内容直到外层循环结束为止;

 乘法口诀表(三角形阵列)

九九乘法口诀表是一个三角形阵列,这需要在程序设计时考虑阵列的形态设计。每一行所输出列的数目与所在的行数是有关的。第1行只有1列,第2行有2列,依次类推……,第9行有9列。

//例4-24 阵列形态设计

#include <stdio.h>

int main()

{

for(int i=1;i<=9;++i)

{

for(int j=1;j<=i;++j)

printf("%dx%d=%d\t",i,j,i*j);

printf("\n");

}

return 0;

}

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)观想每次外层循环执行过程中内层循环的运行流程,猜测每次外层循环执行完之后打印的结果是什么;

b)最好能在调试模式下单步执行,观察每次内层循环结束打印的内容直到外层循环结束为止;

1x1=1

1x2=2   2x2=4

1x3=3   2x3=6   3x3=9

1x4=4   2x4=8   3x4=12  4x4=16

1x5=5   2x5=10  3x5=15  4x5=20  5x5=25

1x6=6   2x6=12  3x6=18  4x6=24  5x6=30  6x6=36

1x7=7   2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49

1x8=8   2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64

1x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值