c语言第一次作业程序题pta_第1页
c语言第一次作业程序题pta_第2页
c语言第一次作业程序题pta_第3页
c语言第一次作业程序题pta_第4页
c语言第一次作业程序题pta_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、5-1 统计学生平均成绩与及格人数   (15分)本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。输入格式:输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。输出格式:按照以下格式输出:average = 成绩均值count = 及格人数其中平均值精确到小数点后一位。输入样例:577 54 92 73 60输出样例:average = 71.2count = 4 · 时间限制:400ms· 内存限制:64MB&

2、#183; 代码长度限制:16kB· 判题程序:系统默认· 作者:C课程组· 单位:浙江大学窗体顶端题目判定窗体底端#include<stdio.h>int main()int n,i,count=0,a10000;double sum=0,aver;scanf("%d",&n);for(i=0;i<n;i+)scanf("%d",&ai);for(i=0;i<n;i+)if(ai>=60)count+;sum=sum+ai;if(n!=0)aver=sum/n;printf(&

3、quot;average = %.1fncount = %dn",aver,count);5-3 大炮打蚊子   (15分)现在,我们用大炮来打蚊子:蚊子分布在一个Mtimes NM×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意: OOXO O其中,X为炮弹落点中心,O为紧靠中心的四个有杀伤力的格子范围。若蚊子被炮弹命中(位于X格),一击毙命,若仅被杀伤(位于O格),则损失一半的生命力。也就是说,一次命中或者两次杀伤均可消灭蚊子。现在给出蚊子的分布情况以及连续k发炮弹的落点,给出每炮消灭的蚊子

4、数。输入格式:第一行为两个不超过20的正整数M和N,中间空一格,表示二维平面有M行、N列。接下来M行,每行有N个0或者#字符,其中#表示所在格子有蚊子。接下来一行,包含一个不超过400的正整数k,表示发射炮弹的数量。最后k行,每行包括一发炮弹的整数坐标x和y(0lex<<M,0ley<<N),之间用一个空格间隔。输出格式:对应输入的k发炮弹,输出共有k行,第i行即第i发炮弹消灭的蚊子数。输入样例:5 600#00#000#00#00000000000#00021 21 4输出样例:02#include<stdio.h>int main()int i,j,m,

5、jg,n,x202,y202,str202202;char STR202202;scanf("%d %d",&m,&n);for(j=0,i=0;i<m;i+,j+)if(j=n)break;scanf("%s",STRi);for(i=0;i<m;i+)for(j=0;j<n;j+)strij=-1;for(i=0;i<m;i+)for(j=0;j<n;j+)if(STRij='#')strij=2;scanf("%d",&jg);for(i=0;i<jg;

6、i+)scanf("%d%d",&xi,&yi);int xd,yd,sum=0;for(j=0;j<jg;j+)sum=0;xd=xj;yd=yj;if(xd>=0&&xd<m&&yd>=0&&yd<n)if(strxdyd=2)sum+;strxdyd=-1;elseif(strxdyd=1)sum+;strxdyd=-1;if(xd-1>=0&&xd<=m&&yd>=0&&yd<n)if(strxd-1y

7、d=2|strxd-1yd=1)strxd-1yd=strxd-1yd-1;if(strxd-1yd=0)sum+;strxd-1yd=-1;if(xd+1<m&&xd>=-1&&yd>=0&&yd<n)if(strxd+1yd=1|strxd+1yd=2)strxd+1yd=strxd+1yd-1;if(strxd+1yd=0)sum+;strxd+1yd=-1;if(xd>=0&&xd<m&&yd-1>=0&&yd<=n)if(strxdyd-1=

8、1|strxdyd-1=2)strxdyd-1=strxdyd-1-1;if(strxdyd-1=0)sum+;strxdyd-1=-1;if(xd>=0&&xd<m&&yd+1<n&&yd>=-1)if(strxdyd+1=1|strxdyd+1=2)strxdyd+1=strxdyd+1-1;if(strxdyd+1=0)sum+;strxdyd+1=-1;printf("%dn",sum);return 0;5-4 人民币兑换   (15分)1元5角钱人民币

9、兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。输入格式:输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。输出格式:显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。注意:如果全部方案不到n种,就顺序输出全部可能的方案。输入样例:5输出样例:1 46 53 2 42 56 3 38 59 4 34 62 5 30 65#include<stdio.h>int main()int i,j,k,n,a;scanf("%d&qu

10、ot;,&n); for(i=1;i<=n;i+)for(j=0;j<=75;j+)for(k=0;k<=150;k+)if(5*i+j*2+k=150 && i+j+k=100)printf("%d %d %dn",i,j,k);5-5 计算分段函数2   (10分)本题目要求计算下列分段函数f(x)f(x)的值:注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。输入格式:输入在一行中给出实数x。输出格式:在一行中按“f(x) = result”的格式输出,其

11、中x与result都保留两位小数。输入样例1:10输出样例1:f(10.00) = 3.16输入样例2:-0.5输出样例2:f(-0.50) = -2.75#include<stdio.h>#include<math.h>int main()float x,y;scanf("%f",&x);if(x>=0)y=sqrt(x);elsey=pow(x+1,2)+2*x+1/x;printf("f(%.2f) = %.2fn",x,y);return 0;5-6 厘米换算英尺英寸  

12、0;(15分)如果已知英制长度的英尺footfoot和英寸inchinch的值,那么对应的米是(foot+inch/12)times 0.3048(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。输入格式:输入在一行中给出1个正整数,单位是厘米。输出格式:在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。输入样例:170输出样例:5 6#include <stdio.h>int main() int cmlen; scanf("%d",&

13、;cmlen); int foot= cmlen/100.0/0.3048; int inch = (cmlen/100.0/0.3048-foot)*12; printf("%d %dn",foot,inch);return 0;5-8 单词长度   (15分)你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。输入格式:输入在一行中给出一行文本,以.结束提示:用sca

14、nf("%c",.);来读入一个字符,直到读到.为止。输出格式:在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。输入样例:It's great to see you here.输出样例:4 5 2 3 3 4方法一#include <stdio.h>int main() int i=0; char str; while(1) scanf("%c",&str); if(str = '.') if(i!=0) printf("%d",i); printf(&qu

15、ot;n");break; if(str=' ') if(i!=0) printf("%d ",i); i=0; else i+; return 0;方法二#include<stdio.h>#include<string.h>int main()char str520;int i,j=0,k,g=0;for(i=0;i+)scanf("%c",&stri);if(stri='.') break;k=i;for(i=i-1;i>=0;i-)if(stri=' '

16、)g+;elsebreak;for(i=0;i<=k;i+)if(stri='.')if(j!=0)printf("%d",j);printf("n");break;if(stri=' ')if(j!=0)printf("%d",j);j=0;if(i<k-g)printf(" ");elsej+;return 0;#include<stdio.h> int main() char c,firstflag=1; int count = 0; scanf(&qu

17、ot;%c",&c); while(c != '.') if(c = ' ') if(count != 0) if(firstflag=1) printf("%d",count);firstflag=0; else printf(" %d",count); count = 0; else count+; scanf("%c",&c); if(count!= 0) if(firstflag=1) printf("%d",count); else printf(

18、" %d",count); return 0; 方法三#include <stdio.h>#include <stdbool.h>int main() char ch; int i; bool l; l = false; i = 0; while(ch = getchar() && ch != '.') if(ch != ' ') i+; else if(i != 0) if(l) printf(" "); printf("%d", i); l = true; i

19、 = 0; if(i != 0) if(l) printf(" "); printf("%dn", i); return 0; 5-9 爬动的蠕虫   (15分)一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。输入格式:

20、输入在一行中顺序给出3个正整数N、U、D,其中D<<U,N不超过100。输出格式:在一行中输出蠕虫爬出井的时间,以分钟为单位。输入样例:12 3 1输出样例:11#include<stdio.h>int main()int N,U,D,L,time;scanf("%d %d %d",&N,&U,&D);time=L=0;while(L<N)time+;L=L+U;if(L>=N)break;L=L-D;time+;printf("%dn",time);return 0;5-10 字符串

21、字母大小写转换   (15分)本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。输入格式:输入为一个以“#”结束的字符串(不超过30个字符)。输出格式:在一行中输出大小写转换后的结果字符串。输入样例:Hello World! 123#输出样例:hELLO wORLD! 123#include<stdio.h>int main()int i,k;char a3000;for(i=0;i<30000;i+)scanf("%c",&ai);if(ai

22、='#')k=i;break;for(i=0;i<30;i+)if('A'<=ai&&ai<='Z')ai=ai+32;else if('a'<=ai&&ai<='z')ai=ai-32;else ai=ai;for(i=0;i<k;i+)printf("%c",ai);printf("n");return 0;5-11 找最长的字符串   (15分)本题要求编写程序,

23、针对输入的N个字符串,输出其中最长的字符串。输入格式:输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。输出格式:在一行中用以下格式输出最长的字符串:The longest is: 最长的字符串如果字符串的长度相同,则输出先输入的字符串。#include<stdio.h>int main()char str10000100;int N,i,j,k=0,m;scanf("%d",&N);for(i=0;i<=N;i+)for(j=0;j<80;j+)scanf("%c"

24、,&strij);if(strij='n')break;for(i=0;i<=N;i+)for(j=0;j<80;j+)if(strij='n')if(j>k)k=j;m=i;printf("The longest is: ");for(i=0;i<k;i+)printf("%c",strmi);return 0; 4-1 使用函数计算两个复数之积   (10分)若两个复数分别为:c_1=x_1 + y_1 ic1=x1+y1i和c_2=x_2 + y

25、_2 ic2=x2+y2i,则它们的乘积为 c_1 times c_2 = (x_1 x_2 - y_1 y_2) + (x_1 y_2 + x_2 y_1)ic1×c2=(x1x2y1y2)+(x1y2+x2y1)i。本题要求实现一个函数计算两个复数之积。函数接口定义:double result_real, result_imag;void complex_prod( double x1, double y1, double x2, double y2 );其中用户传入的参数为两个复数x1+y1ii和x2+y2ii;函数complex_prod应将计算结果的实部存放在全局

26、变量result_real中、虚部存放在全局变量result_imag中。裁判测试程序样例:#include<stdio.h> double result_real, result_imag;void complex_prod( double x1, double y1, double x2, double y2 );int main(void) double imag1, imag2, real1, real2; scanf("%lf %lf", &real1, &imag1); scanf("%lf %lf", &

27、real2, &imag2); complex_prod(real1, imag1, real2, imag2); printf("product of complex is (%f)+(%f)in", result_real, result_imag); return 0;void complex_prod( double x1, double y1, double x2, double y2 )result_real=x1*x2-y1*y2;result_imag=x1*y2+x2*y1;4-2 计算存款利息-genlib  

28、60;(10分)本题要求提交main函数,实现以下功能:读入存款金额money、存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前):interest = moneytimes (1+rate)year - moneyinterest=money×(1+rate)yearmoney输出时保留2位小数。注意:你需要提交一个完整的main函数,但不要修改下列函数提示中已经给出的内容。函数接口定义及提示:int main(void) int money, year; double interest, rate; /*-你需要实现的代码-*/ printf(

29、"interest = %.2fn", interest); return 0;裁判测试程序样例:#include <stdio.h>#include <math.h>#include "genlib.h"#include "simpio.h"/* 你的代码将被嵌在这里 */输入样例(括号内为说明):1000 (money = 1000) 3 (year = 3)0.025 (rate = 0.025)输出样例:interest = 76.89int main(void) int money, year; do

30、uble interest, rate;scanf("%d",&money); scanf("%d",&year);scanf("%lf",&rate);interest=money*pow(1+rate),year)-money; printf("interest = %.2fn", interest); return 0;4-3 提桶寻宝   (10分)给你准备好一个小桶,告诉你一片广袤的天地,随手一指,挖宝去吧说计算机话!好吧,题目是这样的:假设

31、一个二维区域内藏有财宝,对于给定的此前寻到的财宝数量以及坐标(x,y),按照以下规则在该位置寻回财宝,并更新财宝数量。规则:· 如果x、y均为奇数,则获得原有三分之一数量的财宝,小数部分忽略不计· 如果x、y均为偶数,则获得 5 财宝· 如果x、y奇偶性不同,则不获得财宝注意:财宝数量、坐标x、坐标y都是int类型范围内的非负整数,在同一个位置可以重复寻找并获得财宝。函数接口定义:int getTreasure(int *pBucket, int x, int y);其中,整型参数x、y表示坐标,指针型参数pBucket指向财宝计数的整型变量,函数根据x、y和此前

32、的财宝数目,判断新获取的财宝并修改相应数值。返回类型为int,如果获得财宝,返回1;未获得财宝,返回0。裁判测试程序样例:#include <stdio.h>int getTreasure(int *pBucket, int x, int y);int main() int bucket,total; bucket = total = 0; scanf("%d",&total); for (int i=0; i<total; i+) int x,y; x = y = 0; scanf("%d%d", &x, &y

33、); int flag = getTreasure(&bucket, x, y); printf("%d:%dn", flag, bucket); /* 你的代码将被嵌到这个位置(当然,会删除此前和此后一行的注释)*/输入样例:32 61 209 9输出样例:1:50:51:6int getTreasure(int *pBucket, int x, int y) if(x%2=0) if(y%2=0) *pBucket=*pBucket+5; return 1; elsereturn 0; else if(y%2!=0) *pBucket=*pBucket+*pBu

34、cket/3;return 1; else return 0; 4-4 弹球距离   (15分)设有一个球从高度为hh米的地方落下,碰到地面后又弹到高度为原来pp倍的位置,然后又落下,再弹起,再落下。请编写函数求初始高度为hh的球下落后到基本停下来(高度小于给定阈值TOL)时在空中所经过的路程总和。函数接口定义:double dist( double h, double p );其中h是球的初始高度,p是球弹起高度与弹起前落下高度的比值;函数dist要返回球下落后到基本停下来时在空中所经过的路程总和。注意:当弹起的高度小于裁判程序定义的常数TOL时,弹起

35、的距离不计算在内。裁判测试程序样例:#include <stdio.h>#define TOL 1E-2double dist( double h, double p );int main() double h, p, d; scanf("%lf %lf", &h, &p); d = dist(h, p); printf("%.6fn", d); return 0;/* 你的代码将被嵌在这里 */输入样例:1.0 0.4输出样例:2.319680double dist( double h, double p )double d

36、=h; while(p!=0) h=p*h;if(h<TOL) break;d=d+2*h;return (d);4-5 符号函数   (10分)本题要求实现符号函数sign(x)。函数接口定义:int sign( int x );其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 11;若x等于0,sign(x) = 00;否则,sign(x) = -11。裁判测试程序样例:#include <stdio.h>int sign( int x );in

37、t main() int x; scanf("%d", &x); printf("sign(%d) = %dn", x, sign(x); return 0;/* 你的代码将被嵌在这里 */输入样例:10输出样例:sign(10) = 1int sign( int x )int y;if(x>0)y=1;else if(x<0)y=-1;elsey=0;return (y);4-6 使用函数判断完全平方数   (10分)本题要求实现一个判断整数是否为完全平方数的简单函数。函数接口定义:int I

38、sSquare( int n );其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。裁判测试程序样例:#include <stdio.h>#include <math.h>int IsSquare( int n );int main() int n; scanf("%d", &n); if ( IsSquare(n) ) printf("YESn"); else printf("NOn"); return 0;/* 你的代码将被嵌在这里 */输入样

39、例1:10输出样例1:NO输入样例2:100输出样例2:YESint IsSquare( int n ) if (int)sqrt(n) = sqrt(n)return (1);elsereturn (0);4-7 使用函数求1到10的阶乘和   (10分)本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,计算1! + 2! + cdots + 10!1!+2!+10!的值。函数接口定义:double fact( int n );其中n是用户传入的参数,其值不超过10。如果n是非负整数,则该函数必须返回n的阶乘。裁判测试程序样例:#incl

40、ude <stdio.h>double fact( int n );int main(void) int i; double sum; sum = 0; for(i = 1; i <= 10; i+) sum = sum + fact(i); printf("1!+2!+.+10! = %fn", sum); return 0;/* 你的代码将被嵌在这里 */输入样例:本题没有输入。输出样例:1!+2!+.+10! = 4037913.000000double fact( int n )double f;if(n<=1)f=1;elsef=fact(

41、n-1)*n;return (f);4-8 使用函数求最大公约数   (10分)本题要求实现一个计算两个数的最大公约数的简单函数。函数接口定义:int gcd( int x, int y );其中x和y是两个正整数,函数gcd应返回这两个数的最大公约数。裁判测试程序样例:#include <stdio.h>int gcd( int x, int y );int main() int x, y; scanf("%d %d", &x, &y); printf("%dn", gcd(x, y)

42、; return 0;/* 你的代码将被嵌在这里 */输入样例:32 72输出样例:8int gcd( int x, int y )int r,t;if(x<y)t=x;x=y;y=t;while(r=x%y)!=0)x=y;y=r;return (y);4-9 递归求阶乘和   (15分)本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+.+n! 的值。函数接口定义:double fact( int n );double factsum( int n );函数fact应返回n的阶乘,建议用递归实现。函数factsum应

43、返回 1!+2!+.+n! 的值。题目保证输入输出在双精度范围内。裁判测试程序样例:#include <stdio.h>double fact( int n );double factsum( int n );int main() int n; scanf("%d",&n); printf("fact(%d) = %.0fn", n, fact(n); printf("sum = %.0fn", factsum(n); return 0;/* 你的代码将被嵌在这里 */输入样例1:10输出样例1:fact(10)

44、= 3628800sum = 4037913double fact(int n)double f; if(n<=1)f=1;elsef=fact(n-1)*n;return f;double factsum(int n)double sum=0;int i;for(i = 1; i <= n; i+) sum = sum + fact(i); return (sum);4-10 递归求Fabonacci数列   (10分)本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n-2)+f(n-1)f(n

45、)=f(n2)+f(n1) (nge 2n2),其中f(0)=0f(0)=0,f(1)=1f(1)=1。函数接口定义:int f( int n );函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。裁判测试程序样例:#include <stdio.h>int f( int n );int main() int n; scanf("%d", &n); printf("%dn", f(n); return 0;/* 你的代码将被嵌在这里 */输入样例:6输出样例:8int f( int n

46、)int d;if(n=0)d=0;else if(n=1) d=1;else d=f(n-2)+f(n-1);return d;4-11 分类统计字符个数   (15分)本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。函数接口定义:void StringCount( char s );其中 char s 是用户传入的字符串。函数StringCount须在一行内按照letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数的格式

47、输出。裁判测试程序样例:#include <stdio.h>#define MAXS 15void StringCount( char s );void ReadString( char s ); /* 由裁判实现,略去不表 */int main() char sMAXS; ReadString(s); StringCount(s); return 0;/* Your function will be put here */输入样例:aZ &09 Az输出样例:letter = 4, blank = 3, digit = 2, other = 1void StringCount( char s )int i,letter=0,bla

温馨提示

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

评论

0/150

提交评论