C语言!!!
C语言!!!编程第11题,我这里是哪里错了,比如输入ABCD应该是(4+3+2+1)/4=2.5的啊,小写字母转换成大写字母那里哪里错了,怎么换不了?...
C语言!!!编程第11题,我这里是哪里错了,比如输入A B C D应该是(4+3+2+1)/4=2.5的啊,小写字母转换成大写字母那里哪里错了,怎么换不了?
展开
6个回答
展开全部
错误很多啊 小伙子
#include <stdio.h>
#include <ctype.h>
#include <malloc.h>
#include <memory.h>
float comptuer_GPA(int n,char grades[])
{
int i;
float num =0.0;
for (i=0;i<n;i++)
{
switch(grades[i])
{
case 'A':num+=4;break;
case 'B':num+=3;break;
case 'C':num+=2;break;
case 'D':num+=1;break;
case 'F':num+=0;break;
default: num+=0;break;
}
}
return num/n;
}
int main(void)
{
int n,i;
float average;
char *grades=NULL;
printf("Please Enter the length of array:");
scanf("%d",&n);
grades = (char*)malloc(sizeof(char)*n); //这里只能用动态数组 你那个 char grades[n]在VC6根本编译都过不了
for (i=0;i<n;i++)
{
fflush(stdin); //吸收过滤掉回车 第一次是过滤掉输入长度4的 第二次是过滤掉A的 第三次是过滤掉B的 以此类推
scanf("%c",&grades[i]);
grades[i] = toupper(grades[i]); //在这里转 toupper不能直接转一个数组,只能一个字符一个字符转
}
average = comptuer_GPA(n,grades);
printf("average = %3.2f\n",average);
return 0;
}
更多追问追答
追问
大佬我只刚学完函数,指针还没开始学,你这代码看不懂啊
追答
这种不定长度数组 char graddes[n]不行的 除非malloc一个动态数组
当然 用链表也行 不过链表就比动态数组复杂多了
展开全部
“沧海雄风2009 ”的回答是正确的。
我在这里给出一个更简单的代码(不需要提前输入数组长度,想算多少输多少,但不符合题目要求),抛砖引玉吧
#include<stdio.h>
#include<ctype.h>
//将a转化为对应的GPA,例如a转换为4,b转换为3...
#define gpa(a) ('E'-toupper(a)>0)?('E'-toupper(a)):0;
int main(void)
{
char c;
float grade=0.0;
int count=0;
while(scanf("%c",&c))
{
if(c=='\n')break;//遇到回车符结束计算
else if(isspace(c))continue; //忽视输入的空格
grade+=gpa(c)
count++;
}
if(count==0)return 1;
printf("Average = %3.2f\n",grade/count);
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的1.75 是 (4+3)/4 的结果,只输入正确了a和b. 我不太同意1楼的说法,占位置的应该不是空格,而是你的回车键,这是c语言里面一个经典错误,因为在你的情况下scanf只会把第一个字符记录,而回车键会残留在buffer里面,而且你的读取键盘是连续的,所以下一次读取会读取回车键,应该是这个原因,只需要在你的scanf后面加一行getchar();来清空buffer就行了,或者根本就不用scanf,直接用getchar来获取字符。
更多追问追答
追问
大神不行啊,后来加getchar();,直接不管怎么输入答案都是0.00
不是在后面,是在scanf前面加了一个getchar(),已经好了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入时字母间不要留空格。
把grades[i]=toupper(grades[i]);前的}移到这一句之后。
还有什么问题续问。
更多追问追答
追问
嗯,输入的时候没留空格了,输入4个字母abcd!答案还是错了,答案这回是2.25了,正确答案是10/4=2.5
已经好了,感谢大佬
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入 a b c d 空格占字符了 应该是这样。
更多追问追答
追问
我也觉得,但没道理,这些不是编译器规定的吗?嗯,我再写个程序测试下
追答
什么叫没道理。 你这是往数组里输入 。空格直接占用了啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询