《期末及计算机二级c语言.doc》由会员分享,可在线阅读,更多相关《期末及计算机二级c语言.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流期末及计算机二级c语言【精品文档】第 19 页1、已知两边求矩形的面积。#include int main()float a,b,s;a=3.0;b=4.5;s=a*b;printf(%fn,s);return 0;2、已知方程ax2+bx+c=0系数a、b、c的值(从键盘输入),假设b2-4ac0,编程求方程的两个实根。#include #include int main()float a,b,c,x1,x2,delt;scanf(%f,%f,%f,&a,&b,&c);delt=b*b-4*a*c;x1=(-b+sqrt(delt)/(2*a);x2=
2、(-b-sqrt(delt)/(2*a);printf(x1=%f,x2=%fn,x1,x2);return 0;3、已知方程ax2+bx+c=0系数a、b、c的值(从键盘输入),编程求方程的根。提示:需要判断不等;根据delt是否大于、等于、小于零求出方程的两个不等的实根、相等的实根、两个虚根。#include #include int main()float a,b,c,x1,x2,delt;scanf(%f,%f,%f,&a,&b,&c); if(a0)delt=b*b-4*a*c;if(delt1e-6)x1=(-b+sqrt(delt)/(2*a);x2=(-b-sqrt(delt)
3、/(2*a);printf(x1=%7.2f,x2=%7.2fn,x1,x2);else if(fabs(delt)=1e-6)printf(x1=x2=%7.2fn,-b/(2*a);elseprintf(x1=%7.2f+%7.2fin,-b/(2*a),sqrt(fabs(delt)/(2*a);printf(x2=%7.2f-%7.2fin,-b/(2*a),sqrt(fabs(delt)/(2*a); else printf(系数a应大于0!);return 0;4、将“Main”译成密码。译码规律:用原来字母后面的第三个字母代替原来的字母。#include int main()ch
4、ar c1=M,c2=a,c3=i,c4=n;c1=c1+3;c2=c2+3;c3=c3+3;c4=c4+3;printf(%c%c%c%cn,c1,c2,c3,c4);return 0;5、输入一个学生的百分制成绩,转换成五级等级制成绩输出。提示:分别使用if语句和switch语句实现#include int main()int gr,g;scanf(%d,&gr);printf(use if:n);if(gr=90)printf(A);else if(gr=80)printf(B);else if(gr=70)printf(C);else if(gr=60)printf(D);else p
5、rintf(E);printf(n);printf(use switch:n);g=gr/10;switch(g) case 10: case 9:printf(A);break; case 8:printf(B);break; case 7:printf(C);break; case 6:printf(D);break; case 5: case 4: case 3: case 2: case 1: case 0:printf(E);break; default:printf(data error!n);printf(n);return 0;6、输入一个三位数,判断其是否为”水仙花”数。 水
6、仙花数的含义:一个数的各位数字的立方和等于该数本身。如:153=1*1*1+5*5*5+3*3*37、(1)输出10003000之间能被3整除但不能被7整除的数,要求每行输出5个数。(2)求100500以内的所有的素数的平方根之和。(3)编写程序计算并输出下面前二十项的和。要求保留4位小数。数列为:2/1,3/2,5/3,8/5,13/8,21/13.(1)#include int main()int n,count=0;for(n=1000;n=3000;n+)if(n%3=0)&(n%7!=0)printf(%d ,n);count+;if(count%5=0)printf(n);retu
7、rn 0;(2)#include #include int main()int i,n;float s=0;for(i=100;i=500;i+)for(n=2;ni/2)s=s+sqrt(i);printf(100500以内的所有的素数的平方根之和为: %7.2fn,s);return 0;(3)#include#includeint main()int i,t,n=20,a=2,b=1;float s=0;for(i=1;i=n;i+)s=s+(float)a/b;t=a;a=a+b;b=t;printf(sum is %7.2fn,s);return 0;8、(1)、统计并逐行显示(每行
8、5个数)区间10000,30000上的回文数。回文数的含义是从左向右读与从右向左读是相同的,如12321。#include int main()int i,j=0,k1,k4,k5;for(i=10000;i=30000;i+)k1=i/1000;k4=i%100/10;k5=i%10;if(k1=k5*10+k4)printf(%7d,i);j+;if(j%5=0)printf(n);(2)、输入一段字符(以换行符结束),分别统计字母、数字、其它字符的个数。#include int main()int k1,k2,k3;char ch;k1=0;k2=0;k3=0;while(ch=getc
9、har()!=n)if(ch=A & ch=a & ch=0 & ch=9)k2+;else k3+;printf(k1=%d,k2=%d,k3=%dn,k1,k2,k3);(3)、用双重循环输出图形:A A B C A B C D E A B CA#include int main()int i,j;char ch=A;for(i=1;i4;i+)ch=A;for(j=1;j=6-2*i;j+)printf( );for(j=1;j=2*i-1;j+)printf(%2c,ch);ch+;printf(n);for(i=1;i=2;i+)ch=A;for(j=1;j=2*i;j+)print
10、f( );for(j=1;j=5-2*i;j+)printf(%2c,ch);ch+;printf(n);return 0;9、编写一个判断素数的函数,由主函数调用它求100200之间素数的和。/*定义素数函数,在主函数中调用*/#include#includeint main()int i,sum=0;int sushu( int ); /*声明素数函数*/for(i=100;i201;i+)if(sushu(i)/*调用素数函数*/sum=sum+i;printf(100-200之间的素数之和=%dn,sum);return 0;int sushu(int t)/*定义素数函数*/int
11、flag=1,n;for(n=2;nsqrt(t)&flag=1;n+)if(t%n=0)flag=0;return(flag);编写一个求最大公约数的函数,由主函数来调用并输出结果。/*输入两个数,求最大公约数*/#includestdio.hmain() int a,b;int zdgys(int m,int n);printf(请输入两个数:);scanf(%d %d,&a,&b);printf(%dn,zdgys(a,b);/*调用最大公约数函数*/ return 0;int zdgys(int m,int n)/*定义最大公约数的函数*/int t,k;if(mn)k=m;m=n;n
12、=k;while(t=m%n)!=0) m=n; n=t;return(n); /*返回值为最大公约数*/10、1、闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份,即有闰日的年份为闰年。公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)(1)能被4 整除而不能被100 整除。(2)能被100 整除也能被400 整除。编写函数,计算该日是本年的第几天,在主函数中输入年月日,调用该函数,并输出结果。#include stdio.hint sumdays(int y,int m,int d)int i=1,days=0;while(im)swit
13、ch(i)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=days+31; break;case 4:case 6:case 9:case 11:days=days+30; break;case 2: if(y%4=0 & y%100!=0|y%400=0) days=days+29;else days=days+28;i+;days=days+d;return(days); int main() int year,month,day; scanf(%d,%d,%d,&year,&month,&day); printf(%dn,s
14、umdays(year,month,day); return 0;2、设计一个函数,求如下级数,在主函数中输入n,并输出结果。#includeint main()int n;float a;float fsum(int);printf(input a number );scanf(%d,&n);a=fsum(n);printf(the sum is:%.2fn,a);return 0;float fsum(int m)int i,j;float sum=0,t;for(i=1;i=m;i+)t=0;for(j=1;j=i;j+)t+=j;sum+=1/t;return sum;11、1从键盘输
15、入10 名学生的计算机程序设计的考试成绩,显示其中的最低分,最高分及平均成绩,要求使用数组实现。#include stdio.hvoid main()float grade10,min,max,aver;int i;for(i=0;i10;i+)scanf(%f,&gradei);min=grade0;max=grade0;aver=0;for(i=0;igradei)min=gradei;if(maxgradei)max=gradei;aver=aver/10;printf(min=%7.2f,max=%7.2f,aver=%7.2f,min,max,aver);2编程实现使用选择排序法对具
16、有12 个数组元素的一维整型数组array12=96,35,12,58,78,90,587,21,0,-65,106,52按照由大到小的排序进行排序,输出排序前后的数组,并查找90是否在该数组中,若在该数组中,输出90 在该数组中的位置,否则输出“90 不在数组array中”。#include stdio.hvoid main()int array12=96,35,12,58,78,90,587,21,0,-65,106,52;int i,j,k,x;x=91;for(i=0;i12-1;i+)for(j=i;j12;j+)if(arrayiarrayj)k=arrayi;arrayi=arr
17、ayj;arrayj=k;for(i=0;i12;i+)printf(%d ,arrayi);for(i=0;i12;i+)if(arrayi=x)printf(n %d 在数组的第%d个位置!n,x,i+1);break;if(i=12)printf(n %d 不在数组中!n,x);12、编程实现学生管理系统v2.0设计:某班有最多不超过30人(具体人数由自己指定)参加本课程的考试,用一维数组实现如下学生管理系统。本系统的主要功能: 1、用随机函数对全班学生的课程成绩(整数)进行赋值; 2、输出全班学生的课程成绩(每行输出5个成绩); 3、查找最高分和最低分并输出; 4、计算平均分并统计高于
18、平均分的人数并输出; 5、按从高到低的顺序排序; 6、查找分数为给定值x的学生成绩,如找到x输出在数组中的位置。 7、把全班课程成绩保存到数据文件中;8、从数据文件中读出数据得到全班学生的课程成绩;0、退出系统。 要求:1、 各功能用函数实现;2、 函数参数用指针变量作为形参接收数组首地址;3、 界面上应有作者的名字。 #include stdio.h#include stdlib.h#include time.h#define N 30void fuzhi(int *p,int n)int i;srand(time(NULL);printf(n使用随机函数对%d个数组元素进行赋值!n,N);
19、for(i=0;in;i+)*(p+i)=rand()%101;printf(数组赋值完毕!n请选择下一步操作序号(08):);void shuchu(int *p,int n)int i;printf(-以下输出数组内容-n);for(i=0;in;i+)printf(%d ,*(p+i);if(i+1)%5=0)printf(n);printf(n数组输出完毕!n请选择下一步操作序号(08):);void chazhao(int *p,int n)int x,i;printf(请输入要查找的数x:);scanf(%d,&x);printf(n查找开始.n);for(i=0;in;i+)if
20、(*(p+i)=x)break;if(in)printf(已经找到x的值在%d的位置!n,i);else printf(没有找到x!n);printf(查找结束!n请选择下一步操作序号(08):);void paixu(int *p,int n)int i,j,t;printf(从大到小冒泡排序开始.);for(i=0;in-1;i+)for(j=0;jn-i-1;j+)if(*(p+j)*(p+j+1)t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;printf(冒泡排序完毕!n请选择下一步操作序号(08):);void maxmin(int *p,int n)int
21、 i;int max,min,maxi,mini;maxi=0;mini=0;max=*p;min=*p;for(i=0;in;i+)if(max*(p+i)min=*(p+i);mini=i;printf(在下标为%d的位置找到最大值%d!n,maxi,max);printf(在下标为%d的位置找到最小值%d!n,mini,min);printf(请选择下一步操作序号(08):);void pingjun(int *p,int n)int i,t=0;int aver=0;for(i=0;in;i+)aver=aver+*(p+i);aver=aver/n;for(i=0;iaver)t+;
22、printf(n大于平均分%d的人数有%d人!n,aver,t);printf(请选择下一步操作序号(08):);void savefile(int *p,int n)int i;FILE *fp;printf(n保存成绩到文件D:dat1.dat中!n);fp=fopen(D:dat1.dat,w);for(i=0;in;i+)fprintf(fp,%d ,*(p+i);fclose(fp);printf(文件写入完毕!n请选择下一步操作序号(08):);void readfile(int *p,int n)int i;FILE *fp;printf(n从文件D:dat1.dat中读出成绩!
23、n);fp=fopen(D:dat1.dat,r);if(fp=NULL)printf(文件读取失败!);elsefor(i=0;in;i+)fscanf(fp,%d,p+i);fclose(fp);printf(文件读取完毕!n请选择下一步操作序号(08):);int main()int aN,t;printf(*n);printf(* *n);printf(* -学生管理系统 - *n);printf(* *n);printf(* (v2.0) *n);printf(* *n);printf(* 1.成绩赋值 2.成绩输出 *n);printf(* *n);printf(* 3.查找最高分
24、和最低分 4.输出高于平均分的人数 *n);printf(* *n);printf(* 5.从高到底排序 6.成绩查找 *n);printf(* *n);printf(* 7.保存成绩到文件 8.从文件中读成绩 *n);printf(* *n);printf(* 0.退出程序 *n);printf(* *n);printf(*n);printf(请选择(08):);scanf(%d,&t);while(t!=0)switch(t)case 1:fuzhi(a,N);break;case 2:shuchu(a,N);break;case 3:maxmin(a,N);break;case 4:pi
25、ngjun(a,N);break;case 5:paixu(a,N);break;case 6:chazhao(a,N);break;case 7:savefile(a,N);break;case 8:readfile(a,N);break;default:printf(输入错误,请重新选择!n);scanf(%d,&t);return 0;13、编程把字符串的标准函数strlen(字符串的地址)、strcat(字符数组1,字符串2)、strcmp(字符串1,字符串2)用自定义函数实现。#include stdio.hint lenth(char *p)int i=0;while(*(p+i)
26、!=0)i+;return i;void strcat(char *p1,char *p2)int i,j=0;i=lenth(p1);while(*(p2+j)!=0 & i*(p2+i)m=1;break;elsem=-1;break;return m;void main()int k,t;char str110,str25;gets(str1);k=lenth(str1);printf(k=%d n,k);gets(str2);strcat(str1,str2);puts(str1);t=strcmp(str1,str2);printf(t=%d n,t);一. 基本操作l 累加求和 (
27、例:求1+2+3+.+100)#include stdio.hvoid main()int i,s;s=0;for(i=1;i=100;i+)s+=i;printf(%dn,s);l 交换赋值 (例:交换a,b两数值,其中a,b已知)#include stdio.hvoid main()int a,b,t;a=2,b=3;t=a;a=b;b=t;printf(a=%d,b=%dn,a,b);l 综合:迭代法(课本 P135 3)#include stdio.hvoid main()int a=1,b=2,t,i;float s=0.0;for(i=1;i=20;i+)s=s+(float)b/
28、a;t=b;b=a+b;a=t;printf(%fn,s);l 求平均值 (例:求已知数组a5的平均值)#include stdio.h#define N void main()int i,s,ave;int a5=1,2,3,4,5;s=0;for(i=0;i5;i+)s=s+ai;ave=s/N;printf(%dn,ave);l 求最大值(例:求已知数组a5中的最大值)#include stdio.h#define N 5void main()int i,max;int a5=2,3,5,1,8;max=a0;for(i=0;iN;i+)if(maxn),先用m除以n得到余数r,再用r去
29、除原来的除数(n/r)得到新的余数。重复此过程,直至余数为0,此时的除数就是两数的最大公约数。#include stdio.hvoid main()int m,n,r,t;printf(请输入两个数,用逗号隔开:);scanf(%d,%d,&m,&n);if(mn)t=m;m=n;n=t;r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(最大公约数为:%dn,n);l 求两数最小公倍数(遍历法)#include stdio.hvoid main()int i,m,n,p,q;i=1;printf(请输入两个数:);scanf(%d,%d,&m,&n);p=i%m;q=
30、i%n;while(p!=0|q!=0)i+;p=i%m; q=i%n;printf(最小公倍数为:n,i);注:如果最大公约数已求出,可用公式:最小公倍数=两数积/最大公约数,详见课本。l 素数的判断#include stdio.hvoid main() int a,i,t; t=1; printf(请输入一个数: ); scanf(%d,&a); for(i=2;ia;i+) if(a%i=0) t=0; break; if(t=0) printf(该数不是素数!n); else printf(该数数素数!n);l 分离数位(例:求一个数各个数位上数的积)基本方法:将一个数除以10取余数便
31、得到了个位数,再将此数除以10取整(即将小数点左移一位,再取个位数。重复此法,便可取出各个数位。)#include stdio.hvoid main() int a,k; k=1; printf(:); scanf(%d,&a); do k=k*(a%10); a=a/10; while(a); printf(%dn,k);二双重循环的运用l 输出1000以内所有的完数(课本P119 例5-8)l 冒泡排序法 (课本P192)l 图形输出(例:第七周作业)#include void main()int i,j;char c;for(i=1;i=3;i+)c=A;for(j=1;j=4-i;j+
32、)printf( );for(j=4-i;j=2+i;j+)printf(%c,c);c+;printf(n); for(i=1;i=2;i+)c=A;for(j=1;j=i+1;j+)printf( );for(j=i+1;j=5-i;j+)printf(%c,c);c+;printf(n);附:模拟上倒数第二个#include stdio.hvoid main()int i,j;for(i=1;i=9;i+)for(j=1;j=9;j+)if(i=j|i+j=10) printf( );elseprintf(*);printf(n);注:课本P130 有例题三、最后一题(以第13周作业为例
33、#include stdio.h#include stdlib.h#include string.h#include time.h#define N 10void sjs(int *p,int n) srand(time(NULL); for(int *ptr=p;ptrp+n;ptr+) *ptr=rand()%101;void output(int *p,int n) for(int *ptr=p,i=0;ptrp+n∈ptr+,i+) printf(%d ,*ptr); if(i+1)%5=0) printf(n); printf(n);void maxmin(int *p,int
34、 n) int max,min; max=*p; for(int *pt=p+1;ptmax) max=*pt; printf(最大值为:%dn,max); min=*p; for(int *p2=p+1;ptp+N;p2+) if(*p2min) min=*p2; printf(最小值为:%dn,min);void sort(int *p,int n)int t;for(int i=0;iN-1;i+)for(int *pr=p;pr*(pr+1)t=*pr;*pr=*(pr+1);*(pr+1)=t;void ave(int *p,int n)int s,ave,j;s=0;j=0;for(int *ps=p;psp+N;ps+)s=s+(*ps);ave=s/N;printf(平均分为:%dn,ave);for(int *p1=