




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语言程序设计实训讲义 目录第一部分 简单程序设计第 1 单元顺序结构程序设计(8 课时)第 6 单元迭代算法、递归算法和模拟求解 (4 课时) 任务 1 使用迭代算法进行方程求解17 任务 2使用递归算法计算阶乘18任务 3模拟求解问题(选做)20第三部分 数据的组织第 7 单元利用数组来组织数据(6 课时)任务 1 同类型多个数据的存储21 任务 2:一维数组应用21 任务 3 矩阵问题(二维数组的应用)22 任务 4:冒泡排序法23任务 5:插入排序法24 任务 6:简单排序法(选做)24 第 8 单元利用指针来处理数据(6-8 课时) 任务 1:指针的简单应用25 任务 2:指针函数的简单应用26 任务3指针与数组 27 第 9 单元字符串的处理(6-8 课时) 任务 1 字符数组的简单应用28 任务 2 利用指针处理字符串29 任务 3:字符串标准函数的应用 任务4命令行参数 30 第 10 单元结构体(4-6 课时) 任务 1 利用结构体类型处理数据31 任务 2 结构体数组的应用32 第 11 单元文件操作(4 课时) 任务 1 文件的读写操作34 任务2文件的复制 36任务 1: 任务 2: 任务3: 任务4 第 2 单元分支结构程序设计(4-6 课时) 任务1数据的比较 5任务 2 由菜单选择功能实现6 任务 3:字符分类7 第 3 单元循环结构程序设计(68 课时)8在显示器屏幕上显示一行字符2 数据的交换3基本算术运算 4 展示算术复合赋值运算符特点 5引例: 在屏幕上显示指定大小长方形 任务 1: 计算 n!8 任务 2 简单的数据加密程序9 任务3求素数 10 任务4设置用户登录密码检查(选做) 11 第 4 单元用函数组织 C 语言程序(4 课时) 任务 1: 简单函数12任务 2 函数声明和嵌套调用13 任务 3 实现函数间参数的传递14 第二部分 程序设计算法示例30第 5 单元穷举算法(4 课时)任务 1: 劳动分工问题15 任务 2: 逻辑推理161第一部分 简单程序设计第 1 单元顺序结构程序设计(8 课时)任务 1: 在显示器屏幕上显示一行字符 1.题目:输出“This Is My First C Program.”。2.程序 1/* 程序名: u101.c*/2#include 3int main( ) 4 5printf(Hello World.n) ; 6return 0;73.说明 第1行用/*和*/括起来的是注释行, 用于说明程序的功能或程序的名字 第2行是一个文件包含命令。 第3行中, main 是函数名, 表示“主函数”。每个 C 程序都必须有一个 main 函数, 也只能有一个主函数。 它的结构是这样的:main( ) 语句 printf 函数: C 语言提供的标准输入输出库函数 语句: C 语言的函数体由一些语句组成, 每个语句由一个分号结束。本例中, 主函数只有一个语句: printf(This Is My First C Program.n);任务 1.1 知识点: 1. 注释 2. 文件包含命令 3. 主函数4.printf 函数 5. 转义字符 6. 程序的编译和执行 7. 程序书写格式4.C 语言程序的编译、连接和执行 第一步: 编辑源程序 第二步: 编译 第三步: 链接第四步: 执行 5.课堂实践/课后作业(1) 编写一个 C 语言程序, 在屏幕上显示如下图 形。* * * *(2) 编写一个C语言程序, 在屏幕上显示如下菜单 *1 计算绝对值 2 计算倒数 3 计算平方值 4 计算平方根* -2任务 2: 数据的交换1.题目 酒杯 A 中盛有红酒, 酒杯 B 中盛有白酒。请将两杯中的酒交换。 2 .算法分析 要交换酒杯 A 和酒杯 B 中的酒, 必须借助第三个酒杯。过程如下: 准备一个空酒杯 Temp ; 将 A 杯中的红酒倒入 Temp ; 将B 杯中的白酒倒入A 中; 将 Temp 中的红酒倒入 B 中。 3.程序/*程序名: u102.c*/ #include int main( ) int a=2, b=3, temp; printf(a=%d, b=%dn, a, b); temp=a; a=b; b=temp; printf(a=%3d, b=%dn, a, b); return 0;4.知识点 (1) 变量与常量 (2) 变量的类型和变量类型说明符 (3) 变量名和命名规则 (4) 变量的定义 (5) 赋值运算符 (6)printf 函数的格式参数 5.课堂实践/课后练习 (1)修改本例, 输出两个字符w 和t 。 (2) 分析以下程序的输出结果。 main( )charc =x ; printf (c : dec =%d , oct =%o , hex =%x , ASCII =%cn , c , c , c , c) ;以下单词为 C 语言的保留字(关键字),不能 用作其它用途:int,char,long,float,double,short,unsigned, struct,union,enum,auto,extern,static, register,typedef,void,if,else,switch,case, default,do,while,for,break,continue, return,goto,define,include,undef,ifdef, endif,line (3) 以下 printf 语句中的“-”的作用是 #include main( ) 1 , 该程序的输出结果是2。int x=12;3double a=3.1415926; printf (%6dn, x);即%md 的格式, m 为修饰符, d 为格式字符 printf (%-6dn, x);即%-md 的格式, -和 m 为修饰符, d 为格式字符 printf (%14.10lfn, a);即%m.nlf 的格式, m、n、l 为修饰符, f 为格式字符 printf (%-14.10lfn, a);即%md 的格式, -、m、n、l 为修饰符, f 为格式字符 -任务3: 基本算术运算1.题目 编写一个显示基本算术运算功能的程序, 并了解算术运算过程中涉及的有关向题。 2.程序/*程序名: u103. c*/ #include int main( ) printf(n1: 2%3 is %d, 2%3); printf(n2: 2%-3 is %d, 2%-3); printf(n3: -2%3 is %d, -2%3); printf(n4: 2.0/3 is %f, 2.0/3); printf(n5: -2.0/3 is %f, -2.0/3); printf(n6: 2.0/-3 is %f, 2.0/-3); printf(n7: 2/3*10 is %d, 2/3*10); printf(n8: 2.0/3*10 is %f, 2.0/3*10); printf(n9: 2+3*10 is %d, 2+3*10); return 0;3.运行结果: 右框 4.知识点: 右框 5.课堂实践/课后练习 (1) 先将如下两个数学表达式转换为 C 语言的表达式, 然后编写程序验证。运行结果 1:2%3 is 2 2:2% -3 is 2 3:-2%3 is-2 4:2.0/3 is 0.666667 5:-2.0/3 is-0.666667 6:2.0/-3 is-0.666667 7:2/3*10 is 0 8:2.0/3*10 is 6.666667 9:2+3*10 is 32任务 1.3 知识点: (1)算术运算符 (2)算术运算符的优先级和结合性 (3)算术表达式 (4)不同类型数据之间的转换12(2*3+2233.0 * 43.0 -4+212(2) 求下面算术表达式的值并编程验证结果: x+a%3*(int)(x+y)%2/4 (3) 阅读下面的程序, 修改其中的错误, 并指出造成错误的原因。#include main x, y, z; x+y=5; printf(x+y=, z=, x, y, z);) 设 x=2.5, a=7, y=4.7 -4任务4 展示算术复合赋值运算符特点1.题目 编写展示算术复合赋值运算符特点的程序。2.程序 /*程序名: u104.c*/#include int main( ) int x=2, y=3, t; printf(nl: x=%d, y=%d, x=x+1, y); x=2; printf(n2: x=%d, x+=1); printf(n3: x=%d, x+); x=2; x+; +y; printf(n4: x=%d, y=%d, x, y); t=x+; printf(n5: t=%d, x=%d, t, x); printf(n6: y=%d, y-=1); printf(n7: y=%d,-y); t=+y; printf(n8: t=%d, y=%d, t, y); printf(n9: x+=%d, +x=%d, x+, +x); printf(n10: -y=%d, y-=%d, -y, y -); return 0;3.输出结果: 右框 4.知识点: 右框 5.课堂实践课后练习 (1)已知 int x =8 ;分别写出下面两个 printf 语句的输出结果, 并编程验证 1 printf(%d,%d,x=4,x);2 printf(%d,%d,x,x+); (2)编写一个 c 语言程序, 根据输入的半径值计算和输出圆的周长、面积及球的体积。 = 第 2 单元分支结构程序设计(4-6 课时)任务 1 数据的比较1.题目 从键盘输入三个数, 输出其中最大的一个数。 2.分析 见框图运行结果: 1 :x =3 ,y =3 2:x =3 3:x =3 4:x =3 ,y =4 5:t =3 ,x =4 6:y =3 7:y =2 8:t =3 ,y =3 9:x +=5 ,+x =5 10:-y =1 ,y -=3任务 1.4 知识点 (1) 自增/ 自减运算 (2) 复合赋值运算符 (3) 复合赋值运算符的优 先级和结合性 (4) 赋值表达式 (5)printf 函数中参数的53.程序 /*程序名: u201.c*/#include int main( ) int a, b, c, max;printf(Please input three integers(a, b, c): n); scanf(%d, %d, %d, &a, &b, &c); printf(The three integers is: ); printf(a=%dtb=%dtc=%dn, a, b, c); if(ab)max=a;elsemax=b; if(cmax)max=c; printf(The max is: %d, max); return 0;任务 2.1 知识点(1) (2) (3) (4) (5)交互式友好界面 格式输入函数 scanf( ) if.else 结构 关系运算符和关系表达式 逻辑运算符和逻辑表达式4.知识点:右框 5.课堂实践/课后练习 (1) 对于以下函数 y =f(x) ,请编写程序描述之并画出框图。-任务 2 由菜单选择功能实现1.题目 在屏幕上输出菜单,并根据用户输入的选择实现对应的功能。 2 .分析 根据用户输入的字符进行功能实现, 输入 a, 则计算正弦值, 输入 b, 则计算余弦值, 输入 c, 则计算绝对值, 输入 d, 则计算平方根。 3.程序/* 程序名 u202.c */ #include #include int main()char ch; float x; printf(*n); printf(a计算指数函数值n); printf(b计算对数值n);6printf(c计算绝对值n); printf(d计算平方根n);printf(*n); printf(请输入 a b c d 中任一字符:); ch=getchar(); printf(您输入的字符是:); putchar(ch);printf(n 请输入进行运算的数: ); scanf(%f,&x);switch(ch) case a:printf(n%f 的指数函数值是%f,x,exp(x);break; case b:printf(n%f 的对数值是%f,x,log(x);break; case c:printf(n%f 的绝对值是%f,x,fabs(x);break; case d:printf(n%f 的平方根是%f,x,sqrt(x);break; default:printf(n 菜单选择错误!); return 0;任务 2.2 知识点 (1) 字符输入函数 getchar() (2)字符输出函数 putchar() (3)多分支 switch 结构 (4) 库函数的使用4.知识点:右框 5.课堂实践/课后练习 (1) 编程实现第 1 单元任务 1 的课后练习(2)的各功能; (2) 根据输入的字符输出成绩区间: 输入 A 或 a,成绩在90, 100); 输入 B 或 b,成绩在80, 90);输入 C 或 c,成绩在70, 80); 输入 D 或 d, 成绩在60, 70); 输入 E 或 e, 成绩在 0, 60); 输入其它字符, 显示输入错误。 使用 switch 语句编程实现。 -任务 3:字符分类1.题目 判断由键盘输入的字符是数宇、字母, 还是空白。 2 .分析根据输入的字符进行判断, 若是数字, 则输出“digiter” , 若是字母, 则输出“char” , 否则输出“white” 3.程序/*程序名: u203.c*/ #includeint main( ) char c; printf(Please input c=getchar( );/*输入一个字符*/ printf(nIts a);/*用输出撇号*/ if(c=0&c=A&c=a&c=z)printf(char!);任务 2.3 知识点 (1) 字符型数据的比较和加减运算 (2) 转义字符的使用 (3)if.else 结构的第三种形式 (4)if 结构的嵌套elseprintf(white!); return 0;4.知识点:右框 5.课堂实践/课后练习 (1)下面的程序是否能求出三个数中的最大值?为 什么?如何修改?#include main( ) (2)将以下程序段改用嵌套的 if 语句实现。 int s, t, m;t=(int)(s/10); switch(t) case 10: m=5;break; case 9: m=4;break; case 8: m=3;break; case 7: m=2;break; case 6: m=1;break; default: m=0; (3) 使用 if 嵌套编程判断某一年是否闰年.(提示: 闰年能被 400 整除或者能被 4 整除但且不能被 100 整除)int x, y, z, max; if(zy)if(zx) max=z;if(yx) max=y;else printf(nmax=%d , max);任务 3.0 知识点 (1) for 循环结构 (2) 转义字符/t=第 3 单元循环结构程序设计(68 课时)引例: 在屏幕上显示指定大小长方形 1.题目:在屏幕上显示一个长 20 个星, 宽 17 颗星组成的长方形2.程序循环开始i=n/* 程序名 u300.c */ #include stdio.hint main() 假i=1,p=1int i; printf(t*n); for(i=1;i=15;i+)printf(t* printf(t*n);return 0;真(非0)p*=i*n);i+3.知识点: 上页框内 -任务1: 计算n!81.题目:使用 C 语言的三种循环语句编程计算 n 的阶乘 2. 分析: 流程框图(右图) 3. 程序/* 程序名 u301.c */ #include stdio.hint main() int i,n;long p=1; printf(请输入 n 的值:); scanf(%d,&n); for(i=1;i=n;i+)p*=i; printf(%d!=%d,n,p); return 0;任务 3.1 知识点 (1) while 语句 (2) do while 语句 (3) 三种循环语句的转换/* 程序名 u302.c */ #include stdio.hint main() /* 程序名 u303.c */ #include stdio.h int main() int i=1,n; long p=1; printf(请输入 n 的值:); scanf(%d,&n); do p*=i;i+; while(i=n);printf(%d!=%d,n,p); return 0;int i=1,n; long p=1; printf(请输入 n 的值:); scanf(%d,&n); while(i=n) p*=i;i+; printf(%d!=%d,n,p); return 0;4.知识点:右框 5. 课堂实践/课后练习 (1) 编程计算 1+2+.+100 的和.(分别使用 3 种循环语句) -任务 2 简单的数据加密程序1. 题目 采用某种方法将输入的数据进行转换, 以实现数据加密。 2. 分析本题采用的是一种最简单的以字符为单位的置换加密方法。这个方法就是在 ASCII 码表中, 把一个要变 换的字符加上(或减去)一个常数使其变成另外一个字符。如字符a -32 , 变成了A 。这里“32” 就称为 密钥(key )。93. 程序 /*程序名: u304. c*/#include int main( ) int key; char ch; printf(请输入密钥: n); scanf(%d, &key); printf(输入明文, 将得到对应密文如下: n); while(ch=getchar()!=n)(ch+key)122?putchar(ch-122+33+key): (ch+key)33?putchar(ch+122+key): putchar(ch+key); return 0;4.知识点:右框 5.课堂实践/课后练习 (1) 设计一个与本例对应的解密程序。 -任务3 求素数1.题目 输出 100 以内的素数。 2 .分析素数是除 1 和它本身之外不能被其他任何整数整除的正整数。本题目可以采用穷举法。 3.程序任务 3.2 知识点 (1) while 语句表达式 (2) 条件运算符和条 件表达式 (3) 字符的存储与运 算/*程序名: u305.c*/ #include int main( )int m, n, flag, j=0; printf(n The primers in 3100 is: n); for(m=3;m=100;m+) flag=1; /*设置标志*/ for(n=2;n=m/2;n+) if(m%n=0) flag=0;/*改变标志*/ break; if(flag=0)/*判断标志*/运行结果: The primers in 3 100 is :3 17 37 59 7957 11 13 19 23 29 31 41 43 47 53 61 67 71 73 83 89 9710continue; printf(%4d, m); j+; if(j%5=0) printf(n); return 0;任务 3.3 知识点 (1) 循环的嵌套 (2) break 语句 (3) continue 语句 (4) 标志变量的使用 (5) 如何写出好程序的几条建议4.运行结果:右上框 5.知识点:右框 6.课堂实践(1)阅读下面的程序, 指 (2) 编程打印如下九九乘法表。要求分别采用三种循环语句编程。出运行结果。main( ) inta=1, b; for(b=1;b=8) break; if(a%2=1) a+=5; continue; a-=3; printf(%dn, b);123456789 - 1*1=1 2*1=23*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=92*2=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=183*3=8 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=274*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=365*5=25 6*5=30 7*5=35 8*5=40 9*5=456*6=36 7*6=42 8*6=48 9*6=547*7=49 8*7=56 9*7=638*8=64 9*8=729*9=81 -任务 4 设置用户登录密码检查(选做)1.题目 设置用户登录密码检查 功能要求: 1提示用户输入一个密码。 2用户输入密码后, 程序对其进行检查: 密码对, 则告诉用户: “ 欢迎您使用本系统!” ; 密码不对, 则告诉用户: “ 您无权使用本系统!” 。 3用户有 5 次验证机会。2.程序 /* 程序名: u306.c*/#include #include /* 使用转换函数 atoi 必须包含头文件 stdlib.h*/ #define TIMES511#define PASSWORD 1234 int main( ) char password10; /* password 为用户输入的密码*/ int i =0;/*i 为计数器, 记录回答密码次数*/do printf(请输入密码: ); scanf(%s, password); if (!strcmp(password,PASSWORD) break; else i+;while(iTIMES); if(iTIMES)任务 3.4 知识点 (1) 符号常量 (2) 字符串常量 (3) 常用字符串操作函数 (4) break 语句(5) 计数器printf(欢迎您使用本系统! ); printf(您无权使用本系统!);else return 0;3.知识点: 右框 4.课堂实践 (1) 设计一个累加求和程序, 不断将用户从键盘输入的数字加起来, 直到输入回车为止。 = 第 4 单元用函数组织 C 语言程序(4 课时)任务 1: 简单函数 1. 题目:编写函数计算 n!,并通过函数调用, 计算组合数 C(m,n)=。2. 分析 本例根据阶乘的相关运算, 可以设计一个函数, 完成求 n! 的操作。 主函数的功能就是调用该函数, 以实现题目要求。m!n!(m-n)!3.程序/* 程序名: u401.c*/ #includeint main() int m,n,c; printf(“n 请输入 m 和 n 的值: ); scanf(%d,%d,&m,&n); c=fac(m)/(fac(n)*fac(m-n);/*三次调用函数 fac,求 m!、n!、(m-n)!*/ printf(nC(m,n)=%d,c);/*输出计算结果*/ return 0; int fac(int k)/*计算一个整数的阶乘*/*输入 n、k 的值*/int i,s=1;12for(i=1;i=k;i+) s*=i;return(s);任务 4.1 知识点 (1) 函数定义 (2) 函数调用4.知识点: 右框 5.课堂实践/课后练习 (1)编写 2 个函数,分别求三个数的最大值和最小值,在主函数中计算最大值和最小值之差。 (2) 编写程序,用泰勒(Taylor)级数求 e 的近似值,直到最后一项小于 10-6 为止.e=1+1+1 +.+ 1-任务 2 函数声明和嵌套调用1!2!n!1.题目 编写两个函数,分别计算 n!和 P(m,n),并在主函数中输出 P(m,n)和 C(m,n) 2 .分析 (1)P(m,n)=m!/(m-n)! (2)C(m,n)= P(m,n)/n! (3)函数 fac 用于计算 n! 3.程序/*程序名 u402.c*/ #includestdio.hlong fac(long); long perm(long,long); int main() long m,n,p,c; printf(n 请输入 m 和 n 的值: ); scanf(%d,%d,&m,&n); p=perm(m,n); /*调用函数 perm,计算 P(m,n)*/ c=p/fac(n);/*利用上一个语句得到的 P(m,n)并调用函数 fac,计算 C(m,n)*/ printf(nC(m,n)=%d,c);/*输出计算结果*/ return 0; long perm(long m, long n)/*计算 P(m,n)*/ return fac(m)/fac(m-n);/*调用 fac 函数计算 P(m,n)*/ long fac(long k)/*计算阶乘*/(4)函数 perm 用于计算 P(m,n) (5)主函数中计算 C(m,n)和输出 P(m,n)和 C(m,n)long i,s=1; for(i=1;i=k;i+)s*=i; return(s);任务 4.2 知识点 (1) 文件包含命令中和的差别 (2) 函数声明的使用 (3) 函数调用的嵌套使用/*输入 m、n 的值*/134. 知识点:右框 5.课堂实践/课后练习 (1) 编写函数, 功能为求圆的周长和面积。编写主函数进行程序调用, 半径从键盘输入。 (2) 设计程序, 可模仿计算器完成加、减、乘、除四则运算: 由键盘输入两个数, 按用户的决定进行一种运 算, 并给出结果。其中, 加、减、乘、除各由一个函数实现。 -任务 3 实现函数间参数的传递 1.题目定义一个函数, 从主调函数接收两个数据, 并使之交换。 2.程序 /* 程序名: u403.c*/ #include void swap(int x , int y) int temp ;temp =x ; x =y ; y =temp ; printf(in function x =%d , y =%dn , x , y) ; int main() int a, b;3.运行结果: 右图 4.分析 从上面的运行结果可以看出, 并没有达到交换的目的。原因: 实参和形参间的传递是单向值传递。即只能由 实参传递给形参, 形参不能传值给实参。形参值的改变对实参不起作用。 5.采用全局变量解决两数交换 /* 程序名: u404.c*/ #include int a =2 , b =3 ;void swap(); int main()int temp ; temp =a ; a=b; b=temp; printf(in function a=%d, b=%dn, a, b);printf(a=%d, b=%dn, a, b); swap( ); printf(a=%d, b=%dn, a, b); return 0;6.运行结果:右图 7.知识点:变量的类型和作用范围 8.仔细阅读程序 u403.c 和 u404.c,分析哪些变量是全局变量,哪些变量是局数变量,并指出它们的作用 范围和生存周期. =第二部分 程序设计算法示例void swap( )printf(input two integers: n); scanf(%d, %d, &a, &b); printf(a=%d, b=%dn, a, b); swap(a, b);printf(a=%d, b=%dn, a, b); return 0;14第 5 单元穷举算法(4 课时)穷举算法的基本思想是: 对问题的所有可能状态一一测试, 直到找到解或全部可能状态都测试完毕为 止(无解)。任务 1: 劳动分工问题 1. 题目36 块砖, 36 人搬;男搬 4, 女搬 3, 两个小孩抬一砖, 要求一次全搬完, 问男、女、小孩各若干?2. 分析 依题意,男人数最多 8 人,女人最多 11 人;男人(men)、女人(women)、小孩(children)的人数必须 满足以下 3 个条件:总人数为 36: men+women+children=36; 砖 总 数 为36 : 4*men+3*women+children/2=36; 由“两个小孩抬 一块砖”可知:小孩人数为偶数,即 children%2=0.满 足以上条件的men, women, children取值即为该问 题的答案。本题的穷举过程算法为:从1开始,列举 men 的各 个可能值,在每个 men 值下找出满足条件的解.for(men=1;men=8;men+)下面进一步用穷举方法来分析 S1: for(women=1;women=11;women+)S1: 找满足两个方程的解的 women 和 children S2: 输出一组解 由于对列举的每个 children 与 women 都可以按下式 children=36-men-women 求出一个 children 因此, 只要该 children 满足另一个方程 4*men+3*women+children/2=36 就可以得到一组满足题目要求的 men、women、 children 所以, S1.1 可以改写为: children=36-men-women, S1.2 可写为: if(4*men+3*women+children/2=36) printf(%d, %d, %dn, wen, women, children); 3. 程序0 1 2/*程序 u501.c*/ int main( )int men, women, children; for(men=1;men=8;men+)for(women=0;women=11;women+) children=36-men-women; if(4*men+3*women+children/2=36)printf(%d, %d, %dn, men, women, children); return 0;4.说明 用穷举算法解决问题, 通常可以从两个方面进行分析: (1) 问题所涉及的情况:问题所涉及的情况有哪些,情况的种数是否确定,若确定,则考虑用计数法;反之考虑标志法. (2) 答案需要满足的条件:分析出这些情况需要满足什么条件,才能成为问题的答案. 5.课堂实践/课后练习百马百担问题:有 100 匹马,驮 100 担货,大马驮三担,中马驮二担,两匹小马驮 1 担,问有大、中、 15S1.1 找满足条件的一个 children S1.2 输出一组解小马各几只?-任务 2: 逻辑推理 1.题目:某宿舍住有 A、B、C、D、E 共 5 人。期末考试结束后, 程序设计任课老师来到这个宿舍, 告诉 他们: 你们这个宿舍的同学本学期囊括了本门课程全班成绩的前 5 名。同学们竞相问道: 那我们 5 个人的名次是怎么排的呀?老师说, 你们猜吧。于是大家就推测了起来: A说: E一定是第一;E说: D会得第一。 B 说: 我可能是第二;老师说: 我再告诉你们一下吧: C 说: A 一定最不好; 你们当中, 考第一和考第二的同学的推测是正确的; D 说: C 肯定不会最好; E 肯定不是第二名, 也不是第三名。 2.分析 (1) 整理条件 1用a、b、c、d、e分别代表A、B、C、D、E 5 人的名次。依题意可得:a+b+c+d+e=l+2+3+4+5=15 2 要求的是 A、B、C、D、E 的名次, 故 a、b、c、 d、e 的取值也不会相同。 3 由于“E 肯定不是第二名, 也不是第三名”, 所以 有表达式 e!=2 以及 e!=3。 4 5 位同学的推测, 可以分别表示为:e=15-a-b-c-d; 找出满足以上 4 个条件的一组解;e=l b=2 a=5 c!=1 d=l(A 的推测) (B 的推测) (C 的推测)(D 的推测) (E 的推测)考虑条件2和3,穷举过程的细化为for(a=1;a=5;a+) for(b=1;b=5;b+) if(b=a) continue;得表达式:(e=1)+(b=2)+(a=5)+(c!=1)+(d=1)=2 (2) 本题的程序框架 for(a=1;a=5;a+) for(b=1;b=5;b+)for(c=1;c=5;c+) for(d=1;d=5;d+)for(e=1;e=5;e+)找出滿足以上 5 个条件的一组解; 考虑条件1对于每一组设定的 a、b、c、d, 可以推 出 e=15-a-b-c-d,因此可以将最内层的循环省去.即: 3.程序/*程序名: u502.c*/ #include int main( ) int a=0, b=0, c=0, d=0, e=0, i=1;if(d=c)|(d=b)|(d=a) continue;/*不再考虑这个 d*/e=15-a-b-c-d; if(e=2)|(e=3)continue; /*条件3*/ 找出满足以上条件4的一组解;for(a=1;a=5;a+)for(a=1;a=5;a+) for(b=1;b=5;b+)for(d=1;d=5;d+)/*不再考虑这个 b*/ for(c=1;c=5;c+)if(c=b)|(c=a) continue;/*不再考虑这个 c*/for(d=1;d=5;d+)16for(b=1;b=5;b+)if(b=a) continue; for(c=1;c=3) continue; for(d=1;d=3) continue; if(d=1)&(e!=2) continue;if(e=1)+(b=2)+(a=5)+(c!=1)+(d=1)=2) return 0;printf(n 第%d 种可能: , i+);/*i 为计数器,统计解的个数*/ printf(A 排第%d 名, , a); printf(B 排第%d 名, , b); printf(C 排第%d 名, , c);printf(D 排第%d 名, , d); printf(E 排第%d 名, e);4.课堂实践/课后练习 (1) 安排轮休。某公司有 7 位保安: A、B、C、D、E、F、G。为了工作需要, 每人每周只能轮休一天。考 虑每个人的特殊情形, 让他们先选择自己希望哪一天轮休。他们的选择如下:A: 星期二、四; B: 星期一、六; C: 星期三、日; D: 星期五; 请用 C 语言程序安排一个轮休表, 让他们都满意。 =E: 星期一、四、六; F: 星期二、五; G: 星期三、六、日。第 6 单元迭代算法、递归算法和模拟求解(4 课时)迭代是一个不断用新值取代变量的旧值, 或由旧值递推出变量的新值的过程。递推与迭代并无严格的区别。 任务 1 使用迭代算法进行方程求解1. 题目 用迭代法求 a 的平方根。已知求平方根的迭代公式是 x1=(x0+a/x0)/2 迭代初值 x0=a/2。当前后两次求出的 x 的差的绝对值小于 0.0001 时, 迭代结束。 2. 分析 该题目较为简单, 迭代变量、迭代关系式及对迭代的控制都已明确指出。 3. 程序/*程序名: u601.c*/17#include #include/*后面使用函数 fabs(),因而需包含“math.h”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《小学教师招聘》模拟题库讲解及答案详解(全优)
- 河流生态监测创新创业项目商业计划书
- 汽车动力性能展示创新创业项目商业计划书
- 用电负荷平衡创新创业项目商业计划书
- 2025年教师招聘之《小学教师招聘》考前冲刺测试卷包含答案详解【基础题】
- 教师招聘之《幼儿教师招聘》综合提升测试卷含答案详解【典型题】
- 教师招聘之《小学教师招聘》过关检测及参考答案详解【a卷】
- 2025年教师招聘之《幼儿教师招聘》题库必背100题附答案详解【考试直接用】
- 教师招聘之《幼儿教师招聘》复习试题及参考答案详解(典型题)
- 教师招聘之《小学教师招聘》考试历年机考真题集及参考答案详解【典型题】
- 道德与法治三年级上册人教版教案全册
- 北京丰台长峰医院重大火灾事故调查报告
- 产科医疗纠纷原因及分析
- 口腔常见粘膜病
- JC-T 2113-2012普通装饰用铝蜂窝复合板
- JB T 6527-2006组合冷库用隔热夹芯板
- 2022上海秋季高考语文卷详解(附古诗文翻译)5
- 定制手办目标市场调研
- 新版规范(2017)沥青混凝土路面设计(详细应用)
- 机器学习基础讲义
- 铁路交通事故调查处理规定-事故调查
评论
0/150
提交评论