作为课程项目的一部分,我创建了这个code(原始版本)。它很棒,几乎满分。当我学习新材料时,我挑战自己重写原始代码并在其中实现新内容。所以基本上this new version(与原版没什么区别 - 可随意比较)的确是:
请注意,在下面的执行中,输入的4个字符中有3个有效。所以我们得到它们的表面和周长。但是'T'是一个无效字符,但是当用户决定不继续时,它仍然被计为总数的一部分并且给我4而不是3:
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): c
Veuillez entrer le rayon: 10
Le perimetre est de: 62.83
La surface est de: 314.16
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): t
Le caractere 'T' est invalide
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): k
Veuillez entrer le cote du carre: 5
Le perimetre est de: 20.00
La surface est de: 25.00
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): r
Veuillez entrer la longeur et largeur du rectangle: 10 5
Le perimetre est de: 30.00
La surface est de: 50.00
Voulez-vous continuer ? (o/n) n
Au total, on a traite 4 figure(s)
La surface la plus grande est: 314.16
Il y a 1 rectangle(s) dont la longueur depasse 7.80 metres
Le plus petit perimetre des cercles est: 62.83
Le nombre total de carre traitees : 1
Le cote moyen des carres traites est de: 5.00
Process returned 0 (0x0) execution time : 47.514 s
Press any key to continue.
如何以仅计算用户输入的有效字符的方式调整增量(somFigure ++)?
int main() {
char figure,
reponse;
int valide,
nbCarre = 0,
somFigure = 0,
nbGrRec = 0;
float perimetre,
surface,
rayon,
longueur,
largeur,
cote,
somCarre = 0.0,
plusGrandeSurface = 0.0,
plusPetitPerimetreC = 5000.0;
const float PI = 3.14159,
GRAND_RECTANGLE = 7.8;
do
{
printf("Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): ");
fflush(stdin);
figure = toupper(getchar());
valide = (figure == 'C') || (figure == 'R') || (figure == 'K');
somFigure++;
switch (figure) {
case 'C': printf("Veuillez entrer le rayon: ");
scanf("%f", &rayon);
perimetre = 2 * PI * rayon;
surface = PI * rayon * rayon;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
if (perimetre < plusPetitPerimetreC)
plusPetitPerimetreC = perimetre;
break;
case 'R': printf("Veuillez entrer la longeur et largeur du rectangle: ");
scanf("%f%f", &longueur, &largeur);
perimetre = 2 * (longueur + largeur);
surface = longueur * largeur;
if (longueur > GRAND_RECTANGLE)
nbGrRec++;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
break;
case 'K': printf("Veuillez entrer le cote du carre: ");
scanf("%f", &cote);
perimetre = 4 * cote;
surface = cote * cote;
nbCarre++;
somCarre += cote;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
break;
default: printf("Le caractere '%c' est invalide\n", figure);
} /* Fin du Switch */
if (valide)
printf("Le perimetre est de: %.2f\n", perimetre),
printf("La surface est de: %.2f\n", surface);
printf("\nVoulez-vous continuer ? (o/n) ");
fflush(stdin);
reponse = getchar();
fflush(stdin);
}while(toupper(reponse) == 'O'); /* Fin de la boucle do....while */
printf("\nAu total, on a traite %d figure(s)\n", somFigure);
printf("La surface la plus grande est: %.2f\n", plusGrandeSurface);
if (nbGrRec > 0)
{
printf("Il y a %d rectangle(s) dont la longueur depasse %.2f metres\n", nbGrRec, GRAND_RECTANGLE);
}
else
printf("Il y a aucun rectangle traite\n");
if (plusPetitPerimetreC != 5000.0)
{
printf("Le plus petit perimetre des cercles est: %.2f\n", plusPetitPerimetreC);
}
else
printf("Il y a aucun cercle traite\n");
// Fait un resumer des nombre de carrés traités si l'utilisateur decise de ne plus continuer
if (nbCarre > 0)
{
printf("Le nombre total de carre traitees : %d\n", nbCarre);
printf("Le cote moyen des carres traites est de: %.2f\n", somCarre / nbCarre);
}
else
printf("Il y a aucun carre traite\n");
return 0;
}
答案 0 :(得分:1)
你可以这样做:
if (valide) {
somFigure++;
printf("Le perimetre est de: %.2f\n", perimetre),
printf("La surface est de: %.2f\n", surface);
}
另请注意,没有花括号的原始代码可能无法正常工作。仅当printf
为真时才会执行第一个valide
语句,但在任何情况下都将执行第二个if
语句。总是使用带有{{1}}语句的花括号来避免这样的错误是一种很好的做法。