1 / 27

语 言 程 序 设 计

C. 语 言 程 序 设 计. Program Design in C Language. 武 汉 大 学 刘 英. 1.1 课程简介. 上课时间 :1-18 周 周 3 7-8 节课,上机 9-10 上课地点 :211201 手机: 15072489457 E-mail : yingliu@whu.edu.cn 课程网站: http://dayi.whu.edu.cn. 上机安排: 第 4 周 、 第 8 周 、第 12 周机房上课、上机。. 读程序. #include<stdio.h> int main(void)

sugar
Download Presentation

语 言 程 序 设 计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C 语 言 程 序 设 计 Program Design in C Language 武 汉 大 学 刘 英

  2. 1.1 课程简介 • 上课时间:1-18周 周3 7-8节课,上机 9-10 • 上课地点:211201 • 手机:15072489457 • E-mail:yingliu@whu.edu.cn • 课程网站:http://dayi.whu.edu.cn • 上机安排:第4周、第8周、第12周机房上课、上机。

  3. 读程序 #include<stdio.h> int main(void) { int k=0,n; do { scanf("%d",&n); k+=n; } while(n!=-1); printf("k=%d n=%d\n",k,n); return 0; } 当运行以下程序时,从键盘键入1 2 3 4 5 -1 <回车> k=14 n=-1

  4. 写程序 【例4-20】用公式 求π的近似值,直到最后一项的绝对值小于10-6为止。 • 算法分析:此题是利用多项式之和的公式求π的近似值,当最后一项 时,求和结束。这就是循环的条件。显然,在循环开始前,循环的次数(求和的项数)是未知的,但有一个结束循环的条件:最后一项的绝对值小于10-6,这个值10-6是一个“标记值”,来表示“求和结束”。 • 分析多项式中的每一项,可以写出每项的通式为:,因此在循环体中执行的是:计算新的和值与本次的通项值。

  5. 写程序 从第2项开始有: n从1开始 循环条件:

  6. 写程序 /*【例4-20】利用多项式求和公式求π的近似值*/ #include <stdio.h> #include <math.h> int main(void) { double n=0,s=0,pi=0; do{ n+=1; s+=pow(-1,n+1)/(2*n-1); }while(1./(2*n-1)>=1e-6); pi=4*s; printf("π的近似值为= %.6f \n",pi); return 0; }

  7. 写程序 统计输入的字符个数,并输出它们,以“!”终止。 运行序列如下: 输入 if(chr==‘!’) 输出 a 假 a 5 假 5 $ 假 $ B 假 B ! 真 4 {char chr; int s; for( s=0; (chr=getchar( ))!=‘!’ ; s++) {chr=getchar( ) ; if (chr==‘!’) break; else printf(“%c”,chr);} printf(“s=%d\n”,s); } 如果if判断语句为真,则结束循环,执行循环结构后面的语句。 当输入字符为“!”时,chr==‘!’为真,结束for循环,执行循环结构后面的语句,即执行printf (“s=%d\n”,s)语句

  8. 写程序 【例4-14】 任意输入10个数找出其中的最大数和最小数。 #include <stdio.h> int main(void) { int max, min, x, n; printf("请输入第1个数:\n"); scanf("%d",&x); max = min = x; for (n=2;n<=10;n++) { printf("请输入第%d个数:\n",n); scanf("%d",&x); if (x> max) { max = x; continue; } if (x< min) min = x; } printf("最大数:%d;最小数:%d。\n",max,min); return 0; } 算法分析:首先设第一个数为最大数、最小数,然后将其余9个数分别与最大数、最小数进行比较,如果当前读的数x比最大数max还大,则将x的值赋给max。显然这时不需要再去比较数x与最小数min了,这时可以用continue语句。

  9. 写程序 输出如下图形: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  10. 写程序 分析: 共有5行,外循环 i:1~5 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 第一行输出4个空格,1个星号 第二行输出3个空格,3个星号 第三行输出2个空格,5个星号 …… 第五行输出0个空格,9个星号 空格用循环变量j控制,j=5-i 星号用循环变量k控制,k=2*i-1

  11. 写程序 程序 : #include <stdio.h> int main(void) { int i,j,k; for(i=1;i<=5;i++) { for(j=1;j<=5-i;j++) printf(“ ”); for(k=1;k<=2*i-1;k++) printf(“*”); printf(“\n”); } return 0; }

  12. 写程序 输出3~100中的所有素数。 算法分析: • 对于某个数n,如果从2到n-1都不能被n整除,则该数n为素数。 • 此处,除数2到n可以用一个for语句来表示: • for (i=2;i<=n-1;i=i+1) • 对于3~100之间的数,可以表示如下: for (n=3;n<=100;n=n+1)

  13. 写程序 程序 : #include <stdio.h> int main(void) { int n,i; for (n=3;n<=100;n=n+1) { for (i=2;i<=n-1;i=i+1) if (n%i==0) break; if (i>=n) printf("%d\t",n); } return 0; }

  14. 写程序 输出如下图所示的图形(回文塔)。

  15. 写程序 • 算法分析:图4-12为金字塔状图形,可将金字塔图形分解成3个小的三角形。第一个是1-1-5(左边)组成的直角三角形,第二个是1-4-1(右边)组成的直角三角形,第三个是在1-1-5左上角一个由空格组成的三角形。

  16. 写程序 #include <stdio.h> int main(void) { int i,j,k,s; for (i=1;i<=5;i++) { for (j=1;j<=5-i;j++) printf(" "); for (k=1;k<=2*i-1;k++) { if ( k < i) printf("%2d",k); else if (k==i) { s=k; printf("%2d",s);} else printf("%2d",--s); } printf("\n"); } return 0;}

  17. 写程序 按下述形式输出九九乘法表。 1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 ······ 1 * 9 = 9 2 * 9 =18 ······ 9 * 9 = 81

  18. 写程序 • 算法分析:该九九表为一个九行九列呈阶梯状的图表。如果设相乘的两个数为i、j,两数相乘的乘积为m,j*i=m表示为一列。按行观察:第1行,只有一列,1*1=1;第2行,有2列,1*2= 2 2*2= 4,其中,第1列1*2中第2个数字为2与行号相同,第2列2*2中第2个数字也与行号相同,而第1个数字与列号相同,从1到2每列增1;第3行,有3列,1*3= 3 2*3= 6 3*3= 9,其中,每一列的第2个数字为3均与行号相同,而第1个数字从1到3每列增1。以此类推,每行每一列的第2个数字均相同且为行号,每行每一列的第1个数字从1开始每列增1,直到等于行号。定义i为行数的循环控制变量,j为列数的循环控制变量,因此,利用双重循环设计该程序,其中,外循环控制行数有for (i=1;i<=9;i++),内循环控制列数,对每一行,内循环有for (j=1;j<=i;j++)。

  19. 写程序 #include <stdio.h> int main(void) { int i,j; for (i=1;i<=9;i++ ) /*外循环为行*/ { for (j=1;j<=i;j++ ) /*内循环为列*/ { printf("%d*%d = %2d",j,i,i*j ); } printf("\n"); } return 0; }

  20. 上机练习 3.程序填空。 (1)下面程序实现的功能是:输入一个小写字母,将该字母循环后移5个字母位置后输出。如'a'变成'f','w'变成'b'。请在程序下划线处填上正确的内容,以实现程序的功能。

  21. 上机练习 #include <stdio.h> int main(void) { char c; c= ① ; if(c>='a'&& ② ) ③ ; else if(c>='v'&&c<='z') ④ ; putchar(c); return 0; }

  22. 上机练习 (2)下面程序的功能是分别计算1~10之间的奇数和与偶数和。请在程序下划线处填上正确的内容,以实现程序的功能。 #include <stdio.h> int main(void) { int a,b,c,i; a=c=0; for(i=0;i<=10;i+=2) { a+=i; ⑤ ; c+=b; } printf("偶数之和=%d",a); printf("奇数之和=%d", ⑥ ); return 0; }

  23. 上机练习 (3)下面程序的功能是求1~1000之间满足“用3除余2、用5除余3、用7除2”的数,且一行只打印5个数。请在程序下划线处填上正确的内容,以实现程序的功能。 #include <stdio.h> int main(void) { int i=1,j=0; do{ if ( ⑦ ) { printf("%4d",i); j=j+1; if ( ⑧ ) printf("\n"); } i=i+1; } while(i<=1000); return 0; }

  24. 上机练习 5.分析程序,写出程序执行的结果。 (1) #include <stdio.h> int main(void) { float a=2.0,b; if (a<10.0) b=1.0/a; else if((a<0.5)&&(a!=2.0)) b= 1.0/(a+2.0); else if(a<10.0) b= 1.0/a ; else b=10.0; printf("%f\n",b); return 0; }

  25. 上机练习 (2) #include <stdio.h> int main(void) { int a = 13, b = 21,m = 0; switch(a%3) { case 0: m ++;break; case 1: m ++; switch(b%2) { default: m++; case 0: m++; break; } } printf("%d\n",m); return 0; }

  26. 上机练习 (3) #include <stdio.h> int main(void) { int n=10; while (n>7) { n--; printf("%d ",n); } return 0; }

  27. 上机练习 (4) #include <stdio.h> int main(void) { int x, y; for(y=1,x=1;y<=50;y++) { if(x>=10) break; if (x%2==1) { x+=5; continue; } x-=3; } printf("y=%d\n",y); return 0; }

More Related