《C语言程序设计》实 验 指 导 书
石家庄铁道大学信息科学与技术学院
2012年9月1日
实验一 上机环境初识及简单程序设计
一、实验的目的要求
1. 理解C语言的基本特征和基本知识;
2. 掌握赋值语句的使用;
3. 掌握基本输入/输出语句的使用;
4. 熟悉上机实验环境。
5. 要求:上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(第1题必做,2-4题选做2题)
1. 分析下面程序的执行结果,并上机验证。(必做)
main() { int a=5,b=7; float x=67.8564,y=-789.124; char c=‘a’; long n=1234567; unsigned u=65536; printf(“%d%d\n”,a,b); printf(“%3d%3d\n”,a,b); printf(“%f,%f\n”,x,y); printf(“%-10f,%-10f\n”,x,y); printf(“%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n”,x,y,x,y,x,y); printf(“%c,%d,%o,%x\n”,c,c,c,c); printf(“%ld,%lo,%x\n”,n,n,n); printf(“%u,%o,%x,%d\n”,u,u,u,u); printf(“%s,%5.3s\n”,”computer”,”computer”); }
2. 假设公民的个人所得税为工资总额的5%,编程输入一个公民的工资总额,计算其应缴纳的个人所得税和其扣除所得税后的实际工资,并输出。
3. 利用格式控制符输出以下图形。
*
***
*****
*******
*********
4. 从键盘上输入圆的半径,圆柱的高,求圆的周长,圆球的表面积、圆球的体积、圆柱体积。用scanf输入,用printf输出。输出时有文字说明,取小数点后2位数字。请编程序。
实验二 选择结构程序设计
一、实验的目的要求
1. 理解c语言表示逻辑量的方法(以0代表“假”,以非 0代表“真”);
2. 掌握逻辑运算符和逻辑表达式,关系运算符和关系表达式的书写的意义;
3. 掌握if语句的使用;
4. 掌握if 语句的嵌套;
5. 掌握 switch语句的使用。
6. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容
1. 有三个整数a,b,c,由键盘输入,输出其中最大的数。见习题4(P112)
4. 编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:>=90分为‘A’,>=80&&<90分为‘B’,>=70&&<80分为‘C’,>=60&&<70分为‘D’,<60分为‘E’(用switch语句实现)。见习题8(P113)
5. 企业发放的奖金根据利润提成。利润I低于或等于10万元的,奖金可提10%;利润高于10万元的,低于20万元时,低于10万元的部分仍按10%提成,高于10万元的部分按7%提成;200000<I<400000时,低于20万元的部分仍按上述办法提成,高于20万元的部分按5%提成;400000<I<600000时,高于40万元的部分按3%提成,600000<I<1000000时,高于60万元的部分按1.5%提成;I>1000000时,超过100万元的部分按1%提成。从键盘上输入当月利润I,求应发奖金总数。
要求:(1)用if语句编程 (2)用switch语句编程。见习题10(P113)
6. 求ax2+bx+c=0方程的根,a,b,c由键盘输入。
实验三 循环结构程序设计
一、实验的目的要求
1. 理解三种循环语句的执行流程;
2. 掌握while语句,do-while语句以及for语句的语法及基本应用;
3. 掌握多重循环的使用;
4. 掌握循环结构的编程方法;
5. 进一步提高编程能力。
6. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(1-5题必做,6-9题选做1题)
1. 输入10个数,计算它们的和,积、平方和以及和的平方。
2. 在1-500中,找出能同时满足用3除余2,用5除余3,用7除余2的所有整数。
3. 输入两个正整数m和n,求其最大公约数和最小公倍数。
4. 求100~200间的全部素数。
5. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
6. 求1!+2!+3!+4!+…+20!。
7. 输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一个“水仙花数”,因为153=13+53+33。
8. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子分别是:1,2,3,而6=1+2+3,所以6是完数。编程输出1000之内的所有完数,并按照下面的格式输出其因子:6 its factors are 1,2,3。
9. 输出以下图案:
*
***
*****
*******
*****
***
*
10. 验证歌德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。将4-100中的所有偶数分别用两个素数之和表示。输出为:
4=2+2
6=3+3
……
100=97+3
11. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半多一个。第二天早上又吃了剩下的一半多一个。以后每天早上都吃了前一天剩下的一半多一个。到第十天早上想再吃时,发现就剩下1个桃子了。求第一天共摘了多少?(提示:利用递推的方法。由第10天开始时的桃子数可以推出第九天开始时的桃子数,以此类推即可)。
实验四 数组类型程序设计
一、实验的目的要求
1. 理解数组的含义和存储方式;
2. 掌握数组的定义方法;
3. 掌握数组的应用;
4. 掌握字符数组的定义方法和应用;
5. 进一步提高编程能力。
6. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(1-5题必做,6-10题选做2题)
1. 输入一串字符,以“ ?”结束,分别统计其中每个数字字符0,1,2,….9出现的次数。
2. 从键盘上输入10个数,求最大值、最小值和平均值。
3. 从键盘上输入10个数,按从小到大的顺序排序输出。
4. 编写程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,‘\0’也要拷贝进去,‘\0’后面的字符不拷贝。
5. 从键盘上输入15个数,编程实现:首先对它按从小到大的顺序排序,然后,从键盘上再输入一个数,用折半查找法找出该数是数组中的第几个元素的值。若该数不在数组中,则打印出“无此数”。
6. 计算两个矩阵的和、积。
7. 在一个已排好序的数列中(由小到大)再插入一个数,要求仍然有序。编程并上机运行。提示:编程时应考虑到插入的数的各种可能性(比原有所有的数大;比原有所有的数小;在最大数和最小数之间)。
8. 编写一程序,一班级有n名学生要求按他们姓名的顺序排列(按汉语拼音的字母顺序从小到大),并按序输出。
9. 从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。
10. 输入两个二维矩阵,求两个矩阵的和、差和积。
7.(选作)约瑟夫问题。M个人围成一圈,从第一个人开始报数,数到n的人出圈。再由下一个人开始报数,数到n的人出圈,……输出依次出圈人的编号。M的值预先设定,n从键盘上输入。
实验五 函数程序设计
一、实验的目的要求
1. 掌握定义函数的方法;
2. 掌握函数实参和形参的对应关系以及“值传递”的方法;
3. 掌握函数的嵌套调用和递归调用的方法;
4. 掌握全局变量和局部变量,动态、静态变量的概念和使用方法;
5. 学习对多文件程序的编译和运行。
6. 进一步提高编程能力。
7. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(1-3题必做,4-5题选做1题)
1. Definine a function: digit(n,k),it will return the kth digit of n from right.
for example: digit(15327,4)=5
digit(289,5)=0
3. 写几个函数:(1)输入10个职工的姓名和职工号;(2)按职工号从小到大排序,姓名也相应改变顺序;(3)要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工的职工号,输出该职工的姓名。
4. 用牛顿迭代法求方程2x3-4x2+3x-6=0在区间(1,5)之间的根。
5. 写一函数,输入一行字符,将此字符串中最长和单词输出
实验六 指针类型程序设计
一、实验的目的要求
1. 进一步理解指针的概念;
2. 掌握指针变量的定义和使用方法;
3. 能正确使用一维数组的指针和指向一维数组的指针变量;
4. 掌握用指针作为函数参数的方法;
5. 了解二维数组与指针的关系。
6. 学习对多文件程序的编译和运行。
7. 进一步提高编程能力。
8. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(1-3题必做,4-5题选做1题)
1. 输入三个整数,按照从小到大的顺序输出。(用函数和指针实现)
2. 写几个函数:(1)输入10个职工号;(2)按职工号从小到大排序;(3)要求输入一个职工号,用折半法找出来。(用函数和指针实现)
3. 写一个函数,将一个3 X 3的整型矩阵转置。
4. 编写一个函数sort,使20个整数由小到大的顺序排列。在主函数中输出排好序的数。本程序编写函数部分要求要用指针来解决。
5. 在主函数中输入10个等长的字符串。用另一个函授数对它们排序,然后输出这10个已排好序的字符串。
实验七 结构体程序设计
一、实验的目的要求
1. 进一步理解结构体的概念;
2. 掌握结构体的定义和结构体变量的定义和使用方法;
3. 能正确使用结构体数组;
4. 掌握链表的基本概念,能够编写简单的应用程序
5. 进一步提高编程能力。
6. 要求:上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容(1、2题必做,3-8题选做4道)
1. 一个班有10名同学,每名同学都有如下信息:学号,姓名,三门课程的成绩。请编写程序输入全班同学的信息,并且按第一门课程的成绩从小到大排序后输出。
2. 在题1的基础上,计算每名同学三门课程的平均成绩,并按照平均成绩排序后输出。
3. 在题1的基础上,每个同学添加出生日期信息,编写程序输入全班同学的信息,并且按照年龄(出生日期)排序后输出。要求:判断二人的大小写成函数。并分别用选择排序和冒泡排序。
4. 在题2的基础上,每名同学增加等级(grade)信息,若平均成绩高于全班平均成绩10分以上,则为”A”,高于平均成绩不超过10分,则为”B”,低于平均成绩则为”C”,计算每个同学的等级,并输出。
5. 按照输入的顺序建立一个链表,每个节点包括:学号、姓名、性别、年龄。直到输入的学号为-1结束。然后输出此链表。然后从键盘上输入一个学生的学号,把此学生的节点删除后再输出链表。(要求建立链表、删除用函数)
6. 修改5题的建立链表的函数,要求按照输入的逆序建立链表。其他不变。
7. 有两个链表a,b。每个链表中节点包括学号、成绩。要求把两个链表合并。(自己编程建立链表)。
8. 在题7的基础上,要求合并两个链表,但是要求按学号升序。(可以借助第三个链表)。
实验八 文件类型程序设计
一、实验的目的要求
1. 进一步理解文件的概念;
2. 掌握文件的定义;
3. 掌握文本文件和二进制文件的基本访问方法;
4. 进一步提高编程能力。
5. 要求上机前先编制程序并画出N-S图;独立完成实验;独立完成实验报告。
二、实验内容
1. 从键盘上输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件中保存。输入的字符以“!”结束。
2. 有5个学生,每个学生有3门课的成绩,从键盘上输入学生数据(包括学号、姓名、三门课的成绩)。计算出每个同学的平均成绩,将学生信息存放在磁盘文件中。
3. 将2题文件中的学生信息,按照平均成绩排序,把排序后的数据存放到另一个新文件中。