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; }