沈阳师范大学大一上册C语言PTA题目集以及答案(第二章 分支结构程序设计 编程题篇)
7-1 成绩是否及格 (10分)
输入成绩值x∈[0,100],如果x≥60,则输出pass,否则输出fail。
输入格式:
直接输入[0,100]之间的1个整数,没有其它任何附加字符。
输出格式:
直接输出你“pass”或“fail”,没有其它任何附加字符。
输入样例:
78
输出样例:
pass
输入样例:
46
输出样例:
fail
作者
王跃萍
单位
东北石油大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
int main(int argc, char *argv[]) {
int x;
scanf("%d",&x);
if(x<0||x>100)
{printf("error!!!");
return 0;
}
if(x>=60&&x<=100)
printf("pass");
else
printf("fail");
return 0;
}
7-2 计算符号函数的值 (10分)
对于任一整数n,符号函数sign(n)的定义如下:
请编写程序计算该函数对任一输入整数的值。
输入格式:
输入在一行中给出整数n。
输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。
输入样例1:
10
输出样例1:
sign(10) = 1
输入样例2:
0
输出样例2:
sign(0) = 0
输入样例3:
-98
输出样例3:
sign(-98) = -1
#include <stdio.h>
int main(int argc, char *argv[]) {
int n;
scanf("%d",&n);
if(n<0)
{printf("sign(%d) = -1",n);
return 0;}
if(n==0)
{printf("sign(%d) = 0",n);
return 0;}
if(n>0)
{printf("sign(%d) = 1",n);
return 0;}
}
7-3 比较大小 (10分)
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
#include <stdio.h>
int main(int argc, char *argv[]) {
int a,b,c,d,e,f,mid,max,min;
scanf("%d %d %d",&d,&e,&f);
a=d;b=e;c=f;
max=(a>b)?(a>c)?a:c:(c>b)?c:b;
a=d;b=e;c=f;
min=(a<b)?(a<c)?a:c:(b<c)?b:c;
a=d;b=e;c=f;
mid= (a<b?a:b)<c?(c>(a>b?a:b)?(a>b?a:b):c):(a>b?b:a);
printf("%d->%d->%d",min,mid,max);
return 0;
}
7-4 成绩转换 (15分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A
#include <stdio.h>
int main(int argc, char *argv[]) {
int a,b;
scanf("%d",&a);
if(a>=90)
printf("A\n");
if(a<90&&a>=80)
printf("B\n");
if(a<80&&a>=70)
printf("C\n");
if(a<70&&a>=60)
printf("D\n");
if(a<60)
printf("E");
return 0;
}
7-5 计算工资 (15分)
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。
输入格式:
输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。
输出格式:
在一行输出该员工的周薪,精确到小数点后2位。
输入样例1:
5 40
输出样例1:
2000.00
输入样例2:
3 50
输出样例2:
1650.00
#include <stdio.h>
int main(int argc, char *argv[]) {
int year,time;
float money;
scanf("%d %d",&year,&time);
if(year<5)
{
if(time<=40)
money=time*30.0;
if(time>40)
money=40.0*30.0+(time-40)*(30*1.5);
}
if(year>=5)
{
if(time<=40)
money=time*50.0;
if(time>40)
money=40.0*50.0+(time-40)*(50*1.5);
}
printf("%.2f",money);
}
7-6 判断字符或数字 (10分)
键盘输入一个字符,要求判断是否为数字字符,如果是’a’’z’或’A’’Z’,则输出“character”,如果是‘0’~‘9’,则输出“digit”,如果都不是,则输出“ERROR”。
输入格式:
键盘输入一个字符。
输出格式:
如果是字母,则输出“character”,如果是数字,则输出“digit”,如果都不是,则输出“ERROR”。
输入样例:
A
输出样例:
在这里给出相应的输出。例如:
character
#include <stdio.h>
int main(int argc, char *argv[]) {
char a;
a=getchar();
if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))
{printf("character\n");
return 0;}
if(a>='0'&&a<='9')
{
printf("digit\n");
return 0; }
printf("ERROR\n");
return 0;
}
7-7 闰年判断 (10分)
输入year,判断是否闰年。
输入格式:
输入年份N。
输出格式:
如果是闰年就输出YES,否则输出NO。
输入样例:
在这里给出一组输入。例如:
2000
输出样例:
在这里给出相应的输出。例如:
YES
#include <stdio.h>
int main()
{
int year,a;
scanf("%d",&year);
if(year%400==0)
a=1;
else
{
if(year%4==0&&year%100!=0)
a=1;
else
a=0;
}
if(a==1)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
7-8 新胖子公式 (10分)
根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。
输入格式:
输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。
输出格式:
首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出 PANG,否则输出 Hai Xing。
输入样例 1:
100.1 1.74
输出样例 1:
33.1
PANG
输入样例 2:
65 1.70
输出样例 2:
22.5
Hai Xing
#include <stdio.h>
int main(int argc, char *argv[]) {
float t,s,p;
scanf("%f %f",&t,&s);
if(t>1000||s>3)
return 0;
p=t/(s*s);
if(p>25)
printf("%.1f\nPANG",p);
else
printf("%.1f\nHai Xing",p);
return 0;
}
7-9 计算分段函数[1] (10分)
本题目要求计算下列分段函数f(x)的值:
公式
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。
输入样例1:
10
输出样例1:
f(10.0) = 0.1
输入样例2:
0
输出样例2:
f(0.0) = 0.0
#include <stdio.h>
int main(int argc, char *argv[]) {
float x,z;
scanf("%f",&x);
if(x==0)
printf("f(0.0) = 0.0");
else
{z=1.0/x;
printf("f(%.1f) = %.1f",x,z);}
return 0;
}
7-10 两个数的简单计算器 (10分)
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
输入样例1:
-7 / 2
输出样例1:
-3
输入样例2:
3 & 6
输出样例2:
ERROR
#include <stdio.h>
int main(int argc, char *argv[]) {
int a,c;
char b;
scanf("%d %c %d",&a,&b,&c);
if(b!='+'&&b!='-'&&b!='*'&&b!='/'&&b!='%')
printf("ERROR");
switch(b)
{
case 43:printf("%d",a+c);break;
case 45:printf("%d",a-c);break;
case 42:printf("%d",a*c);break;
case 47:printf("%d",a/c);break;
case 37:printf("%d",a%c);break;
}
return 0;
}
7-11 计算天数 (15分)
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
#include <stdio.h>
int main()
{
int year,a,b,i,d,z=0;
//yes
int g[12]={31,29,31,30,31,30,31,31,30,31,30,31};
//no
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d/%d/%d",&year,&b,&d);
if(year%400==0)
a=1;
else
{
if(year%4==0&&year%100!=0)
a=1;
else
a=0;
}
if(a==1)
{
//yes
for(i=0;i<=(b-2);i++)
{
z=z+g[i];
}
z=z+d;
printf("%d",z);
}
else
{
//no
for(i=0;i<=(b-2);i++)
{
z=z+c[i];
}
z=z+d;
printf("%d",z);
}
return 0;
}