第八章 函数习题课课件

上传人:我*** 文档编号:140969688 上传时间:2020-08-03 格式:PPT 页数:19 大小:274KB
返回 下载 相关 举报
第八章 函数习题课课件_第1页
第1页 / 共19页
第八章 函数习题课课件_第2页
第2页 / 共19页
第八章 函数习题课课件_第3页
第3页 / 共19页
第八章 函数习题课课件_第4页
第4页 / 共19页
第八章 函数习题课课件_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《第八章 函数习题课课件》由会员分享,可在线阅读,更多相关《第八章 函数习题课课件(19页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,教师:陆艳洪 联系方式: TEL: 88493458 转921 EMAIL: 办公室:实验大楼A913,例:3)分支问题:某单位马上要加工资:对于工龄大于等于20年的,如果现工资高于2000,加200元,否则加180元;对于工龄小于20年的,如果现工资高于1500,加150元,否则加120元。工龄和现工资从键盘输入,编程求出下表加工资后的员工工资。 .,void main() int y ; / 工龄 double s0 ; / 现工资 double s ; / 调整后工资 printf(输入工龄:); scanf(%d,/ 计算调整后工资 if (y=20) if (s020

2、00) s=s0+200; else s=s0+180; else if (s01500) s=s0+150; else s=s0+120; printf(调整后工资是%lfn,s);,例:6)循环结构程序问题:累加累乘问题:利用下面公式求e的值,直到误差小于 为止 。,void main() double e0, e=1.0; / 累加和初值为 1 double t=1.0 ; / 累乘初值为 1 int n=0 ; do e0= e ; / 计算数列项 n = n + 1 ; t = t / n ; e = e + t ; / 计算累加和 while (fabs(e-e0)1e-6) ;

3、/计算误差,如果大于1e-6继续做下去 printf(e值为:%lfn , e); ,例:14)字符串问题:输入一行字符,统计其中有多少个单词(单词之间用空格分隔开)。,void main() char s1100; int i,num=0,word=0; char c ; printf(输入一个字符串n); gets(s1); / 分析:单词的数目可以由空格出现的次数决定,但连续的若干个空格只算一次,一行开头的空格不算,i=0 ; while (s1i!=0) c=s1i; / 如果是空格则清除单词状态,准备下一个新单词 if (c= ) word=0; / 如果不是空格,且不是单词状态 则

4、产生一个新单词 else if (word=0) word=1 ; / 设置单词状态 num+; / 增加一个新单词 i+; / 检查下一个字符 printf(字符串中有%d个单词n,num) ; / 输出结果,例:15)编写一个函数double avg(double A,int n),函数的功能是求数组中n个元素的平均值。在主函数中输入20个数据,调用函数输出平均值,void main() double A20 ,ave; int i ; printf(输入20个数据(用空格或者TAB或者回车间隔)n); / 一维数组的输入() for(i=0; i20; i+) scanf(%lf , ,

5、/ 数组A中n个元素的平均值 double avg(double A,int n) double ave = 0.0 ; int i ; / 先计算各元素的累加和 for(i=0; in; i+) ave = ave + Ai ; / 除以个数即为平均值 ave = ave / n ; / 函数返回值即为平均值 return ave ; ,例:课本.14输入10个学生5门课成绩,用函数实现。每个学生平均分,每门课平均分,50个分中最高分对应的学生和课程,计算平均方差.,数据定义: #define STUDENT_NUM 10 #define COURSE_NUM 5 struct GradeM

6、sg char CourseName20; Float score; float average_score; ; struct student struct GradeMsg gradeCOURSE_NUM ; float average_score; char name20; stuSTUDENT_NUM ; float average_fcha; struct GradeMsg CurseAvgScoreCOURSE_NUM;,例:课本.14输入10个学生5门课成绩,用函数实现。每个学生平均分,每门课平均分,50个分中最高分对应的学生和课程,计算平均方差.,函数定义: /求学生的平均分

7、void GetStudentGradefunc(struct student stu,int stu_num,int curse_num) /求课程的平均分 void GetCurseAverage(struct student stu,int stu_num,int curse_num) /求最高分数的学生名字和课程名 float GetMaxScoreMsg(struct student stu,int stu_num,int curse_num,char*Max_studentName,char*Max_curseName) /求平均分方差 float GetAverageScoreF

8、C(struct student stu,int Student_Num),例:习题集P130(9)编写实现下字符串操作要求的函数。,1)left(char src,int n,char dest),将src左边n个字符复制到dest中 2)right(char src,int n,char dest),将src右边n个字符复制到dest中 3)mid(char src,int loc,int n,char dest),将src自下标loc开始的n个字符复制到dest中,例:习题集P130(9)编写实现下字符串操作要求的函数。Left()将src左边n个字符复制到dest中, right()将

9、src右边n个字符复制到dest中.,void Left(char src,int n,char dest) int i; if(nstrlen(src) printf(src不够长); return; for(i=0;in;i+) desti=srci; desti=0; ,void Right (char src,int n,char dest) int I,count; if(nstrlen(src) printf(src不够长); return; Count =0; for(i=strlen(src)-n;istrlen(src);i+ ) destcount+=srci; destc

10、ount=0; ,例:习题集P130(9)编写实现下字符串操作要求的函数。Mid ()将src自下标loc开始的n个字符复制到dest中,void Mid(char src,int loc,int n,char dest) int I,count; if(loc+nstrlen(src) printf(src不够长); return; Count =0; for(i=loc;iloc+n;i+ ) destcount+=srci; destcount=0; ,例:习题集P130(11)用函数将数组下标从0到P的元素移到数组的最后。,函数定义: void func(int a,int a_LEN

11、,int p) 其中: a:要操作的数组 a_LEN:数组中数据个数 P:要移动的数据最大下标,func() int* b; b=(int*)malloc(a_LEN*sizeof(int); for(i=0;i=p;i+)/用b记前p个数据 *(b+i)=ai; /将后面的数据前移动p+1 for(i=p+1;ia_LEN;i+) ai-p-1=ai; count = 0; /将前p+1个数据放到数组的最后 for(i=a_LEN-p-1;ia_LEN;i+) ai=bcount; count+; free(b); ,例:教材P318(11)建立一个链表,每个节点包括:学号、姓名、性别、年龄

12、。输入一个年龄,将该年龄的节点删除。,数据定义: #define STUDENT_NUM 10 struct student int No; char name20; char sex20; int age; struct student* Next; stuSTUDENT_NUM ;,函数定义: /创建num个节点的链表,返回所创建的链表头指针。 struct student *creat(int num ); /删除头指针为head的链表中年龄为m_age的节点,返回删除后的链表头指针。 struct student * DelNode(struct student * head,int

13、m_age) /打印链表函数 void plink(student *head );,struct student *creat(int num ) struct student *head, *p1, *p2; int i, len; len=sizeof(struct student); for(i=1; ino, p1-name, p1-sex ,/删除头指针为head的链表中年龄为m_age的节点,返回删除后的链表头指针。 DelNode(struct student * head,int m_age) struct student *p1, *p2; int i, len; p1=p

14、2=head; if(p1-age=m_age) /*删除首节点*/ head=p1-next; else while(p1-next!=NULL) if(p1-age=m_age) p2-next=p1-next; elsep2=p1;p1=p1-next; return(head); ,当头好几个节点满足删除条件时,都删除,改变头指针,while(p1!=NULL) while(p1!=NULL),例:教材P318(11)打印链表函数。,void plink(student *head ) struct student *p; int i=0; p=head; while( ) print

15、f(节点%d: %d %s %s %dn,i, p-No,p-name,p-sex,p-age) p=p-next; i+; ,p!=NULL,例:教材P318(11)建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,将该年龄的节点删除。,void main() struct student* head,*head_deled; int Del_age; printf(Enter student msg n); head=creat(STUDENT_NUM ); printf(“打印所建立的链表信息:n); plink(head ); printf(输入眼删除节点的年龄:n);

16、 scanf(%d, ,#define STUDENT_NUM 10,例:习题集P211(1)编写程序统计指定文件中出现“if”,”while”,”for”单词的次数。,数据定义: FILE *fp; int if_count,while_count,for_count; 函数定义: /查找文件中出现单词的个数,返回个数 int FindWord (FILE* fp,char word ) 其中: fp: 所指定的文件 word:要查找的单词 返回值:文件fp中出现word的次数;,/查找文件中出现单词的个数,返回个数 int FindWord (FILE* fp,char word ) char word50; int count=0; char bufLEN=0 F

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号