帮一个 C语言小白 朋友撸代码,改进的空间还有很大,希望大神多多指教!
一、生成3的乘方表
输入一个非负整数n,生成一张3的乘方表,输出30~3n的值。可调用幂函数计算3的乘方。
输入格式:
输入在一行中给出一个非负整数n。
输出格式:
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。
输入样例:
3
输出样例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
#include<stdio.h>
#include<math.h>
int main(){
int n,i,y;
scanf("%d",&n);
for(i = 0; i <= n; i++){
y = pow(3,i);
printf("pow(3,%d) = %d\n",i,y);
}
return 0;
}
二、统计学生成绩
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
#include<stdio.h>
int main(){
int N,grade,A = 0, B = 0, C = 0, D = 0, E = 0;
scanf("%d",&N);
while(N){
scanf("%d",&grade);
N--;
if(grade >= 90){
A++;
}else if(grade >= 80){
B++;
}else if(grade >= 70){
C++;
}else if(grade >= 60){
D++;
}else{
E++;
}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
三、输出闰年
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
#include<stdio.h>
int main(){
int year,i,n = 0;
scanf("%d",&year);
if(year > 2100 || year <= 2000){
printf("Invalid year!");
}else{
for(i = 2001; i <= year; i++){
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
printf("%d\n",i);
n = 1;
}
}
if(n == 0){
printf("None");
}
}
return 0;
}
四、寻找250
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
#include<stdio.h>
int main(){
int k = 1,n;
while(scanf("%d",&n)){
if(n != 250){
k++;
}else{
break;
}
}
printf("%d",k);
return 0;
}
五、最佳情侣身高差
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96
#include<stdio.h>
int main(){
int n;
char ch;
float height;
scanf("%d\n",&n);
while(n--){
scanf("%c %f",&ch,&height);
getchar();
if(ch == 'F'){
printf("%.2f\n",height * 1.09);
}else{
printf("%.2f\n",height / 1.09);
}
}
return 0;
}
六、作品评分
全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入格式:
输入数据包括两行: 第一行为n,表示n个评委,n>2。 第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.5
输出样例:
8.88
#include<stdio.h>
int main(){
int n;
float grade,max = 0.0, min = 10.0,sum = 0.0,average = 0.0;
scanf("%d",&n);
int temp = n;
while(n){
scanf("%f",&grade);
n--;
sum = sum + grade;
if(grade > max){
max = grade;
}
if(grade < min){
min = grade;
}
}
average = (sum - max - min) / (temp-2);
printf("%.2f",average);
return 0;
}
七、求平方根序列前N项和
本题要求编写程序,计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 22.47
#include<stdio.h>
#include<math.h>
int main(){
long int N,i;
double sum;
scanf("%ld",&N);
for(i = 1; i <= N; i++){
sum += sqrt(i);
}
printf("sum = %.2lf",sum);
return 0;
}
八、求分数序列前N项和
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
#include <stdio.h>
main(){
int N,a;
double d,i,j;
i=2;
d=0.00;
a=1;
scanf("%d",&N);
for(j=1;a<=N;j=i-j){
d+=i/j;
i=i+j;
a++;
}
printf("%.2lf",d);
}
九、打印九九口诀表
下面是一个完整的下三角九九口诀表:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81
本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
#include<stdio.h>
int main(){
int i,j,N;
scanf("%d",&N);
for(i = 1; i <= N; i++){
for(j = 1; j <= i; j++){
printf("%d*%d=%-4d",j,i,i*j);
if(j == i){
printf("\n");
}
}
}
return 0;
}
十、统计素数并求和
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
main()
{
int M,N,i,j;
int a = 0;
int b = 0;
scanf("%d %d",&M,&N);
if(M == 0 && N == 0){
printf("0 0");
}
if(M == 1 && N >= 1){
for(i = M; i <= N; i++){
int k = 0;
for(j = 2; j < i; j++){
if(i % j == 0){
k = 1;
break;
}
}
if(k == 0){
a++;
b += i;
}
}
a--;
b--;
printf("%d %d",a,b);
}
if(M > 1 && N > 1){
for(i = M; i <= N; i++){
int k = 0;
for(j = 2; j < i; j++){
if(i % j == 0){
k = 1;
break;
}
}
if(k == 0){
a++;
b += i;
}
}
printf("%d %d",a,b);
}
}
十一、输出三角形字符阵列
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例:
4
输出样例:
A B C D
E F G
H I
J
#include<stdio.h>
int main()
{
int n,i,j;
char ch = 'A';
scanf("%d",&n);
for(i = 1; i <= n; i++){
for(j = 1; j <= n + 1 - i; j++){
printf("%c ",ch);
ch++;
}
printf("\n");
}
return 0;
}
十二、特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
输入样例:
2 3
输出样例:
s = 246
#include<stdio.h>
int main()
{
int a,n,i,j,sum = 0;
scanf("%d %d",&a,&n);
int temp = a;
for(i = 1; i <= n; i++){
sum += a;
a = a * 10 + temp;
}
printf("s = %d",sum);
return 0;
}
十三、约分最简分式
分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。
输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如:12/34表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。提示:在scanf的格式字符串中加入/,让scanf来处理这个斜杠。
输出格式:
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用分子/分母的形式表示分数。如 5/6表示6分之5。
输入样例:
66/120
输出样例:
11/20
#include<stdio.h>
int main()
{
int x,y,i,flag = 0;
scanf("%d/%d",&x,&y);
if(x == y){
printf("1/1");
}else{
int min = (x < y) ? x : y;
for(i = min; i >= 2; i--){
if(x % i == 0 && y % i == 0){
printf("%d/%d",x/i,y/i);
flag = 1;
break;
}
}
if(flag == 0){
printf("%d/%d",x,y);
}
}
return 0;
}
十四、输出N以内的所有素数
编程找出N(2≤N≤500)以内(即小于等于N)的所有素数。
输入格式:
输入整数N(2≤N≤500)。
输出格式:
每8个一行输出N以内的所有素数。注意每个数据均占5列,且采用右对齐。
输入样例1:
50
输出样例:
2 3 5 7 11 13 17 19
23 29 31 37 41 43 47
#include<stdio.h>
#include<math.h>
main()
{
int N,i,j,prime = 0,count = 0;
scanf("%d",&N);
for(i = 2; i <= N; i++){
if(isPrime(i) == 0){
printf("%5d",i);
count++;
if(count % 8 == 0){
printf("\n");
}
}
}
}
int isPrime(int x){
int i,flag = 0;
for(i = 2; i <= x/2; i++){
if(x % i == 0){
flag = 1;
}
}
return(flag);
}
十五、跟奥巴马一起画方块
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
#include<stdio.h>
int main()
{
int N,i,j;
float n;
char ch;
scanf("%d %c",&N,&ch);
n = (int)(N/2.0 + 0.5);
for(i = 1; i <= n; i++){
for(j = 1; j <= N; j++){
printf("%c",ch);
}
printf("\n");
}
return 0;
}