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];