1.用指针变量输出二维数组元素的值。二维数组的可以写死,也可以动态输入。
#include<stdio.h>
int main()
{
int n,m,i,j;
printf("输入行数:");
scanf("%d",&n);
printf("输入列数:");
scanf("%d",&m);
int a[n][m];
printf("输入%d个数据:",n*m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
int *p=a[0];
printf("输出%d*%d二维数组:\n",n,m);
for(i=0;i<n*m;i++)
{
printf("%4d",p[i]);
if((i+1)%m==0) printf("\n");
}
return 0;
}
2.用指向一维数组的指针变量输出二维数组中的各元素值。二维数组的可以写死,也可以动态输入。
#include<stdio.h>
int main()
{
int n,m,i,j;
printf("输入行数:");
scanf("%d",&n);
printf("输入列数:");
scanf("%d",&m);
int a[n][m];
printf("输入%d个数据:",n*m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
int (*p)[m];
p=a;
printf("输出%d*%d二维数组:\n",n,m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%4d",*(*(p+i)+j));
}
printf("\n");
}
return 0;
}
3. 有一个班,3个学生,各学4门课,计算总平均分数以及查找第n个学生的成绩。 用指向数组的指针(float(*p)[4])作函数参数。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。
#include <stdio.h>
int main()
{
void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,88,59},{80,87,90,81},{90,93,91,84}};
average(*score,12);
int x;
printf("输入查找序号:");
scanf("%d",&x);
search(score,x-1);
return 0;
}
void average(float *p,int n)
{
float *k;
float sum=0,aver;
k=p+n-1;
for( ;p<=k;p++)
sum=sum+(*p);
aver=sum/n;
printf("总平均成绩为:%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{
int i;
printf("第%d个学生的成绩:\n",n+1);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
4.在第3题的基础上查找有一门以上课程不及格的学生,输出他们的全部课程的成绩。
#include <stdio.h>
int main()
{
void search(float (*p)[4],int n);
float score[3][4]={{65,67,88,59},{80,87,44,81},{90,93,91,84}};
printf("输出不及格学生的成绩:\n");
search(score,3);
return 0;
}
void search(float (*p)[4],int n)
{
int i,j,flag;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{
printf("第%d个学生的全部成绩:",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
5.将字符串a复制为字符串b,然后输出字符串b。用字符指针变量来处理问题。
#include <stdio.h>
int main()
{
char a[]="I love China.",b[20];
int i;
for(i=0;*(a+i)!='\0';i++)
*(b+i)=*(a+i);
*(b+i)='\0';
printf("字符串a为:%s\n",a);
printf("字符串b为:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
return 0;
}
6.第5题用函数调用实现字符串的复制。函数的形参和实参用字符指针变量。
#include <stdio.h>
int main()
{
void copy_string(char *from, char *to);
char *a="I love China.";
char b[]="I am a Chinese.";
char *p=b;
printf("a=%s\nb=%s\n",a,b);
printf("复制后的字符串b:\n");
copy_string(a,p);
printf("a=%s\nb=%s\n",a,b);
return 0;
}
void copy_string(char *from, char *to)
{
for( ;*from!='\0';from++,to++)
{
*to=*from;
}
*to='\0';
}