1 用制表符\t实现对齐。
制表符\t输出的时候,会移动输出光标,实现对齐效果。所以可以在输出的对应位置,增加\t来实现对齐。
要求每行相同列输出占用空间差别不可以太大。
C语言使用printf输出时,每个控制字符均可以写成
%nC的形式,如%10d, %12f, %8c, %16s等等。
其效果就是输出对应变量时占用n个字符的宽度。不足部分左侧补空格。通过这种方式,可以实现右对齐效果。
如果要实现做对齐效果,只需要在宽度字符前加-符号即可,如%-8s,就是把字符串输出,占8位宽度,右侧补空格。
里面有不少语法错误 我给你改了一下 EOF用‘$’代替了,发现输入了'$'就算停止输入#include<stdio.h>
#define in 1
#define out 0
main()
{
char c,state
int n1,nw,nc
state=out
n1=nw=nc=0
while((c=getchar())!='$')
{
++nc
if(c=='\n')
++n1
if(c==' '||c=='\n'||c=='\t')
{
state=out
}
else if(state==out)
{
state=in
++nw
}
}
printf("%d\n%d\n%d\n",n1,nw,nc)
}
程序中变量名只要符合相关的要求(标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名) 就可以任意去取,但通常情况下取有意义的名字 比如,此程序中nc的意思为number of code , nw的意思是number of word
in 和out 是宏定义,查看教科书中相关内容即可
(1) 输入2维数组的行数,列数,动态分配数组。或者你声明一个足够大的数组,不做动态分配(2)输入 数据,按一行一行的顺序。
(3)假定 最大最小的初值 等于 a[0][0], 然后遍历数组,谁大于max 就变更为max新值,谁小于min 就变更为min新值,
(4)如果 NR==NC, 是方阵,可以用 a[j][i]=a[i][j]的方法转置。否则要开一个 NC*NR的矩阵做转置。
(5)求主副对角线之和,若 n 为奇数,求总和时,注意要扣除 重复点(交叉点)元素值。
#include <stdio.h>
main(){
int **a // a[NR][NC] -- *a[NR] -- a[j][i]
int i,j,NR,NC,n
int max,min,sum=0,t
printf("input array N_row N_col:\n")
scanf("%d %d",&NR,&NC)
a = (int **) malloc(sizeof(int *) * NR)
for (j=0j<NRj++) a[j] = (int *) malloc(sizeof(int) * NC)
printf("================\n")
printf("input %d * %d array data:\n",NR,NC)
for (j=0j<NRj++) for (i=0i<NCi++) scanf("%d",&a[j][i])
printf("================\n")
max=min=a[0][0]
for (j=0j<NRj++) for (i=0i<NCi++){
if (a[j][i]>max) max=a[j][i]
if (a[j][i]<min) min=a[j][i]
}
printf("max=%dmin=%d\n",max,min)
printf("================\n")
printf("befre:\n")
for (j=0j<NRj++) {
for (i=0i<NCi++) printf("%d ",a[j][i])printf("\n")
}
printf("after:\n")
for (i=0i<NCi++){
for (j=0j<NRj++) printf("%d ",a[j][i])printf("\n")
}
if (NR==NC){
n = NR
printf("================\n")
for (j=0j<nj++)
for (i=0i<ji++){t=a[j][i]a[j][i]=a[i][j]a[i][j]=t}
printf("after:\n")
for (j=0j<nj++) {
for (i=0i<ni++) printf("%d ",a[j][i])printf("\n")
}
printf("================\n")
sum=0
for (j=0j<nj++)for (i=0i<ni++) if (i==j) sum=sum+a[j][i]
for (j=0j<nj++)for (i=0i<ni++) if (i==n-j-1) sum=sum+a[j][i]
if (n%2==1)sum=sum-a[n/2][n/2]
printf("2 dia sum=%d\n",sum)
}
return 0
}