PTA浙大版《c语言程序设计》答案集

目录

 3-4 统计字符

3-5输出闰年

3-6 成绩转换

3-7 查询水果价格

3-8 比较大小

3-9 高速公路超速罚款

3-10 出租车计价

 3-11 统计学生成绩

3-12 求给定精度的简单交错序列部分和

4-1找出最小值

4-2统计素数并求和 

 4-3求奇数和

 4-5特殊a串数列求和



 3-4 统计字符

输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。

//统计字符
#include

int main(){
	int i;
	char a[10];
	for(i=0;i<10;i++){
		scanf("%c",&a[i]);
	}
	int letter,blank,digit,other;
	letter=blank=digit=other=0;//letter,blank,digit,other=0这样是错误的写法
	for(i=0;i<10;i++){
		if(a[i]<='9'&&a[i]>='0'){//此时数字也是字符,所以也要加单引号。
			digit++;  //注意这个代码用的是if else if的语句而不是一直if
		}
		else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){
			letter++;
		}
		else if(a[i]==' '||a[i]=='\n'){
			blank++;
		}
		else{
			other++;
		}
	}
	printf("letter=%d,blank=%d,digit=%d,other=%d",letter,blank,digit,other);
	return 0;
}

PTA浙大版《c语言程序设计》答案集_第1张图片

3-5输出闰年

输入格式:
输入在一行中给出21世纪的某个截止年份。

输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

//输出闰年
#include

int main(){
	int x;
	int i;
	scanf("%d",&x);
	if(x<2100){
		for(i=2000;i<=x;i++){
			if(i%4==0&&i%100!=0||i%400==0){
			printf("%d\n",i);
		}
		}
		
	}else{
		printf("invalid year");
	}
	return 0;
}

 PTA浙大版《c语言程序设计》答案集_第2张图片

3-6 成绩转换

输入格式:
输入在一行中给出一个整数的百分制成绩。

输出格式:
在一行中输出对应的五分制成绩。
 

#include

int main(){
	int x;
	scanf("%d",&x);
	switch(x/10){
		case(9):
		    printf("A");
		    break;
		case(8):
		    printf("B");
		    break;
		case(7):
			printf("c");
			break;
		case(6):
			printf("D");
			break;
		default:
			printf("E");
		}
	return 0;
}

3-7 查询水果价格

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

首先在屏幕上显示以下菜单:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

输入格式:
输入在一行中给出用户连续输入的若干个编号。

输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

输入样例1:
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00

#include

int main(){
	printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit");
	int x;
	int i;
	for(i=1;;i++){
		scanf("%d",&x);
		if(i>5){
		break;
	}
		switch(x){
		case(1):
			printf("price=3.00\n");
			continue;
		case(2):
			printf("price=2.50\n");
			continue;
		case(3):
			printf("price=4.10\n");
			continue;
		case(4):
			printf("price=10.20\n");
			continue;
		case(0):break;//这里的break和continue都是只针对switch case这个结构
		default:
			printf("price=0.00\n");
			continue;
    }
    if(x==0){
    	break;
	}
	}
	return 0;
}

 PTA浙大版《c语言程序设计》答案集_第3张图片

3-8 比较大小

输入格式:
输入在一行中给出3个整数,其间以空格分隔。

输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。

//比较大小:就是两个两个数比较,然后交换位置即可
#include

int main(){
	int a,b,c,t;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b){
		t=a;
		a=b;
		b=t;
	}
	if(a>c){
		t=a;
		a=c;
		c=t;
	}
	if(b>c){
		t=b;
		b=c;
		c=t;
	}
	printf("%d->%d->%d",a,b,c);
	return 0;
}

 

3-9 高速公路超速罚款

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

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

#include

int main(){
	int v,x;
	scanf("%d %d",&v,&x);
	double i=x+x*0.1;
	double k=x+x*0.5;
	if(v=i&&v=k){
		printf("exceed %.0f%%.license revoked",1.0*(v-x)/x*100);
	}
	return 0;
	
}

3-10 出租车计价

超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

#include

int main(){
	double x;
	int y;
	int q;
	int sum;
	int s;
	scanf("%lf %d",&x,&y);
	if(x<=3){
		q=10;
	}if(x>3&&x<=10){
		q=10+(x-3)*2;
	}if(x>10){
		q=10+14+(x-10)*3;
	}
	s=y/5*2;
	sum=s+q;
	printf("%d",sum);
	return 0;
	
}

 

 3-11 统计学生成绩

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

//统计学生成绩
#include

int main(){
	int n;
	scanf("%d",&n);
	int a[n];
	int i,x;
	int A,B,C,D,E;
	A=B=C=D=E=0;
	for(i=0;i

3-12 求给定精度的简单交错序列部分和

本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + … 直到最后一项的绝对值不大于给定精度eps。

输入格式:
输入在一行中给出一个正实数eps。

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

法一:
#include
#include

int main(){
	double eps,p,sum;
	int a,k;
	a=1;
	k=1;
	sum=0;
	scanf("%lf",&eps);
	while(1){
		p=1.0/a*k;
		a+=3;
		k=-k;
		sum+=p;
		if(fabs(p)
#include

int main(){
	double eps,p,sum;
	int a,k;
	a=1;
	k=1;
	sum=0;
	scanf("%lf",&eps);
	do{
		p=1.0/a*k;
		a+=3;
		k=-k;
		sum+=p;
	}while(fabs(p)>eps);
	printf("sum=%f",sum);
    return 0;	
}
错误示范:
//统计学生成绩
#include
#include

int main(){
	double eps,p,sum;
	int a,k;
	a=1;
	k=1;
	sum=0;
	scanf("%lf",&eps);
	while(fabs(p)>eps){  //如果用while循环,则根本进不去这个循环,因为都不知道p的值是多少
		p=1.0/a*k;       //所以在用循环之前,要先考虑是用while好还是do while好
		a+=3;
		k=-k;
		sum+=p;
	}
	printf("sum=%f",sum);
    return 0;	
}

4-1找出最小值

#include

int main(){
   int n,i;
   
   scanf("%d",&n);
   int a[n];
   for(i=0;i

4-2统计素数并求和 

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

输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

#include

int main(){
   int n,m;
   scanf("%d %d",&n,&m);
   int x,i;
   
   int sum=0;
   int cnt=0;
   for(x=n;x<=m;x++){
   	    int isprime=1;   //特别超级要注意!这个isprime每次做完循环都要初始化为1; 
   	    for(i=2;i

 4-3求奇数和

输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:
在一行中输出正整数序列中奇数的和。

#include

int main(){
   int x;
   int sum=0;
   while(x>0){
   	scanf("%d",&x);
   	if(x%2!=0&&x>0){
   		sum+=x;
	   }
   }
   printf("%d",sum);
    return 0;
}
 

4-4求分数序列前n项和

 本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

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

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

#include

int main(){
   int n,i;
   double p;
   double sum=0;
   scanf("%d",&n);
   int a=2;//这两个可以合并在一起:int a=2,b=1,t; 
   int b=1;
   int t;
   for(i=1;i<=n;i++){
    sum+=a*1.0/b;//救命!记住这个1.0要加在哪里才可以成功,加在分子的后面!! 
                  //如果实在不知道加哪,又想让最终结果是个有小数点的,那就一开始 
    t=a;          //就定义a,b是个double类型的数 
   	a=a+b;
   	b=t;
   }
   printf("%.2f",sum);
   return 0;
}

 4-5特殊a串数列求和

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。
 

 
5. //求a+aa+aaa+..... 
#include

int main(){
   int a,n;
   scanf("%d %d",&a,&n);
   int i,p=0,sum=0;
   for(i=1;i<=n;i++){ //要特别注意!第一次循环后sum的值就是一个a ,所以要特别注意sum 
   	p=p*10+a;         //和p的初始化。 
   	sum+=p;   
   }
   printf("x=%d",sum);
   return 0;
}

你可能感兴趣的:(c语言,算法)