c语言程序设计向艳书上例题源代码

上传人:无*** 文档编号:103317420 上传时间:2022-06-08 格式:DOC 页数:51 大小:102.50KB
返回 下载 相关 举报
c语言程序设计向艳书上例题源代码_第1页
第1页 / 共51页
c语言程序设计向艳书上例题源代码_第2页
第2页 / 共51页
c语言程序设计向艳书上例题源代码_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第五章 函数1. 定义一个求两个整数和的函数int sum(x,y)int x,y;int z;z=x+y;return(z);2. 编写函数求两个数的最大值#include float max(float x,float y)float z;if(xy) z=x;else z=y;return (z);void main()float a,b,c;scanf(%f%f,&a,&b);c=max(a,b);printf(max=&fn,c);3. 计算并输出一个圆台两底面积之和#include float area(float x,float y)float s;s=3.1415*(x*x+y*y);return s;void printstar()int i;for(i=0;i30;i+)printf(*);printf(n);void main()float r1,r2,s;printstar();scanf(%f,%f,&r1,&r2);s=area(r1,r2);printf(s=%.2fn,s);printstar();4. 实参求值顺序的例子#include int fun(int a,int b)if (ab) return 1;else if (a=b) return 0;else return -1;void main()int k=3,s;s=fun(k,+k);printf(s=%dn,s);5. 计算n i=1 i#include void main()void s(int);int n;printf(input numbern);scanf(%d,&n);s(n);printf(n=%dn,n);void s(int n)int i;for(i=n-1;i=1;i-)n=n+i;printf(n=%dn,n);6. 全局变量被“屏蔽”#include int a=3,b=5;max(int a,int b)int c;c=ab?a:b;return(c);void main()int a=8;printf(%dn,max(a,b);7. 输入正方体的长宽高,求体积和三个面的面积#include int s1,s2,s3;int v_s(int a,int b,int c)int v;v=a*b*c;s1=a*b;s2=b*c;s3=a*c;return v;void main()int v,l,w,h;printf(ninput length,width and heightn);scanf(%d%d%d,&l,&w,&h);v=v_s(l,w,h);printf(nv=%d,s1=%d,s2=%d,s3=%dn,v,s1,s2,s3);8. 用register说明变量的程序#includeint fac(int n)register int i,f=1;for(i=1;i=n;i+);f=f*i;return f;void main()int i;for(i=1;i=5;i+)printf(%ds!=%dn,i,fac(i);9. 用static说明变量的程序#includeint fac(int n)static int i,f=1;f=f*n;return f;void main()int i;for(i=1;i=5;i+)printf(%d!=%dn,i,fac(i);10. 用extern说明变量的程序#includeextern int n;void fun()n-=20;int n=100;void main()for(;n=60;)fun();printf(n=%dn,n);11. 计算s=22!+33!#includelong f1(int p)int k;long r;long f2(int);k=p*p;r=f2(k);return r;long f2(int q)long c=1;int i;for(i=1;i=q;i+)c=c*i;return c;void main()int i;long s=0;for(i=2;i=3;i+)s=s+f1(i);printf(ns=%ldn,s);12. 用梯形法编程求函数f(x)=x*x+2*x+1的定积分S02 f(x)dx的值#includedouble fun(double x)double y;y=x*x+2*x+1;return y;double djf(double n,double a,double b)double s=0,h;int i;h=(b-a)/n;for(i=1;i=n;i+)s+=(fun(a+(i-1)*h)+fun(a+i*h)*h)/2;return(s);void main()double s,n,a,b;scanf(%lf,%lf,%lf,&n,&a,&b);s=djf(n,a,b);printf(s=%.2lfn,s);13. 用递归法求n!#includelong fun(int n)long f;if(n=0|n=1)f=1;else f=fun(n-1)*n;return(f);void main()int n;long y;printf(ninput a inteager number:n);scanf(%d,&n);y=fun(n);printf(%d!=%ld,n,y);14. Hanoi塔问题#includevoid move(int n,char x,char y,char z)if(n=1)printf(%c-%cn,x,z);elsemove(n-1,x,z,y);printf(%c-%cn,x,z);move(n-1,y,x,z);void main()int h;printf(ninput number:n);scanf(%d,&h);printf(the step to moving %2d diskes:n,h);move(h,a,b,c);第七章 数组1. 定义一个长度为10的整型一维数组,利用for循环对其中的每个元素赋值,最后利用for循环按逆序输出这十个元素值。#include void main()int i,a10;for(i=0;i=0;i-)printf(%d,ai);2. 编写程序,从键盘输入某班学生某门课的成绩,求出最高分以和其序号。#include void main()int max,score40;int i,n,num;printf(input total numbers:n);scanf(%d,&n);/*输入学生实际人数*/printf(input score:n);for(i=0;in;i+)scanf(%d,&scorei);max=score0;num=0;for(i=1;imax)max=scorei;num=i;printf(max=%d,num=%dn,max,num);3. 从键盘输入某班学生某门课的成绩,然后按分数从低到高进行排序。#include void main()int temp,score40;int i,j,n;printf(input total numbers:n);scanf(%d,&n);printf(input score:n);for(i=0;in;i+)scanf(%d,&scorei);for(i=0;in-1;i+)for(j=0;jscorej+1)temp=scorej;scorej=scorej+1;scorej+1=temp;printf(output score:n);for(i=0;in;i+)printf(%d ,scorei);4. 已知数组a中一共有10个已按由小到大排好序的整数。现从键盘输入一个整数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置,否则打印找不到。#include void main() int a10,d,h,x,i,m;printf(please input 10 numbers:);for(i=0;i10;i+)scanf(%d,&ai);printf(please input x:);scanf(%d,&x);d=0;h=9;while(dam) d=m+1;else h=m-1;if(d=h)printf(%d is the position %dn,x,m);else printf(there is no %dn,x);5. 一个学习小组有5个人,每个人有3门课的考试成绩,如表7-1所示。求全组各科的平均成绩和所有科目的总平均成绩。#include void main()int i,j,s=0,average,v3;int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;for(i=0;i3;i+)for(s=0,j=0;j5;j+)s=s+aji;vi=s/5;average=(v0+v1+v2)/3;printf(math:%dnc language:%dnFoxpro:%dn,v0,v1,v2);printf(total:%dn,average);6. 将一个二维数组的行和列互换,存到另一个二维数组中。#include #define m 2#define n 3void main()int amn=2,4,6,8,10,12,bnm,i,j;printf(array a:n);for(i=0;im;i+)for(j=0;jn;j+)printf(%d ,aij);bji=aij;printf(n);printf(array b:n);for(i=0;in;i+)for(j=0;jm;j+)printf(%d ,bij);printf(n);7. 打印如图所示的杨辉三角型:#include #define N 15void main()int i,j,n,aNN;printf(Input n(1-15):n);scanf(%d,&n);for(i=0;i=n;i+)ai0=aii=1;for(i=2;i=n;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i=n;i+)for(j=0;j=i;j+)printf(%6d,aij);printf(n);8. 打印魔方阵。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。要求打印出由1-n2(n为奇数)的自然数构成的魔方阵。#include #define n 3void main()int i,j,k,i1,j1;int ann=0;j=n/2;i=0;aij=1;for(k=2;k=n*n;k+)i1=i;j1=j;i-;j+;if(in-1) j=0;if(aij=0) aij=k;elsei=i1+1;j=j1;aij=k;for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);9. 初始化二维数组a,并输出各元素的值。#include void main()int i,j;char a5=B,A,S,I,C,d,B,A,S,E;for(i=0;i=1;i+)for(j=0;j=4;j+)printf(%c,aij);printf(n);10. 输入并输出一个一个字符串。#include void main()char a10,i;for(i=0;i10;i+)scanf(%c,&ai);for(i=0;i10;i+)printf(%c,ai);11. 用格式符%s对数组进行输入和输出操作。#include void main()char str16,str26,str36;printf(input string:n);scanf(%s%s%s,str1,str2,str3);printf(%s %s %sn,str1,str2,str3);12. 设有C程序如下:#include void main()char str15;printf(input string:n);scanf(%s,str);printf(%sn,str);/运行时如果输入:/this is a book/输出结果为:this/(字符串长度超过字符数组定义长度)13. 设有C程序如下:#include void main()char str15;printf(input string:n);gets(str);puts(str);/运行时如果输入:this is a book/运行结果为:this is a book14. 连接两个字符串。#include string.h#include stdio.hvoid main()char str125=My name is ;char str210;printf(input your name:n);gets(str2);strcat(str1,str2);puts(str1);/运行时如果输入:Wang Ling/程序运行结果是:My name is Wang Ling15. 设有C程序如下:#include #include string.hvoid main()char str115,str2=C Language;strcpy(str1,str2);puts(str1);16. 字符串比较设有C程序如下:#include stdio.h#include string.hvoid main()int k;char str115,str2=C Language;printf(input a string:n);gets(str1);k=strcmp(str1,str2);if(k=0) printf(str1=str2n);if(k0) printf(str1str2n);if(k0) printf(str1str2n);17. 求字符串长度设有C程序如下:#include stdio.h#include string.hvoid main()int k;char str=C Language;k=strlen(str);printf(The lenth of the string is %dn,k);18. 输入一个字符串,统计有多少个单词。单词之间用空格分隔开。#include void main()char str80,c;int i,num=0,flag=0;printf(please input string:n);gets(str);for(i=0;(c=stri)!=0;i+)if(c= ) flag=0;else if(flag=0)flag=1;num+;printf(There are %d words in the string.n,num);19. 输入一个无符号整数,将其转换成二进制字符串并输出。#include void main() unsigned n; char str10,t; int k,i,j; printf(Please input:); scanf(%u,&n); for(i=0;n!=0;i+) stri=n%2+0; n/=2; stri=0; printf(The result is:); for(k=0,j=i-1;kj;k+,j-) t=strk;strk=strj;strj=t; puts(str);20. 输入五个国家的名称,并按字母顺序排列输出这些国家的名称。#include #include void main()char str20,name520;int i,j;printf(input countrys name:n);for(i=0;i5;i+)gets(namei);printf(n);for(i=0;i4;i+)for(j=0;j0)strcpy(str,namej);strcpy(namej,namej+1);strcpy(namej+1,str);printf(The result is:n);for(i=0;i5;i+)puts(namei);21. 用选择法对十个整数由小到大排序。#include void sort(int a,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+i;jn;j+)if(ajak) k=j;if(k!=i)t=ak;ak=ai;ai=t;void main()int s10,i;printf(input the array:);for(i=0;i10;i+)scanf(%d,&si);sort(s,10);printf(output the array:);for(i=0;i10;i+)printf(%4d,si);#include void nzp(int a,int n)int i;printf(nvalues of array a are:n);for(i=0;in;i+)if(ai0) ai=0;printf(%d,ai);void main()int b8,i;printf(ninput 8 numbers:n);for(i=0;i8;i+)scanf(%d,&bi);printf(initial values of array b are:n);for(i=0;i8;i+)printf(%d,bi);nzp(b,8);printf(nlast values of array b are:n);for(i=0;i8;i+)printf(%d,bi);22. 把一个整数插入已按由大到小顺序排好序的数组中。要求插入后的数组仍按原来的排序规律排列。#include void insert(int a,int n,int x)int s,i;for(i=0;iai)for(s=n-1;s=i;s-)as+1=as;break;ai=x;void main()int i,j,s,x,a11=127,98,87,54,48,44,37,25,20,18;printf(ninput number:);scanf(%d,&x);insert(a,10,x);printf(n output array:);for(i+0;i11;i+)printf(%d ,ai);printf(n);23. 在矩阵a中选出各行最大的元素组成一个一维数组b.#include void fun(int a4,int b)int i,j;for(i=0;i=2;i+)bi=ai0;for(j=1;jbi) bi=aij;void main()int a4=3,16,87,65,4,32,11,108,10,25,12,37;int b3,i,j;fun(a,b);printf(narray a:n);for(i=0;i=2;i+)for(j=0;j=3;j+)printf(%5d,aij);printf(n);printf(array b:n);for(i=0;i=2;i+)printf(%5d,bi);printf(n);第八章 指针第九章 结构体与共用体给结构体变量赋值并输出。#includevoid main()structint num;char name20;int age;char sex;float score;boy1,boy2;boy1.num=20191;scanf(%s %d %c %f,boy1.name,&boy1.age,&boy1.sex,&boy1.score);boy2=boy1;printf(Number=%dtName=%st,boy2.num,boy2.name);printf(Age=%dtSex=%ctScore=%.2fn,boy2.age,boy2.sex,boy2.score);1. 对结构体变量初始化。#includevoid main()struct stuint num;char name20;int age;char sex;float score;boy2,boy1=20191,王芳,19,w,89;boy2=boy1;printf(Number=%dtName=%st,boy2.num,boy2.name);printf(Age=%dtSex=%ctScore=%.2fn,boy2.age,boy2.sex,boy2.score);2. 编写程序,计算表num name age sex score所示的学生情况登记表中的而所有学生的平均成绩和不和格的人数。#includestruct stuint num;char name20;int age;char sex;float score;boy5=20191,王芳,19,W,89,20192,任盈盈,19,W,92,20193,吴宇,18,M,76,20194,李平,19,M,87,20195,王明,19,M,58;void main()int i,c=0;float ave=0;for(i=0;i5;i+)ave+=boyi.score;if(boyi.score60) c+=1;ave=ave/5;printf(average=%.1fncount=%dn,ave,c);3. 编写程序,建立表9-3所示的同学通讯录并输出。编程点拨:先定义一个结构体mem,它有三个成员name,phone,和address,分别用来表示姓名、电话号码和住址。然后定义一一个mem类型的结构体数组man。再用循环结构分别输入和输出各个元素中成员的值。相应的程序如下:#include#define NUM 3struct memchar name20;char phone10;char address30;void main()struct mem manNUM;int i;for(i=0;iNUM;i+)printf(input name:);gets(mani.name);printf(input phone:);gets(mani.phone);printf(input address:);gets(mani.address);printf(namettphonettaddressnn);for(i=0;iNUM;i+)printf(%stt%stt%sn,mani.name,mani.phone,mani.address);4. 指向结构体指针变量的应用。#includestruct stuint num;char name20;int age;char sex;float score;*ps,boy1=20191,王芳,19,W,89;void main()ps=&boy1;printf(Number=%dtName=%st,boy1.num,boy1.name);printf(Age=%dtSex=%ctScore=%fnn,boy1.age,boy1.sex,boy1.score);printf(Number=%dtName=%st,(*ps).num,(*ps).name);printf(Age=%dtSex=%ctScore=%fnn,(*ps).age,(*ps).sex,(*ps).score);printf(Number=%dtName=%st,ps-num,ps-name);printf(Age=%dtSex=%ctScore=%.2fnn,ps-age,ps-sex,ps-score);5. 指向结构体数组的指针的应用。#includestruct stuint num;char name20;int age;char sex;float score;*p,boy5=20191,王芳,19,W,89,20192,任盈盈,19,W,92,20193,吴宇,18,M,76,20194,李平,19,M,87,20195,王明,19,M,58;void main()p=boy;printf(NotNametAgetSextScoren);for(;pnum,p-name,p-age,p-sex,p-score);6. 将9-4重新按函数的形式编写程序,9-4题目:编写程序,计算表num name age sex score所示的学生情况登记表中的而所有学生的平均成绩和不和格的人数。#includestruct stuint num;char name20;int age;char sex;float score;boy5=20191,王芳,19,W,89,20192,任盈盈,19,W,92,20193,吴宇,18,M,76,20194,李平,19,M,87,20195,王明,19,M,58;void main()struct stu*p;void fun(struct stu*p);p=boy;fun(p);void fun(struct stu*p)int c=0,i;float ave=0;for(i=0;iscore;if(p-score60) c+=1;ave=ave/5;printf(average=%.1fncount=%dn,ave,c);7. 从键盘输入一个班(全班30个人)学生的学号、姓名、三门功课的成绩,编程实现下列功能:(1)统计每个学生的总分和平均分。(2)输出平均分在全班平均分以上的学生名单。(3)按总分由高到低输出。#include#define N 30struct studentchar num10;char name20;float score3;float sum;float average;void fun1(struct student*ps)int i,j;for(i=0;isum=0;for(j=0;jsum+=(ps+i)-scorej;(ps+i)-average=(ps+i)-sum/3;printf(output %s:,(ps+i)-num);printf(sum=%f average=%fn,(ps+i)-sum,(ps+i)-average);void fun2(struct student*ps)int i;float ave=0;for (i=0;iaverage;ave/=N;for(i=0;iaverageave)printf(%st%sn,(ps+i)-num,(ps+i)-name);void fun3(struct student*ps)int i,j,k;struct student temp;for(i=0;iN-1;i+)k=i;for(j=i+1;jsumsum) k=j;if(i!=k)temp=*(ps+i);*(ps+i)=*(ps+k);*(ps+k)=temp;printf(output the sorted:n);for(i=0;inum,(ps+i)-name,(ps+i)-score0,(ps+i)-score1,(ps+i)-score2,(ps+i)-sum,(ps+i)-average);void main()int i;struct student stuN,*ps=stu;for(i=0;inum,(ps+i)-name,&(ps+i)-score0,&(ps+i)-score1,&(ps+i)-score2);fun1(ps);fun2(ps);fun3(ps);8. 学校的人员数据管理。设某学校有若干人员的数据,其中有教师和学生。教师的数据包括编号、姓名、性别、工作、职务。学生的数据包括编号、姓名、性别、工作、班号。如果将两种数据放在同一个表格中,那么有一栏,对于教师登记教师的“职务”;对于学生,则登记学生的“班号”。#includestructint num;char name20;char sex;char job;unionint class;char title20;rank;per10;void main()int i;for(i=0;i10;i+)scanf(%d%s%c%c,&peri.num,peri.name,&peri.sex,&peri.job);if(peri.job=t)scanf(%s,peri.rank.title);else if(peri.job=s)scanf(%d,&peri.rank.class);printf(nNo Name SexJob Title/Classn);for(i=0;i10;i+)if(peri.job=t)printf(%-6d%-10s%-5c%-5c%-15sn,peri.num,peri.name,peri.sex,peri.job,peri.rank.title);else if(peri.job=s)printf(%-6d%-10s%-5c%-5c%-15dn,peri.num,peri.name,peri.sex,peri.job,peri.rank.class);9. 阅读下列c程序:#includevoid main()enum weekdaysun,mon,tue,wed,thu,fei,sata,b,c;a=sun;b=mon;c=tue;printf(%d%d%d,a,b,c);10. 编写程序,由键盘输入一个整数值(代表星期几),输出其相应的英文名称。#includevoid main()int day;enum weekdaysun,mon,tue,wed,thu,fri,satweek;printf(input day:);scanf(%d,&day);if(day=0&day=6)week=(enum weekday)day;switch(week)case sun:printf(Sundayn);break;case mon:printf(Mondayn);break;case tue:printf(Tuesdayn);break;case wed:printf(Wednesdayn);break;case thu:printf(Thuusdayn);break;case fri:printf(Fridayn);break;case sat:printf(Saturdayn);break;else printf(ERRORn);第十章 动态数组与链表1. 分配一块区域,输入一个学生数据。#include #include void main()struct stuint num;char *name;char sex;float score;*ps;ps=(struct stu*)malloc(sizeof(struct stu);ps-num=102;ps-name=Zhang ping;ps-sex=M;ps-score=62.5;printf(Number=%dnName=%sn,ps-num,ps-name);printf(Sex=%cnScore=%fn,ps-sex,ps-score);free(ps);2. 编程求某个班学生某门课程的最高分和平均成绩#include #include float average(float *p,int n)float ave=0;int i;for(i=0;in;i+)ave+=*(p+i);ave=ave/n;return ave;float max_score(float*p,int n)float max=*p;int i;for(i=1;imax)max=*(p+i);return max;void main()float *p,max,ave;int i,n;printf(Please input array size:);scanf(%d,&n);p=(float *)malloc(n*sizeof(float);printf(Please input score:);for(i=0;in;i+)scanf(%f,p+i);ave=average(p,n);max=max_score(p,n);printf(ave=%.2f,max=%.2fn,ave,max);free(p);3. 从键盘输入m(1=m=10和n(1=n=5)的值,求1至m的1至m次幂。#include #include int mypow(int,int);void main()int *p,i,j,m,n;printf(Please input m,n:);scanf(%d%d,&m,&n);p=(int*)calloc(m,n*sizeof(int);for(i=0;im;i+)for(j=0;jn;j+)pi*n+j=mypow(i+1,j+1);printf(%5d,pi*n+j);free(p);int mypow(int x,int n)int t=1,i;for(i=1;i=n;i+)t=t*x;return t;4. 建立一个链表,其节点元素值为099之间的n(n20)个随机整数,然后依次输出链表中各元素值。#include #include #include typedef struct nodeint num;struct node *next;Listnode;Listnode *creat(int);void print(Listnode *);void main()Listnode *head;int i,n;printf(Please input the number:);scanf(%d,&n);head=creat(n);print(head);Listnode *creat(int n)int i;Listnode *head,*p1,*p2;head=NULL;srand(time(NULL);if(n0)for(i=1;inum=rand()%100;if(i=1)head=p1;else p2-next=p1;p2=p1;p2-next=NULL;return(head);void print(Listnode *head)Listnode *p;p=head;if(head!=NULL)doprintf(%5d,p-num);p=p-next;while(p!=NULL);5. 设有一学生成绩表,表中信息包括学号、姓名和三门课的成绩。编写程序,先建立学生成绩链表(以输入学号“*”做结束标志),然后统计输出每个学生的平均分。#include #include #include typedef struct studentchar num10;char name20;float score3;float ave;struct student *next;STU;STU *creat();void average(STU *);int n;void main() STU *head; head=creat(); average(head);STU *creat() STU *head,*p1,*p2; int i; n=0; head=NULL; p1=p2=(ST.U *)malloc(sizeof(STU); scanf(%s%s,p1-num,p1-name); for(i=0;iscorei); while(strcmp(p1-num,*)!=0) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(STU *)malloc(sizeof(STU); scanf(%s%s,p1-num,p1-name); for(i=0;iscorei); p2-next=NULL; free(p1); return(head);void average(STU *head)STU *p;int i;p=head;if(head!=NULL)dop-ave=0;for(i=0;iave+=p-scorei;p-ave/=3;printf(%.1fn,p-ave);p=p-next;while(p!=NULL);第十一章 文件1. 从键盘输入一些字符,逐个把它们存到磁盘中,直到遇到“#”号为止。编程点拨:从键盘输入字符
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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