2009-03-07 10 views
1

Öyleyse, çıktının, yıldızların bir pırlantası gibi görünmesini sağladım, her sıra ortadaki 9 yıldıza kadar 2 yıldız kadar artar ... ve sonra satırlar azalır. fonksiyon ana olmak zorunda: Ödevlerimin karşı-kontrollü tekrar ve argümanlarla ilgili olarak biraz yardım alabilir miyim?

int main (void){ 
    int i;  
    i = 0; 
    while (i < 5){ 
     printline (4-i, i*2+1); 
     i = i + 1; 
    } 
    i = 3; 
    while (i >= 0) { 
     printline (4-i, i*2+1); 
     i = i - 1; 
    } 
    return 0; 
} 

Şimdi şekil denir, her zaman tek bir satır yazdırmak için fonksiyon Printline tanımlamak gerekiyor. 2 argüman, boşluk sayısı ve satırda basılması gereken yıldız sayısı alır. Uygun sayıda alan basmak ve uygun sayıda yıldız yazdırabilmek için sayaç kontrollü tekrarlamayı kullanın.

char print_line (int spaces, int stars){ 
    for (int i = 4; i>=spaces; i--){ 
     printf(" "); 
    } 
    for (int i = 1; i<=stars; i+=2){ 
     printf("*"); 
    } 
    printf("\n"); 
} 

Woohoo! İşim bitmek üzere! Çıktılar kinda sağda, bir yıldız ile 4 boşluklu bir çizgi yerine, 3 yıldız ile 3 boşluklu bir çizgi, ve hiçbir yere ve 9 yıldıza kadar, (ve sonra tersine dönüyor) ... Bir hat alıyorum bir yıldız, bir alan ve 2 yıldızlı bir çizgi, iki boşluklu bir çizgi üç yıldız, vs, en fazla 4 boşluk beş yıldız (ve sonra tersine çevirir) ...
Baskı hattının farklı olmasının nedeni, yazım sorunlarım var çünkü bunu yazmak için çalıştı zaman bu bazen ben ... italik alma konusunda

cevap

5

Bazı ipuçları tuttu:

  • İşleviniz yalnızca yazdırma karakterler, belirli bir döndürme türü için orada (hiçbir şey dönmez gerek bu)
  • yeri sayısının ve baskı yıldız sayısı muhtemelen (
  • Sen
  • bir "yeni satır" yazdırabilirsiniz Sen printf("*"); kullanarak tek bir yıldız yazdırabilirsiniz
  • printf(" "); kullanarak tek bir boşluk yazdırabilirsiniz tamsayılar hangi printf("\n");
  • 'u kullanarak int i=0; for(i=0; i<n; i++) { printf("X"); } derken X harfini n kez yazdıracaksınız (bu noktada döngüler öğrenmemiş olabilirsiniz; değil eğer int i=0; while(i<n) { printf("X"); i++; } derseniz, ayrıca mektup X Eğer a ve b dışındaki parametre adları kullanırsanız daha mutlu olacaktır n kez
  • toplam yazdırır sonraki ipucu)
  • kullanın. parametresinin değerini temsil eden bir isim düşünmeye çalışın. Düzenlemenizle için

Yanıt:

  • iki ayrı döngüler kullanmak isteyeceklerdir; boşluk basar biri ve for döngüler her zaman tek başlatıcısı, bir onay koşulu ve bir adım ile inşa edilir
  • /artırmaz yıldızlı
  • yazdırır sonra bir
  • Sen stars veya spaces değer atamak gerekmez; printline işlevini çağıran kişi tarafından size verilen numaralardır (ör.onlar zaten bir değeri) ikinci düzenlemeye

Yanıtı vardır: web for döngüler içinde

  • , muhtemelen parametre içinde geçmekten daha diğer (örn for(i=0; i<spaces; i++) bir indeks değişkeni kullanmak istiyorum, Burada i sadece görevinizin üst kısmında bildirdiğiniz bir sayaçtır, atamadaki kodda olduğu gibi) Mevcut yapınızda, aradığınız fonksiyonu ne zaman çağırırsa belirlesin 4 boşluk basmayı deneyecektir.
  • Yalnızca tüm alanlarda ve yıldızlarla bittikten sonra çıkışa kez yeni satır, ihtiyaç (yani for döngü içine ait olmayan yeni satır çıkış olanağı)
  • Muhtemelen sadece sayacını artırmak gerekir Bir yıldız çıktı her zaman 1 tarafından.
  • Atama, printline adlı bir işlev yapmak için söylerse, buna print_line; bu aynı şey değil (ne PrintLine olan) üçüncü düzenlemeye

Yanıt:

  • Muhtemelen sadece 1 her defasında sayacını artırmak gerekiyor" unutma sen çıkışı star."
  • (bir char dönen edilmemelidir ie)
  • "o (belirli bir döndürme türü bunun için var) bir şey döndürmez, İşleviniz sadece karakterleri yazdırmak gerek" unutma seni kod istiyorum düşünüyorum Yıldızları basan kod gibi daha fazla görünecek boşluklar yazdırılıyor
+0

Derleyici neden baskı hattını işlemek için çok fazla argüman olduğunu söylüyor? – Kaity

+0

Eğer "printline" denilen fonksiyona çok fazla parametre aktarıyorsanız bunu söyleyecektir. Örneğin, yukarıda verdiğiniz örnekte, yazdırma hattının iki resmi parametresi vardır. Eğer bunu "printline (1, 2, 3)" olarak adlandırdıysanız, çok fazla parametre ile çağırıyor olsaydınız –

+0

Geçtiğiniz parametrelerin sayısı, resmi parametrelerin sayısına eşittir –

İlgili konular