c语言 初学者的问题

作者&投稿:生李 (若有异议请与网页底部的电邮联系)

这题我见过,楼主和楼上完全背离出这提的初衷了...

我的这个也运行通过了,可以做到1~20的正确打印.

main()

{

 int i, j, b, c;

 int k = 2;                  

 int n;

 char a[20][20] = {0};

 scanf("%d", &c);

 if(c % 2 == 0)                              

  n = c / 2;

 else

  n = c / 2 + 1;

 for(b = 0; b < n; b++) 

 { for(i = 0; i < n; i++)

  { 

   for(j = 0; j < n; j++)

   {

    if(i == 0 || j == 0)

     a[i][j] = 'T';

    if((i == 1 || j == 1) && a[i][j] == 0)

     a[i][j] = 'J';

   

    if(i > 1 && j > 1)

    {

     if((i == k || j == k ) && a[i][j] == 0)

      a[i][j] = k - 1;

    

    }

   }

  }

 k++;

 }

 for(i = 0; i < n; i++)

  for(j = 0; j < n; j++)

  {

   a[i][(c - 1) - j] = a[i][j];

  }

 for(i = 0; i < c; i++)

  for(j = 0; j < c; j++)

  {

   a[(c - 1) - j][i] = a[j][i];

  }

 for(i = 0; i < c; i++)

 {

  for(j = 0; j < c; j++)

  {

   if(i <= 1 || j <= 1 || i >= (c - 2) ||j >= (c - 2))

    printf("%c",a[i][j]);

   else

    printf("%d", a[i][j]);

  }

   

  printf("
");

 }

注:新建文件 C++ Source File   文件名取为***.c 下编译运行通过.

算法思路: 先给整体左上四分之一部分赋值,然后在根据对称性赋值.



这是我的代码,调试过了,希望对你有帮助。
#include <stdio.h>
int main(){
char s[]="TJ123456789";
int n,i,j,k,l;
while(scanf("%d",&n)!=EOF){
for(i=1;i<=n/2-1;i++){
for(j=0;j<i;j++)
printf("%c",s[j]);
for(k=0;k<n-2*i;k++)
printf("%c",s[j]);
for(j=i-1;j>=0;j--)
printf("%c",s[j]);
printf("\n");
}
if(n%2){
for(j=0;j<n/2;j++)
printf("%c",s[j]);
printf("%c",s[j]);
for(j=n/2-1;j>=0;j--)
printf("%c",s[j]);
printf("\n");
}
for(i=n/2-1;i>=1;i--){
for(j=0;j<i;j++)
printf("%c",s[j]);
for(k=0;k<n-2*i;k++)
printf("%c",s[j]);
for(j=i-1;j>=0;j--)
printf("%c",s[j]);
printf("\n");
}
}
return 0;
}

main()
{int n,i,j;
char a[20][20];
clrscr();
scanf("%d",&n);
for(i=0;i<=n;i++)
{

}
getch();
}

初学者c语言问题~

1、写成 int a=b=0只定义了a一个。
2、不会。c的类型定义时就定下来了,对c赋的值类型与c不同的话会强制转换类型。
3、没错,相加结果是double型,之后赋值给sum时强制类型转换。
4、sum的类型是int型,printf中的格式串用了%f格式符对不上,所以输出值错了。
代码里面,第三个for循环用
1/i是错的,整型的除法结果还是整型的(结果的小数部分自动丢掉了),因此这个除不能得到正确结果。还有后面
sum=a+b+csum是整型,无法保存c的小数部分。

char *str1 这个字符指针并没有初始化,也就是说没有指向某一个你可以使用的确切的空间,这样往里面复制当然有问题
改成这样就可以了:char str1[80];