绩点换算

  本题的难点(自认为)在于:如何不同时输入字符和数字,也即数字与字符间的转换,数字算特殊的字符,鉴于题目中要求一次输入的字符不止一个,故定义字符数组char score【30】【3】,首先输入一个字符串或数字,如果输入的是字符串,则可以用switch语句来决定输出结果;如果是数字,先把数字转换为数字,因为刚开始输入的不论是字符串还是数字都自动转换为字符,原因是存入的类型是字符数组,然后再利用相应的余数法和乘数法再加上switch语句,输出相应的结果。

  教训是:一定要记得100时的输出,因为我就是忘记了这个,所以编译了好多次都错。

  题目来源:http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=568

  我的代码:

#include<stdio.h>
#include<stdlib.h>
void main(){ 
int i,n,a,b,c;
char score[30][3];
scanf("%d",&i);
for(n=0; n<i; n++) 
{scanf("%s",score[n]); 
if(*score[n]<='Z'&&*score[n]>='A')
switch (*score[n]) {
case 'Y': printf("4.0\n"); break;
case 'L': printf("3.4\n"); break;
case 'Z': printf("2.7\n"); break; 
case 'J': printf("1.5\n"); break; 
case 'B': printf("0\n"); 
}
else {
a=atoi(score[n]);
b=a/10; c=a%10;
switch(b){ 
case 10:printf("4.0\n");break;
case 9:printf("4.0\n");break; 
case 8:if(c>=5)printf("3.6\n");else printf("3.2\n");break;
case 7:if(c>=5)printf("2.8\n");else printf("2.3\n");break; 
case 6:if(c>=5)printf("1.8\n");else printf("1.3\n");break;
default:printf("0\n");} 
}
}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值