我必须为用户给出的n显示下图(两个三角形截距),其中n为奇数。该图位于此链接中:http://i.imgur.com/mQxarLz.jpg
*******
*****
***
*
*
***
*****
*******
我已经编写了这段代码,但我不知道如何给n,其中n是奇数。我的代码没有编译;它说:"在第五行,"之前的语法错误。
#include <stdio.h>
int main (void) {
int n,i,k,m;
for(m=0;m<2;m++)
for (i=1;i<=n;i++){
if(m==0){
for(k = 1; k<=n-i; k++){
printf(" ");
}
}
}
for (k=1;k<2*i;k++){
printf("%s","*");
//printf("%d",i);
}
scanf("%d",&n);
for (k = 1; k<=i;k++)
for (k=1;k<(n-i)*2;k++)
for (i=1;i<=n;i++) {
printf("\n$");
}
return 0;
}
答案 0 :(得分:6)
首先,回答“我如何检查整数是否为奇数”:你只需除以2并检查余数是0(偶数)还是1(奇数)。在C和大多数相关语言中,这是模运算符“%”的作用:
if ((n % 2) == 1) {
// The number is odd.
}
但是您应该确保在开始时正确阅读 n ,因为在您提交的代码中, n 在您的第二个“for”中被读取在你真正写了一些内容之前循环。这意味着, n 在那时包含垃圾。
答案 1 :(得分:2)
良好的编程是以最简单的方式解决问题。这个特殊的算法是非常基本的东西,因此你不应该得到比这更复杂的东西:
#include <stdio.h>
#include <stdbool.h>
void print_chars (char symbol, int n)
{
for(int i=0; i<n; i++)
{
printf("%c", symbol);
}
}
void print_triangle (int base_size, int height, bool pointing_up)
{
int star_count = pointing_up ? 1 : base_size;
for(int row = 0; row < height; row++)
{
int spaces = base_size - star_count;
print_chars (' ', spaces/2);
print_chars ('*', star_count);
print_chars (' ', spaces/2);
printf("%\n");
star_count += pointing_up ? 2 : -2;
}
}
int main (void)
{
print_triangle(7, 4, false);
print_triangle(7, 4, true);
}
请注意,如果三角形的底座与其高度不同步,上面的代码会表现得很奇怪 - 我故意将其留下,随意改进程序。
答案 2 :(得分:0)
#include <stdio.h>
void printAsterisk(int n, int length){
int i, slen = (length - n)/2;
for(i=0;i < slen;++i)
putchar(' ');
for(i=0;i < n;++i)
putchar('*');
putchar('\n');
}
/* non-recursive
void printTriangle(int n, int length){//n isn't required as an argument
int d= -2;
for(; n < length + 1; n += d){
if(n < 0) n += (d *= -1);
printAsterisk(n, length);
}
}
*/
void printTriangle(int n, int length){
if(n < 1) return;
printAsterisk(n, length);
printTriangle(n - 2, length);
printAsterisk(n, length);
}
int main(void){
int n;
do{
printf("input odd number:");
scanf("%d", &n);
}while(n % 2 == 0);
printTriangle(n, n);
return 0;
}