专业课参考-语言程序设计c2012-d04new_第1页
专业课参考-语言程序设计c2012-d04new_第2页
专业课参考-语言程序设计c2012-d04new_第3页
专业课参考-语言程序设计c2012-d04new_第4页
专业课参考-语言程序设计c2012-d04new_第5页
免费预览已结束,剩余67页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

循环:让程序转起来共50页第2

页运算符-自增自减运算运算符(单目←)

++

自增 14

–– 自减 14说明

++

和––

为单目运算,只能作用于变量

只能对int、char、long和指针变量进行运算功能

++x <==>x=x+

1

––x <==>x=x–

1 (前缀)

x++ <==>x=x+1 x––

<==>x=x–

1 (后缀)共50页第3

页运算符-自增自减运算自增(自减)有前缀和后缀之分。

前缀:先自增(自减)再引用后缀:先引用再自增(自减)前缀与后缀的区别:

y=++x;<==>x=x+1;

y=x;

x先加

1

再赋值

y=x++;<==>y=x;

x=x+1;

x先赋值再加

1共50页第4

页运算符-自增自减运算实例:intx=1;(1)

++x;x++;

因为在表达式中没有其它运算,结果一样。(2)

y=++x;

在赋值运算之前,x先加1,然后将

x赋给

y

结果:y=++x;<==>x=x+1;y=x;

x=2,y=2(3)y=x++;

先将x

赋值给y,然后x

再加

1

结果:y=x++;<==>y=x;x=x+1;

x=2,y=1共50页第5

页注意,以下操作是错误的:

x=++(

i+j

)+1;j=++

(

5+x

);y=++x*++x;运算符-自增自减运算实例逻辑上虽然正确,但在实际编程中容易产生误解,应当避免共50页第6

页运算符-赋值与赋值组合运算运算符(双目←)

赋值运算: =2 赋值组合运算:e1

op=e22

等于于:e1=e1

op(e2) 其中:op为下列10个运算符之一+–*/%<<>>|&∧

e1为可以进行赋值操作的变量

e2为合法的表达式共50页第7

页运算符-赋值与赋值组合运算运算符(双目←)

赋值运算: =2 赋值组合运算:e1

op=e22

等于于:e1=e1

op(e2)例:x+=2; <==>x=x+2; x*=y+1; <==>x=x*(y+1);

不等价

x=x*y+1; x>>=2; <==>x=x>>2;第8

页循环嵌套循环嵌套在循环体中,又包含有循环语句。

例C3_5107.C:输出下三角形乘法九九表。123456789------------------------------------124369481216510152025

......字符方式下屏幕显示的特点:

屏幕上的字符只能从上到下逐行显示,同一行内,只能从左到右逐字显示。第9

页循环嵌套显示要求

屏幕上的字符只能从上到下逐行显示,同一行内,只能从左到右逐字显示。程序架构(伪语言描述) while(控制显示n行) {

行数计数器i++; }while(控制显示一行中的m个字符){输出一个需要的字符;

列计数器j++;}第10

页循环嵌套例C3_5107.C:输出下三角形乘法九九表。123456789-------------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281i=6j=5i*j(1<=i<=9)(1<=j<=i)则:第i

行中共要输出i

个数据,每个数据为

i*j

。假设:行号i,列号j第11

页循环嵌套 #include<stdio.h>main(){inti=1,j;/*i:行计数器j:列计数器*/

while(i<=9)/*控制打印表头*/

printf("%4d",i++);

printf("\n------------------------------------\n");

i=1;while(i<=9)

{

j=1;/*列计数器置1*/

while(j<=i)/*嵌套的二重循环。输出第i行*/

{

printf("%4d",i*j

);

j++;/*列计数器+1*/}

printf("\n");/*一行输出结束,输出\n*/

i++;/*行计数器+1*/}}例C6_2107外层循环体执行1次,内层循环要完整执行1次第12

页循环嵌套例C6_3202.C:用for语句实现打印乘法九九表。#include<stdio.h>main(){inti,j; for(i=1;i<10;i++) printf("%4d",i);/*打印表头*/

printf("\n-----------------------------------\n");

for(i=1;i<10;i++

)/*控制打印表体*/

for(j=1;

j<=i;

j++

)printf((j==i)?

"%4d\n"

:"%4d",i*j);}例C6_3202函数printf中使用“?”操作等价于:if(j==i)printf("%4d\n",i*j);

else printf("%4d",i*j);第13

页for语句-实例例C6_3204.C: 草原上有一对小兔子,出生后的第1个月会长大,第2个月末生出一对小兔子。第3个月大兔子会继续生一对小兔子,而第2个月出生的小兔子会长大。第4个月时,第1月出生的兔子会继续生,第2月出生的小兔子也可以生一对小兔子了,第3月出生的小兔子则长大……

这些草原兔子非常长寿,请计算第N个月时将会有多少对兔子?第14

页for语句-实例例C6_3204.C:数列1、1、2、3、5、8、13、21、…是著名的菲波那奇数列,其递推通项公式为: U1=U2=1 Un=Un-1+Un-2 (n>=3)

为求出第N项的值,请编写程序。

根据递推通项公式,可用递推法编写程序,计算第N项的值。第15

页for语句-实例递推法 由初始的已知条件开始,先计算出第(N-1)步的结果,再利用已知的前(N-1)项结果,按递推公式(或遵照递推规则),推出第N

步结果。

递推法是程序设计中最常用的方法之一,使用递推法必须有明确的递推初始值和递推规则(递推公式)。第16

页for语句-实例程序main(){intn,i,un1,un2,un;

do

{printf("Inputn=?");scanf("%d",&n);

}while(n<3)/*输入正确的N值*/

un=un2=1;/*设置递推初始值*/

for(i=3;i<=n;i++)/*递推*/

{

un1=un2;un2=un;un=un1+un2;

}printf("No.%dis%d\n",n,un);}例C6_3204第17

页for语句-实例例C3_5204.C程序un=un2=1;for(i=3;i<=n;i++){

un1=un2;un2=un;un=un1+un2;}i<=n?向前传递前两项nu1=un2un2=un成立不成立初始化:un=un2=1计算un=un1+un2递推项:i=3i++数列对应关系:

un1,nu2,un递推计算第18

页for语句-实例语句中的逗号(,)运算

逗号(,)运算常见的三种用途是:1.在变量说明表中用来分隔变量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函数的参数表中分隔参数。如:printf("n=%d,x=%d\n",n,x);3.在语句中使用。其形式是:表达式n1,表达式n2;用逗号分隔开的表达式从左到右进行计算,结果的类型和值是最右边表达式的类型和值。第19

页for语句-实例例C6_3205.C:用逗号运算输出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇数位上的字符从'a'开始逐次递增,偶数位上的字符从'z'开始逐次递减。 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i从’a’开始逐次递增,j从’z’开始逐次递减*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*输出两个字符*/

printf("\n");}例C6_3205共50页第20

页字符型数据字符型的类型说明符:char

字符型常量:用单引号括起来的单个字符。

’A’

’g’

’#’

’0’

’2’

’+’

’;’

’(’

字符定界符:单引号

转义符:\改变后续字符的原义。’\n’

’\t’

’\’’

’\"’字符型变量的输入charch;

scanf("%c",&ch);/*输入1个字符

*/字符型变量的输出

printf("%c",ch);/*输出1个字符

*/共50页第21

页§3-2常数与常数定义-字符常数字符型常量:用单引号括起来的单个字符实例:’A’

’g’

’#’

’0’

’2’

’+’

’,’

’;’

’(’

’)’字符定界符:单引号’字符型数据的存储格式:ASCII码(见书附录)65103354850如何表示不可显示字符?回车/退格/TAB?如何表示定界符?’’’

产生歧异转义符\:将\后面的字符转换为其它含义共50页第22

页常数与常数定义-转义符常数字符形式功能使用举例

\0字符串结束标志

\n换行(ASCII码为10) printf("\n");

\t横向跳格 printf("\t");

\b退格

\r回车(ASCII码为13)

\f走纸换页

\\字符\(ASCII码为92)’\\’

表示字符

\

\’

单引号

’\’’表示字符’

\"双引号 ’\"’表示字符"

\ddd用8进制表示字符 ’a’=’\141’

’A’=’\101’

换行符’\12’

\xhh用16进制表示字符’a’=’\x61’

’A’=’\x41’

换行符’\xa’共19页第23

页字符输入/输出字符输入:ch=getchar()

从键盘读入一个字符,存入变量ch

中。字符输出:putchar(ch)

向显示器上输出变量ch。例:#include"stdio.h" main() {charc; c=getchar();

putchar(c);/*输出字符*/

}共19页第24

页字符输入函数getchar#include"stdio.h"main(){charch;ch=getchar();

putchar(ch);}接受一个字符=>ch输出字符ch开始结束运行程序,如果从键盘输入: a[ENTER] 则输出为: a 如果从键盘输入: abc[ENTER] 则输出也为: a共19页第25

页数据的输入与输出例C2_7301.C:将从键盘输入的一行字符复制(输出)到显示器。#include"stdio.h"intmain(){charch;ch=getchar();

while(ch!=’\n’)

{

putchar(ch); /*输出该字符*/

ch=getchar();/*取下一输入字符*/

}return0;}例C2_7301共19页第26

页数据的输入与输出#include"stdio.h"main(){charch;ch=getchar();

while(ch!=’\n’)

{

putchar(ch);

ch=getchar();

}

}接受一个字符=>ch输出字符ch开始结束ch不是\n吗?接受一个字符=>ch成立不成立程序功能:

逐个接受从键盘上输入的一行字符,并显示在屏幕上。第27

页while语句-实例例C6_2103.C:从键盘中读入一系列字符,直到读入字母a时才停止。ch!=’a’?显示ch成立不成立ch=读入一个字符ch=读入下一个字符开始结束while(ch!=’a’){}ch=getchar();putchar(ch);ch=getchar();分析:由于不知道要读入的字符数量,只知停止条件是读入字母a,则只能将循环控制条件设为

。程序主体ch!=’a’第28

页while语句-实例#include<stdio.h>main(){charch;ch=getchar();while(

ch!='a')

{

putchar(ch); ch=getchar();

}}ch!=’a’?显示ch成立不成立ch=读入一个字符ch=读入下一个字符开始结束用do-while语句如何实现?第29

页while语句-实例例C6_2104.C:对输入的行和字符进行计数。

分析:\n作为行结束标记的,DOS中有[CTRL+Z]作为文件结束标记 #defineEOF-1

#include<stdio.h>main(){ intc,nl=0,nc=0;

while((c=getchar())!=EOF) {

++nc;

if(c=='\n'

) ++nl; }

printf("chars=%d,lines=%d\n",nc,nl);}

定义文件结束标记

nl行计数器,nc字符计数器

进行字符计数

如果找到\n,则行计数第30

页§6.2while语句-实例nl=0,nc=0;while((c=getchar())!=EOF){

++nc;

if(c=='\n'

)

{ ++nl;

}}例C6_2104c!=EOF?字符计数nc=nc+1成立不成立c=读入一个字符行计数

nl=nl+1c==’\n’?成立不成立第31

页for语句-实例语句中的逗号(,)运算

逗号(,)运算常见的三种用途是:1.在变量说明表中用来分隔变量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函数的参数表中分隔参数。如:printf("n=%d,x=%d\n",n,x);3.在语句中使用。其形式是:表达式n1,表达式n2;用逗号分隔开的表达式从左到右进行计算,结果的类型和值是最右边表达式的类型和值。第32

页for语句-实例例C6_3205.C:用逗号运算输出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇数位上的字符从'a'开始逐次递增,偶数位上的字符从'z'开始逐次递减 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i从’a’开始逐次递增,j从’z’开始逐次递减*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*输出两个字符*/

printf("\n");}例C6_3205第33

页do-while语句-实例例C6_4301.C:输入一个>=0

的整数,要求以相反的顺序输出该数。例如:输入12345,则输出为54321。

基本思路:可以从个位开始,按位输出整数的每一位

main(){unsignedintnumber;printf("Inputthenumber:");scanf("%d",&number); do{printf("%d",number%10);

number/=10;/*number缩小10倍*/ }while(number!=0);}例C6_4301思考:使用while或for语句,如何实现?例C6_43011两个程序有何区别?前面的程序可以处理数字0,后面的程序不能处理第34

页do-while语句-实例例C6_4302.C从键盘输入任意的字符,按下列规则进行分类计数。第一类’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’第二类

’+’,’-’,’*’,’/’,’%’,’=’第三类其它字符当输入字符’\’

时先计数然后停止接收输入。第35

页do-while语句-实例

main(){intclass1=0,class2=0,class3=0;charch; do{

putchar(ch=getch());/*函数的嵌套调用*/

switch

(ch)

{case

’0’:case

’1’:case

’2’:case

’3’:

case

’4’:case’5’:case

’6’:case’7’:

case

’8’:case

’9’:class1++;break;/*对分类1计数*/

case

’+’:case’-’:case

’*’:case

’/’:

case’%’:case

’=’:class2++;break;/*对分类2计数*/

default:class3++;break;/*对分类3计数*/

}}while(ch!=’\\’);

printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}例C6_4302第36

页循环语句小结C语言提供三种循环:for、while、do-while:

1、for和while先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。 2、while和do-while语句的条件表达式只有1个;for语句有3个表达式,表达式2是条件表达式。 3、while、do-while、for可以相互替换使用。 4、while语句多用于不需要赋初值的或循环次数不定的情况。

for语句多用于要赋初值或循环次数固定的情况。

do-while语句多用于至少要运行一次的循环。 5、循环语句可以嵌套,可以并列,但不能交叉。第37

页循环语句小结为了保证循环体正常运行,应该特别注意:循环控制条件控制条件的初始状态(初始值)循环体内部对控制条件的影响以上三个方面相互配合,相互影响,共同完成循环控制逐步求精:罗马不是一天建成的第39

页典型非数值(图型)问题-例1例1:在一行中输出m个*号。

要求:从键盘输入m值,输出一行m个*号。 例:输入m=4,输出的图形如下:****基本语句: 输出一个*号:printf("*"); 或putchar(’*’);基本算法:

1.输入m 2.重复m次:输出一个*;

3.输出一个\nscanf("%d",&m);while(m>0){printf("*");m--;}printf(”\n”);第40

页典型非数值(图型)问题-例1#include<stdio.h>intmain(){intm;scanf("%d",&m);while(m>0)

{printf("*");m--;

}printf("\n");return0;}#include<stdio.h>voidmain(){intm;scanf("%d",&m);for(;m>0;m--)

{printf("*");

}printf("\n");return;}C语言中的一行都是以\n

为标志例C3_1第41

页典型非数值(图型)问题-例2例2:输出边长为m的正方型

要求:从键盘输入m值,输出m行每行m个*号。 例:输入m=4,输出的图形如下:****************算法分析与设计:

1.输入m, 2.输出m行,每行输出m个*; 加细1:

1.输入m; 2.for(k=1;k<=m;k++)

输出一行:m

个*;第42

页典型非数值(图型)问题-例2 加细2:

1. 输入m; 2. for(k=1;k<=m;k++) { 输出

m个*;

换新行; } 加细3:

1. 输入m; 2. for(k=1;k<=m;k++) { for(j=1;j<=m;j++) printf("*");

printf("\n");

}第43

页典型非数值(图型)问题-例2整理,得到程序如下:

#include<stdio.h>voidmain(){ intk,m,j; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制输出m行*/

{

for(j=1;j<=m;j++)/*输出一行中的m个*号*/

printf(”*”);

printf(”\n”);

}}分析方法——逐步求精法

对于比较复杂问题,不可能一步得到程序,可以先将简单的部分明确出来,再逐步对复杂部分进行细化,逐步推出完整程序。例C3_2第44

页典型非数值(图型)问题-例3例3:输出边长为m的平行四边形 例:输入m=4,输出的图形如下:****************算法分析与设计

在正方型每行*号的前面先输出若干个空格。

对于第k行,1<=k<=m,则先输出

个空格。

▋▋▋

▋▋

▋m-k第45

页典型非数值(图型)问题-例2输出正方型程序

#include<stdio.h>intmain(){ intk,m,j; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制输出m行*/

{

for(j=1;j<=m;j++)/*输出一行中的m个*号*/

printf(”*”);

printf(”\n”);

}

return0;}for(i=1;i<=m-k;i++)printf(””);inti;第46

页典型非数值(图型)问题-例2输出平行四边形程序

#include<stdio.h>intmain(){ intk,m,j,i; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制输出m行*/

{

for(i=1;i<=m-k;i++)/*控制输出m-k个空格*/printf(”

”);

for(j=1;j<=m;j++)/*输出一行中的m个*号*/

printf(”*”);

printf(”\n”);

}

return0;}控制输出行内格式第47

页典型非数值(图型)问题-例3例3:从键盘输入h值,输出h行用*号组成等腰三角形。例:输入h=4,输出的图形如下:****************1

*2

***3

*****4*******要输出

个空格

*分析:1、按行输出。输出h行。2、程序的关键是:找出每一行中要输出空格的数量和*的数量3、对于图形中的第k

行(1<=k<=h):h-k2k-1第48

页典型非数值(图型)问题-例3分析: 要输出h-k

个空格

和2k-1个*算法设计1.输入h;2.输出h行;对第

k行,每行输出h-k

个空格和2k-1个*

对第2步进行加细:2.0

for(k=1;k<=h;k++)

{输出h-k

个空格;

输出2k-1个*;换行;}第49

页典型非数值(图型)问题-例3程序:#include<stdio.h>voidmain(){inth,k,j;scanf("%d",&h);

for(k=1;k<=h;k++)/*控制打印h行*/

{

for(j=1;j<=h-k;j++)/*打印空格*/

printf("

");

for(j=1;j<=2*k-1;j++)/*打印*号*/

printf("*");

printf("\n");

}}例C3_7302怎样输出一个等腰梯型?第50

页典型非数值(图型)问题-例3****************h=4换一个思路分析:对于第k行(1<=k<=h):需要输出

个字符(空格或*号)对第k

行的第j

个字符:

输出空格

其它情况

输出*h+k-1j<=h-k第51

页典型非数值(图型)问题-例3换一个思路分析:对于第k行(1<=k<=h):需要输出h+k-1

个字符(空格或*号)对第k行的第j个字符,若

j<=h-k输出空格

其它情况

输出*算法设计

for(k=1;k<=h;k++)/*输出h行*/

{

for(j=1;j<=h+k-1;j++)/*行内字符*/if(j<=h-k)打印空格;

else打印

*

号;换行;

}第52

页典型非数值(图型)问题-例3程序:#include<stdio.h>voidmain(){inth,k,j;scanf("%d",&h);

for(k=1;k<=h;k++)/*输出h行*/

{

for(j=1;j<=h+k-1;j++

)/*输出行内字符*/

if(

j

<=

h-k

)printf("");

else

printf("*");

printf("\n");

}}例C3_73021第53

页典型非数值(图型)问题-例4例4:从键盘输入h

值,输出用*号组成的菱形。例:输入h=4

,输出的图形如下:* *** ***** ******* ***** *** *分析:1.h为上三角形的高度,总行数为

2.对于第j行,若要输出m个空格和n个*号。3.当j<=h时,为上三角,则:m=,n=4.当时,为下三角,则:

m=

n=1234567空格数量3*号数量1 23 15 07 15 23 31

2h-1

h-j

2j-1

h<j<=2h-1

j-h总宽度-空格=2h-1-2(j-h)=4h-1-2j第54

页典型非数值(图型)问题-例4算法设计for(j=1;j<=2*h-1;j++)

控制打印行{若为上三角

j<=h

则:m

=h-j;

n=2j-1

否则:m

=j-h;n=4h-1-2j

输出m

空格;输出

n个*;换行;}加细循环体{if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;} for(k=1;k<=m;k++)printf(""); for(k=1;k<=n;k++)printf("*"); printf("\n");}第55

页典型非数值(图型)问题-例4程序:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=1;j<=2*h-1;j++)/*

输出行数控制*/

{

if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;} for(k=1;k<=m;k++)/*

输出空格

*/

printf("");

for(k=1;k<=n;k++)/*输出*

*/

printf("*"); printf("\n");

}}例C3_7303第56

页典型非数值(图型)问题-例4程序2:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=1;j<=2*h-1;j++)/*

控制总行数*/

{

if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;}

for(k=1;k<=m+n;k++)/*

输出一行*/

if(k<=m)printf("");/*

输出空格*/ elseprintf("*");/*输出

*

*/

printf("\n");

}}例C3_73031第57

页典型非数值(图型)问题-例4例4:从键盘输入h

值,输出用*号组成的菱形。例:输入h=4

,输出的图形如下:* *** ***** ******* ***** *** *分析1.h为上三角形的高度,行范围。

2.对于第j行,若要输出m

个空格和n个*号。3.则:m

=

,

n=-3-2-10123空格数量3*号数量1 23 15 07 15 23 31

-(h-1)~h-1

|j|

2(h-m)-1第58

页典型非数值(图型)问题-例4程序3:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=-h+1;j<=h-1;j++)/*

行数控制*/

{

m=j<0?–j:j;

n=2*(h-m)-1;

for(k=1;k<=m+n;k++)/*

行内格式*/

if(k<=m)printf(”

”);/*

空格*/ elseprintf(”*”);/*输出**/

printf("\n");

}}例C3_73032第59

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

,输出的图形如下:

12345 23451 34512 45123 51234

分析:

1.输出m

行。

典型非数值(图型)问题-例52.第j行的第一个数字为j,之后依次递增,但以m为模:

aij=(i

+j-2)%m+1输出项aij与行i、列j的关系第60

页典型非数值(图型)问题-例5程序:#include<stdio.h>voidmain(){inti,j,m;printf("EnterM:");scanf("%d",&m);

for(i=1;i<=m;i++)/*控制输出m

行*/

{

for(j=1;j<=m;j++)/*输出行中的数字*/

printf("%d",(i+j-2)%m+1);printf("\n");

}}例C3_7304第61

页例6:打印回形方阵

要求:从键盘输入边长m,输出回形方阵。例:输入m=5

,m=6,输出的图形如下:11111

1111111

222

1

1

2222

11232

1

12332

11222

1

m=5

1

23321

m=611111

12222

1

111111

分析:关键是找出aij与行i和列j的关系典型非数值(图型)问题-例6第62

页将图形分为四个区:111

11111

111122

21

122

221123

21

123

32112221

m=5

123

321

m=6111

11

122221

111

111

典型非数值(图型)问题-例61.i<=(m+1)/2j<=(m+1)/2min(i,j)2.i<=(m+1)/2j>(m+1)/2min(i,m-j+1)3.i>(m+1)/2j<=(m+1)/2

min(m-i+1,j)4.i>(m+1)/2j>(m+1)/2min(m-i+1,m-j+1)第63

页#definemin(x,y)((x)<(y)?(x):(y))voidmain(){intk,j,m;printf("EnterM:");scanf("%d",&m);

for

(k=1;k<=m;k++)/*控制打印m行*/

{

for(j=1;j<=m;j++)/*控制打印行中的数字*/

if

(k<=(m+1)/2)

if(j<=(m+1)/2)printf("%d",min(k,j));

else

printf("%d",min(k,m-j+1));

else

if(j<=(m+1)/2)printf("%d",min(m-k+1,j));

else

printf("%d",min(m-k+1,m-j+1)); printf("\n");

}}典型非数值(图型)问题-例6例C3_7305第64

页例7:打印数字三角形。输入高m,输出如下图形:

m=6 136101521 2591420 481319 71218 1117 16

典型非数值(图型)问题-例7分析:1.第i

行打印个数字;m-i+1

2.若:a1,1=1则:ai+1,1=(i>=1)

例:a21=a11+1=1+1=2, a61=a51+5=11+5=163.若:已知ai,1,则:ai,j+1=

ai,1+i例:a22=a21+2+1=2+2+1=5,a23=a22+2+2=5+2+2=9 a62=a61+6+1=16+6+1=23,a63=a62+6+2=23+6+2=31ai,j+i+j123456123456

递推公式a1,1=1当:i,j>=1时

ai+1,1=ai,1+i

ai,j+1=ai,j+i+j第65

页递推公式:

a1,1=1 ai+1,1=ai,1+i(i,j>=1)

ai,j+1=ai,j+i+j程序voidmain(){inti,j,m,n,k=1;/*

k

是第一列元素的值*/

scanf("%d",&m);

for(i=1;i<=m;i++)

{

n=k;/*

i行中第1个元素的值*/

for(j=1;j<=m-i+1;j++)/*输出行中的数字*/

{

printf("%3d",n);

n=n+i+j;/*计算同行下一个元素的值*/

}

printf("\n");

k=k+i;/*计算下一行中第1个元素*/

}}典型非数值(图型)问题-例7例C3_7306第66

页例8:打印0-360度的sin(x)曲线---------------------------------------*-------------------------------------|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*

*

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*

|

*|

*典型非数值(图型)问题-例8程序的关键在于:设计图形第67

页算法分析:1、坐标的x轴沿列自顶向下,y轴自左向右增加2、屏幕每行为80列,y轴以第40列为0点3、sin(x)的值在-1~1之间,图形中对应以40列为中心的10~70列4、将角度0~360度以10度为一个步长等分,只考察37个点sin(x)函数对应点的位置,即图形总共打印37行算法设计:设定义i、j分别控制行和列1、则行对应的角度为:i*10/180*PAI2、每行打印四种字符:空格、|、*、\n3、行对应的sin值的位置,及*的位置为:40+30*sin(i*10/180*PAI)|在40列

\n要视*、|的位置决定(取“最远”的值)典型非数值(图型)问题-例8第68

页典型非数值(图型)问题-例8#definePAI3.14159voidmain(){doublex;inty,i,yy;

for(i=1;i<80;i++)/*打印图形的第一行*/

if(i==40)printf("*");

elseprintf("-");

printf("\n");

for(x=10.0;x<=360.0;x+=10.)

/*从10度到360度*/

{

y=40+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论