0726指针

        今天的话主要学习了指针数组,今天的内容说难也难,说不难也不难,主要靠理解,循序渐进,总的来说接受的还可以,就是有很多小问题理解不是很到位,也正是这些小问题才需要更加深入的了解。

一维数组

实参是数组名,形参是指针变量,例如,一个一维数组,求它的平均值。

         首先定义一个以为数组,初始化5个值,然后调用子函数,子函数里面,首先定义一个指针数组,定义一个形参,然后求平均值。float *b就代表指针数组b,*b就相当于数组中首元素的下标,然后一直循环。

二维数组求和

         首先定义一个3x3的一个数组,并且赋予初值,和一维数组一样的道理,float (*b)[3],定义的就是二维指针数组,*b就相当于首元素的地址,而最重要的就是 avg += *(*(b+i)+j),这一步主要就是通过元素下标来确定元素的值,*(b+i)指向的是行坐标,*(*(b+i)+j)指向的是行和列的坐标。

指针函数

        有static和没有static返回的值是不一样的,因为函数调用分配的空间是在栈,属于动态变量,函数执行之后就会释放,得到的值不是很准确,而静态变量就会一直保存。

函数指针

 

 习题

 

3.计算器程序修改,主调函数使用函数名做为实参,被调函数形参使用函数指针类型。

#include <stdio.h>
int add(int a, int b);
int jian(int a, int b);
int cheng(int a, int b);
int chu(int a, int b);
int process(int (*fun)(int x,int y),int x,int y);
int main(){
	int num_01,num_02;
	int sum=0;
	char ch;
	printf("请输入两个数:\n");
	scanf("%d %d",&num_01,&num_02);
	printf("请输入符号+ - * /\n ");
	getchar(); 
	ch =getchar();
	printf("%c\n",ch);
	if (ch=='+'){
		sum=process(add,num_01,num_02);
		printf("%d",sum);
	}
	if (ch=='-'){
		sum=process(jian,num_01,num_02);
		printf("%d",sum);
	}
	if (ch=='*'){
		sum=process(cheng,num_01,num_02);
		printf("%d",sum);
	}
	if (ch=='/'){
		sum=process(chu,num_01,num_02);
		printf("%d",sum);
	}
	return;
}

int process(int (*fun)(int x,int y),int x,int y){
		int ret;
		ret=fun(x,y);
		return ret;
}
int add(int a, int b){
	int c;
	c=a+b;	
	return c;
}

int jian(int a, int b){
	int c;
	c=a-b;	
	return c;
}

int cheng(int a, int b){
	int c;
	c=a*b;	
	return c;
}

int chu(int a, int b){
	int c;
	c=a/b;	
	return c;
}

2.编写一个程序,声明一个3*5的数组并初始化,具体数值可随意,程序打印出

数值,然后数值翻一番,接着再次打印出新值,编写-一个函数来显示数组内容,

在编写另一个函数执行翻倍功能,数组名和数组行数作为参数由程序传递给函数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int change(int arr[][5],int a,int b);
int main(){
	int i,j;
	int array[3][5];
	srand((unsigned)time(NULL));
	for(i=0;i<3;i++){
		for(j=0;j<5;j++){
			array[i][j] = rand()%10+1;
			printf("%d  ",array[i][j]);
		}
		printf("\n");
	}	
	change(array,3,5);
	return 0;
}
int change(int (*arr)[5],int a,int b){
	int i,j;
		for(i=0;i<a;i++){
			for(j=0;j<b;j++){
			printf("%d  ",2 * *(*(arr+i)+j));
		}
		printf("\n");
	}	
	
}

 

1. 编写一个函数fun,函数的功能是分别求出数组中所有奇数之和,以及所有偶数之和,形参N给了数组中数据的个数;利用指针变量odd返回奇数之和,利用指针变量even返回偶数之和;

主函数打印结果

提示:fun(int *arr, int n, int *odd, int *even、

这道题没有按照题意去做

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fun(int *arr, int n);
int main(){
	int array[100];
	int num;
	printf("请输入一个100以内的数来确定数组长度:\n");
	scanf("%d",&num);
	fun(array,num);
	
	return 0;
}
int fun(int *arr, int n){
	int i; 
	int sum=0,sum_01=0;
	srand((unsigned)time(NULL));
	for(i=0;i<n;i++){
		arr[i]= rand()%30+1;
		printf("%d  ",arr[i]);	
		if(arr[i]%2==0)
		sum += arr[i];
		else
		sum_01 += arr[i];
		}	
		printf("偶数和%d",sum);
		printf("奇数和%d",sum_01);
	

	
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值