《C语言作业及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言作业及参考答案.docx(105页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言与试验作业参考做法分支程序设计上机作业:标题 4.3三角形推断 描绘 输入三条边的长,输出这三条边是否构成等边三角形、等腰三角形、直角三角形、一般三角形,还是不能构成三角形输入数据 整数a,b,c的值 输出数据 等边三角形、等腰三角形、直角三角形、一般三角形,或不能构成三角形输入示例 5 5 5输出示例 等边三角形#include int main( ) int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a=b&b=c) printf(1);else if(a+bc&a+cb&b+ca) if(a=b|b=c|a=c) printf(2); else if(a*
2、a+b*b=c*c|b*b+c*c=a*a|a*a+c*c=b*b) printf(3); else printf(4); else printf(5); return 0;标题 4.5计算函数的值 描绘 当x1时,y=x当1x10时,y=2x-1当x10时,y=3x-11 输入数据 整数x的值 输出数据 一个整数表示函数的值 输入示例 5 输出示例 y=9 #includeint main() int x,y; scanf(%d,&x); if(x1) y=x; else if(x10) y=2*x-1; else y=3*x-11; printf(%d,y); return 0;标题 4.
3、6 数的分别 描绘 给一个不多于3位的正整数(1)计算它是几位数(2)分别打印出每一位数字(3)逆序打印出各位数字 输入数据 一个不多于3位的正整数 输出数据 位数从高位到低位的各位数字从低位到高位的各位数字 输入示例 456 输出示例 34 5 66 5 4提示 123/100=23/10=123%10=测试数据1: 678 3 6 7 8 8 7 6 测试数据2: 45 2 4 5 5 4 测试数据3: 8 1 8 8 #include int main( )int p,t,s; int i,bit; /printf(input a number(0-999):); scanf(%d,&p
4、); gewei=p%10; /个位 shiwei=p/10%10; /十位 baiwei=p/100; /百位 if(baiwei) /假设是3位数printf(%dn,3); printf(%d %d %dn,baiwei,shiwei,gewei); printf(%d %d %dn,gewei,shiwei,baiwei); else if(shiwei) /假设是2位数 printf(%dn,2);printf(%d %dn,shiwei,gewei); printf(%d %dn,gewei,shiwei); else printf( %dn%dn%dn,1,gewei,gewei
5、); /是1位数 return 0;标题 4.7输出等级分(用if语言实现) 描绘 输入一个百分制成果,输出对应的等级分90-100 为 A80-89 为 B70-79 为 C60-69 为 D0-59 为 E 输入数据 一个整数 输出数据 一个大写字符 输入示例 95 输出示例 A 标题 4.8 计算建筑高度 描绘 有4个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。输入任一点的坐标,求该点的建筑高度(塔外高度为0)。 输入数据 以(x,y)形式作为点的坐标输入 输出数据 输出高度 输入示例 (3,1) 输出示例
6、10 提示 留意输入坐标的格式,括号为半角符号输入: (0.5,0.7) 输出:0 输入: (2.1,2.3) 输出:10 输入: (-2,-1) 输出:10 输入: (-3,2) 输出:10 #include main( )int x1=2,y1=2; float x,y; printf(input the position x & y:); scanf(%f,%f),&x,&y); x=fabs(x); y=fabs(y);if(x-x1)*(x-x1)+(y-y1)*(y-y1)=1) printf(%dn,10); else printf(0n); return 0;标题 4.9输出等
7、级分(用switch语言实现) 描绘 输入一个百分制成果,输出对应的等级分90-100 为 A80-89 为 B70-79 为 C60-69 为 D0-59 为 E 输入数据 一个整数 输出数据 一个大写字符 输入示例 86 输出示例 B #include int main( )int score; char grade; printf(input a score:); scanf(%d,&score); switch(score/10) case 10: case 9: grade=A; break; case 8: grade=B; break; case 7: grade=C; brea
8、k; case 6: grade=D; break; case 5: case 4: case 3: case 2: case 1: case 0: grade=E; break; printf(his score class is %cn,grade); return 0;笔头作业:1 输入4个整数,按从小到大的依次输出2 依据月份推断季节。输入月份,输出春/夏/秋/冬。要求用switch语言实现3学生学习两门课:必修课成果为course1,选修课成果为course2,若两门都与格,打印pass,必修课不与格,打印fail4从键盘输入一个年份,判该年是否是闰年,是闰年就输出yes,否则输出n
9、o5从键盘输入一个字符,推断该字符是数字字符、大写字母、小写字母、空格还是其他字符。6商店卖西瓜,10斤以上每斤0.8元, 8斤以上每斤0.6元, 6斤以上每斤0.4元,4斤以上每斤0.3元, 4斤以下每斤0.15元,输入西瓜重量和所付的钱数,输出应付的货款和应找的钱数循环程序设计上机作业:标题 5.2 统计一行字符中各类字符的个数 描绘 输入一行字符,统计其中英文字母、空格、数字和其他字符的个数 输入数据 一行以回车完毕的字符 输出数据 四个分别表示英文字母、空格、数字和其他字符的个数的整数 输入示例 123 abcd*ABCD 输出示例 8 2 3 4 #include stdio.hma
10、in()int num0=0,numa=0,num=0,other=0;char ch; /num0:0-9; numa:alpha; num:space; scanf(%c,&ch); while (ch!=n) if (ch=0&ch=a&ch=A&ch=Z) numa+; else if (ch= ) num+; else other+; scanf(%c,&ch); printf(%d %d %d %d,numa,num,num0,other);return 0;标题 5.3 计算aaaaa 描绘 计算S(n)=a+aa+aaa+. 其中a是一个数字 输入数据 两个分别表示a和n的整数
11、 输出数据 一个表示S(n)的整数 输入示例 3 5 输出示例 37035 提示 2*10+2= 22*10+2= #includeint main()int a,n,i; long all=0,t; scanf(%d %d,&a,&n); t=a; for (i=1; i=n; i+) all=all+t; t=t*10+a; printf(%d,all); return 0;标题 5.6 找出1000以内的全部完数 描绘 一个数等于它的全部因子之和,这个数就称为完数.找出1000以内的全部完数 输入数据 无 输出数据 完数与它的全部因子(用逗号格开) 输入示例 无 输出示例 6 its f
12、actor are 1,2,328 its factor are 1,2,4,7,14496 its factor are 1,2,4,8,16,31,62,124,248 #include stdio.hmain()int a,b,k,s; for (k=2; k1000; k+) /推断k是否是完数 s=0; for (a=1; a=k/2; a+) if (k%a=0) s+=a; /计算k的因子之和 if (s=k) /k是完数 printf(%d its factors are 1,k); for (a=2; a=k/2; a+) if (k%a=0) printf(,%d,a);
13、/输出全部因子 printf(n); 标题 5.8 猴子吃桃问题 描绘 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第十天早上想再吃时,就只剩下一个桃子了.问第一天共摘了多少桃子. 输入数据 无 输出数据 表示第一天桃子个数的整数 #include main( )int day,all; all=1; for(day=9; day0; day-) all=2*(all+1); printf(the first number is %dn,all);标题 5.10 输出菱形图案 描绘
14、输出图案 输入数据 无 输出数据 菱形图案 输入示例 无 输出示例 *提示 找规律上下局部规律不同 标题 5.11 输出菱形图案2 选做*描绘 输入一个整数n和一个字符c,输出菱形图案.菱形图案由字符c构成,图案总共2n+1行 输入数据 一个整数和一个字符 输出数据 菱形图案 输入示例 3* 输出示例 *提示 上下n行对称 #includeint main()int k,i,j,n; char c; scanf(%d%c,&n,&c); for(i=1; i=n+1; i+) for (j=1; j=n+1-i; j+) putchar( ); for (j=1; j=2*i-1; j+) p
15、utchar(c); printf(n); for (i=1; i=n; i+) for (j=1; j=i; j+) putchar( ); for (j=1; j=(n+1-i)*2-1; j+) putchar(c); putchar(n); return 0;标题 5.13 与 7 无关数的平方和 描绘 一个正整数 , 假设它能被 7 整除 , 或者它的十进制表示法中某个位数上的数字为 7, 则称其为与 7 相关的数 . 现求全部小于等于 n(n100) 的与 7 无关的正整数的平方和 . 输入数据 输入为一正整数 n,(n100) 输出数据 输出小于等于 n 的与 7 无关的正整数的
16、平方和 输入示例 21 输出示例 2336 #includeint main() int n; int sum=0; int i,ge,shi; scanf(%d,&n); for(i=1; i=n; i+) ge=i%10; shi=i/10; if(ge=7|shi=7|i%7=0) continue; sum+=i*i; printf(%d,sum); return 0;书面作业:1从键盘上输入10个整数,计算这些整数的和2水仙花数。一个3位数,若其各位数字之和等于它本身,这个数就称为水仙花数.输出全部的水仙花数。(如153)#includeint main()/方法一 int num,
17、bai,shi,ge; for(num=100; num1000; num+) bai=num/100; shi=num/10%10; ge=num%10; if(num=bai*bai*bai+shi*shi*shi+ge*ge*ge) printf(%dn,num); return 0;/方法二int main() int i,j,k; for(i=1; i10; i+) for(j=0; j10; j+) for(k=0; k10; k+) if(i*100+j*10+k=i*i*i+j*j*j+k*k*k) printf(%dn,100*i+j*10+k); return 0;3计算分
18、数序列2/1,3/2,5/3,8/5,13/8,21/13,.前20项之和。#includeint main() float sum,fenzi,fenmu,a; int i; fenzi=2;fenmu=1;sum=0; for(i=1; i=20; i+) sum+=fenzi/fenmu; a=fenmu; fenmu=fenzi;fenzi+=a; printf(%.3f,sum); return 0;4迭代法求平方根。利用公式x(n+1)=1/2*(x(n)+a/x(n) 计算a的平方根.要求|x(n+1)-x(n)|1e-5#include #include main()float
19、 x0,x1,a; printf(input a=); scanf(%f,&a); x1=a/2; do x0=x1; x1=(x0+a/x0)/2; while(fabs(x1-x0)1e-5); printf(the sqrt of %f is %fn,a,x1);5百钱买百鸡:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何6某人摘下一些桃子,第一天卖掉一半,又吃了一个,第二天卖掉剩下的一半,又吃了一个,以后每天都是如此处理,到第n天觉察只剩下一只桃子。输入n,输出一共摘了多少桃子。7一个工厂制造的产品形态都是长方体,它们的高度都是h,长和宽都相等,一共有六
20、个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常运用一个 6*6*h 的长方体包袱包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包袱数量。他们很须要有一个好的程序帮他们解决这个问题从而节约费用。如今这个程序由你来设计。输入 输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。 输出 除了输入的最终一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包袱数。 样例输入 0 0
21、4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0 样例输出 2 1 数组上机作业:标题 6.2选择排序 描绘 用选择法对10个字符排序 输入数据 10个字符 输出数据 排好序的10个字符 输入示例 fgthyjpdsa 输出示例 adfghjpsty #includeint main()char a10;int i,j,k,t; for(i=0;i=9;i+) scanf(%c,&ai); for(j=0;j=8;j+) k=j; for(i=j+1;i=9;i+) if(aiak) k=i; t=aj;aj=ak;ak=t; for(i=0;i=9;i+) printf(%c,
22、ai); return 0;标题 6.3 字符串排序 描绘 输入10个字符串,按从小到大的依次排序后输出 输入数据 10个字符串 输出数据 从小到大有序的10个字符串 输入示例 qweasdzxchgupcctvarenotgotohead 输出示例 areasdcctvgotoheadhgnotqweupzxc 提示 要求用冒泡排序方法 #define N 10int main( ) int i, j, k; char aN20,t20; printf(“input 10 characters:”); for(i=0; iN; i+) gets(ai); for(i=0; iN-1; i+)
23、 /做N-1趟 for(j=0; j0) /前面的大,后面的小就交换 strcpy(t,aj); strcpy(aj,aj+1); strcpy(aj+1, t); /printf(“the sorted strings:n”); for(i=0 iN; i+) puts(ai); return 0;标题 6.4 有序插入 选做题* 描绘 输入一个有9个元素的有序数组,再输入一个数,把这个数插入到数组中,插入后照旧有序 输入数据 10个整数,前9个数从小到大有序 输出数据 10个有序整数(用%3d输出) 输入示例 2 4 6 8 10 12 14 16 18 7 输出示例 2 4 6 7 8
24、10 12 14 16 18 提示 留意数组大小试验以下3组输入:2 4 6 8 10 12 14 16 18 72 4 6 8 10 12 14 16 18 12 4 6 8 10 12 14 16 18 27#includeint main() int a10; int i,j,t; for(i=0; i=0; i-) /从后往前找插入位置,并把大的数往后挪 if(ait)break; else ai+1=ai; ai+1=t; /插入 for(i=0;i10; i+) /输出插入后且有序的数 printf(%3d,ai); return 0;标题 6.5麦森数选做题*描绘 形如2p-1的
25、素数称为麦森数,这时P确定也是个素数。但反过来不愿定,即假设P是个素数。2p-1不愿定也是素数。输入P (1000P3100000) ,计算2p-1的位数和最终500位数字(用十进制高精度数表示)输入数据 一个整数(1000到之间)输出数据 一个表示为数的整数和500位数字输入示例 1279输出示例 38600000000000019466439973640855386735733602980122394417323241848424216792346494129577318334966594211693677696259173234888531116850282556046662248347
26、35488732958973668729087/方法一#includeint main() long p,i,j; int weishu,jinwei,temp; int a501=1; int b10=1,2,4,8,16,32,64,128,256,512; scanf(%d,&p); weishu=(int)(p*log10(2)+1; printf(%dn,weishu); for(i=p;i0; i-) jinwei=0; for(j=0; j=0; i-) printf(%d,ai); if(i%50=0)printf(n); return 0;/方法二#includeint ma
27、in() long p,i,j; int weishu,jinwei,temp,tempwei,maxwei; int a501=6,7,5,8,4,0,1;/pow(2,20) int b20=1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288; scanf(%d,&p); weishu=(int)(p*0.301029996)+1; printf(%dn,weishu); tempwei=4; for(i=p-20;i=20; i-=20) jinwei=0; max
28、wei=tempwei+7; for(j=0; jmaxwei; j+) temp=aj*1048576+jinwei; aj=temp%10; jinwei=temp/10; tempwei=maxwei; while(!atempwei) tempwei-; tempwei+; jinwei=0; for(j=0; j=0; i-) printf(%d,ai); if(i%50=0)printf(n); return 0;标题 6.6 打印杨辉三角形 描绘 输出杨辉三角形(10行) 输入数据 无 输出数据 杨辉三角形(10行) 输入示例 输出示例 8行示例:11 11 2 11 3 3 1
29、1 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 1 提示 留意输出10行用%4d输出每个数 #includeint main()int a1010=0; int i,j; for(i=0;i10;i+) ai0=1,aii=1; for(i=2;i10;i+) for(j=1;ji; j+) aij=ai-1j-1+ai-1j; for(i=0;i10; i+) for(j=0;j=i; j+) printf(%4d,aij); printf(n); return 0;标题 6.7大整数的因子选做题*描绘 已知正整数k满意2=k=
30、9,现给出长度最大为30位的十进制非负整数c,求全部能整除c的k.输入数据 若干个非负整数c,c的位数=30每行一个c,当c=-1时中止(不要对-1进展计算!) 输出数据 每一个c的结果占一行1) 若存在满意 c%k = 0 的k,输出全部这样的k,中间用空格隔开,最终一个k后面有空格。2) 若没有这样的k则输出none 输入示例 307213-1输出示例 2 3 5 6 2 3 4 6 8 9 none提示一个整型变量是放不下30位整数的#include#define N 30+1int getlargenumber(int AN) /读入一个大整数,放在数组A中 char c,tempN;
31、 int i,j,k,start,len; for(i=0; i=start; j-,i-) Aj=tempi-0; return 1;int is7bei(int AN) /推断是否能被7整除/方法是每一位不断的减7,直到小于7为止/如865,与165具有一样的特性(最高位-7),165与25具有一样的特性(1*10+6-7-7=2),25与4具有一样的特性(2*10+5-7-7-7) int i,k; for(i=0; ;i+) if(Ai) break; /找最高位 while(i=7) k-=7; /这位数字只要超过7就不断的减7 Ai-1=0; Ai=k; i+; i-; if(Ai
32、%7=0) return 1; return 0;int main() int aN; int bei10=0; /存放大整数是否为7的倍数,如bei7=1表示能被7整除 int sum,i,t,yes; t=getlargenumber(a);/读取大整数 while(t) memset(bei,0,sizeof(bei);/将bei的值都置为0 if(a30%2=0) bei2=1; /推断能否被2整除 sum=0; for(i=0; iN; i+) sum+=ai; /计算各位数字之和 if(sum%3=0) bei3=1; /推断能否被3整除 if(sum%9=0) bei9=1; /
33、推断能否被9整除 if(a29*10+a30)%4=0) bei4=1; /推断能否被4整除 if(a28*100+a29*10+a30)%8=0) bei8=1; /推断能否被8整除 if(a30=0|a30=5) bei5=1; /推断能否被5整除 bei6=bei2&bei3; /推断能否被6整除 bei7=is7bei(a); /推断能否被7整除 yes=0; for(i=2; i10; i+) if(beii) printf(%d ,i); yes=1; if(yes=0) printf(nonen);else printf(n); t=getlargenumber(a); retu
34、rn 0;标题 6.8不吉利日期选做题*描绘 在国外,每月的13号和每周的星期5都是不吉利的。特殊是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年确定不是闰年,求出这一年全部13号那天是星期5的月份,按从小到大的依次输出月份数字。(w=1.7)输入数据 输入有一行,即一月一日星期几(w)。(1=w=7)输出数据 输出有一到多行,每行一个月份,表示该月的13日是星期五。输入示例 7输出示例 110#includeint main() int day13=0,12,31,28,31,30,31,30,31,31,30,31,30; int w; int i; scan
35、f(%d,&w); for(i=1; i=12; i+) w=(w+dayi)%7; if(w=5) printf(%dn,i); return 0;标题 6.9计算n!选做题*描绘 n大于12,小于300输入数据 输入一个大于12的整数输出数据 输出有一到多行,每行输出n!的40位输入示例 80输出示例 763855846573423657525771884266894486728000int main( ) int a2800=1,1; int n,i,j,jinwei,chenji,weishu=1; scanf(%d,&n); for(i=2; i=n; i+) jinwei=0; for(j=1; j0; i-) printf(%d,ai); j+; if(j%40=0) printf(n); printf(n); return 0;标题 6.10计算鞍点选做题*描绘 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。输入数据 输入一个5行6列二维数组输出数据 二个表示鞍点位置的行、列号没有鞍点输出none输入示例 7 6 15 4 3 22 7 9 4 3 16 8 13 7 1 175 9 10 6 5 34 7 11 2 7 9输出示例
限制150内