C程序&x2014;当n为奇数时,对给定n的数字进行编码?
我必须为用户给定的n显示下图(两个三角形截距),其中n是奇数。此链接中的图为: 我已经写了这段代码,但我不知道如何给出n,其中n是奇数。我的代码没有编译;它说:“在第五行,前面的语法错误为”C程序&x2014;当n为奇数时,对给定n的数字进行编码?,c,C,我必须为用户给定的n显示下图(两个三角形截距),其中n是奇数。此链接中的图为: 我已经写了这段代码,但我不知道如何给出n,其中n是奇数。我的代码没有编译;它说:“在第五行,前面的语法错误为” #包括 内部主(空){ int n,i,k,m; 对于(m=0;m首先,“如何检查整数是否为奇数”的答案是:您只需除以2,然后检查余数是0(偶数)还是1(奇数)。在C和大多数相关语言中,这就是模运算符“%”的作用: 但您应该确保在一开始就正确地读取了n,因为在您提交的代码中,n在您实际写入内容之前在第二个“
#包括
内部主(空){
int n,i,k,m;
对于(m=0;m首先,“如何检查整数是否为奇数”的答案是:您只需除以2,然后检查余数是0(偶数)还是1(奇数)。在C和大多数相关语言中,这就是模运算符“%”的作用:
但您应该确保在一开始就正确地读取了n,因为在您提交的代码中,n在您实际写入内容之前在第二个“for”循环中读取。这意味着,n在这一点上包含垃圾。\35; include
#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;
}
无效打印星号(整数n,整数长度){
int i,slen=(长度-n)/2;
对于(i=0;i
好的编程就是用你能找到的最简单的方法来解决问题。这个特定的算法是非常基本的东西,因此你不应该得到比这更复杂的东西:
#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);
}
#包括
#包括
无效打印字符(字符符号,整数n)
{
对于(int i=0;i假设您在实际程序中有适当的缩进。在int main()之后缺少一个开始括号,在结尾缺少一个结束括号。此代码有很多问题。例如main()
后面没有{}
,第5行中的for
循环也缺少{}
@sukritkalla在{}
之后没有{}
是有效的,它将只使用下一个语句作为循环体(这是它后面的两个for
循环)。这是不是故意的,这是另一个问题。@JonathanLeffler谢谢你,Jonathan。我现在可以把绷带从我的眼睛上取下来了。老实说,先生,只要看看这个代码,你就不必担心N是否奇怪了。但是粘贴这个仍然会让你陷入混乱。没问题。顺便说一句,你的编译器错误可能是因为在“main”之后缺少了一个{
(但是,它看起来并不是全部代码?它还缺少返回和main的}
。显然,它有很多逻辑错误,而且不起作用。我会放弃这件事,去星巴克工作。是的,你最好从这件事开始。试着分步骤解决这个问题。比如,首先解决如何用硬编码值打印单行的问题(例如,假设n=5,然后打印第二行)。然后你继续用硬编码的值来解这个洞的形状,然后通过scanf阅读。@WhozCraig整洁的解决方案,但随后讲师让她解释代码,她会在哪一点遇到麻烦;-)先生,你是个f****天才。谢谢。我理解了逻辑,Floris。我学会了。有趣的事实:这不是一个家庭作业。@sdaf尝试循环作为第一个策略可能会很好。仅仅因为这个站点被称为堆栈溢出并不意味着递归应该用于解决所有普通的简单算法。绝对没有理由我不知道为什么需要递归,但它应该给出另一个语句?
if ((n % 2) == 1) {
// The number is odd.
}
#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;
}
#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);
}