(3)、
#include
#defineSTUD30
#defineCOURSE5
voidPrint(int*pScore,intsum[],floataver[],intm,intn);
voidTotal(int*pScore,intsum[],floataver[],intm,intn);
intmain()
{
inti,j,m,n,score[STUD][COURSE],sum[STUD];
floataver[STUD];
printf("Howmanystudent?
");
scanf("%d",&m);
printf("Howmanycourse?
");
scanf("%d",&n);
printf("Inputscore:
\n");
for(i=0;i{
for(j=0;j{
scanf("%d",&score[i][j]);
}
}
Total(*score,sum,aver,m,n);
Print(*score,sum,aver,m,n);
return0;
}
voidTotal(int*pScore,intsum[],floataver[],intm,intn)
{
inti,j;
for(i=0;i{
sum[i]=0;
for(j=0;j{
sum[i]=sum[i]+pScore[i*n+j];
}
aver[i]=(float)sum[i]/n;
}
}
voidPrint(int*pScore,intsum[],floataver[],intm,intn)
{
inti,j;
printf("Result:
\n");
for(i=0;i{
for(j=0;j{
printf("%4d\t",pScore[i*n+j]);
}
printf("%5d\t%6.1f\n",sum[i],aver[i]);
}
}
分析:
在创建二维数组时,就分配好空间行30列5,当进行列指针操作时,实际输入的人数会小于5,但偏移量仍然是I*COURSE+j,而不是i*n+j。
改后的结果:
11-3
#include
voidmain()
{
int*p[12]={"January","february","March","April","May","June","July",
"August","September","October","November","December"};
intm;
do{
printf("请输入月份值:
");
scanf("%d",&m);
if(m<1||m>12)
printf("Illegelmonth!
");
}while(m<1||m>12);
printf("%d月---%s\n",m,p[m-1]);
}
结果:
11-4
#include
#defineN10
voidSwap(int*p1,int*p2);
voidTranspose2(int*a,intn);
voidTranspose(inta[][N],intn);
voidTranspose1(int(*a)[N],intn);
voidmain()
{
intn;
inti;
intj;
inta[N][N];
intm;
do{
printf("输入阶数:
");
scanf("%d",&n);
}while(n>10);
for(i=0;i{
printf("请输入第%d行:
\n",i+1);
for(j=0;j{
printf("输入第%d行第%d列:
",(i+1),(j+1));
scanf("%d",&a[i][j]);
}
}
printf("原矩阵是:
\n");
for(i=0;i{
printf("\n");
for(j=0;j{
printf("%d\t",a[i][j]);
}
}
printf("\n1.引用数组下表法\n2.行指针法\n3.列指针法\n");
printf("请选择:
");
scanf("%d",&m);
switch(m)
{
case1:
Transpose(a,n);
break;
case2:
Transpose1(a,n);
break;
case3:
Transpose2(*a,n);
break;
}
printf("转置矩阵是:
\n");
for(i=0;i{
printf("\n");
for(j=0;j{
printf("%d\t",a[i][j]);
}
}
printf("\n");
}
voidSwap(int*p1,int*p2)
{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
voidTranspose(inta[][N],intn)
{
inti,j;
for(i=0;i{
for(j=i;j{
Swap(&a[i][j],&a[j][i]);
}
}
}
voidTranspose1(int(*a)[N],intn)
{
inti,j;
for(i=0;i{
for(j=i;j{
Swap(*(a+i)+j,*(a+j)+i);
}
}
}
voidTranspose2(int*a,intn)
{
inti,j;
for(i=0;i{
for(j=i;j{
Swap(a+i*n+j,a+j*n+i);
}
}
}
结果:
11-5
#include
#defineN10
#defineM10
voidSwap(int*p1,int*p2);
voidTranspose2(int*a,int*at,intm,intn);
voidTranspose(inta[][N],intat[][M],intm,intn);
voidTranspose1(int(*a)[N],intm,intn);
voidmain()
{
intn;
inti;
intj;
inta[M][N];
intm;
intat[N][M];
intp;
do{
printf("输入行数:
");
scanf("%d",&m);
printf("输入列数:
");
scanf("%d",&n);
}while(n>10||m>10);
for(i=0;i{
printf("请输入第%d行:
\n",i+1);
for(j=0;j{
printf("输入第%d行第%d列:
",(i+1),(j+1));
scanf("%d",&a[i][j]);
}
}
printf("原矩阵是:
\n");
for(i=0;i{
printf("\n");
for(j=0;j{
printf("%d\t",a[i][j]);
}
}
printf("\n1.引用数组下表法\n2.行指针法\n3.列指针法\n");
printf("请选择:
");
scanf("%d",&p);
switch(p)
{
case1:
Transpose(a,at,m,n);
break;
case2:
Transpose1(a,at,m,n);
break;
case3:
Transpose2(*a,*at,m,n);
break;
}
printf("转置矩阵是:
\n");
for(i=0;i{
printf("\n");
for(j=0;j{
printf("%d\t",at[i][j]);
}
}
printf("\n");
}
voidSwap(int*p1,int*p2)
{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
voidTranspose(inta[][N],intat[][M],intm,intn)
{
inti,j;
for(i=0;i{
for(j=0;j{
Swap(&a[i][j],&at[j][i]);
}
}
}
voidTranspose1(int(*a)[N],int(*at)[N],intm,intn)
{
inti,j;
for(i=0;i{
for(j=0;j{
Swap(*(a+i)+j,*(at+j)+i);
}
}
}
voidTranspose2(int*a,int*at,intm,intn)
{
inti,j;
for(i=0;i{
for(j=0;j{
Swap(a+i*N+j,at+j*M+i);
}
}
}
结果:
11-6
#include
#include
#defineN10
#defineM10
voidInputArray(int*p,intm,intn);
intFindMax(int*p,intm,intn,int*pRow,int*pCol);
voidmain()
{
intm;
intn;
intRow;
intCol;
inta;
int*p=NULL;
printf("请输入行数:
");
scanf("%d",&m);
printf("请输入列数:
");
scanf("%d",&n);
p=(int*)calloc(m*n,sizeof(int));
if(p==NULL)
{
printf("没有足够的空间\n");
exit
(1);
}
InputArray(p,m,n);
a=FindMax(p,m,n,&Row,&Col);
printf("最大值为:
%d,下标:
%d行%d列\n",a,(Row+1),(Col+1));
free(p);
}
voidInputArray(int*p,intm,intn)
{
inti;
intj;
for(i=0;i{
for(j=0;j{
printf("请输入第%d行第%d列:
",(i+1),(j+1));
scanf("%d",p+i*n+j);
}
}
}
intFindMax(int*p,intm,intn,int*pRow,int*pCol)
{
inti,j;
int*a=p;
for(i=0;i{
for(j=0;j{
if(*p<*(a+i*n+j))
{
p=a+i*n+j;
*pRow=i;
*pCol=j;
}
}
}
return*p;
}
结果:
12-1
采用结构体定义
typedefstructdate
{
intyear;
intmonth;
intday;
}Date;
typedefstructjob
{
charschool[10];
charzhicheng[10];
charzhiwu[10];
}Job;
structstudent
{
charname[10];
charsex;
Datebirthday;
Jobwork;
}
12-2
#include
typedefstructtime
{
inthour;
intminute;
intsecond;
}Time;
voidupdate(Time*p)
{
p->second++;
if(p->second==60)
{
p->second=0;
p->minute++;
}
if(p->minute==60)
{
p->minute=0;
p->hour++;
}
if(p->hour==24)
{
p->hour=0;
}
}
voiddelay()
{
intt;
for(t=0;t<100000000;t++);
}
voiddispaly(Time*p)
{
printf("%d:
%d:
%d\n",p->hour,p->minute,p->second);
}
intmain()
{
inti;
Timet;
t.second=0;
t.hour=0;
t.minute=0;
for(i=0;i<1000000;i++)
{
update(&t);
dispaly(&t);
delay();
}
return0;
}
结果:
12-3
#include
typedefstructtime
{
inthour;
intminute;
intsecond;
}Time;
voidupdate(Time*p)
{
p->second++;
p->minute=p->second/60;
p->second%=60;
p->hour=p->minute/60;
}
voiddelay()
{
intt;
for(t=0;t<100000000;t++);
}
voiddispaly(Time*p)
{
printf("%d:
%d:
%d\n",p->hour,p->minute,p->second);
}
intmain()
{
inti;
Timet;
t.second=0;
t.hour=0;
t.minute=0;
for(i=0;i<1000000;i++)
{
update(&t);
dispaly(&t);
delay();
}
return0;
}
结果:
12-4
#include
#include
#include
typedefstructcandidate
{
charname[10];
intnum;
}Xuan;
voidmain()
{
Xuanpeople[3]={{"zhang",0},{"li",0},{"wang",0}};
chartemp[10];
inti;
intj;
intfp=0;
intflag=0;
for(i=0;i<10;i++)
{
flag=0;
printf("请投票:
");
gets(temp);
for(j=0;j<3;j++)
{
if(strcmp(temp,people[j].name)==0)
{
people[j].num++;
flag=1;
}
}
if(flag==0)
fp++;
}
printf("废票:
%d张\n",fp);
for(i=0;i<3;i++)
{
printf("%-10s得票:
%d\n",people[i].name,people[i].num);
}
printf("\n");
}
结果:
12-5
#include
typedefstructcard
{
charcolor[13][10];
charsuit[10];
}Card;
voidmain()
{
inti;
intj;
CardPai[4]={
{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Spades"},
{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Hearts"},
{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Clubs"},
{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Diamonds"}
};
for(i=0;i<4;i++)
{
for(j=0;j<13;j++)
{
printf("%s%s\t",Pai[i].suit,Pai[i].color[j]);
}
printf("\n");
}
}
结果:
13-1
#include
voidmain()
{
FILE*fp;
charstr[20];
inti;
printf("type");
gets(str);
fp=fopen(str,"r");
if(fp==NULL)
{
printf("文件打开有误\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
{
printf("%5d",fgetc(fp));
}
printf("\n");
}
结果:
13-2
#include
typedefstructdade
{
intyear;
intmonth;
intday;
}DATE;
typed