C语言 指针章节相关例题实现

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';
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值