C语言作业题整理.doc_第1页
C语言作业题整理.doc_第2页
C语言作业题整理.doc_第3页
C语言作业题整理.doc_第4页
C语言作业题整理.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 第一次1.1. 编写一程序,通过键盘输入一华氏温度,将其转换为摄氏温度后输出。 公式为c=5/9(f 32)#include stdio.hmain()float f=0,h=0;printf(请输入华氏温度:);scanf(%f,&f);printf(转化为摄氏温度为:);h=(float)5/9*(f-32);printf(%.2fn,h);1.2. 通过键盘输入一小写字母,将其转换为大写字母输出,并输出该大写字母的后一位字母和前一位字母(如果输入该大写字母为A,则其前一位字母为Z;如果输入该大写字母为Z,则其后一位字母为A)。#include stdio.hmain()char ch1,ch2,ch3,ch;printf(请输入一个小写字母:n);while(scanf(%c,&ch),ch122)printf(您输入的符号不是小写字母,请重新输入一个小写字母:n);printf(其对应的大写字母和前后的大写字母分别为:n);if(ch=a)ch2=ch-32;ch1=ch2+25;ch3=ch2+1;else if(ch=z)ch2=ch-32;ch1=ch2-1;ch3=ch2-25;else ch2=ch-32;ch1=ch2-1;ch3=ch2+1;printf(%c,%c,%cn,ch1,ch2,ch3);1.3. 通过键盘输入一个两位的整数,试编写程序将其个位与十位分别以字符的方式输出。输出形式为:“the input number is 你输入的整数,the tens is 十位数字,the units is 个位数字。”如果输入的整数不正确,则输出“wrong input”#include stdio.hmain()int a,b1,b2;printf(请输入一个两位正整数:n);scanf(%d,&a);if(a=100)printf(输入不符合要求);elseb1=a%10;b2=a/10;printf(十位数是:%cn个位数是:%cn,b2+0,b1+0);1.4. 给定方程ax2+bx+c=0,试编写程序根据键盘输入实数a、b、c,能输出其根,要求:如果该方程有两个不同的根,则输出形式为the Answer of ax2+bx+c=0 is x1=根1,x2=根2如果该方程有两个相同的根,则输出形式为the Answer of ax2+bx+c=0 is x1=X2=根如果该方程无解,则输出形式为the Answer of ax2+bx+c=0 is none,其中a、b、c均为键盘输入,输出结果保留两位小数。#include stdio.h#include math.hmain()float a,b,c,disc,x1,x2;scanf(%f,%f,%f,&a,&b,&c);disc=b*b-4*a*c;if(disc=0)x1=x2=-b/(2*a);printf(the Answer of ax2+bx+c is x1=x2=%.2fn,x1);else if(disc0)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(the Answer of ax2+bx+c is x1=%.2f,x2=%.2fn,x1,x2);elseprintf(the Answer of ax2+bx+c=0 is nonen);2. 第二次2.1. 求1/3+3/5+5/7+前20项之和。(本题要求分别以goto,for,do .while,while四种循环语句实现)#include int main()int i;float s=0;for(i=1;i=20;i+)s+=(float)(2*i-1)/(2*i+1);printf(s=%fn,s);return 0;#include int main()int p,r,n,m;printf(n,m:); scanf(%d,%d,&n,&m);if(p=n*m)while(m!=0)r=n%m;n=m;m=r;printf(最大公约数是%dn,n);printf(最小公倍数是%dn,p/n);return 0;#includevoid main()int s,i,j;int a;printf(请输入一个数:n);scanf(%d,&a); for(i=1;i=a;i+)s=0;for(j=1;ji;j+)if(i%j=0)s=s+j;if(i=s)printf(完全数%d=,i);for(j=1;ji;j+)if(i%j=0)printf(%d+,j);printf(b n);2.2. 输入两个正整数,求其最小公倍数。#include int main ()int n;printf(请输入你的学号:n);scanf(%d,&n);if(n%2=0)int i,j,k=3,s=1;for (i=1;i8;i+)for(j=0;jk;j+) printf( );for(j=0;js;j+) printf(*);printf(n);if(i4)k-;s=s+2;elsek+;s=s-2;elseint m,a,b;printf(请输入任意一个正整数:n);scanf(%d,&m);for(a=1;a=m;a+)for(b=1;b=m;b+) printf(* ); printf(n);return 0;2.3. 如果一个正整数的所有因子之和等于该正整数,则称这个正整数为完全数。编写程序读入n,输出不超过n的全部完全数。如6=1+2+328=1+2+4+7+14#includevoid main()int s,i,j;int a;printf(请输入一个数:n);scanf(%d,&a); for(i=1;i=a;i+)s=0;for(j=1;ji;j+)if(i%j=0)s=s+j;if(i=s)printf(完全数%d=,i);for(j=1;ji;j+)if(i%j=0)printf(%d+,j);printf(b n);2.4. 将学号对2取模(即取余),值为0的同学完成编写程序利用星号打印出菱形图案;否则完成编写程序利用星号打印出正方形图案。#include int main ()int n;printf(请输入你的学号:n);scanf(%d,&n);if(n%2=0)int i,j,k=3,s=1;for (i=1;i8;i+)for(j=0;jk;j+) printf( );for(j=0;js;j+) printf(*);printf(n);if(i4)k-;s=s+2;elsek+;s=s-2;elseint m,a,b;printf(请输入任意一个正整数:n);scanf(%d,&m);for(a=1;a=m;a+)for(b=1;b=m;b+) printf(* ); printf(n);return 0;3. 第三次3.1. 已知 y=2x3 -3x4 +6x5 -4x+50 ,从 x=0 到 x=2 ,每隔 0.2 计算,并输入正整数n,将 y 的值进行排序后由小到大输出前n项和后n项(如输入5,则输出前5项和后5项,即最小的5个y值及最大的5个y值)。#includemain()int i, j, k, h, l, n;float x, t, y11;i=0;for(x=0;x2.1;x=x+0.2)yi=2*x*x*x-3*x*x*x*x+6*x*x*x*x*x-4*x+50; i=i+1;printf(请输入一个1-11以内正整数n);scanf(%d,&n);if(0n&n12)for(l=0;ln-1;l+)for(j=1;jyj)t=yj-1; yj-1=yj; yj=t;printf(最小的%d个y值是nn,n);for(k=0;kn;k+)printf(%fnn,yk);printf(最大的%d个y值是nn,n);for(h=11-n;h11;h+)printf(%fnn,yh);else printf(您输入的数字超出规定范围n);3.2. 输入一个班10个学生的成绩,统计各分数段0,60),60,70),70,80),80,90),90-100的人数。#includemain()int i, a=0, b=0, c=0, d=0, e=0;float g10;printf(请输入10个学生的成绩,输入完成请按回车键n);for(i=0;i10;i+)scanf(%f,&gi);for(i=0;i10;i+) if(0=gi&gi60) a+;else if(60=gi&gi70) b+;else if(70=gi&gi80) c+;else if(80=gi&gi90) d+;else if(90=gi&gi=100) e+;else printf(输入的成绩有问题n);printf(0-60分人数为 %dn,a);printf(60-70分人数为 %dn,b);printf(70-80分人数为 %dn,c);printf(80-90分人数为 %dn,d);printf(90-100分人数为 %dn,e);3.3. 求任意输入的5个数中的最大值、最小值和平均值,并求出有多少个数超过平均值。#includemain()int i, j, k, l, num=0;float ave, t, g5;printf(请输入5个数,输入完成请按回车键n);for(i=0;i5;i+)scanf(%f,&gi);for(j=0;j5;j+)for(k=1;kgk)t=gk-1; gk-1=gk; gk=t;ave=(g0+g1+g2+g3+g4)/5.0;for(l=0;lave) num+;printf(5个数中最大值是 %fn,g4);printf(5个数中最小值是 %fn,g0);printf(5个数的平均值是 %fn,ave);printf(有 %d 个数超过平均值n,num);4. 第四次4.1. 一个学习小组有5个人,每个人有三门课的考试成绩。求小组分科的平均成绩和各同学平均成绩;同时将各位同学的平均成绩按照从高到低的顺序排名后输出其姓名、平均成绩以及排序号。张王李赵周ath 8061598576C 7565638777Eng 9271709085#include stdio.h#include string.h#include math.hmain()char names55=张,王,李,赵,周;char items35;char name5;int grade53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;float avg13,avg25,temp;int i,j;int sum;strcpy(names0,张);strcpy(names1,王);strcpy(names2,李);strcpy(names3,赵);strcpy(names4,周);/*for(i=0;i5;i+)gets(namesi);*/strcpy(items0,Math);strcpy(items1,C);strcpy(items2,Eng);/*/printf(-以下为分科的平均成绩-n);for(i=0;i3;i+)/分科的平均成绩sum=0;for(j=0;j5;j+)sum+=gradeji;avg1i=(float)sum/5;printf(%s的平均成绩为:%.2fn,itemsi,avg1i);printf(nn);printf(-以下为各同学平均成绩-n);for(i=0;i5;i+)/各同学平均成绩sum=0;for(j=0;j3;j+)sum+=gradeij;avg2i=(float)sum/3;printf(%s的平均成绩为:%.2fn,namesi,avg2i);for(i=0;i4;i+)/各同学平均成绩排序for(j=i+1;j5;j+)if(avg2iavg2j)temp=avg2i;avg2i=avg2j;avg2j=temp;strcpy(name,namesi);strcpy(namesi,namesj);strcpy(namesj,name);printf(nn);printf(-以下为各位同学平均成绩从高到低的排名-n);printf(%s ,序号);printf(%s ,姓名);printf(%sn,平均成绩);for(i=0;i5;i+)printf( %d ,i+1);printf( %s ,namesi);printf(%.2fn,avg2i);4.2. 用所学过的知识,编写一个竞赛评分程序。(设有3位选手,5位评委)。输入包括选手的姓名以及5位评委的分数(为0-100的正整数),评分规则为每位选手的成绩为去掉最高分和最低分后再取平均。要求用二维数组来设计程序。输出的格式为 排序 姓名 平均分 最高分 最低分,要求由高到低对平均分排序,平均分保留2位小数。如下所示:No name avg max min1c 82.33 99 662 b 80.12 92 703a80.11 98 60#include stdio.h#include string.h#include math.hmain()char name310;int i,j,max3,min3;int grade35;int sum3;float avg3,float_temp;char str_temp10;int int_temp;int flag=1;printf(please input information of the 3 players:n);for(i=0;i3;i+)scanf(%s %d %d %d %d %d,namei,&gradei0,&gradei1,&gradei2,&gradei3,&gradei4);for(i=0;i3;i+)for(j=0;j100|gradeij0)printf(error!);flag=0;if(flag)for(i=0;i3;i+)maxi=gradei0;mini=gradei0;for(j=1;j5;j+)if(maxigradeij)mini=gradeij;for(i=0;i3;i+)sumi=0;for(j=0;j5;j+)sumi+=gradeij;sumi-=(maxi+mini);avgi=sumi/3.0;for(i=0;i2;i+)for(j=i+1;j3;j+)if(avgiavgj)float_temp=avgi;avgi=avgj;avgj=float_temp;strcpy(str_temp,namei);strcpy(namei,namej);strcpy(namej,str_temp);int_temp=maxi;maxi=maxj;maxj=int_temp;int_temp=mini;mini=minj;minj=int_temp;printf(%8s%8s%8s%8s%8sn,排序,姓名,平均分,最高分,最低分);for(i=0;i3;i+)printf(%8d,i+1);printf(%8s,namei);printf(%8.2f,avgi);printf(%8d,maxi);printf(%8dn,mini);4.3. 学号对2取余,为0的完成A题,为1的完成B题A: 从键盘上输入一个字符串(不能长于30),要求按照字符,分隔将其拆分成数组,并按照字符,出现的顺序倒序输出每个数组的第一个元素。示例如输入字符串able,deal,123,face,1e,则每个数组的第一个元素分别为a,d,1,f,1,倒序则输出字符串1f1da#include stdio.h#include string.h#include math.hmain()int i,k,p,j=0;char str130;char items1030;int count=0;printf(input a string:n);gets(str1);/*i=0;while(str1i!=0)if(str1i=,)count+;i+;*/k=0;p=0;for(j=0;j=0;i-)printf(%c,itemsi0);printf(n);B:从键盘上输入两个字符串(长度不大于20)和整数n(0n=20),要求将第二个字符串插在第一个字符串的n位置开始处并输出。示例如第一个字符串为you are ok.第二个字符串为fine and 输入的整数为8,则表示将fine插在ok前面(y前面为位置0,o前面的位置为8),输出为you are fine and ok.#include stdio.h#include string.h#include math.hmain()char chs20;char chs120;char temp120;char temp220;int n;int i,j;gets(chs);gets(chs1);scanf(%d,&n);for(i=0;in;i+)temp1i=chsi;temp1i=0;for(i=n;istrlen(chs);i+)temp2i-n=chsi;temp2i-n=0;printf(%sn,strcat(temp1,strcat(chs1,temp2);/*/5. 第五次6. 第六次6.1. 编写函数用冒泡排序法将二维数组a33中的9个整数分别按照所属各行进行由大到小的排序。#includevoid order(int a33)int i, j, t, m;for(m=0;m3;m+)for(i=0;i2;i+)for(j=1;j3-i;j+)if(amj-1amj)t=amj-1; amj-1=amj; amj=t;main()int x, y, a33;printf(请为数组a33输入9个数字,按回车键结束n);for(x=0;x3;x+)for(y=0;y3;y+)scanf(%d,&axy);order(a);printf(所求数组为:n);for(x=0;x3;x+)for(y=0;y3;y+)printf(%5d,axy);printf(n);6.2. 编写函数求输入的x和y之间偶数的和。#includeint s1(int m, int n)int i, num=0;for(i=1;in-m;i=i+2)num+=m+i;return (num);int s2(int m, int n)int i, num=0;for(i=2;iy)t=x; x=y; y=t;if(x%2=1)|(x%2=-1)E=s1(x,y);if(x%2=0)E=s2(x,y);printf(这两个数字之间的所有偶数之和为: );printf(%dnn,E);6.3. 编写函数求方程ax2+bx+c=0的所有解(包括实根和非实根)。提示:要考虑a=0,b2-4ac0、=0、0等多种情况,要求针对每种情况都要提供对应函数来实现。#include#includefloat s11 (float b, float c)float x;x=-c/b;printf(方程有一个根为: %.3fn,x);float s12 (float a, float b, float c)float x;x=-b/(2*a);printf(方程有一个根为: %.3fn,x);float s21 (float a, float b, float c)float x1, x2;x1=(-b-sqrt(b*b-4*a*c)/(2*a);x2=(-b+sqrt(b*b-4*a*c)/(2*a);printf(方程一个实根为: %.3fn,x1);printf(方程另一个实根为: %.3fn,x2);float s22 (float a, float b, float c)float x1, x2, m, n;m=-b/(2*a); n=sqrt(4*a*c-b*b)/(2*a);printf(方程一个虚根为: %.3f-%.3fin,m,n);printf(方程另一个虚根为: %.3f+%.3fin,m,n);main()float a, b, c, r;printf(请输入方程ax*x+bx+c=0的3个参数a,b,c,按回车键结束n);scanf(%f%f%f,&a,&b,&c);r=b*b-4*a*c;if(fabs(a)=1e-6)s11(b,c);else if(fabs(r)1e-6)s21(a,b,c);else if(r-1e-6)s22(a,b,c);else printf(error);7. 第七次7.1. 编写递归函数求x的n次方, 并调用此函数求2的5次方。double pwo(double x,int n) double a=0; if(n=0) a=1; if(n0) a=x*pwo(x,n-1); return a;#include stdio.hmain() double x; int n; printf(please input x and nn); scanf(%lf%d,&x,&n); printf(%.6lfn,pwo(x,n);7.2. 课本135页(第八章第五大题第6小题)。#include #includefloat aveg(int a510,int i)float sum=0,k;int j;for(j=0;j10;j+)sum+=aij;k=sum/10;return k;void exchange(int a510,int i,int j)int k,t;for(k=0;k5;k+)t=aki;aki=akj;akj=t;void max(char a1020,char d520,int b510)int i,j,t,k;char c120;int e10=0;for(j=0;j10;j+)for(i=0;i5;i+)ej+=bij;for(i=0;i10;i+) for(j=1;jej) t=ej-1; ej-1=ej; ej=t; strcpy(c0,aj-1); strcpy(aj-1,aj); strcpy(aj,c0); exchange(b,j-1,j); printf(最高分同学的名字为:); printf(%sn,a9);printf(n);printf(最高分同学的math、chi、eng、phy、man分别为n);for(i=0;i5;i+)printf(%5d,bi9);printf(n);main()char names1020,sub520,a20;int mark510,i,j;float ave5;printf(输入十名同学的名字:n);for(i=0;i10;i+)scanf(%s,a);strcpy(namesi,a);printf(按科目math、chi、eng、phy、man顺序依次输入十名同学的成绩:n);for(i=0;i5;i+)for(j=0;j10;j+)scanf(%d,&markij);printf(n);strcpy(sub0,math);strcpy(sub1,chi);strcpy(sub2,eng);strcpy(sub3,phy);strcpy(sub4,man);for(i=0;i5;i+)avei=aveg(mark,i);printf(math、chi、eng、phy、man的平均分为:n);for(i=0;i5;i+)printf(%5.1f,avei);printf(n);max(names,sub,mark);8. 第七次8.1. 利用指针编写程序, 对具有10个元素的字符型数组,从下标为6的元素开始全部设置为“#”。#include stdio.hmain() char a10,*p; int i; printf(输入十个字符n); gets(a); for(p=a+5;p(a+10);p+) *p=#; printf(处理后结果为n); puts(a); return 0;8.2. 利用指针编写程序,对具有6个元素的整型数组,找出其中最大值并计算出该数组的平均数。#include stdio.hmain() int a6,*p,i,max,sum=0; float ave; printf(输入6个整数n); for(p=a;p(a+6);p+) scanf(%d,p); max=a0; for(p=a;p(a+6);p+) sum+=*p; if(max*p) max=*p; ave=(float)sum/6; printf(max=%d,ave=%.2fn,max,ave); return 0;8.3. 利用指针编写。第九章课后习题第五大题第5小题(教科书172页)。#include stdio.hmain ()int a10,i,*p,*pmax,*pmin;int max,min,temp;printf (输入十个整数n);for (i=0;i10;i+)scanf (%d,&ai);p=a;max=*p;min=*p;for (p=a+1;pmax)max=*p;pmax=p;if (*pmin)min=*p;pmin=p;temp=a0;a0=min;*pmin=temp;temp=a9;a9=max;*pmax=temp;printf (交换后的结果如下n);for (i=0;i10;i+)printf (%d ,ai);return 0;9. 第九次9.1. 用指针编写函数 : insert(s1,s2,f), 其功能是在字符串 s1 中的指定位置 f 处插入字符 串 s2。/1. 用指针编写函数 : insert(s1,s2,f), 其功能是在字符串 s1 中的指定位置 f 处插入字符 串 s2。#include #include char *insert(char *s1,char *s2,int f)char *p=s1+f-1,str200;int length,i;length=strlen(s1);for(i=0;i=length;i+)stri=*p+;stri=0;p=s1+f-1;while(*s2!=0)*p+=*s2+;i=0;while(stri!=0)*p+=stri;i+;return s1;main()char s1200=0,s2200=0;int n,k;printf(请输入字符串1:n);gets(s1);printf(请输入字符串2:n);gets(s2);printf(请输入插入位置的序号:n);scanf(%d,&n);k=strlen(s1);if(nk)printf(输入错误!n);else printf(%sn,insert(s1,s2,n);9.2. 用数组名作为函数参数的4种方式(即形参数组名、实参数组名;形参数组名、实参指针变量;形参指针变量、实参数组名;形参指针变量、实参指针变量)实现输出某一维数组的最大值及其所在数组的位置。(1) 数组数组#includeint main()int i;float a10,fun();for(i=0;i10;i+)scanf(%f,&ai);fun(a);float fun(float a)int i,j;float max;max=a0; for(i=1;i10;i+)if(maxai)max=ai;printf(max=%fn,max);j=0;while(max!=aj)j+;printf(max=a%d,j);return 0;(2) 数组指针#includeint main()float a10,*p,fun();p=a;for(p;p10+a;p+)scanf(%f,p);p=a;fun(p);float fun(float a)int i,j;float max;max=a0;for(i=1;i10;i+)if(maxai)max=ai;printf(max=%fn,max);j=0;while(max!=aj)j+;printf(max=a%dn,j);return j;(3) 指针数组#includeint main()int i;float a10,fun();for(i=0;i10;i+)scanf(%f,&ai);fun(a);float fun(float *p)float *q,max;q=p;max=*p;for(;qp+10;q+)if(max*q)max=*q;printf(max=%fn,max);q=p;while(max!=*q)q+;printf(max=a%dn,q-p+1); return 0;(4) 指针指针#includefloat fun(float *p)float max,*q;q=p;max=*p;for(;qp+10;q+)if(max*q)max=*q;printf(max=%fn,max);q=p;while(max!=*q)q+;printf(max=a%dn,q-p+1);return 0;int main()float *p,a10;for(p=a;pa+10;p+)scanf(%f,p);p=a;fun(p);9.3. 用指向函数指针的知识实现两个整数求和功能。#include stdio.h int sum(int x,int y) int a; a=x+y; return (a);main ( ) int (*p)( ); int a,b,c; printf(输入两个数字n); scanf(%d,%d,&a,&b); p=sum; c=(*p)(a,b); printf(sum=%dn,c); 10. 第十次10.1. 求实型二维数组每行元素的平均值。(使用指向数组的指针编写,结果保留3位小数)#includemain()float a36, (*p)6;int i, j;p=a;for(i=0;i3;i+)pi5=0;printf(请

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论