C语言编程练习——循环结构(一)

帮一个 C语言小白 朋友撸代码,改进的空间还有很大,希望大神多多指教!

一、生成3的乘方表

输入一个非负整数n,生成一张3的乘方表,输出3​0​​~3​n​​的值。可调用幂函数计算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
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=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
1
2=2 22=4
1
3=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;
}
发布了14 篇原创文章 · 获赞 34 · 访问量 2139

猜你喜欢

转载自blog.csdn.net/qq_46127363/article/details/105732341