当前位置:首页 >> 高一语文 >>

选修1《循环结构程序》ppt课件 高中信息技术


第六章
循环结构的 程序控制

实型数据

实型数据
类型说明符
单精度型 双精度型 float double型

长度
4字节 8字节

数的范围
10-38 10-308
~ ~

有效数字
7位 15位

1038 10308

阶码的符号位 单精度实型

阶码 尾数的符号位 尾数 二进制 7位 二进制 23位
有效数字的意义? 2-23 <= |尾数| <= 1-2-23

0.000,000,12 <= |尾数| <= 0.999,999,88

以IEEE格式 保存实数

-128<= |阶码| <= 2127 2 数的范围的意义? 2.9*10-39 <= |阶码| <= 1.7*1038

实型数据

用6位保存十进制数 0 3 1 1 2 3 ● ● ● ●
指数符号位 底数的符号位

用定点格式保存 用浮点格式保存

?

保存数的范围?

采用科学记数法,将欲保存的数规范化处 理为整数部分占一位。 例如:保存 -1234.5678 规范化为-1.2345678 × 103 当从内存中读出此数时是多少? -1.23 ×103 = -1230.0000 有效数字仅有3位

实型数据

格式化输出函数
格式化输出函数的输出格式说明: printf(格式控制,输出列表); 输出格式说明:%±0m.nl格式字符 % 输出格式说明的标记符号 ± 指定输出对齐方式 指定 + 号或省略时,输出右对齐。 指定 - 号时,输出左对齐。 0 空位是否填零 输出数值时,左侧不使用的位置自动填零。

第三节 数据输出

m .n 输出宽度 输出整数时: m 为占用字符位置的个数。 输出实数时: m 指定输出数的总长度, n 指定小数部分的长度。 (注意:小数点占用一位。) 输出字符串时: m 指定占用的位数, n 指定实际输出位数。

第三节 第三节 数据输出 数据输出

l 输出精度 在格式字符 d、x、o、u 前面加 l 时,输出 为32bit (long型)。

在 f 前加l时,输出为64位(double型)。

例C4_306

第三节 第三节 数据输出 数据输出

格式字符确定了输出数据格式: d 十进制整数 x 十六进制整数 o 八进制整数 u 不带符号的十进制整数 c 单个字符 s 字符串 f 小数形式的浮点小数 e 指数形式的浮点小数 g f 和 e 格式中较短的一种

例C4_307

第六章 循环结构的程序设计

Grammar
金手指考试网 http://www.jszksw.net/ 2016年金手指驾驶员考试科目一 科目四 元贝驾考网 http://www.yuanbeijiakao.net 科目一科目四仿真考试题C1

第八节 程序举例

输出图形

第八节 程序举例

例:打印边长为m的正方型 要求:从键盘输入n值,输出n行每行n个*号。 例:输入n=4,输出的图形如下: * * * * * * * * * * * * * * * * 按以下思路掌握: ⑴ 屏幕输出一个字符 ? ⑵ 屏幕输出一行 n 个字符 ? ⑶ 屏幕输出 n 行字符 ?

tc

第八节 程序举例

for( i = 0 ; i < n; i++ ) for( j = 0 ; j < n; j++ ) printf( “ * ” );

? 分析 逐步求精法。对于复杂问题,不可能一下得 到程序,可以先将简单的部分明确出来,再逐 步对复杂部分进行细化,一步一步推出程序。

第八节 程序举例

#include <stdio.h> main ( ) { int i, j, n; scanf( “%d”, &n); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) printf (“*”); printf(“\n”) ; } }

/* 控制打印n行 */
/*打印一行中的n个*号*/

第八节 程序举例

例: 打印平行四边形 要求:从键盘输入h值, 输出h行用*号组成平行四边形。 例:输入 h=5,输出的图形如下:

* * * * *
* * * * * * * * * * * * * * * * * * * *

第八节 程序举例

#include <stdio.h> * * * * * main ( ) * * * * * { int i, j, n; * * * * * scanf(”%d”, &n); * * * * * * * * * * for(i=1; i<=n; i++) { 输出若干空格; for(j=1; j<i; j<=n;j++) j++) printf (” ”); { printfj<=n; ( ” *” ); for(j=1; j++) printf( ”\n ”* )” ;); printf (” } printf(”\n”) ; } } }

第八节 程序举例

#include <stdio.h> main ( ) * * * { int i, j, n; * * * scanf(”%d”, &n); for(i=1; i<=n; i++) * * * * { for(j=1; j< j<i; j++) = n - i ; j++) printf (” ”); for(j=1; j<=n; j++) printf (”*”); printf(”\n”) ; } }

* * * * *

* * * * * * * * * *

第八节 程序举例

#include <stdio.h> main ( ) { int i, j, n; * scanf(”%d”, &n); * * for(i=1; i<=n; i++) * * * { for(j=1; j<n-i; j++) printf (” ”); for(j=1; j<= n; 2*i-1; j++) printf (”*”); printf(”\n”) ; } }

* * * *

* * * * *

* * * * * * * * * *

第八节 程序举例

#include <stdio.h> * * * main ( ) * * * { int i, j, n; scanf(”%d”, &n); for(i=1; i<=n; i++) { for(j=1; j< n-i i ; j++) printf (” ”); for(j=1; j<= 2*(n-i)+1; 2*i-1 ; printf (”*”); printf(”\n”) ; }

* * * *

* * * * *

* * * * * * * * * *

j++)

第八节 程序举例

上下部 分规律不一 致的图形分 开处理
* * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

m行

m-1行

第八节 程序举例

打印字符图形总结 外层循环控制打 main ( ) 印图形的行数,循环 { int I, j, n; 量即是行数。 scanf( “ %d ”, &n); 一种连续字符用一 个循环,字符的个数用 for( i = 1; i <= n; i++) { for( j=1; j特殊情况特 <= n-i; 循环次数控制。 j++) printf(“ “殊处理 ); for( j=1; j <= 2*i-1; j++) printf ( “ * ” ); 循环体内 printf(“\n”) ; 是一行内打印 } 循环体内最后一条语句是回车换 的各种字符。 } 行,决定以上内容为一行。

第八节 程序举例

main ( ) { int k, m, j; scanf( “ %d ”, &m); for( k = 1; k <= m; k++) { { if(k==1 || k==m) for( j=1; j <= 2*k-1; j++) printf(“*“); else { for(j=1; j <= m-k; j++) printf(“ “); printf(“*”); for( j=1; j <= 2*k-1-2; j++) printf ( “ ” ); * printf( “ * ” ); printf(“\n”); * * } } * * } * *
* * * * * * * * * * * * *

第八节 程序举例

例:打印回形方阵: 要求:从键盘输入边长n,输出回形方阵。 例:输入 n=5 ,n=6,输出的图形如下:
1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 2 2 2 1 1 1 1 1 m=6 1 1

n=5

? 分析:关键是找出aij与行i和列j的关系

第八节 程序举例

main ( ) { int i, j, m; scanf( “ %d ”, &m); for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) printf( “ %4d ”, j); printf(“\n”); } }

与列号一致

1 1

2 2

3 3

4 4

5 5

6 6

1
1 1 1

2
2 2 2

3
3 3 3

4
4 4 4

5
5 5 5

6
6 6 6

第八节 程序举例

main ( ) { int i, j, m; scanf( “ %d ”, &m); for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) printf( “ %4d ”, i); printf(“\n”); } }

与行号一致

1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

第八节 程序举例

main ( ) 上三角元素的行 { int i, j, m; 号小于列号,输出 scanf( “ %d ”, &m); 与行号一致 for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) 1 2 3 4 5 6 printf(“%4d”, i<j?i:j); i == j
printf(“\n”); } } 下三角元素的行 号大于列号,输出 与列号一致
1 输出数字是 2 行号或列号 3 4 1 1 1 1 1 1 1 2 2 2 2 2 1 2 3 3 3 3 1 2 3 4 4 4 1 2 3 4 5 5 1 2 3 4 5 6

5
6

第八节 程序举例

main ( ) 上三角元素行 { int i, j, m; 号小于 m-j+1, scanf( “ %d ”, &m); 输出行号 for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) 输出数字是 printf(“%4d” , i<m-j+1?i:m-j+1 ); 1 2 3 4 5 6 i+j m+1 i == == m-j+1 printf(“\n”); 1 1 1 1 1 1 1 } 2 2 2 2 2 1 2 } 3 3 3 3 2 1 3 4 4 4 3 2 1 下三角元素的行 4 号大于 m-j+1,输 5 5 4 3 2 1 5 出 m-j+1 6 5 4 3 2 1 6

第八节 程序举例

main ( ) { int i, j, m; 上三角元素列 号小于 m-j+1, scanf( “ %d ”, &m); 输出列号 for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) printf(“%4d”输出数字是 , j<m-i+1?j:m-i+1 ); 1 2 3 4 5 6 j == m-i+1 printf(“\n”); 1 2 3 4 5 6 1 } 1 2 3 4 5 5 2 } 1 2 3 4 4 4 3
下三角元素的列 号大于 m-j+1,输 出 m-j+1
4

1
1

2

3 3
2 1 1

3
2 1

3
2 1

5
6

2 2

1 1

第八节 程序举例

main ( ) 上三角元素行号i { int i, j, m; 小于列号j,输出mscanf( “ %d ”, &m); j+1 for( i = 1; i <= m; i++) { for( j = 1; j <= m; j++) i == j printf(“%4d”, i<j?m-j+1:m-i+1); 1 2 3 4 5 6 输出数字是 printf(“\n”); m-i+1或m-j+1 1 6 5 4 3 2 1 } 5 5 4 3 2 1 2 } 4 4 4 3 2 1 3 3 3 3 3 2 1 下三角元素的行 4 号i大于列号j,输 2 2 2 2 2 1 5 出m-i+1 1 1 1 1 1 1 6

第八节 程序举例

1.打印回形方阵: 要求:从键盘输入边长m,输出回形方阵。例:输 入 m=5 ,m=6,输出的图形如下: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 2 2 2 1 1 1 1 1 1 1

m=5

m=6

? 分析:关键是找出aij与行i和列j的关系

第八节 程序举例

将图形分为四个区:
A.i<=(m+1)/2 j<=(m+1)/2

1 1 1 1

1 2 2 1

1 3 2 1

1

B.i<=(m+1)/2 j>(m+1)/2

1 1 1 1

1

1

1

1

1

1

1

2

2

2
2 2 1

1

1
1
(m+1)/2

2
2 2 2 1

2
3 3 2 1

2
3 3 2 1

2
2 2 2 1

1
1 1 1 1

1 1 1

C.i>(m+1)/2 j<=(m+1)/2

D.i>(m+1)/2 j>(m+1)/2 (m+1)/2

第八节 程序举例

main ( ) { int i, j, m; scanf("%d", &m); for(i=1; i<=m; i++) { for(j=1; j<=m; j++) { if( i<=(m+1)/2 && j<=(m+1)/2 ) printf(" %d", i<j ? i : j ); if( i<=(m+1)/2 && j>=(m+1)/2) printf(" %d", i<m-j+1 ? i : m-j+1)); if( i>(m+1)/2 && j<=(m+1)/2) printf(" %d", j<m-i+1 ? j : m-i+1); if( i>(m+1)/2 && j>(m+1)/2) printf(" %d", j<i?m-j+1 : m-i+1); printf("\n"); } } }

第八节 程序举例

例:打印数字魔方 要求:从键盘输入 m 值,输出 m 行的数字方 阵。例:输入 m=5 ,输出的图形如下:

1 2 3 4 5 n = 5 时

2 3 4 5 1

3 4 5 1 2

4 5 1 2 3

5 1 2 3 4

第八节 程序举例

先研究如下图形 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9

每行的第一个数字和行号 相同,后面的数字依次增一

for( k = 1; k <= n; k++) { m = k; for( j = 1; j <= n; j++) printf(”%4d”, m + + ); printf(“\n”);

}

第八节 程序举例

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

5 6 7 8 9

11 12 1 10 9 3 如果数字以 5为模 8 4
TIISSOT 1853

2

7

6

5

1 2 3 4 5

2 3 4 5 1

3 4 5 1 2

4 5 1 2 3

5 1 2 3 4

用数学语言描述上述现象:就是以12为模。 以 5 为模 , 即当 m < 5 时,输出 m; 当 m >= 5 时,m = m % 5; 取值为 0、1、2、3、4, 所以上式修订为:m = m % 5 + 1, 则输出图形以 5 为模,输出的数字为 1 、 2 、 3 、 4 、5

第八节 程序举例

#include <stdio.h> main ( ) { int i, j, n , m; printf("Enter M:"); scanf("%d", &n); for( i = 1; i <= n; i++ ) { m = i - 1; for( j = 1; j <= n; j++ ) printf(" %d", m++ % n + 1 ); printf("\n"); } }

第八节 程序举例

例:打印数字三角形。 起始
数字是1 输入高 m,输出如下图形: 增1 1 2 4 7 3 5 8 12 6 10 15

( m = 6 时)
21

增2
增3

增4 11
16

17

9 首先确定每行的第一个字符。 14 20 13 每行首字符增量随着行号的增 19 加每行加 1。 18 用变量 k 保存每行的首数,初 值 k = 1。 分析: 新行首数是前行首数加前行的 行号。 找到数字变化的规律, 数字和行列号i、j之间的关系。

第八节 程序举例

/*k保存每行的第一个数字存放*/ k = 1; for( i = 1; i <= m; i++ ) { /* 输出第 i 行 */

printf(“%\n”);
k = k + i; }

第八节 程序举例

根据每行第一个数字确定后续。 增2 增3 增4 增5
第一行 1 第二行 2

3

6

10

15

21

5

9

14

20

4 增3 8 增4 13 增5 19 增6 7 12 18 11 16 每行数字之间差值随列号的增加而增1。 随着行号的增加,这个差值比上一行相应增 1。故: n = n +j + i。 将当前输出数字 n 加列号加行号求出下 一个输出数字。 17

第八节 程序举例

main() { int i , j , m , n, k; scanf(“%d”,&m); k = 1; for( i = 1; i <= m; i++ ) { n = k; for( j = 1; j <= m-i-1 ? ? ; j++ ) { printf(“%4d”, n); n = n + j + i;

} k = k + i; printf(“%\n”); }

第八节 程序举例

程序设计方法之:逐步细化

第八节 程序举例

程序设计方法之:逐步细化

y
1

例:在屏幕上输出正弦函数

-1

* *** *** * * * ** * * * * *

*** * * * * * * * * * * * *π * * 0



x

第八节 程序举例
1.

y | | | | | | 10个字符 | | | | 0|---------------------------------------------- x | | | X轴坐标2π 为6.28,在屏 | | | 幕上折合为62个字符。 | | | 屏幕 25 行,正弦值从 1 到 -1 | | ,设计为21行,步长0,1。

屏幕设计

屏幕宽度80个字符

第八节 程序举例
main( ) { double y; int i,x1,x2; for(y=1;y>=-1;y-=0.1) { for(i=1;i<8;i++) printf(" "); if(fabs(y-0)<0.001) printf(" 0*"); else if(fabs(y-1)<0.01) printf(" 1|"); else if(fabs(y+1)<0.01) printf("-1|"); else printf(" |"); if(fabs(y-0)<0.01) printf("- x"); …… …… printf("\n"); } }

第八节 程序举例

2.通过正弦值用反正弦函数求出角度。 函数原型: asin(double y), 返回值从-π/2到π/2,也就是-1.57到1.57。

第八节 程序举例
main( ) { double y; int i,x1,x2; for(y=1;y>=-1;y-=0.1) { …… …… x1=asin(y)*10; if(x1>0) x2=31-x1; else{ x1=31-x1; x2=93-x1; } for(i=1;i<x2;i++) if(i==x1) printf("*"); else if(fabs(y-0)<0.01) printf("-"); else printf(" "); printf("*"); } }

第八节 程序举例

例:打印空心圆形 算法设计:利用图形的左右对称性。根据圆的方程: R × R = X × X +Y ×Y 可以计算出圆上每一点行和列的对应关系。 * *

*

圆的半径为10,步长为 1 时,纵向打印 20行。假定每 行对应2.5个字符位置,横向 共50个字符。 横向圆心在第30列处。

第八节 程序举例

*

40个空格

for(i=1;i<=40;i++) printf(“ “); printf(“*”);

第八节 程序举例

*

*

*

?个空格

?个空格

第八节 程序举例

横向以屏幕字 符个数标示直径, 假定圆的直径是40 个字符。 * printf(“*”); for(j=1;j<=20;j++) { 打印前 * 号; 打印后 * 号; printf(“\n”); } printf(“*”);

*

纵向最上面 * 和最下 面 * 的间隔是多少? 假定两行之间的距离 占两个字符,换 20 行后再 打印最下面的 * 。 * printf(“*”); for(j=10;j>=-10;j--) { 打印前 * 号; 打印后 * 号; printf(“\n”); } printf(“*”);

*

第八节 程序举例

? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? * ? ? ? ? ? ? ? * ? ? ? ? ? ? * ? ? ? ? ? ? ? ? ? *

j=10 j=9 j=8

? ? ? ? ? ? ? ? ? ? ? *

j=-10

第八节 程序举例

长度为

半径2 – j2

= 6 ,折合为12个字符 j=8

? ? ? ? ? ? * ? ? ? ? ? ? ? ? ? * 长度为 8 长 度 为 10 , 即半径

m = 2 * sqrt( 10 * 10 – j * j ); for(k=1;k < 40 – m; k++) printf(“ “); printf(“*”); for(k=1;k < 2 * m; k++) printf(“ “); printf(“*”);

第八节 程序举例

#include “math.h” main() { int j,k,m; for(j=10;j>-10;j--) { m = 2 * sqrt( 10 * 10 – j * j ); for(k=1;k < 40 – m; k++) printf(“ “); printf(“*”); for(k=1;k < 2 * m; k++) printf(“ “); printf(“*”); printf(“\n”); } }


相关文章:
更多相关标签: