C语言程序设计实验电子稿139.pdf

上传人:得** 文档编号:79432259 上传时间:2023-03-21 格式:PDF 页数:32 大小:1.54MB
返回 下载 相关 举报
C语言程序设计实验电子稿139.pdf_第1页
第1页 / 共32页
C语言程序设计实验电子稿139.pdf_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《C语言程序设计实验电子稿139.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计实验电子稿139.pdf(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 1.3 实验一 熟悉 C 语言的 VC+6.0 编程环境 一、实验目的与要求 1.学会使用 Visual C+集成开发环境。2掌握简单 C 程序的编写、编辑、编译、连接和运行。3初步学会 Visual C+环境下简单调试 C 程序的方法。二、实验内容 1.程序运行题(1)打开 VC+6.0 环境。(2)在 VC+6.0 环境的编辑窗口中,输入如下程序保存为 myexp1_1.cpp。(3)选择【组建】【编译 myexp1_1.cpp】(可按快捷键 CTRL+F7)命令对程序进行编译。(4)选择【组建】【组建】(按快捷键 F7)命令对程序进行连接。(5)单击【!】按钮或选择【组建】【执行】菜单

2、项(按快捷键 F5),运行程序。(6)判断结果正确与否。#include void main()int a,b,sum;a=123;b=456;sum=a+b;printf(“a+b=%dn”,sum);填写运行结果:关闭上面的程序,按上面的步骤再次输入如下的程序,进行编译、连接和运行,写出运行结果。#include void main()int m=7,n=4;float a=38.4,b=6.4,x;x=m/2+n*a/b+1/2;printf(“%fn”,x);填写运行结果:思考:把前面的语句 x=m/2+n*a/b+1/2;改为 x=m/2.0+n*a/b+1.0/2;运行结果将会是什

3、么?2.程序改错题 程序改错 1:输入如下错误的程序,然后进行编译和连接,仔细检查并修改错误,再进行编译连接,直到没有错误为止。运行程序,#include void mian()printf(“We are studying C language!n)程序改错 2 输入并运行下面一个需要在运行时输入数据的程序,程序要求从键盘输入三个实数,输出它们的和。#include mian()float a,b,c,sum;printf(Input a,b,c:)scanf(%f%f%f,&a,&b,c);sum=a+b+c;printf(n sum=%fn,sum);输入该程序,然后进行编译和连接,如果

4、出错,仔细检查并修改错误,再进行编译连接,直到没有错误为止。运行程序,按照输入输出示例提示输入 a、b、c 三个变量的值,变量值之间用空格分隔,输入完毕按回车键【Enter】。查看运行结果,判断结果正确与否。输入输出示例:Input a,b,c:3 5 6 sum=14.0 再次运行程序并按如下的格式输入数据,观察结果是否正确?为什么?Input a,b,c:3,5,6 sum=?思考:改正程序的错误后,把 printf 语句中的%f 改成%d,再运行程序,有什么结果?Input a,b,c:3.5,5.5,6.5 结果:3.程序完整题 完整题 1 二整数整除程序模板如下:输入输出示例:思考:

5、把上述 int a,b,div;改成 float a,b,div;scanf(%d%d,&a,&b);中的%d 改成%f,同时把输出语句中的%d 改成%f,运行程序后,再用前面的数据输入,结果会发生如何变化?为什么有这样的变化?完整题 2#include void main()int a,b,div;printf(Input a,b:);/*提示输入二个数*/scanf(%d%d,&a,&b);/*从键盘输入二个数存储在变量 a,b 中*/*除法运算,相除的结果放在变量 div 中*/Input a,b:3 5 div=0 Input a,b:5 3 div=1 Input a,b:3,5 d

6、iv=Input a,b:5,3 div=仿照教材中例 1-2 程序,在横线地方填写语句,输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积。#include void main();/*定义变量*/printf(请输入圆的半径和高:n);/*在屏幕上显示提示信息*/scanf(%f%f,&r,&h);/*从键盘输入半径和高给变量 r*/;/*计算体积*/;/*计算表面积*/printf(v=%f,s=%fn,v,s);/*输出体积和表面积*/输入与输出:试一试:如果把上述程序中所有的%f 改成%d,再次运行程序,仍然输入“5.0 8.0”,输出结果会是什么?分析结果。把上述程序中的第一个n

7、 去掉,再编译运行程序,有什么变化?试说出n 的作用。请输入圆的半径和高:5.0 8.0 输出结果?2.5 实验二 编写几个简单的 C 程序 一、实验目的与要求 1.掌握 C 语言基本数据类型的概念,理解数据类型与运算的关系。2.掌握简单变量的定义,算术表达式和赋值表达式的使用。3.掌握基本输出语句的使用。4.进一步熟悉 C 程序的编辑、编译、连接和运行的过程。5.掌握简单 C 程序查错方法,编写几个简单程序。6.实验 4 学时 二、实验内容 1.程序验证或填空 (1)编译和运行下面程序,查看执行的结果:#include int main(void)int si=-1;float f=5;do

8、uble df=3;printf(si=%d,f=%f,f=%lfn,si,f,df);return 0;若把输出语句中的格式控制中的格式说明符的顺序改变一下,会有什么结果?再把%lf 修改为%f,运行会有什么结果?(2)分析程序,并上机运行验证运行结果#include“stdio.h”void main()printf(“t*n”);printf(“tb*n”);printf(“tbb*n”);(3)运行程序,并分析结果。#include“stdio.h”void main()int a=10,x=5,y=6;a+=a*=6;x=y+;y=+x;a=x+y;printf(“%d,%d,%dn

9、”,a,x,y);(4)不用第 3 个变量,实现将二个数进行对调,请填空。#include“stdio.h”void main()int a,b;scanf(“%d%d”,&a,&b);printf(“a=%d b=%dn”,a,b);a=;b=;a=;printf(“a=%d b=%dn”,a,b);2.程序改错 改正下面程序中的多处错误。计算某个数 x 的平方 y,并分别以“y=x*x”和“x*x=y”的形式输出 x 和 y 的值。x 的值由键盘输入。输出示例(假设 x 的值为 3):9=3*3 3*3=9 源程序(有错误的程序)#include int main(void)int y;y

10、=x*x;printf(%d=%d*%d,x);/*输出 printf(d*%d=%d,y);3.一般编程题 编程题 1 编写程序,输入二个整数,计算它们的和、差、积、商和余数,并按 5+11=16 这样的输出格式输出结果。编程题 2 编写程序,输入二个实数,计算它们的和、差、积、商,并按 32.24=12.2+20.04 这样的输出格式输出结果。实数分别定义为单精度实数或双精度实数。编程题 3 编写程序,从键盘输入一个大写字母,改用小写字母输出。编程题 4 求华氏温度 150 对应的摄氏温度。计算公式如下,其中:c 表示摄氏温度,f 表示华氏温度。329595fc 要求输出结果为:fahr=

11、150,celsius=66 思考:如果使用公式9)32(5fc计算华氏温度 150 所对应的摄氏温度,计算结果是否一样?为什么?编程题 5 编写程序,从键盘输入学生的三门课成绩,求其平均成绩(保留小数点后 1 位)。4.较难编程题 编程题 1 当 n 为三位十进制整数时,分别求出 n 的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。输出示例:n 为整数 152 时,它的个位数字是 2,十位数字是 5,百位数字是 1 提示:n 的个位数字 digit1 的值是 n%10,十位数字 digit2 的值是(n/10)%10,百位数字 digit3 的值是 n/1

12、00。编程题 2 将从键盘输入的实型十进制数分离为整数部分和小数部分后输出。如输入 233.55,输出为:233.55=233+0.55。编程题 3 计算定期存款的本金与利息之和。设银行定期存款的年利率 rate 为 2.25%,存款期为 n年,存款本金为 money 元,具体的数字由键盘输入,编程计算 n 年后的本金与利息之和(提示,利用 pow 函数)。3.5 实验三 选择结构程序设计 一、实验目的与要求 1.理解 C 语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。2.掌握利用 if 结构实现选择结构的方法。3.掌握利用 switch 结构实现多分支选择结构。4 结合程序掌握一

13、些简单的算法,学习调试程序 5 实验 4 学时 二、实验内容 1程序改错题 这 里 增加 了 一个题目 改正下面程序中的错误。输入实数 x,计算并输出下列分段函数 f(x)的值(保留 1 位小数)。)100(1xx )(xfy )100(xx 输入输出示例1(改正后程序的运行结果)Enter x:100 f(100.00)=0.1 输入输出示例2(改正后程序的运行结果)Enter x:23 f(23.00)=23.0 源程序(有错误的程序)#include#include void main(void)double x;printf(Enter x:n);scanf(=%f,x);if(x=1

14、00)y=1/sqrt(x)else (x!=100)y=x;printf(f(%.2f)=%.1fn,x,y);2一般编程题 编程题 1 输入任意三个整数 a,b,c,求 3 个数中的最大值和最小值。编程题 2 输入 x,计算并输出下面分段函数 f(x)的值(保留 2 位小数)。请调用 sqrt 函数求平方根,调用 pow 函数求幂。)0(12)1(2xxxx )(xf )0(xx 输入输出示例(共运行 3 次)Enter x:10 f(10.00)=3.16 Enter x:0.5 f(0.50)=2.75 Enter x:0 f(0.00)=0.00 成本 编程题 3 有一函数:x (-

15、5x0)y=x-1 (x=0)x+1 (0 x10)编写程序,要求用 scanf 函数输入 x 的值,输出 y 的值。具体要求如下:(1)用 if 语句实现分支,自变量和函数值均用实数类型。(2)自变量用 scanf 函数输入,给一些输入提示。(3)运行程序,输入 x 的值(分别为-5x0,x=0,0 x10)三种情况,检查输出的 y 值是否正确。编程题 4 某服装店经营成套服装的买卖,同时也允许单件销售。若一次购买不少于 70 套,则每套 90 元;若不足 70 套,则每套 110 元;只买上衣每件 70 元;只买裤子每条 60 元。请编写程序假设用户买入 x 件上衣和 y 条裤子,请编写程

16、序计算相应的应付款是多少?编程题 5 编写程序实现:输入一个整数,判断它能否被 3、5、7 整除,同时输出如下信息。(1)能同时被 3、5、7 整除;(2)能同时被其中的哪二个数整除;(3)能被其中的哪一个数整除;(4)不能被 3、5、7 任一个数整除。3较难编程题 编程题 1 请用 switch 语句编程计算员工每月的薪水。(exph3_1.cpp)已知某公司员工的保底薪水为 500,某月所接工程的利润 profit(整数)与提成的关系如下(计量单位:元):profit1000 没有提成;1000profit2000 提成 10%;2000profit5000 提成 15%;5000prof

17、it10000 提成 20%;10000profit 提成 25%。分析:为使用 switch 语句,必须将利润 profit 与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是 1000 的整数倍(1000、2000、5000、),如果将利润profit 整除 1000,则相邻两个区间的重叠。为解决相邻两个区间的重叠问题,最简单的方法就是:利润 profit 先减 1(最小增量),然后再整除 1000 即可:profit1000 对应 0 1000profit2000 对应 1 2000profit5000 对应 2、3、4 5000profit10000 对应 5、6

18、、7、8、9 10000profit 对应 10、11、12、编程题 2 编写程序实现如下功能:输入二个运算数(exp1,exp2)和一个运算符(op),计算表达式 exp1 op exp2 的值,其中 OP 可以为+、-、*、/、%五个符号中的任一种(提示:用 switch 语句实现)。4.5 实验四 循环结构程序设计 一、实验目的与要求 1 熟练掌握用 while 语句,do-while 语句实现循环的方法。2 熟练掌握用 for 语句实现循环的方法。3 对循环语句的三种形式进行分析、比较,以掌握各种形式的共同之处与其特点。4 掌握循环结构的嵌套,掌握 break 语句和 continue

19、 语句在循环体中的作用。5 实验 4 学时 二、实验内容 1.程序验证题与改错题 (1)程序验证 从键盘输入一个整数,在屏幕上将其逆序数输入,例如输入 8193,输出 3918。#include void main()int x,number;printf(请输入一个整数:);scanf(%d,&x);do x=number%10;number=number/10;printf(%d,x);while(number!=0);printf(n);如果输入的是一个负整数,程序应该如何改?(2)程序改错 计算表达式 1+2!+3!+10!的值,改正下面程序中的多处错误。源程序(有错误的程序)#inc

20、lude void main(void)int sum1,sum2,i,j;for(i=1;i10;i+)for(j=1,jb)swap(a,b);printf(“%dt%d”,a,b);思考:为什么 a,b 的值没有交换?调用函数 fun 计算:m=1+2+3+4+9+10,并输出结果。请验证下面的程序是否符合题目要求。#include”stdio.h”int fun(int n)int m,i;for(i=1;i=n;i+)m+=i;return m;void main()printf(m=%dn,fun(10);在上面程序的基础上,修改程序.计算 m=1-2+3-4+9-10。(2)程序

21、改错题 下列程序的功能是利用自定义函数计算一无符号的整数各位数字的乘积。#include unsigned f(unsigned num)unsigned k=0;do k*=num/10;num/=10;while(k);return k;void main()int x;printf(“input x=:n”);scanf(“%d”,x);printf(“%d”,f(x);2一般编程题 编程题 1 编写一函数,把输入的 4 个数字字符转换成一个 int 数据存放,如输入 4123 这字符转换为 4123 这个整数,并通过主函数验证结果。编程题 2 编写程序求:1*1*1+2*2*2+3*3

22、*3+4*4*4+5*5*5 提示:主函数用来现实结果,f1()函数用来求一个数的立方,f2()函数用来求和。#include int f1(int n)int f2(int m)void main()编程题 3 定义两个带参数的宏,将两个参数的值相加和相减,并写出程序,输入两个数作为使用宏时的实参。输出相加和相减后的和与差。编程题 4 编程输出 2 到 10000 之间的所有完数。所谓完数是指因子之和与它本身相等的数。如6=1+2+3,6 是一个完数。要求:定义函数 factor(m)判断 m 是否为完数;由主函数调用它,来对所有 2 到 10000 之间的所有数进行判断。#include#

23、include int factor(int m)int i,s=0;void main()int i,m,sum;3较难编程题 编程题 1 用函数调用实现求两个数的最大公因子和最小公倍数 编程题 2 用递归方法求 1+2+3+并将其中素数去除后之和。#include#include int isprime(int number)long fact(int n)void main()int m,sum;6.4 实验六 数组 一、实验目的与要求 1.掌握一维数组的定义、赋值和输入输出的方法。2.理解一维数组的存储方法及下标的表示方法。3.掌握与数组有关的算法(特别是排序算法)。4.掌握二维数组的

24、定义、赋值和输入输出的方法。5.理解二维数组的存储方法及下标的表示方法。6.实验 4 学时。二、实验内容 1程序验证题与改错题(1)程序验证题 给定一个整型数组 a,要求求出其中小于 0 的元素的个数。请验证下面的程序是否符合题目要求。#define N 10 void main()int aN=11,2,4,-1,5,-3,-66,0,10,-5;int i;/*变量 i 用于 for 循环*/int count=0;/*变量 count 用于技术,初始化为 0*/for(i=0;iN;i+)if(ai0)count+;/*如果元素 ai0,count 计数+1*/printf(%dn,co

25、unt);给定一个整型二维数组 a(3,3),要求求出对角线元素的和。请验证下面的程序是否符合题目要求。#include#define N 3 void main()int aNN=1,2,3,4,5,6,7,8,9;int i,j;/*变量 i,j 用于 for 循环*/int sum=0;/*变量 sum 用于求和,初始化为 0*/for(i=0;iN;i+)for(j=0;jN;j+)if(i=j)sum+=aij;/*如果是对角线元素,sum+aij*/printf(%dn,sum);return 0;注 1:在程序验证题的基础上,修改程序,求出数组 a 中大于 a0的元素之和。注 2

26、:对上述程序进行优化,消除内循环,实现同样的效果。在 的基础上,修改程序,求出数组 a 中反对角线元素之和。提示:内循环用逆序;i+j=N-1。(2)程序改错题 这里有改动 2一般编程题 编程题 1:从键盘输入 10 个整型数据,放入数组 a 中,求其最大值、最小值及其所在元素的下标位置,并输出。程序提示:定义 10 个元素的数组,用 for 循环语句逐一输入数据;定义最大值变量和最小值变量,用 for 循环语句遍历所有数组元素,逐一比较查找最大值和最小值。编程题 2:给定一个字符数组 a,要求将数组的内容倒置。如:执行前数组的内容为1,2,3,4,5,6,7,8 执行后数组的内容为8,7,6

27、,5,4,3,2,1 提示:用 i 表示数组的第一个元素的下标;用 j 表示数组最后一个元素的下标。交换 ai和 aj,当 ie。若找到相等元素,则返回元素下标,否则返回-1 表示无此数。7.4 实验七 字符与字符串处理 一、实验目的与要求 1.掌握 C 语言字符型数据的概念,理解字符型与整型数据之间的关系。2.掌握字符的输入与输出。3.掌握转义字符常量、字符串常量的使用。4.掌握字符、字符串与字符数组的输入与输出。5.掌握字符串函数的使用字符串数组的使用。6.实验课时 2 学时 二、实验内容 1程序改错题 调试下列程序,使之具有如下功能:任意输入两个字符串(如:ningbo和china),并

28、存放在 a,b 两个数组中。然后把较短的字符串放在 a 数组,较长的字符串放在 b 数组。并输出。程序中的 strlen 是库函数,功能是求字符串的长度,它的原型保存在头文件string.h中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。#include#include void main()char a10,b10,ch;int c,d,k;scanf(%s,&a);scanf(%s,&b);/*error*/printf(a=%s,b=%sn,a,b);c=strlen(a);d=strlen(b);if(cd)for(k=0;kd;k+)/*error

29、*/ch=ak;ak=bk;bk=ch;ak=0;/*error*/printf(a=%sn,a);printf(b=%sn,b);下列给定程序中,函数 fun 的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include void fun(char*s)int i,j;for(i=0;j=0;sj!=0;i+)/*error*/if(si=0&si=9)sj+=si;sj=”0”;/*error*/void main()char item80;

30、printf(nEnter a string:);gets(item);printf(nnThe string is:%sn,item);fun(item);printf(nnThe string of changing is:%sn,item);2.一般编程题 编程题 1 请编一个函数 fun(char*s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为 abcdefg,则调用该函数后,串中的内容为 gfedcba。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。#include#include#

31、define N 81 void fun(char s)/*请填写完整*/void main()char aN;printf(Enter a string:);gets(a);printf(The original string is:);puts(a);fun(a);printf(n);printf(The string after modified:);puts(a);编程题 2 请编写输入以下图案(1)、(2)的程序,图案的行数由输入的值确定。(1)(2)3较难编程题 编程题 1 编写程序:程序功能是从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,例如,若输入 edcba,则应输

32、出 abcde。#include#include void main()int i,j;char string100,c;printf(Please input a string:);gets(string);/*请填写完整*/printf(result:%sn,string);编程题 2 编写程序:程序功能是统计子串 substr 在母串 str 中出现的次数。要求编写并调用函数fun 的功能是:从 str 所指字符串中,找出 substr 所指子串的个数作为函数值返回。例如,当 str 所指字符串中的内容为 abcdabfab,substr 所指字符串的内容为 ab,则函数返回整数 3。#

33、include count(char str,char substr)/*请填写完整*/void main()char str80,substr80;int n;gets(str);gets(substr);printf(%dn,count(str,substr);8.4 实验八 指针 一、实验目的与要求 1.理解和掌握指针的概念,定义和使用指针变量。2.掌握函数之间指针的传递关系。3.掌握通过指针操作数组中元素的方法。4.实验 2 学时 二、实验内容 1程序调试(1)调试本程序,了解运算符*与&的用法,并注意容易出错的地方。#include void main()float x;float*

34、xptr;/xptr=&x;/,此处是否可以用*xptr=&x;?x=7.9;printf(“The address of x is%xn”,&x);printf(“The value of xptr is%xn”,xptr);printf(“The value of x is%fn”,x);printf(“The value of*xptr is%fn”,*xptr);/程序运行结果如下:在上面的程序中,注意区别*ptr 的不同意义。语句中的*表示此处的 xptr 是作为一个指针变量来定义的,而语句中的*则表示取变量 xptr 所指向的值,在本题中就是变量 x 的值,这时的*可以作为运算符来

35、看待。这也可以理解为什么语句中用了 xptr=&x 而不是*xptr=&x,因为在运算过程中*xptr 所表示的就是 x,如果将 x 的地址赋给 x,肯定会产生错误。明白了*与&的用法后,可以接着看下面一个例子,分析其出错的原因。(2)调试程序。下面程序中有错误,请调试修改 输入 3 个整数,按从小到大的顺序输出。#include “stdio.h”void main()int a,b,c;int*p1,*p2,*p3;/定义 3 个指针变量 void swap(int*p1,int*p2);scanf(“%d,%d,%d”,&a,&b,&c);p1=&a;p2=&b;p3=&c;/3 个指针

36、分别指向 3 个整型变量/用 swap 函数交换 2 个数,使较小数放到变量 a 中,较大数放到变量 b 中 if(ab)swap(p1,p2);/if(ac)swap(p1,p3);if(bc)swap(p2,p3);printf(“%d,%d,%d”,a,b,c);/按从小到大的顺序输出 3 个数 void swap(int*p1,int*p2)/swap 函数试图实现 2 个数的交换 int *x;x=p1;/p1=p2;/p2=x;/本题编译连接都没有问题,但是不能运行出正确结果。原因在哪里呢?对语句的调用进行分析,请大家仔细观察 swap 函数的实现部分。语句表明 ab 成立,因此需

37、要将变量a 和 b 中的数值进行调换,使其满足从小到大的排列顺序。swap 函数中定义了一个指针变量x,语句是以指针变量 x 作为中间变量,将形参指针 p1 和 p2 所指的方向进行了调换,即,使形参指针 p2 指向了较小值,而 p1 指向了较大值,但是这种交换对变量 a 和 b 并没有产生任何影响,当 swap 函数调用完毕后,变量 a 和 b 依然维持原有情况,无法使它们中的数值按从小到大的顺序重新排列,因此无法得到正确的运行效果。对 swap 函数如何改造才能得到正确结果呢?请大家结合本题进行改错。2 程序完整题 运用指针对传递进来的两个整型量计算它们的和与积之后,通过参数返回,并予以输

38、出。划横线的位置是本程序缺失的部分,请填写正确内容并运行此程序。#include void compute(int m,int n,int*sum,int*p)void main()int x,y,sum,product;scanf(%d%d,&x,&y);/输入两个整型量 compute(x,y,&sum,&product);/将两数和存入变量sum,积存入变量product printf(%d%dn,sum,product);3一般编程题 1.用指针法统计 10 个数中正数、负数和零的个数,并分别求正数的总和,负数的总和。2.通过指向整型数组的指针将数组 amn的内容按 m 行 n 列的格

39、式输出,如一个 23 的数组将显示为如下所示的 2 行 3 列的形式:4较难编程题 1.输入一行字符,开始用一个指针指向这行字符的开头,并依次向后移,分别统计出其中英文字母、空格、数字和其它字符的个数。2.输入一个正整数表示一个星期中的某一天,若此数字在1,7内,则 输出对应英文星期名,否则表示输入错误,例如,输入 2,程序输出“Tuesday”,输入“16”,程序输出“Illegal day”要求用指针数组处理。9.4 实验九 结构体与链表 一、实验目的与要求 1.掌握结构体类型变量的定义和使用。2.掌握结构体类型数组的定义和使用。3.掌握利用结构和指针处理单向链表的方法 4.实验 4 学时

40、。二、实验内容 1.程序完整题 定义一个结构体变量(包括年、月、日),计算该日在本年中是第几天,注意闰年问题。以下的程序没有考虑闰年问题,请调试以下程序,并将闰年的判断加在程序中使其完整。#include struct int year;int month;int day;date;void main()int i,days;int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31;printf(“Input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);d

41、ays=0;for(i=1;i date.month;i+)days+=day_tabi;days+=date.day;/此处遗漏判断闰年的语句,请补充 printf(“%d/%d is the%dth day in%d.”,date.month,date.day,days,date.year);2.程序改写题 改写上面的程序,用一个函数 days 来实现上面第 1 题的计算,由主函数将年、月、日传递给 days 函数,计算后将日数传回主函数输出。#include struct int year;int month;int day;date;main()daysum(int year,int

42、month,int day)3.一般编程题 (1)宁波大学阳明学院分流,信息科学与工程学院有 4 个专业,分别是通信工程、电子信息科学与工程、自动化、光电信息工程,编写程序统计每个专业的报名人数,描述候选专业的信息用专业名和报名数表示。(2)从键盘输入 n 个学生的 3 门课程(语文、数学和英语)考试成绩,计算每个学生的平均成绩,并按平均成绩从高到低排序输出每个学生的信息。要求使用结构体数据类型 (3)利用下面的节点结构:struct Node char data;struct Node*link;实现:从键盘输入一行字符,然后按输入顺序建立链表,最后输出整个链表。其中建立链表和输出链表的过程

43、分别用不同的函数实现。(4)假设有 a、b 两个链表,每个链表中的节点包括学号、一门课程的成绩。要求把两个链表合并,按学号升序排列。(两个链表中不存在重复的学号)4.较难编程题 (1)用结构体数组修改教材上的例 9-2,输入 n 个职工的姓名,工资,奖金和扣款,对每个 职工在原来工资的基础上增加 5%,计算职工的实发工资并输出每个职工的工资条。(2)编写一个程序实现对学生数据的操作,每个学生结点包括学号和三门课程的成绩以及平均分,要求:输入若干学生的学号和成绩建立链表;能对链表进行输出;能根据学号删除指定的学生结点;能插入给定的学生结点。围绕以上 4 个功能建立一个简单的菜单,使用户能方便地选

44、择不同功能进行操作。第 10 章 文件 10.1 知识要点 1.文件的功能 文件的引入,使得 c 处理大量数据时非常方便,可以从存储介质上直接导入导出,而不必从键盘上一个一个数据输入。使用文件时,首先要定义一个文件指针 FILE *fp;C 语言把文件看成是一个字符(字节)的序列,即由一个一个字符的数据顺序组成。根据数据的组织形式,可分成 ASCII 文件和二进制文件。区别如下所示。十进制整数 10000 内存中存放形式:00100111 00010000 二进制文件中的存放形式:00100111 00010000 ASCII 码文件中的存放形式:00110001 00110000 00110

45、000 00110000 00110000 ASCII 优点:容易移植,缺点:占用存储空间大,耗时;二进制优点:占用存储空间少,存储时间快;缺点:不易移植。2.文件的打开、关闭 文件打开:if(fp=fopen(“file1.c”,”r”)=NULL)printf(“cannot open this filen”);exit(0);文件关闭:fclose(fp);3.文件读写及定位操作 常用的读写函数:fputc,fgetc,fputs,fgets,fscanf,fprintf,fread,fwrite 定位函数:rewind,fseek,ftell 10.2 常见错误和难点分析 文件打开和关

46、闭时,一定要指明打开或关闭的方式,如“r”,“w”,“a”分别表示只读形式,写入形式,附加形式。1.文件指针的定义 对文件进行操作,首先,必须要建立文件指针。文件类型指针的定义方式:FILE*文件指针变量名;注意:编程的时候,所有的标点符号必须在英文输入状态下输入!2.打开与关闭文件,文件要使用时,必需先对文件打开,使用后,在程序结束之前,必须要关闭文件,也就是说 fopen 和 fclose 是成对出现!3.掌握输入输出函数 fscanf,fprintf,fread,fwrite 等中每个参数的意义,以及相对位置。参 数 书 写 位 置 一定 不能 搞 错,如 fscanf(fp,“%d,%

47、f”,&i,&t);绝 对不可以写 成fscanf(“%d,%f”,&i,&t,fp);10.3 测试与练习题 1 程序阅读题 有如下程序#include void main()FILE *fp;int i=20,j=30,k,n;fp=fopen(data.dat,w);fprintf(fp,%dn,i);fprintf(fp,%dn,j);fclose(fp);fp=fopen(data.dat,r);fscanf(fp,%d%d,&k,&n);printf(%d%dn,k,n);fclose(fp);程序运行后的输出结果是 。A)20 30 B)10 30 C)10 20 D)20 10

48、 2程序填空题 阅读下面题目,请补充完整。#include stdio.h#include stdlib.h void main()FILE *fp;char ch;if(fp=fopen(file_s.txt,w)=NULL)printf(cant open this file!n);exit(0);ch=getchar();while(ch!=#)fputc(【1】);ch=getchar();【2】;【1】A.fp,ch B.ch,file_s C.ch,fp D.file_s,ch【2】A.exit(0)B.fclose(fp)C.exit(fp)D.fclose(0)3 编程题 (1

49、)函数 ff(str,ch)的功能是统计并返回字符 ch 在字符串 str 中出现的次数。例如:调用ff(every,e)后返回 2,因为在字符串every中字符e出现了 2 次。从键盘输入一个字符 ch,输出该字符在文本文件 input.txt 的每一行中出现的次数。(必须调用函数 ff(str,ch)。例如:如果文件 input.txt 中存放了下列数据:every 121 I am a student.运行程序,并输入e后,输出 2 0 1 (2)编写程序,从键盘输入 3 个学生的数据(学号,姓名,年龄,通信地址),将它们存入文件 student;然后再从文件中读出数据,显示在屏幕上。#

50、include#include#define SIZE 3 struct student /*定义结构*/long num;char name10;int age;char address10;stuSIZE,out;/*请填写完整*/10.4 实验十 文件操作 一、实验目的与要求 1掌握文件、文件指针的概念。2学会使用文件打开、关闭、读、写等文件操作函数。3实验 2 学时。二、实验内容 1程序完整题 填空横线处并调试程序:从键盘输入一行字符(以#字符结束),写到文件 file1.txt 中。注意文件打开方式的定义。#include stdio.h#include stdlib.h main(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁