C语言PTA练习题(7-1 判断成绩的等级,7-2 字符类别判断,7-3 判断闰年,7-4 判断质数,7-5 统计符合条件的数字,7-6 回文数个数,7-7 分解质因子)

7-1 判断成绩的等级

某课程规定,测试成绩s,若 90 ≤ s ≤ 100,则等级为A;若 80 ≤ s < 90,则等级为B;若 70 ≤ s < 80,则等级为C;若 60 ≤ s < 70,则等级为D;若 0 ≤ s < 60,则等级为E;其他成绩为 ERR。现输入一个表示成绩的实数,输出其对应的等级。

输入格式:

一个表示成绩的实数(最多可精确到小数点后面7位)。

输出格式:

输出该成绩对应的等级。

输入样例:

80

输出样例:

B
#include<stdio.h>

int main() {
	int a;
	scanf("%d", &a);
	if (a >= 90 && 100 >= a) {
		printf("A");
	}
	else if (a >= 80 && 90 > a) {
		printf("B");
	}
	else if (a >= 70 && 80 > a) {
		printf("C");
	}
	else if (a >= 60 && 70 > a) {
		printf("D");
	}
	else if (a >= 0 && 60 > a) {
		printf("E");
	}
	else {
		printf("ERR");
	}
}

7-2 字符类别判断

要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII码值小于32的为控制字符; '0'~'9' 的字符表示数字,'A'~'Z' 的字符为大写字母, 'a'~'z' 的字符为小写字母,其余则为其它字符。

输入格式:

一个字符。

输出格式:

输出该字符的ASCII码值和字符对应的类别,用空格隔开。类别如下:

控制字符,输出 "control";

数字字符,输出 "digital";

大写字母,输出 "upper case";

小写字符,输出 "lower case";

其它字符,输出 "others"

输入样例:

b

输出样例:

98 lower case
#include <stdio.h>

int main() {
    char ch;
    scanf("%c", &ch);

    int ascii = (int) ch;

    if (ascii < 32) {
        printf("%d control\n", ascii);
    } else if (ascii >= '0' && ascii <= '9') {
        printf("%d digital\n", ascii);
    } else if (ascii >= 'A' && ascii <= 'Z') {
        printf("%d upper case\n", ascii);
    } else if (ascii >= 'a' && ascii <= 'z') {
        printf("%d lower case\n", ascii);
    } else {
        printf("%d others\n", ascii);
    }

    return 0;
}

7-3 判断闰年

输入两个合法的年份y1、y2,输出y1~y2(含y1、y2)之间的所有闰年,及闰年的数量。

提示:

闰年的判定规则为:能被 4 整除但不能被 100 整除的年份,或能被 400 整除的年份。

输入格式:

输入两个整数,表示两个合法的年份y1、y2。

输出格式:

输出2行。

第1行:输出y1~y2(含y1、y2)之间的所有闰年(按y1到y2的顺序依次输出),中间用空格隔开(注意:本行结束不加空格)。如果没有,则输出"0000"。

第2行:输出闰年的数量。

输入样例:

在这里给出一组输入。例如:

2019 2024

输出样例:

在这里给出相应的输出。例如:

2020 2024
2
#include<stdio.h>
int main() {
    int a;
    int b;
    int count = 0;
    scanf("%d %d", &a, &b);
    int minn = 0;
    int maxn = 0;
    if (a > b) {
        minn = b;
        maxn = a;
    }
    else {
        maxn = b;
        minn = a;
    }

    for (int i = minn; i <= maxn; i++) {
        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
            count++;
            if (count != 1) {
                printf(" %d", i);
            }
            else {
                printf("%d", i);
            }
        }
    }
    if (count != 0) {
        printf("\n%d", count);
    }
    else {
        printf("0000\n");
        printf("0");
    }
}

7-4 判断质数

输入两个合法的正整数n、m(2≤n,m≤1e6),输出n~m(含n、m)之间的所有素数(质数)。

输入格式:

输入两个合法的正整数n、m(2≤n,m≤1e6)。

输出格式:

输出1行:n~m(含n、m)之间的所有素数(按n到m的顺序依次输出),中间用空格隔开(结束不加空格)。如果没有,则输出"NO"。

输入样例:

在这里给出一组输入。例如:

2 10

输出样例:

在这里给出相应的输出。例如:

2 3 5 7
#include <stdio.h>
#include <math.h>
int sushu(long n){
    int i,sushu=1;
        for(i=2;i<n;i++){
            if(n%i==0){
                sushu=0;
            }
        }
    return sushu;
    }

int main(){
    long n,m,t=0;
    scanf("%ld %ld",&n,&m);
    int cnt=0;
    if(n<=m){
        for(n;n<=m;n++){
        if(sushu(n)){
            if(cnt!=0){
            printf(" ");}
            printf("%ld",n);
            cnt++;
        }
    }
    }
    else{for(n;n>m;n--){
        if(sushu(n)){
            if(cnt!=0){
            printf(" ");}
            printf("%ld",n);
            cnt++;
        }
    }
    }
    if(cnt==0){printf("NO");}
    return 0;
}

7-5 统计符合条件的数字

输入一个数字d(2≤d≤9)、两个正整数n、m(2≤n≤m≤1e9),输出n~m(含n、m)之间能被d整除且至少有一位数字是d的所有整数的个数。

输入格式:

输入一个数字d(2≤d≤9)、两个正整数n、m(2≤n≤m≤1e9)。

输出格式:

输出n~m(含n、m)之间能被d整除且至少有一位数字是d的所有整数的个数。

输入样例:

在这里给出一组输入。例如:

2 8 20

输出样例:

在这里给出相应的输出。例如:

2
#include <stdio.h>
int main(){
    int d,n,m,sum=0,c;
    scanf("%d %d %d",&d,&n,&m);
    for(n;n<=m;n++){
        if(n%d==0){
            for(int i=n;i>0;i/=10){
                c=i%10;
                if(c==d){
                    sum++;
                    break;
                }
            }
        }
    }
        printf("%d",sum);
        return 0;
    }

7-6 回文数个数

一个正整数,正读和反读都相同的数为回文数。例如22,131,2442,37073,6,…所有1位数都是回文数。给出一个正整数n(1≤n≤1e6),求出1,2,…,n之中(包括1和n)的回文数的个数。

输入格式:

任意给定一个正整数n(1≤n≤1e6)。

输出格式:

一个正整数,表示[1,n]之间的回文数的个数。

输入样例:

在这里给出一组输入。例如:

20

输出样例:

在这里给出相应的输出。例如:

10

7-7 分解质因子

输入一个正整数n(1≤n≤1e15),编程将其分解成若干个质因子(素数因子)积的形式。

输入格式:

任意给定一个正整数n(1≤n≤1e15)。

输出格式:

将输入的正整数分解成若干个质因子积的形式,质因子的出现顺序按从小到大排列。如:40=2*2*2*5;如果整数本身为质数或素数,直接输出,如:13=13。

输入样例:

在这里给出一组输入。例如:

40

输出样例:

在这里给出相应的输出。例如:

40=2*2*2*5
#include <stdio.h>
#include<math.h>
int main(){
    int n;
    scanf("%d",&n);
    int t =0;
    int count=0;
    int a[30];
    for(int i=2;i<n;i++){
        if(n%i==0){
            count++;
            break;
        }
    }
    if(count==0){
        printf("%d=%d",n,n);
    }else{
        int p=n;
        for(int i=2;p>1;i++){
            if(p%i==0){
                a[t]=i;
                p/=i;
                t++;
                i=1;
            }
        }
        printf("%d=%d",n,a[0]);
        for(int i =1;i<t;i++){
            printf("*%d",a[i]);
        }
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值