C程序设计—选择结构程序设计

题目来源:pta

实验三 选择结构程序设计

1 成绩转换

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。

输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A

本题思想:

利用if结构

#include <stdio.h>
int main()
{
    
    
	int sc;
	scanf("%d",&sc);
	if(sc>=90) printf("A");
	if(sc<90&&sc>=80) printf("B");
	if(sc<80&&sc>=70) printf("C");
	if(sc<70&&sc>=60) printf("D");
	if(sc<60) printf("E");
	return 0;
}

2 高速公路超速处罚

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked

本题思想:

利用绝对值函数
1)int abs(int i);
头文件:stdlib.h
功能:求整数i的绝对值
说明:计算|i|, 当i不为负时返回 i,否则返回 -i

2)double fabs(double x );
头文件:math.h
功能:求浮点数x的绝对值
说明:计算|x|, 当x不为负时返回 x,否则返回 -x

#include <stdio.h>  
#include <math.h>
int main()
{
    
      
  	int speed,limit;
	scanf("%d %d",&speed,&limit);
	double  x,t;
	t=limit-speed;
	x=100*fabs(limit-speed)/limit;
	if (x>=10&&x<50) 
    printf("Exceed %.0f%%. Ticket 200",x); 
    else if(x>=50) 
    printf("Exceed %.0f%%. License Revoked",x);	
    else printf("OK");	 
    return 0;  
}

3 输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√​s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle
输入样例1:
5 5 3
输出样例1:
area = 7.15; perimeter = 13.00
输入样例2:
1 4 1
输出样例2:
These sides do not correspond to a valid triangle

本题思想:

1)利用平方根函数
double sqrt(double);
头文件:math.h
功能:计算一个非负实数的平方根
2)判断三个数字是否能够构成三角形
利用任意两边之和大于第三边的性质

#include <stdio.h>
#include <math.h>
int main()
{
    
    
	double a,b,c;
	double area,s,p;
	scanf("%lf %lf %lf",&a,&b,&c);
	s=(a+b+c)/2;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	p=a+b+c;
	if(a+b>c&&a+c>b&&b+c>a)
	printf("area = %.2lf; perimeter = %.2lf",area,p);
	else printf("These sides do not correspond to a valid triangle");
	return 0;
}

4 12-24小时制

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。
提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。
输入样例:
21:11
输出样例:
9:11 PM

本题思想:

以12作为分界点进行判断

#include <stdio.h>
int main()
{
    
    
	int a,b;
	scanf("%d:%d",&a,&b);
	if(a>=12)
	{
    
    
        if(12==a) printf("%d:%d PM",a,b);
        else
	    {
    
    
            a-=12;
            printf("%d:%d PM",a,b);
        }
    }
	else printf("%d:%d AM",a,b);
	return 0;
}

5 判断一个三位数是否为水仙花数

本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出一个需要判断的整数 N(100≤N≤999)。
输出格式:
如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value!。
输入样例1:
153
输出样例1:
Yes
输入样例2:
500
输出样例2:
No
输入样例3:
-2
输出样例3:
Invalid Value!

本题思想:

实验一里求一个三位数里各个位的数字。
此题也能用pow函数来做。
注意pow函数的使用:
头文件:math.h
用法:double pow(double x, double y) ;

#include <stdio.h>
int main()
{
    
    
	int N,a,b,c;
	scanf("%d",&N);
	a=N/100;
	b=N/10%10;
	c=N%10;
	if(N>=100&&N<=999)
	{
    
    
		if(N==a*a*a+b*b*b+c*c*c)
		printf("Yes");
		else printf("No");
	}
	else printf("Invalid Value!");
	return 0;
}

6 计算天数

本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。
注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62

本题思想:

利用数组;判断是否为闰年,改变2月对应的天数;利用for循环

#include <stdio.h>
int main()
{
    
    
	int i,year,month,day,n=0,
	a[13]={
    
    0,31,28,31,30,31,30,31,31,30,31,30,31};
	scanf("%d/%d/%d",&year,&month,&day);
	if((year%4==0&&year%100)||year%400==0)
		a[2]=29;
	for(i=0;i<=month-1;i++)
		n+=a[i];
	printf("%d",n+day);
	return 0;
}

7 两个数的简单计算器

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
输入样例1:
-7 / 2
输出样例1:
-3
输入样例2:
3 & 6
输出样例2:
ERROR

本题思想:

利用switch结构

#include <stdio.h>
int main()
{
    
    
	int a,b;
	char c;
	scanf("%d %c %d",&a,&c,&b);
	switch(c)
	{
    
    
		case '+' :printf("%d",a+b);break;
		case '-' :printf("%d",a-b);break;
		case '*' :printf("%d",a*b);break;
		case '/' :printf("%d",a/b);break;
		case '%' :printf("%d",a%b);break;
		default : printf("ERROR");
	}
	return 0;
}

8 判断偶数

输入一个正整数a,如果a为偶数,输出yes,否则输出no。
输入格式:
直接输入一个正整数,没有其他任何附加字符。
输出格式:
直接输出yes或no,没有其他任何附加字符。
输入样例:
2
输出样例:
yes

本题思想:

一个数为偶数的条件为除2的余数为0

#include <stdio.h>
int main()
{
    
    
	int a;
	scanf("%d",&a);
	if(a%2==0)
	printf("yes");
	else printf("no");
	return 0;
}

9 判断闰年

输入一个年份,判断其是否为闰年,若是闰年输出“yes”的信息,否则输出“no”的信息。
判断闰年的标准:能被4整除但不能被100整除,或者能被400整除的年份是闰年。

输入格式:
直接输入一个4位数年份,没有其它任何附加字符。
输出格式:
直接输出“yes”或“no”,没有其它任何附加字符。
输入样例:
1900
输出样例:
no
输入样例:
2000
输出样例:
yes
输入样例:
1904
输出样例:
yes

本题思想:

与前面‘6 计算天数类似’,需要掌握闰年的判断方法

#include <stdio.h>
int main()
{
    
    
	int a;
	scanf("%d",&a);
	if((a%4==0&&a%100!=0)||a%400==0)
	printf("yes");
	else printf("no");
	return 0;
}

10 时间差

0点半到11点45之间,有几小时几分钟呢?
你要写一个程序,读入两个时间,计算它们之间的时间差,输出相差几小时几分钟。

输入
输入两个时间,均以24小时制表达,每个时间以“小时:分钟”的形式表达,第二个时间一定比第一个时间晚或相同,而且一定在同一天内。
输出
输出表示两个时间之间的时间差的两个数字,第一个数字是时间差中的小时数,第二个数字是时间差中的分钟数。
输入例子
10:30 11:45
输出例子
1 15

本题思想:

#include <stdio.h>
int main()
{
    
    
	int a1,b1,a2,b2;
	scanf("%d:%d %d:%d",&a1,&b1,&a2,&b2);
	if(b2>=b1)
	{
    
    
		printf("%d ",a2-a1);
		printf("%d",b2-b1);
	}
	else if(b2<b1)
	{
    
    
		printf("%d ",a2-a1-1);
		printf("%d",60+b2-b1);
	}
	return 0;
}

11 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。
输入样例1:
10
输出样例1:
cost = 5.30
输入样例2:
100
输出样例2:
cost = 55.50

本题思想:

利用if…else语句

#include <stdio.h>
int main()
{
    
    
	double use,pay;
	scanf("%lf",&use);
	if(use<=50)
	{
    
     
        if(use>0)
        {
    
    
            pay=use*0.53; 
            printf("cost = %.2lf",pay);
        }
        else printf("Invalid Value!");
	} 
	else if(use>50)
	{
    
    
		pay=50*0.53+(use-50)*(0.53+0.05);
		printf("cost = %.2lf",pay);
	}
	return 0;
}

12 回文数

判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
输入格式:
直接输入一个5位数正整数。
输出格式:
输出“yes”或“no”。此处均为小写字母
输入样例:
12521
输出样例:
yes
输入样例:
65432
输出样例:
no

本题思想:

与前面求每位数的方法类似

#include <stdio.h>
int main()
{
    
    
	int num,a,b,c,d,e;
	scanf("%d",&num);
	a=num/10000;
	b=num/1000%10;
	c=num/100%10;
	d=num/10%10;
	e=num%10;
	if(a==e&&b==d)
	printf("yes");
	else printf("no");
	return 0;
}

13 三个数由小到大输出

输入三个整数x,y,z,请把这三个数由小到大输出。
输入格式:
在一行中直接输入3个整数,之间各用一个空格间隔。
输出格式:
在一行中按照“x=最小值,y=次小值, z=最大值”的顺序输出结果,最大值、次大值和最小值均原样输出,没有宽度控制。
输入样例:
2 1 3
输出样例:
x=1,y=2,z=3

本题思想:

一直比大小(感觉应该有更简单的方法hh)

#include <stdio.h>
int main()
{
    
    
	int x,y,z,max1,max2,min;
	scanf("%d %d %d",&x,&y,&z);
	if(x<y)
	{
    
    
		max1=y;
		max2=x;
		if(x<z)
		{
    
    
			min=x;
			if(y<z)
			{
    
    	
				max1=z;
				max2=y;
			}
			else
			{
    
    
				max1=y;
				max2=z;
			}
		}
		else min=z;
		printf("x=%d,y=%d,z=%d",min,max2,max1);
	}
	if(x>y)
	{
    
    
		max1=x;
		max2=y;
		if(y>z)
		min=z;
		else
		{
    
    
			if(z<x)
			{
    
    
				max1=x;
				max2=z;
				min=y;
			}
			else
			{
    
    
				max1=z;
				max2=x;
				min=y;
			}
		}
		printf("x=%d,y=%d,z=%d",min,max2,max1);
	}
	return 0;
}

14 分支嵌套

实现如下分段函数的功能。请根据输入的x,输出对应的结果。(函数粘不上来,请见代码)
输入格式:
输入x的值。
输出格式:
输出x值和对应的y值,小数点后保留两位小数;或者No meaning
输入样例1:
1
输出样例1:
x=1.00,y=2.00
**输入样例2:
10
输出样例2:
No meaning

本题思想:

if…else结构运用

#include <stdio.h>
int main()
{
    
    
	double x,y;
	scanf("%lf",&x);
	if(x>0&&x<5)
	{
    
    
		y=x*x+1;
		printf("x=%.2lf,y=%.2lf",x,y); 
	}
	else if(x==0)
	{
    
    
		y=0;
		printf("x=%.2lf,y=%.2lf",x,y); 
	}
	else if(x>-5&&x<0)
	{
    
    
		y=-x+4;
		printf("x=%.2lf,y=%.2lf",x,y); 
	}
	else printf("No meaning");
	return 0;
}

15 判断字符或数字

键盘输入一个字符,要求判断是否为数字字符,如果是’a’-’z’或’A’-’Z’,则输出“character”,如果是‘0’~‘9’,则输出“digit”,如果都不是,则输出“ERROR”。
输入格式:
键盘输入一个字符。
输出格式:
如果是字母,则输出“character”,如果是数字,则输出“digit”,如果都不是,则输出“ERROR”。
输入样例:
A
输出样例:
在这里给出相应的输出。例如:
character

本题思想:

字符串的输入与判断,利用if…else结构

#include <stdio.h>
int main()
{
    
    
	char ch;
	scanf("%c",&ch);
	if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
	printf("character"); 
	else if(ch>='0'&&ch<='9')
	printf("digit"); 
	else printf("ERROR");
	return 0;
}

【如果大家还有更好的方法,请到下方评论(题号+代码及思想)哦】

猜你喜欢

转载自blog.csdn.net/weixin_44917733/article/details/103536904