程序设计课程实践

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由Real——M贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
程序设计课程实践
主讲: 主讲:严冬梅
课程评分方法 (Grading Policies)
Lecture Grade (100) = Exercise Grade (50) + Laboratory Grade (50)
2
Laboratory Grade (50) =
∑ Lab
i = 1
(i)
实验 (Laboratory Projects)
共 2 次;迟交罚扣为 10% /周;抄袭者0分; 抄袭者0 2人一组,分工负责:编程 人一组,分工负责:编程(Programming: 25)、测试分析 、测试分析(Testing & Analyzing: 10)与文 与文 档(Documentation: 15); ; 上交软盘, 上交软盘,请在标签上写明姓名和 Group ID (Project 1 发还时将得到 ,并在文档末尾 发还时将得到), 写明分工。 写明分工。
实验报告
一、问题描述 二、关键点 三、算法 四、程序 五、测试分析 六、总结 七、分工
程序设计实践
实验一 实验二 实验三 实验四 实验五 实验六 实验七 实验八 最简单的C 最简单的C程序设计 输入/ 输入/输出 运算符与表达式 流程控制 复杂的C 复杂的C程序设计 数组( 数组(1) 数组( 数组(2) 指针( 指针(1)
程序设计实践
实验九 实验十 指针( 指针(2) 函数( 函数(1)
函数( 实验十一 函数(2) 结构体( 实验十二 结构体(1) 实验十三 结构体(2) 结构体( 实验十四 文件
综合实验一 人民币转化 综合实验一 注册登录
最简单的C 实验一 最简单的C程序设计
一、实验目的
熟悉Turbo 2.0集成开发环境 1. 熟悉Turbo C 2.0集成开发环境 学习完整的C 2. 学习完整的C程序开发过程 理解简单的C 3. 理解简单的C程序结构
二、实验内容
1.编写程序,在屏幕上输出以下内容: 1.编写程序,在屏幕上输出以下内容: 编写程序 This is my first programme. I love C programming. 2.编写程序 计算梯形的面积,上底、 编写程序, 2.编写程序,计算梯形的面积,上底、下底和高 由键盘输入。
输入/ 实验二 输入/输出
一、实验目的
掌握各种数据类型(变量和常量的使用) 1. 掌握各种数据类型(变量和常量的使用) 2. 掌握数据的输入输出方法
二、实验内容
编写程序, a=10, printf()显示以下信息 显示以下信息: 1. 编写程序,设a=10,用printf()显示以下信息:The value of A is 10. 编写程序,以人机对话方式输入a 2. 编写程序,以人机对话方式输入a,b,c,d四个整数 的值,计算下列表达式:(a+b c)*d,并显示结果 :(a+b并显示结果。 的值,计算下列表达式:(a+b-c)*d,并显示结果。 编写程序, 使用getchar()从键盘接收一字符, getchar()从键盘接收一字符 3. 编写程序, 使用getchar()从键盘

接收一字符,然后 使用printf()显示该字符及其ASCII代码值。 printf()显示该字符及其ASCII代码值 使用printf()显示该字符及其ASCII代码值。 编写程序,使用scanf()从键盘接收一整数, scanf()从键盘接收一整数 4. 编写程序,使用scanf()从键盘接收一整数,然后使用 putchar()以该整数作为ASCII代码值显示其对应的字符 以该整数作为ASCII代码值显示其对应的字符。 putchar()以该整数作为ASCII代码值显示其对应的字符。
实验三 运算符与表达式
一、实验目的
1. 掌握各种运算 2. 掌握自动类型转换和强制类型转换构
二、实验内容 1.求方程6x 0.5x-8.75=0的根 1.求方程6x2-0.5x-8.75=0的根 求方程 2.编写程序,取出0000101110010010的高8 2.编写程序,取出0000101110010010的高8位,低八位 编写程序 0000101110010010的高 翻转。 翻转。 3.设置二进制数屏蔽程序,把值为62385的无符号整型 3.设置二进制数屏蔽程序,把值为62385的无符号整型 设置二进制数屏蔽程序 62385 变量word分解成两个无符号char型数,其中高8 word分解成两个无符号char型数 变量word分解成两个无符号char型数,其中高8位和低 位分别赋予变量high low,并显示结果。 high和 8位分别赋予变量high和low,并显示结果。
实验四 流程控制 (一) 一
一、实验目的
熟练掌握if~else和switch~case if~else ~case语句 1. 熟练掌握if~else和switch~case语句 2. 熟练掌握选择结构程序设计的精髓 熟练掌握选择结构程序设计的精髓
二、实验内容
编程设计一个简单的计数器程序, 1. 编程设计一个简单的计数器程序,要求根据用户 从键盘输入的表达式:操作数1 操作数2 从键盘输入的表达式:操作数1 运算符 操作数2, 计算表达式的值。指定运算为+ 计算表达式的值。指定运算为+,-,*,/。 例如输入: 例如输入:2.5+3 输出为: 输出为:2.500000+3.000000=5.500000 例如输入: 例如输入:5/2 输出为: 输出为:5.000000/2.000000=2.500000 接下页
实验四 流程控制 (一) 一 二、实验内容
编写程序根据x 2. 编写程序根据x求y的值
y=
7x7x-20 +4x3x2+4x-6 2x3-28 10x10x-2
x=200
接下页
二、实验内容
流程控制(一 实验四 流程控制 一)
税率( 税率(%) 5 10 15 20 25 税 20 75 325 1625 速算扣除数 0 25 125 375 1375 实际收入 380 925 2675 8375
3.编程求某人某月的个调税.计算方法如下: 3.编程求某人某月的个调税.计算方法如下: 编程求某人某月的个调税 级数 1 2 3 4 5 级数 400 1000 3000 10000 全月应纳税所得额 不超过500元 不超过500元 500 500元~2000元 500元~2000元 2000元~5000元 2000元~5000元 5000元~20000元 5000元~20000元 20000元~40000元 20000元~40000元 全月应纳税

所得额 400*0.05 (1000-500)*0.10+500*0.05 1000-500) (2000(3000-2000)*0.15+ (2000-500)*0.1 3000-2000) +500*0.05 (10000-5000)*0.2+(5000(10000-5000)*0.2+(5000-2000)*0.15+ (2000(2000-500)*0.1+500*0.05
实验四 流程控制 (二) 二
一、实验目的
熟练掌握while do~while和for语句 while、 1. 熟练掌握while、do~while和for语句 2. 掌握break和continue语句 掌握break和continue语句 break
二、实验内容
1.编程输出以下图形, 1.编程输出以下图形,行数及每行个数由用户输入决定 编程输出以下图形
*************** *************** *************** ***************
2.编写猜数程序,程序中预先给定某个整数, 2.编写猜数程序,程序中预先给定某个整数,从键盘反 编写猜数程序 复输入整数进行猜数,每次输入数未猜中时, 复输入整数进行猜数,每次输入数未猜中时,提示输入 数过大或过小。猜中时显示猜的次数,最多允许猜20 20次 数过大或过小。猜中时显示猜的次数,最多允许猜20次。 3.编写程序 从键盘输入一个正整数, 编写程序, 3.编写程序,从键盘输入一个正整数,计算该数的各个 位数字之和,并显示结果。例如输入3257 结果为17 3257, 17。 位数字之和,并显示结果。例如输入3257,结果为17。
接下页
实验五:复杂的 程序设计 实验五:复杂的C程序设计
一、实验目的 1. 掌握枚举和递推算法 掌握迭代算法, 2. 掌握迭代算法,学会使用迭代算法求公式 值和方程的根 二、实验内容
1. 用牛顿迭代法求 用牛顿迭代法求f(x)=x3+0.5x2-0.5x-1=0 附近的实根, 在x=0.9附近的实根,要求迭代精度为 -5 附近的实根 要求迭代精度为10 2. 计算 计算f(x)=3x5-6x4+14x2-7x+100在x=0.5 在 时的值
接下页
实验五:复杂的 程序设计 实验五:复杂的C程序设计
二、实验内容
编写程序,某足球队参加M场联赛,获得积分N 3. 编写程序,某足球队参加M场联赛,获得积分N分。 假设赢一场得3 平一场得1 输一场得0 假设赢一场得3分,平一场得1分,输一场得0分, 求此队赢、 输各多少场。例如, 求此队赢、平、输各多少场。例如,赛5场,得9分, 则输出结果为: 则输出结果为: 赢2,平3,输0 赢3,平0,输2 已知f(x)=cos(x) f(x)=cos(x)的初始值为3.14159/4 3.14159/4, 4. 已知f(x)=cos(x)-x。x的初始值为3.14159/4, 用牛顿法求解方程f(x)=0的近似解,要求精确到 用牛顿法求解方程f(x)=0的近似解, f(x)=0的近似解 0.0000001。 0.0000001。 (cos(X )/(-sin(X Xn+1 = Xn-(cos(Xn)- Xn)/(-sin(Xn)-1)
牛顿迭代法
牛顿迭代算法是利用迭代公式求某一公式值的方法。 牛顿迭代算法是利用迭代公式求某一公式值的方法。设公式 是利用迭代公式求某一公式值的方法

x=f(a),迭代公式为x ,a),算法步骤为: 为x=f(a),迭代公式为xn+1=g(xn,a),算法步骤为: 选一个公式的近似值,赋给变量x 10 选一个公式的近似值,赋给变量x0; 计算g(x ,a),将迭代结果保存于变量x 20 计算g(x0 ,a),将迭代结果保存于变量x1; 的绝对值还不小于指定的精度要求时, 30 当x1-x0的绝对值还不小于指定的精度要求时,x0=x1 ,回 步骤重复计算。 到20步骤重复计算。 牛顿迭代算法也是求方程或方程组近似根的一种常用算法设 牛顿迭代算法也是求方程或方程组近似根的一种常用算法设 计方法。设方程为f(x)=0 迭代公式为x f(x)=0, )/f’(x 计方法。设方程为f(x)=0,迭代公式为x1=x0-f(x0)/f (x0), 算法步骤为: 算法步骤为: 选一个方程的近似根,赋给变量x 10 选一个方程的近似根,赋给变量x0; 将迭代结果保存于变量x 20 将迭代结果保存于变量x1; 计算f(x 30 计算f(x1),当f(x1)的绝对值还不小于指定的精度要求 回到2 步骤重复计算。 时,x0=x1,回到20步骤重复计算。
牛顿迭代法
用牛顿迭代法求方程2x +3x-6=0在x=1.5附近的近似根 附近的近似根, 用牛顿迭代法求方程2x3-4x2+3x-6=0在x=1.5附近的近似根, 要求迭代精度为10 要求迭代精度为10-5 #include main() { double x,x1,x0,f,f1; eps=1econst double eps=1e-5; scanf(“%lf %lf”,&x1); scanf( %lf ,&x1); do{ x0=x1; f=2*x0*x0*x0-4*x0*x0+3*x0f=2*x0*x0*x0-4*x0*x0+3*x0-6; f1=6*x0*x0f1=6*x0*x0-8*x0+3; x1=x0x1=x0-f/f1; }while(fabs(f)>=eps); printf(“方程的根为%6.2f\ ,x0); 方程的根为%6.2f printf( 方程的根为%6.2f\n”,x0); }
牛顿迭代法
用迭代法编程求x=sqrt(a),求平方根的迭代公 用迭代法编程求x=sqrt(a), x=sqrt(a) 式为: 式为:xn+1=0.5*(xn+a/xn)
#include main() { double r,x0,x1; scanf("%lf",&r); x1=1; do { x0=x1; x1=0.5*(x0+r/x0); }while(fabs(x1}while(fabs(x1-x0)>0.0000001); printf("sqrt(%f)=%f\ printf("sqrt(%f)=%f\n",r,x1); }
秦九韶算法
i 的值P 求以元多项式 p n ( x ) = ∑ a i x 的值 n(x),输入为(a0, ,输入为( i=0 a1 ,……, an )、 和n。 )、x和 。 , n
秦九韶算法可以求任意幂次的多项式的值。 秦九韶算法可以求任意幂次的多项式的值。该方法要求多 可以求任意幂次的多项式的值 项式按降幂排列, 项式按降幂排列,即 f(x)=anxn+an-1xn-1+an-2xn-2+……+a1x+a0 +a f(x)=(…(((0 (((0?x+a )x+…+a f(x)=( (((0 x+an)x+an-1)x+an-2)x+ +a1)x+a0 f=f*x+a;
数组( 实验六 数组(1)
一、实验目的
掌握一维数组与二维数组的定义、赋值、 1. 掌握一维数组与二维数组的定义、赋值、初始化和输入输出 2. 掌握字符数组和字符串函数的使用 掌握与数组有关的算法(特别是排序算法) 3. 掌握与数组有关的算法(特别是排序算法


二、实验内容
1. 编程计算矩阵a[5][5]主对角线元素之和s1、次对角线元素之 编程计算矩阵a[5][5]主对角线元素之和s1 a[5][5]主对角线元素之和s1、 s2和周边元素之和s3。 和周边元素之和s3 和s2和周边元素之和s3。 编程测试字符串str2是否整体包含在字符串str1 str2是否整体包含在字符串str1中 若包含, 2. 编程测试字符串str2是否整体包含在字符串str1中,若包含, 则指明str2 str1中的起始位置 例如:str1=“abcde str2在 中的起始位置。 abcde”, 则指明str2在str1中的起始位置。例如:str1= abcde , str2=“cd cd”, str2包含在str1中 起始位置为3 包含在str1 str2= cd ,则str2包含在str1中,起始位置为3。 建立矩阵,然后求各行元素之和, 3. 建立矩阵,然后求各行元素之和,并将和最大的一行与第一 行交换位置,输出各行之和及交换后的新矩阵。 行交换位置,输出各行之和及交换后的新矩阵。
数组( 实验七 数组(2)
编写程序,把从键盘输入的金额数(以元为单位) 1. 编写程序,把从键盘输入的金额数(以元为单位)按人民 币面额划分, 币面额划分,然后显示支付金额的各种面额的人民币的数量 例如:输入124.07元时,输出为: 124.07元时 例如:输入124.07元时,输出为: yibaiyuan 1 ershiyuan 1 eryuan 2 wufen 1 erfen 1 有一长度为m+n m+n( 已知)的一维数组B 2. 有一长度为m+n(m,n已知)的一维数组B,其值事先已经 赋好,成初态:b 将数组的前m 赋好,成初态:b0,b1,……,bm-1,bm,……,bm+n-1, 将数组的前m个 m+n元素值与后n个元素值( 元素值与后n个元素值(在保持原来各自的内部顺序的前提下 要求时间、 )易位成终态 bm,bm+1,……,bm+n-1,b0,……,bm-1 。要求时间、 m+n空间代价最小。 空间代价最小。 数组B 123456789, 则数组B变为456789123 456789123。 数组B为123456789,若m为3,则数组B变为456789123。
指针( 实验八 指针(1)
一、实验目的
掌握指针的概念, 1. 掌握指针的概念,会定义和使用指针变量 2. 学会使用指针变量访问一维数组和二维数组
二、实验内容
编写程序计算键盘输入的字符串中空白字符、 1. 编写程序计算键盘输入的字符串中空白字符、数 和英文字母的个数各是多少。 字、和英文字母的个数各是多少。 编写程序,将从键盘输入的字符串中的最后m 2. 编写程序,将从键盘输入的字符串中的最后m个 字符与最前面的m个字符交换位置。其中的m 字符与最前面的m个字符交换位置。其中的m由用户 从键盘指定, 应小于串长度的二分之一。例如m 从键盘指定,m应小于串长度的二分之一。例如m为3, 输入的字符串为“abcdefghijk”, 输入的字符串为“abcdefghijk

,则改后的字符串 ijkdefghabc”。 为:“ijkdefghabc 。
指针( 实验九 指针(2)
一、实验目的
学会使用指针数组、 1. 学会使用指针数组、行指针和二级指针访问二维 数组 2. 掌握字符型指针和指针数组的使用
二、实验内容
编程计算矩阵a[5][5]主对角线元素之和s1 a[5][5]主对角线元素之和s1、 1. 编程计算矩阵a[5][5]主对角线元素之和s1、次 对角线元素之和s2和周边元素之和s3 s2和周边元素之和s3。 对角线元素之和s2和周边元素之和s3。要求分别使 用行指针和二级指针。 用行指针和二级指针。 编写程序,使用选择法对多个字符串进行排序。 2. 编写程序,使用选择法对多个字符串进行排序。
函数( 实验十 函数(1)
一、实验目的
1. 掌握函数的定义、说明和调用 掌握函数的定义、 2. 掌握变量的作用域和生命期 3. 掌握使用数据复制方式进行参数传递 4. 掌握使用地址传递方式进行参数传递 掌握利用全局变量、 5. 掌握利用全局变量、函数返回值传递数据
二、实验内容
1. 编写主函数和函数isPrime()。主函数完成输入输出和函数调用;函数 编写主函数和函数isPrime() 主函数完成输入输出和函数调用; isPrime()。 isPrime()判断一个整数是否为素数 若为素数返回1 否则返回0 判断一个整数是否为素数, isPrime()判断一个整数是否为素数,若为素数返回1,否则返回0。 2.编写主函数和子函数。主函数进行输入、输出和函数调用, 2.编写主函数和子函数。主函数进行输入、输出和函数调用,子函数的功能是 编写主函数和子函数 将一整数转化为等值的十进制的字符串。如果n为-47,则字符串s为“-47”; 将一整数转化为等值的十进制的字符串。如果n 47,则字符串s 47 ; 如果n 47,则字符串s 47”。 如果n为47,则字符串s为“47 。 3.编写主函数和子函数。主函数进行字符串的输入输出和函数调用, 3.编写主函数和子函数。主函数进行字符串的输入输出和函数调用,子函数的 编写主函数和子函数 功能是删除字符指针s指向的字符串中的所有字符c 其格式如下: 功能是删除字符指针s指向的字符串中的所有字符c,其格式如下:void c)。 delchr(char *s, char c)。
递归函数
调用函数与被调用函数之间的链接和信息交换一 般是由编译系统通过栈来实现的。 般是由编译系统通过栈来实现的。栈中保存的信 息主要包括: 息主要包括:
返回地址; 返回地址; 函数被调用时所有局部变量的值以及 传值形式参数的值; 传值形式参数的值; 所有引用参数及常量引用参数的定义。 所有引用参数及常量引用参数的定义。
递归函数是指直接或间接

地调用自己的函数。 递归函数是指直接或间接地调用自己的函数。
递归函数
用递归解决问题的一般步骤: 用递归解决问题的一般步骤:
确定递归结束的条件; 确定递归结束的条件; 定义递归的执行部分。 定义递归的执行部分。 例: 1 Fact(n)= n*Fact(n-1) 若n>0 //执行部分 执行部分 例: 0 Fib(n)= 1 Fib(n-1)+Fib(n-2) 若n=0 若n=1 若n>1 //结束条件 若n=0 //结束条件
函数( 实验十一 函数(2)
一、实验目的
1. 掌握函数的嵌套调用和递归调用 2. 掌握多维数组的参数传递
二、实验内容
求两个矩阵的乘积。请编写cheng函数。 cheng函数 1. 求两个矩阵的乘积。请编写cheng函数。
#define M 3 #define L 4 #define N 2 main() { int a[M][L],b[L][N],c[M][N],i,j,k; void cheng(int(*)[L],int(*)[N],int(*)[N],int,int,int); A(%d*%d):\ printf("Enter matrix A(%d*%d):\n",M,L); for(i=0;i函数( 实验十一 函数(2)
二、实验内容
编写递归函数完成下面公式的计算。 2. 编写递归函数完成下面公式的计算。 g(m,n)= 0 m=0,n>=0 g(mg(m-1,2n)+n m>0,n>=0 3. 分别使用递归方法和非递归方法,求三阶数列的第n 分别使用递归方法和非递归方法,求三阶数列的第n 项的值(不得使用数组)。 项的值(不得使用数组)。 0 n=1 Fib(n)= 0 n=2 1 n=3 Fib(n-1)+Fib(n-2)+Fib(nFib(n-1)+Fib(n-2)+Fib(n-3) n>3
实验十二 结构体
一、实验目的
1. 2. 3. 掌握typedef的使用 掌握typedef的使用 typedef 掌握自递归结构体的定义和说明 掌握链表的建立、插入、删除、 掌握链表的建立、插入、删除、遍历等基本操作
二、实验内容 设有n名职工,每个职工的数据包括工作证号、姓名、工龄、 1.设有n名职工,每个职工的数据包括工作证号、姓名、工龄、性 职务和工资。编一函数计算n名职工的总工资和平均工资, 别 、职务和工资。 编一函数计算n 名职工的总工资和平均工资 ,主 函数进行数据的输入和并输出。 函数进行数据的输入和并输出。 设有类型定义: 2. 设有类型定义: year; month; day;}DATE; typedef struct{ int year; int month; int day;}DATE; 按照下面函数原型说明,编写函数完成: 按照下面函数原型说明,编写函数完成: )isValidDate()对参数做日期的合法性检查 对参数做日期的合法性检查: (1)isValidDate()对参数做日期的合法性检查:若是合法日期函 数返回非0 否则为0 d); 数返回非0值;否则为0。int isValidDate(int y,int m,int d);

)Days()求日期 是该年的第多少天。 求日期d (2)Days()求日期d是该年的第多少天。int Days( DATE d );
实验十三 文件
一、实验目的
1. 掌握文件的打开和关闭 2. 学会使用文件的各种输入输出函数 3. 学会文件的定位和随机读写 4. 学会使用命令行参数编程
二、实验内容
1.编写程序,其功能是:从键盘输入一字符串,把该字符串的小写字母 1.编写程序,其功能是:从键盘输入一字符串, 编写程序 转换成大写字母,输出到文件dat.txt dat.txt中 转换成大写字母,输出到文件dat.txt中,然后从该文件中读出字符串并 显示出来。 显示出来。 2.有一磁盘文件“employee.txt 存放30名员工的记录 存放30名员工的记录。 2.有一磁盘文件“employee.txt”存放30名员工的记录。每个员工数据 有一磁盘文件 包括:员工编号、姓名、工资、奖金、所得税和社会保险。要求计算每 包括:员工编号、姓名、工资、奖金、所得税和社会保险。 个员工的最终收入(最终收入=工资+奖金-所得税-社会保险), ),然后 个员工的最终收入(最终收入=工资+奖金-所得税-社会保险),然后 生成新文件“salary.txt”存放员工编号 姓名和最终收入。 存放员工编号、 生成新文件“salary.txt 存放员工编号、姓名和最终收入。 3.统计磁盘文件“test.txt 中的单词数 中的单词数。 3.统计磁盘文件“test.txt”中的单词数。 统计磁盘文件
接下页
综合实验一: 综合实验一:人民币转化
将键盘输入的一实数转换成人民币的大写形式。 将键盘输入的一实数转换成人民币的大写形式。 要求: 此实数的最小范围为21 21亿 要求:1. 此实数的最小范围为21亿; 在必要的时候要添加“零 、 整 ; 2. 在必要的时候要添加 零”、“整”; 可以进行四舍五入。 3. 可以进行四舍五入。
例如:输入1000005008.9978 例如:输入1000005008.9978 输出为: 输出为:壹拾亿伍仟零玖元整 输入1000005008.902 输入1000005008.902 输出为:壹拾亿伍仟零捌元玖角整 输出为: 输入1000005008.906 输入1000005008.906 输出为: 输出为:壹拾亿伍仟零捌元玖角壹分
综合实验二 :注册登录问题
编写登录程序,用户的名称和密码存放在一 编写登录程序, 文件中,用户登录时输入名称和密码, 文件中,用户登录时输入名称和密码,由系 统自动检查是否存在此用户、 统自动检查是否存在此用户、密码是否正确 若名称和密码均正确,则登录成功, ,若名称和密码均正确,则登录成功,若不 正确,可以提供三次修改机会。要求: 正确,可以提供三次修改机会。要求:1. 为了进行登录,还要编写注册程序(输入管 为了进行

登录,还要编写注册程序( 理员密码,正确则允许管理员增加新用户, 理员密码,正确则允许管理员增加新用户, 错误则提供三次修改机会); );2. 错误则提供三次修改机会);2. 密码必须 使用掩码形式。 使用掩码形式。

1

相关文档
最新文档