PTA数据结构第一次作业
7-1 统计学生平均成绩与及格人数(15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式:
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
输出格式:
按照以下格式输出:
average = 成绩均值
count = 及格人数
其中平均值精确到小数点后一位。
输入样例:
5
77 54 92 73 60
输出样例:
average = 71.2
count = 4
#include<stdio.h> int main() { int N,ia,count,sum,i; float average; scanf("%d",&N); sum=0; count=0; average=0; for(i=0;i<N;i++) { scanf("%d",&ia); sum=sum+ia; if(ia>=60) { count++; } } if(N==0) { printf("average = 0.0\n"); } else if(N>0) { average=sum/(float)N; printf("average = %.1f\n",average); } printf("count = %d\n",count); return 0; }
7-2 统计字符(15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
输入样例:
aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
#include<stdio.h> int main() { char str[10]; int i=0,letter=0,blank=0,digit=0,other=0; while(i<10) { str[i++]=getchar(); } for(i=0;i<10;i++) { if(str[i]==' ') { blank++; } else if(str[i]=='\n') { blank++; } else if(str[i]>='0'&&str[i]<='9') { digit++; } else if(str[i]>='A'&&str[i]<='Z') { letter++; } else if(str[i]>='a'&&str[i]<='z') { letter++; } else { other++; } } printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other); return 0; }
7-3 跟奥巴马一起画方块(15 分)
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C
,间隔一个空格。
输出格式:
输出由给定字符C
画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
#include<stdio.h> int main() { int i,j; int n; char c; scanf("%d",&n); getchar(); scanf("%c",&c); for(i=1;i<=(int)n/2.0+0.5;i++) { for(j=1;j<=n;j++) { printf("%c",c); } printf("\n"); } return 0; }
7-4 特殊a串数列求和(20 分)
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
输入样例:
2 3
输出样例:
s = 246
#include<stdio.h> int main() { int i=0,s=0,a,tmp=0,n; scanf("%d %d",&a,&n); tmp = a; for(i = 0; i < n; i++) { s+=tmp; tmp=tmp*10+a; } printf("s = %d\n",s); return 0; }
7-5 统计素数并求和(20 分)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include<stdio.h> int fun(int i) { int j; if(i<=0) { return -1; } else if(i<2) { return 1; } else { for(j=2;j<i;j++) { if(i%j==0) { return 1; } } return 0; } } int main() { int M,N,i,j,s,n; s=0; n=0; scanf("%d %d",&M,&N); if(M==N) { i=M; if(fun(i)==0) { n=1; s=M; } else if(fun(i)==1) { n=0; s=0; } } else if(M!=N) { for(i=M;i<=N;i++) { if(fun(i)==0) { n++; s=s+i; } } } printf("%d %d\n",n,s); return 0; }
7-6 循环的统计(15 分)
在墙角堆放着一堆完全相同的正方体小木块,从上往下数起,第一层是1块,第二层是3块,第三层是6块…… 因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。
输入格式:
只有一个整数 n ,表示这堆小木块的层数,已知1 <= n <= 100 。
输出格式:
只有一个整数,表示这堆小木块的总数量。
输入样例:
5
输出样例:
35
#include<stdio.h> int sum(int i); int main() { int n,i,s=0; scanf("%d",&n); for(i=1;i<=n;i++) { s=s+sum(i); } printf("%d\n",s); return 0; } int sum(int i) { if(i==1) { return 1; } else { return i+sum(i-1); } }
7-7 求n以内最大的k个素数以及它们的和(20 分)
本题要求计算并输出不超过n的最大的k个素数以及它们的和。
输入格式:
输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
输出格式:
在一行中按下列格式输出:
素数1+素数2+…+素数k=总和值
其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
输入样例1:
1000 10
输出样例1:
997+991+983+977+971+967+953+947+941+937=9664
输入样例2:
12 6
输出样例2:
11+7+5+3+2=28
#include<stdio.h> int fun(int n) { int i; if(n<=0) { return -1; } else if(n<2) { return 1; } else { for(i=2;i<n;i++) { if(n%i==0) { return 1; } } return 0; } } int main() { int i,sum=0,n,k; scanf("%d %d",&n,&k); for(i=n;i>1 && k>0;i--) { if(fun(i)==0) { printf("%d",i); sum+=i; k--; if(k!=0&&i>2) { printf("+"); } else { printf("=%d",sum); break; } } } return 0; }