Comment savoir si le tableau est trié dans l'ordre décroissant dans la programmation en c
J'ai besoin de savoir si le tableau est trié dans l'ordre décroissant ou pas...
J'ai eu la sortie, mais dans le portail, il montre que la Mauvaise Réponse.
C'est mon code.
#include<stdio.h>
int main()
{
int n,a[15],i,k=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]);}
for(i=1;i<=n;i++)
{
if(a[i]<a[i+1])
k++;
}
if(k==0)
printf("yes");
else
printf("no");
return 0;
}
M'aider à comprendre...
- Vous n'avez pas besoin de vérifier tous les nombres dans le tableau, la première fois que vous trouver un nombre qui est plus grand que le numéro précédent, vous avez votre réponse.
- Et vous êtes hors des limites de la lecture des valeurs. Si vous lisez
n
valeur, quelle valeur auraitn + 1
ont? - Comment avez-vous supposer que l'utilisateur aura toujours entrer dans moins de 15 chiffres dans le tableau a[15]? Le portail où vous êtes en train de tester le code à l'aide de test aléatoire cas où la taille de la matrice serait beaucoup plus que 15. Dans ce cas, votre code serait un échec. Vous devez trouver une meilleure façon de le faire.
- s'il vous plaît apprendre la langue de notions de base avant d'essayer d'écrire des programmes en elle. le fait que vous êtes l'indexation de vos tableaux à partir de 1 montre que vous n'avez aucune idée de ce que vous faites.
Vous devez vous connecter pour publier un commentaire.
Les tableaux sont indexés à partir de
0
àsize - 1
. Donc, si vous avezles éléments sont
a[0]
àa[14]
. Mais dans votre code, vous êtes à partir dea[1]
àa[15]
et peut essayez d'accéder àa[15]
, ce qui est dangereux de mémoire et de causer des problèmes.De sorte que vous devez d'abord changer votre boucle for.
Vous devez modifier
Dans la deuxième boucle for, vous devez en boucle jusqu'à ce
i < n - 1
parce que sinon, dansquand
i = n
, vous essayez d'accéder à lan + 1
th élément aveca[i+1]
, ce qui pourrait être en dehors des limites.Vous pouvez également juste à la sortie de la boucle une fois que vous découvrez ce que le tableau n'est pas dans l'ordre décroissant de gagner du temps.
Vous devez également être certain que
a[15]
est suffisant pour stocker toutes les valeurs ( qui est, le nombre de valeurs données en entrée ne doit pas dépasser 15, vérifiez l'énoncé du problème pour assurer ce )break;
à l'intérieur de la parenthèse{ }
sinon il va se casser; boucle lors de la première fois qu'il est à l'extérieur si la condition.vous devriez commencer index de tableau de
0
à la fois pour la boucle.Utiliser cette
dans la deuxième boucle for, vous devez utiliser
par exemple, si vous entrez
n = 5
boucle va travailler pour0
à4
Il est bon d'utiliser
break;
si la valeur dek
augmenteVous êtes ici.:)
Le programme de sortie devrait ressembler à
Comme vous le code de cette boucle
est dangereux parce que l'utilisation de l'indice de
i+1
dans l'expressiona[i+1]
vous pouvez accéder à la mémoire au-delà de la matrice.Aussi, vous avez pour vérifier si la saisie de la valeur de n est de moins de 15 ans qui est la taille du tableau parce que vous utilisez la gamme d'indices
[0, n]
.Et dans la première boucle de l'index à partir de 0. Sinon, le premier élément du tableau ne sera pas initialisé.
!( a[i-1] < a[i] )
plus de plus simplea[i-1]>=a[i]
D'abord, vous définissez un tableau[15]:
et que vous utilisez la variable n de contrôler sa taille
alors vous devez garder n <= 15.
p.s., tableau commence par " 1 " dans Matlab, mais '0' en C.
Je ne peux pas en désaccord sur ce que les autres ont dit à propos de la matrice de l'indexation, le problème en ne sachant pas si a[i+1] existe ou pas, et à l'aide de pause. J'ajouterais bien que lorsque tous les chiffres de ce tableau sont égaux, il fera toujours passer en diminuant dans votre code. Si vous avez un problème vous pouvez ajouter une autre instruction si vérifier si, à tous, il diminue de n'importe où et utiliser une autre variable dire changer pour vérifier si il devient satisfait.
Vérifier avec l'énoncé du problème si elle permet à de tels cas comme dans l'ordre décroissant. Si ça ne va pas avec ce son bien.