练习1

while/for习题

1.循环输出
输入一个正整数n(1<=n<=100000)
输出1, 2, 3, …, n
每行一个数字

#include <stdio.h>

int main (){
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;++i){
                printf("%d\n",i);
        }
}

2.循环判断输出
输入一个正整数n(3<=n<=100000)

输出3, 6, 9, …,即输出所有<=n的,3的倍数。

从小到大依次输出,只考虑3的正整数倍。

每行一个数字。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;++i){
                if(i%3==0){
                        printf("%d\n",i);
                }
        }

}

3.幸运数字
如果一个数字的十进制表示中有7,我们就认为他是幸运数字。
输入一个数字n(1 <= n <= 10^9)
判断n是否是一个幸运数字,如果是的话输出"Yes",否则输出"No"

#include <stdio.h>

  int main(){
          int n;
          scanf("%d",&n);
          int num=0;
          for (n;n/10!=0;n=n/10){
                  if (n%10==7){
                          num++;
                  }
          }
          if (num!=0 || n==7){
             printf("YES\n");
          }else{
             printf("NO\n");
                  }

}

4.素数判断
输入一个整数n,使用试除法判断它是不是素数。如果是,输出"Yes",否则输出"No"。

#include <stdio.h>

int main(){
        int n;
        int num=0;
        scanf("%d",&n);
        for (int i=1;i<n;++i){
                if(n%i==0){
                        num++;
                }
        }
        if (num==1){
                printf("YES\n");
        }else{
                printf("NO\n");
        }
}

5.输出最小值
输入一个整数n(n <= 10000)。随后输入n个整数。输出这n个整数中的最小值。

#include <stdio.h>

int main(){
        int n;
        scanf ("%d",&n);
        int s[n];
        for (int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int min=s[0];
        for (int i=0;i<n;++i){
                if(min>s[i]){
                        min=s[i];
                }
        }
        printf("%d\n",min);
}

6.求最值
输入一个长度为n的数组,输出他的最大值和最小值。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int s[n];
        for(int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int min,max;
        min=s[0];
        max=s[0];
        for(int i=0;i<n;++i){
                if(min>s[i]){
                        min=s[i];
                }
                if(max<s[i]){
                        max=s[i];
                }
        }
        printf("%d %d\n",min,max);
        }

7.前缀和

输入一个长度为n(1 <= n <= 100000)数组ai(0<=ai<=1000),输出他的前缀和。

前缀和中的第i项,表示原数组中的前i项的和。

#include <stdio.h>

int main (){
        int n;
        scanf("%d",&n);
        int s[n];
        for(int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int d[n];
        for(int i=0;i<n;++i){
                if (i==0){
                d[i]=s[i];
                }else{
                        d[i]=d[i-1]+s[i];
                }

        }
        printf("%d\n",n);
        for (int i=0;i<n;i++){
        printf("%d\n",d[i]);
}
}

9.倒序输出
给出两个整数a和b,倒序输出a到b之间(包括a和b)的所有整数。

#include <stdio.h>

int main (){
        int a,b;
        scanf("%d %d",&a,&b);
        int s[b-a+1];
        for (int i=0;i<(b-a+1);++i){
                s[i]=a+i;
        }
        for (int i=(b-a);i>=0;--i){
                printf("%d\n",s[i]);
        }
}

10.求和
给出n(n <= 100000)个整数,请你输出这n个整数的和。保证每个整数<=1000。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int s[n];
        for (int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int sum=0;
        for(int i=0;i<n;++i){
                sum=sum+s[i];
        }
        printf("%d\n",sum);
}

11.数列计算
有一列数是:4/7,7/11,11/18,18/29,29/47,47/76……请找出这个数列的规律,编写程序计算并输出这个数列的第 N 项(要求是分数形式),并计算这个数列的前 N 项和(结果四舍五入保留两位小数)。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int s[30]={4,7};
        for (int i=2;i<30;++i){
                s[i]=s[i-2]+s[i-1];
        }
        int d[30]={7,11};
        for (int i=2;i<30;++i){
                d[i]=d[i-2]+d[i-1];
        }
        float f[30];
        for (int i=0;i<30;++i){
                f[i]=(1.0*s[i])/(1.0*d[i]);
        }
        float sum=0;
        for(int i=0;i<n;++i){
                sum=sum+f[i];
        }
        printf ("%d/%d\n",s[n-1],d[n-1]);
        printf("%.2f\n",sum);

}

12.阶乘
给定一个整数n,求它的阶乘,n小于等于10。

nclude <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int m=1;
        for (int i=n;i>=1;--i){
                m=m*i;
        }
        printf("%d\n",m);
}

13.非负数和
通过键盘不断输入整数,不断读取,输出其中(读到负数前)所有的非负数的和。

注意:对于每组数据,题目共提供n个整数。

这一题有2种写法
1、统计已输入数字之和,直到输入的数字为负数,跳出循环。
2、读完所有数字,但是只计算第一个负数前所有的非负数的和。
第一种写法程序不会读取完全部输入,但是不会被判错…

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int s[n];
        for (int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int sum=0;
        for (int i=0;i<n;++i){
                sum=sum+s[i];
                if (s[i]<0){
                       sum=sum-s[i];
                       break;
        }
        }
        printf("%d\n",sum);

}

14.分数求和
计算1/1+1/2+1/3+…+1/N的和(N为读入值)

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        float sum=0;
        for(int i=1;i<=n;++i){
                sum=sum+(1.0/(i*1.0));
        }
        printf("%f\n",sum);
}

15.质数判断
读入一个数N,判断这个数是不是质数(prime number)。
质数:一个数 N 除了1和它本身不存在其他约数,这样的数叫做质数。
约数:整数a除以整数b(b≠0) 除得的商正好是整数而没有余数。则a称为b的倍数,b称为a的约数。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int sum=0;
        for(int i=1;i<n;i++){
                if(n%i==0){
                        sum=sum+1;
                }
        }
        if(sum==1){
                printf("YES\n");
        }else{
                printf("NO\n");
        }
}

16.倍数个数
读入N,求出1…N的范围内所有2或3或5的倍数一共有多少个?

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int sum=0;
        for (int i=1;i<=n;++i){
                if(i%2==0 || i%3==0 || i%5==0){
                        sum++;
                }
        }
        printf("%d\n",sum);
}

17.数字反写
读入一个四位数abcd,请你输出他的“反写”的值。
比如读入1015,输出5101;
读入4310,输出134(不能有前导零)
不合法的四位数,如234, 0123, 12412不会作为读入数据。

#include <stdio.h>
int main() {

        int n;
        int i=0;
        int sum=0;
        scanf("%d",&n);
        while(n!=0){
                i=n%10;
                n=n/10;
                sum = sum*10+i;
        }

        printf("%d\n",sum);
}

18.分数求和2
有如下数列:

1, - 1/2 , 1/3, - 1/4 , 1/5 ,- 1/6 , …

求这个数列前n个数的和

#include <stdio.h>
#include <math.h>

int main(){
        int n;
        scanf("%d",&n);
        float sum=0;
        for (int i=1;i<=n;++i){
                sum=sum+(1.0/i)*pow(-1,(i-1));

        }
        printf("%f\n",sum);
}

17.分数求和3
n!=1 * 2 * 3 * … * n
现在请你求1/1!+1/2!+…+1/n! 的值

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        float sum=0;
        int m=1;
        for (int i=1;i<=n;++i){
                m=m*i;
                sum=sum+1.0/m;
        }
        printf("%f\n",sum);
}

18.9的个数
给个一个正整数n,请你求出1到n之间所有整数中出现了多少个9

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int sum=0;
        for (int i=1;i<=n;++i){
                        if(i%10==9){
                                sum=sum+1;
                                        }
                        if(i/10==9){
                                sum=sum+1;
                                        }
                                        }


                printf("%d\n",sum);
                }

19.最大的质数
读入一个数n,求比n小的最大的质数是谁。
一个数是质数,当且仅当除了1和它本身以外,没有其他的数能整除它。

#include <stdio.h>

int main(){
        int n;
        int m=0;
        scanf("%d",&n);
        int sum=0;
        for (int i=2;i<n;++i){
                for (int j=1;j<=i;++j){
                        if(i%j==0){
                                sum++;
                        }
                }

                if (sum==2 && m<i){
                        m=i;
                }
                sum=0;
        }

        printf("%d\n",m);
}

20.回文数
数字回文的判定,如果一个数字从左往右看和从右往左看是一样的,那么我们称
这个数字是回文数字,例如121,454454, 67876,5,22都是回文数字,而223,
56,10就不是回文数字。现在读入一个数字X,请你写程序判断一下它是不是回文数。

#include <stdio.h>
int main() {

        int n;
        int i=0;
        int sum=0;
        scanf("%d",&n);
        int m=n;
        while(m!=0){
                i=m%10;
                m=m/10;
                sum = sum*10+i;
        }
    //    printf ("%d\n",sum);
        if (n==sum){
                printf("yes\n");
        }else{
                printf("no\n");
        }

}

21.正数的和
先给定n,再给定n个整数,请计算出里面所有正数的和。

#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int s[n];
        for (int i=0;i<n;++i){
                scanf("%d",&s[i]);
        }
        int sum=0;
        for (int i=0;i<n;++i){
                if(s[i]>0){
                        sum=sum+s[i];
                }
        }
        printf("%d\n",sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值