PTA第三章——循环结构

实验题

R7-1 统计学生平均成绩与及格人数 (15 分)

本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。

输入格式:输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。

输出格式:按照以下格式输出:

average = 成绩均值
count = 及格人数

其中平均值精确到小数点后一位。

按照以下格式输出:

输入样例:

5
77 54 92 73 60

结尾无空行

1.输出样例:

average = 71.2
count = 4
#include<stdio.h>
int main()
{
    int n;
    int m;
    int i;
    int cj=0,sum=0;
    double a=0;
    scanf("%d",&n);
    if(n>0)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&m);
            if(m>=60)
            {
                cj++;
            }
            sum+=m;
        }
        a=1.0*sum/n;
    }
    printf("average = %0.1f\n",a);
    printf("count = %d",cj);
    return 0;
    }

R7-2 打印九九口诀表 (15 分)

下面是一个完整的下三角九九口诀表:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

本题要求对任意给定的一位正整数N,输出从1*1N*N的部分口诀表。

输入格式:输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4

结尾无空行

2.输出样例:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  

结尾无空行

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int x,y;
    for(x=1;x<=n;x++)
    {
        for(y=1;y<=x;y++){
            printf("%d*%d=%-4d",y,x,y*x);
        }
            printf("\n");
    }
    return 0;
}

R7-3 素数判断 (15 分)

键盘输入一个正整数,要求判断该数是否为素数。素数即质数,只能被1和它本身整除。特别说明,1不是素数。如果是素数,输出“YES”,否则输出“NO”。

输入格式:输入只有一个用例,即一个整数n。

输出格式:如果n是素数,输出“YES”,否则输出“NO”。

输入样例:

11

结尾无空行

3.输出样例:

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

YES

#include<stdio.h>
int main()
{
    int n,i;
    int flag=1;
    scanf("%d",&n);
    for(i=2;i<=n/2;i++)
    {
        if(n%i==0){
            flag=0;
            break;
        }
    }
    if(flag==1&&n!=1){
        printf("YES");
    }else{
        printf("NO");
    }
    return 0;
}

R7-4 求满足条件的斐波那契数 (15 分)

斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。

输入格式:在一行输人一个正整数n(n>=10)。

输出格式:在一行输出大于n的最小斐波那契数。

输入样例:

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

10

结尾无空行

4.输出样例:

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

13
#include<stdio.h>
int main()
{
    int n=0;
    scanf("%d\n",&n);
    int a[30]={0};
    int i=0;
    a[0]=1;
    a[1]=1;
    for(i=2;i<=n;i++)
    {
        a[i]=a[i-2]+a[i-1];
        if(a[i]>=n)
            break;
    }
    printf("%d",a[i]);
    return 0;
}

R7-5 编写程序,求自然数1至n(n>1)的累加和。 (15 分)

编写程序,求自然数1至n(n>1)的累加和。其中n的值从键盘输入。

输入格式:输入一个自然数赋给变量n。

输出格式:输出自然数1至n的累加和。

输入样例:

10

结尾无空行

5.输出样例:

55

结尾无空行

#include<stdio.h>
int main()
{
    int i,j;
    scanf("%d",&j);
    int sum=0;
    for(i=0;i<=j;i++)
        sum+=i;
    printf("%d",sum);
    return 0;
}

R7-6 统计数字字符和空格 (15 分)

本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。

输入格式:输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。

输出格式:在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

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

Reold 12 or 45T

结尾无空行

6.输出样例:

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

blank = 3, digit = 4, other = 8

结尾无空行

#include<stdio.h>
int main()
{
    char x;
    int a=0,b=0,c=0;
    while((x=getchar())!='\n')
    {
        if(x==' '){
            a++;
        }
        else if(x>='0'&&x<='9'){
            b++;
        }
        else{
            c++;
        }
    }
        printf("blank = %d, digit = %d, other = %d",a,b,c);
    return 0;
}

R7-7 求n以内最大的k个素数以及它们的和 (15 分)

本题要求计算并输出不超过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

7.输出样例2:

11+7+5+3+2=28
#include <stdio.h>
int main()
{
    int n,k,i,j,q=0,sum=0;
    scanf("%d%d",&n,&k);
    i=n;
    for(i;i>=2;i--)
    {
        int isprime =1;
        for(j=2;j<i-1;j++)
        {
            if(i%j==0){isprime=0;break;}
        }
        if(isprime==1)
        {
            sum+=i;
            if(q==0)printf("%d",i);
            else printf("+%d",i);
            q++;
        }
        if(q>=k||i==2)
        {
            printf("=%d",sum);
            break;
        }
    }
return 0;
}

R7-8 英文字母替换加密(大小写转换+后移1位) (15 分)

本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。

输入格式:输入一行字符,以回车符 '\n'作为 结束符。

输出格式:将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。

输入样例:

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

Reold  Z123?

8.输出样例:

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

sFPME  a123?

结尾无空行

#include <stdio.h>
int main()
{    
    char ch;
    ch = getchar();
    while(ch!='\n')
    {
    	if(ch>='A' && ch<='Z')
		{
			if(ch=='Z')
			{
				ch = ch - 'A' + 'a' - 25;
			}
			else
			{
				ch = ch - 'A' + 'a' + 1;
			}			
		}
		else if(ch>='a' && ch<='z')
		{
			if(ch=='z')
			{
				ch = ch - 'a' + 'A' - 25;
			}
			else
			{
				ch = ch - 'a' + 'A' + 1;
			}			
		}
		putchar(ch);
		ch = getchar();
	}
	return 0;
}

R7-9 求N分之一序列前N项和 (15 分)

本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。

输入格式:输入在一行中给出一个正整数N。

输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

6

结尾无空行

9.输出样例:

sum = 2.450000

结尾无空行

#include<stdio.h>
int main()
{
    int i,n;
    double sum;
    scanf("%d",&n);
    sum=0;
    for(i=1;i<=n;i++)
    {
        sum=sum+1.0/i;
    }
    printf("sum = %.6f\n",sum);
    return 0;
}

R7-10 查验身份证 (15 分)

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

结尾无空行

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

结尾无空行

输入样例2:

2
320124198808240056
110108196711301862

10.输出样例2:

All passed
#include<stdio.h>
int main()
{
    int n,num=0,i,j;
    scanf("%d",&n);
    getchar();
    char s[100][20];
    int  a[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char str[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    for(i=0;i<n;i++)
       scanf("%s",s[i]);
    for(i=0;i<n;i++)
    {
        for(j=0;j<17;j++)
            if(s[i][j]-'0'<0||s[i][j]-'0'>9)
            break;
        if(j==17)
        {
            int z=0;
            for(j=0;j<17;j++)
                    z+=(s[i][j]-'0')*a[j];
               z=z%11;
            if(str[z]!=s[i][17])
           puts(s[i]);
           else num++;


        }
        else puts(s[i]);
    }
    if(num==n) printf("All passed\n");

    return 0;
}

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值