实验题
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*1
到N*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;
}
更多推荐
PTA第三章——循环结构
发布评论