实验10指针做函数参数编程训练
实验10指针做函数参数编程训练

实验10指针做函数参数编程训练实验目的:1.掌握指针的定义及使用;2.体会使用指针的作用;3.掌握指针做函数参数的作用;4.掌握指针做函数参数的基本步骤;实验题目:1.输入某年某月某日,计算并输出它是这一年的第几天。
/*函数功能:对给定的某年某月某日,计算它是这一年第几天函数参数:整型变量year,month,day,分别代表年,月,日函数返回值:这一年的第几天*/int DayofYear(int year,int month,int day);2.输入某一年的第几天,计算并输出它是这一年的第几月第几日。
/*函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日函数入口参数:整型变量year,存储年整型变量yearDay,存储这一年的第几天函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量整型指针pDay,指向存储第几日的整型变量函数返回值:无*/void MonthDay(int year,int yearDay,int *pMonth,int *pDay);3.输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。
1.year/month/day->yearDay2.yearDay->year/month/day3.ExitPlease enter your choice:参考程序及注释:#include <stdio.h>#include <stdlib.h>int DayofYear(int year, int month, int day);void MonthDay(int year, int yearDay, int *pMonth, int *pDay);void Menu(void);int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}};int main(){int year, month, day, yearDay;char c;Menu(); /* 调用Menu函数显示一个固定式菜单 */c = getchar(); /* 输入选择 */switch (c) /* 判断选择的是何种操作 */{case '1':printf("Please enter year, month, day:");scanf("%d,%d,%d", &year, &month, &day);yearDay = DayofYear(year, month, day);printf("yearDay = %d\n", yearDay);break;case '2':printf("Please enter year, yearDay:");scanf("%d,%d", &year, &yearDay);MonthDay(year, yearDay, &month, &day);printf("month = %d, day = %d\n", month, day);break;case '3':exit(0); /* 退出程序的运行 */default:printf("Input error!");}return 0;}/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */int DayofYear(int year, int month, int day){int i, leap;/* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;否则leap值为0,用第0行dayTab[0][i]计算 */leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);for (i=1; i<month; i++){day = day + dayTab[leap][i];}return day; /* 返回计算出的day的值 */}/* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */ void MonthDay(int year, int yearDay, int *pMonth, int *pDay){int i, leap;leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);for (i=1; yearDay>dayTab[leap][i]; i++){yearDay = yearDay - dayTab[leap][i];}*pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量 */ *pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */}/* 函数功能:显示菜单 */void Menu(void){printf("1. year/month/day -> yearDay\n");printf("2. yearDay -> year/month/day\n");printf("3. Exit\n");printf("Please enter your choice:");}实验11 字符串与指针编程练习实验目的:1.熟悉字符串的输入及输出2.掌握字符指针做函数参数的方法3.掌握数组做函数参数的方法实验题目:1.编写一函数实现字符串的反序输出,函数原型如下:void invert(char *s);即将字符串s反序。
指针编程练习题

指针编程练习题指针是一种特殊的数据类型,在C语言中有着重要的作用。
通过指针,我们可以直接访问和操作内存中的数据。
为了熟悉和掌握指针的使用,下面将给出一些指针编程练习题供大家参考。
1. 交换两个变量的值请编写一个程序,使用指针来交换两个整数变量的值。
要求在程序中定义两个整数变量a和b,通过指针交换它们的值,并打印交换后的结果。
示例输入:a = 10,b = 20示例输出:交换前:a = 10, b = 20交换后:a = 20, b = 102. 求数组元素的和请编写一个程序,使用指针来计算一个整型数组中所有元素的和。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,计算它们的和,并打印结果。
示例输入:array = {1, 2, 3, 4, 5}示例输出:数组元素的和为:153. 查找数组中的最大值和最小值请编写一个程序,使用指针来查找一个整型数组中的最大值和最小值。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,找到数组中的最大值和最小值,并打印结果。
示例输入:array = {7, 4, 9, 2, 5}示例输出:最大值为:9最小值为:24. 字符串长度计算请编写一个程序,使用指针来计算一个字符串的长度。
要求在程序中定义一个字符数组string,并使用指针访问字符数组中的元素,计算字符串的长度,并打印结果。
示例输入:string = "Hello, World!"示例输出:字符串长度为:135. 动态内存分配请编写一个程序,使用指针来动态分配内存空间,并进行数据的读写操作。
要求在程序中使用malloc函数动态分配内存空间,读取用户输入的整数值并存储到动态分配的内存中,然后使用指针访问该内存中的数据,并打印结果。
示例输入:请输入一个整数: 10示例输出:读取到的整数为: 10以上是几个指针编程练习题的示例,通过练习这些题目,可以提高对指针的理解和使用技巧。
实验十 指 针

} /*注意:swap( )能否写成下面的形式呢? void swap(int *p1,int *p2) {int *p; *p=*p1; *p1=*p2; *p2=*p; } */ /*swap( )能否写成下面的形式呢? void swap(int x,int y) {int t; t=x;x=y;y=t; } */ 例4: 体会指针变量操纵数组元素 main() { int a[6]={1,2,3,4,5,6} int *p; p=a; *(p+3)=*(p+3)+10; printf(“%d,%d\n”,*p,*(p+3)); } 例5: 体会数组作为函数形参的调用机理将数组a中的n个数逆序存放。 void invert(int x[],int n) /* 形式参数采用数组名 */ {int i,temp; for(i=0;i<=(n-1)/2;i++) {temp=x[i];x[i]=x[n-1-i];x[n-1-i]=temp; } } main( ) { int a[10]={1,3,5,7,9,11,13,15,17,19}, i; for(i=0;i<10;i++) printf(“%5d”,a[i]); invert(a,10); /* 实际参数为数组名 */ for(i=0;i<10;i++)
function[2]=fun3; function[3]=fun4; for(I=0;I<4;i++) printf(“fun no.%d->%d\n”,i+1,execute(a,b,function[i])); } execute(int x,int y,int *fun()) { return(*fun)(x,y);} fun1(int x, int y) { return(x+y);} fun2(int x,int y) { return(x-y);} fun3(int x,int y) { return(x*y);} fun4(int x,int y) { return(x/y);} 3、程序 main(int argc,char *argv[]) { while(argc-->1) printf(“%s\n”,*++argv); 的文件名为echo.h,编译后可执行程序名为echo.exe(用DOS时),运行 时输入下面命令行:echo BASIC FORTRAN COBOL PASCL 分析输出结果。
实验十 指针(1).

实验十指针实验目的1.熟练掌握指针的定义和使用2.掌握指针数组处理字符串3.熟练掌握指针作为函数参数,包括数组名作为函数的参数4.熟练使用字符串处理函数strcmp、strcpy、strlen、strcat。
实验内容1.调试,将5个字符串从小到大排序后输出。
源程序(有错误的程序)#include#includevoid fsort(char cname[][6],int n{ int k,j;char tmp[6];for(k=1;k 调试时设置断点 */for(j=0;jif(cname[j]>cname[j+1]{ t=cname[j];cname[j]=cname[j+1];cname[j+1]=t;}}void main({ int i;char cname[5][6]={“wang”,”li”,”zhang”,”jin”,”xian”}; fsort(cname,5;for(i=0;i<5;i++printf(“%s \n”,cname[i];} /*调试时设置断点*/运行结果(改正后程序的运行结果)JinLiWangXianZhang#include "stdafx.h"#include#includevoid fsort(char cname[][6],int n{ int k,j;char t[6];for(k=1;kfor(j=0;jif(*cname[j]>*cname[j+1]{strcpy(t,cname[j];strcpy(cname[j],cname[j+1];strcpy(cname[j+1],t;}}void main({ int i;char cname[5][6]={"wang","li","zhang","jin","xian"};fsort(cname,5;for(i=0;i<5;i++printf("%s\n",cname[i];}2.编程,输入n(3 个数,输出这 n 个数中的最小值及其下标。
指针数组做函数参数

指针数组做函数参数
指针数组,即一个数组中存放了多个指针,每个指针指向不同的变量或数组。
在函数参数中,指针数组可以传递多个指针,方便地进行一些操作。
例如,我们可以定义一个int类型的指针数组,用于存储多个整数:
int *arr[5];
其中,arr是一个指针数组,包含5个指针,每个指针指向一个int类型的变量。
在函数参数中使用指针数组,可以通过以下几种方式:
1.使用指针数组作为函数参数
void func(int *arr[]) {
// do something
}
2.使用指针数组的首地址作为函数参数
void func(int **arr) {
// do something
}
3.使用数组名作为函数参数
void func(int arr[][5]) {
// do something
}
这些方式在使用时需要注意指针的类型和指针数组的长度。
在函数中可以通过指针数组来访问数组中的元素,从而进行一些操作。
指针数组作为函数参数的优点在于可以方便地传递多个指针,同时也可以动态地修改数组中的元素。
但同时也需要注意指针的类型和指针数组的长度,以确保程序的正确性。
总之,指针数组作为函数参数具有很大的灵活性和实用性,在C/C++程序设计中应用广泛。
使用指针作为函数参数,写一交换两个数的函数的算法

使用指针作为函数参数,写一交换两个数的函数的算法在C语言中,我们可以使用指针作为函数参数来实现一些特定的功能,比如交换两个数的值。
指针是一个非常重要的概念,它可以让我们在不同函数之间共享数据。
下面,我们来详细介绍如何利用指针参数来实现交换两个数的值的函数。
首先,我们需要明确一个概念:指针是一个变量,它存储的是内存地址。
在函数中,我们可以通过传递指针来实现对变量的直接修改。
因此,我们可以定义一个函数,接受两个指针参数,然后交换这两个指针所指向的变量的值。
下面是一个示范交换两个数的函数的代码:void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}//其中,a和b是指向int类型变量的指针,函数内部使用指针所指向的变量进行操作,而不是直接操作指针本身。
我们看一下这个函数的实现方式:1. 首先,我们在参数列表中声明了两个指向int类型变量的指针a和b。
2. 在函数内部,我们使用一个中间变量temp来存储a所指向的变量的值。
3. 然后,我们将b所指向的变量的值赋给a所指向的变量。
4. 最后,我们使用temp将原来a所指向的变量的值赋给b所指向的变量。
通过这种方式,我们就可以在使用函数的时候交换两个数的值。
例如,如果我们想要交换两个变量x和y的值,我们可以使用以下代码:int x = 10;int y = 20;swap(&x, &y);在调用函数swap的时候,我们将变量x和y的地址传递给函数,函数内部可以通过这些地址来修改x和y的值,从而实现交换的功能。
以上就是通过指针作为函数参数实现交换两个数的函数的详细介绍。
通过这种方式,我们可以很方便地在不同的函数之间共享数据,同时也能够提高程序的效率。
在实际编程中,我们可以广泛地应用指针作为函数参数来实现各种功能。
指针做函数形参

指针做函数形参指针作为函数形参,在C/C++编程中是一个非常重要的概念。
一方面,它可以减少空间复杂度;另一方面,它可以实现在函数内部修改外部变量的值,从而实现对变量的统一管理。
下面将从以下几个方面具体介绍指针做函数形参的使用方法和注意事项。
第一步,理解指针的基本概念。
指针是一种特殊的变量类型,它存储的是一个地址。
通过指针可以访问和修改相应的内存地址。
在C/C++编程中,常常使用指针来操作数组、字符串和结构体等数据结构,从而实现更加高效和灵活的编程。
第二步,掌握指针作函数形参的语法规则。
在函数定义时,我们可以将一个指针类型变量作为参数,从而实现对该变量的修改。
函数调用时,需要传入该变量的地址,即使用取地址符“&”获取该变量的地址。
例如:```void func(int* p){*p = 10; // 修改p所指向的变量的值}int main(){int a = 5;func(&a); // 将a的地址作为参数传入函数printf("%d", a); // 输出结果:10return 0;}```在上述代码中,我们定义了一个名为“func”的函数,该函数的参数为一个指向int类型变量的指针。
函数内部通过“*p”语法访问和修改p所指向的变量的值。
在主函数中,我们声明了一个变量a,并将其地址通过func函数作为参数传入,从而实现了a的值的修改。
第三步,注意指针类型的匹配。
在指针作函数形参时,需要注意指针类型的匹配,即传入的指针类型必须与函数参数类型相同。
例如,如果我们定义了以下函数:```void func(int* p){*p = 10; // 修改p所指向的变量的值}```则不能将一个指向double类型变量的指针作为参数传入,否则会编译出错。
因此,需要在函数调用时保证传入的参数类型与函数参数类型匹配,从而避免编译错误和运行错误的产生。
第四步,注意指针值的合法性。
实验十 指针与函数

实验十指针与函数实验目的理解并掌握函数的指针等概念,学会使用指向函数的指针变量,学会编写返回指针值的函数。
要点提示1.函数名代表函数的入口地址,函数的入口地址即为函数的指针。
2.指向函数的指针变量的定义格式:数据类型标识符(*指针变量名)();3.函数的调用可以通过函数名调用,也可以通过函数指针调用。
4.返回指针值的函数定义格式:类型标识符*函数名(形式参数表);5.当函数有多个计算结果或返回值时,可以定义函数返回值的类型为指针类型。
实验内容1.指向函数的指针变量的定义和引用2.返回指针值的函数的定义和引用3.指向函数的指针变量作为函数参数实验步骤读懂并输入程序,完成填空后输出结果。
1. 写一个函数,将字符串中的小写字母转换成大写字母。
在main函数中输入字符串,并输出结果。
main(){ void convert(); /* 函数说明 */char str[10];printf("\nInput a string:");scanf("%s", str);【】printf("\nOutput the string:%s", str);}void convert(char p[10]) /* 函数定义 */{ int i=0;while (*(p+i) !='\0') {if (*(p+i)>='a' && *(p+i)<='z')*(p+i)=*(p+i)-【】; /* 将小写字母转换为大写字母 */i++;}}程序运行结果Input a string: NbaOutput the string: 【】main(){void convert(); /* 函数说明 */char str[10];printf("\nInput a string:");scanf("%s", str);convert(str);printf("\nOutput the string:%s", str);}void convert(char p[10]) /* 函数定义 */{int i=0;while (*(p+i) !='\0'){if (*(p+i)>='a' && *(p+i)<='z')*(p+i)=*(p+i)-32; /* 将小写字母转换为大写字母 */i++;}}Input a string:NbaOutput the string:NBAPress any key to continue实验2main(){ void convert(); /* 函数说明 */char str[10];【】;printf("\nInput a string:");scanf("%s", str);【】;(*p)(str); /* 函数调用 */printf("\nOutput the string:%s", str);}void convert(char p[10]) /* 函数定义 */{ int i=0;while (*(p+i) !='\0') {if (*(p+i)>='a' && *(p+i)<='z')*(p+i)=*(p+i)-32; /* 将小写字母转换为大写字母 */ i++;}}程序运行结果Input a string: NbaOutput the string: 【】main(){void convert(); /* 函数说明 */char str[10];int (*p)();printf("\nInput a string:");scanf("%s", str);p=convert;(*p)(str); /* 函数调用 */printf("\nOutput the string:%s", str);}void convert(char p[10]) /* 函数定义 */{int i=0;while (*(p+i) !='\0'){if (*(p+i)>='a' && *(p+i)<='z')*(p+i)=*(p+i)-32; /* 将小写字母转换为大写字母 */i++;}}Input a string:NbaOutput the string:NBAPress any key to continue实验3{static int score [][4]={{60,70,80,90,},{56,89,67,88},{34,78,90,66}}; int * search(); /* 函数说明 */int * p;int i,m;printf("\nenter the number of stuednt:");scanf ("%d",&m);printf("\nThe scores of No. %d are:\n",m);p=search (score, m);for(i=0;i<4;i++)printf("%d\t",*(p+i));}int * search(pointer,n)int (*pointer)[4]; /* 指向一维数组的指针 */int n;{ float *pt; ;【】;return(pt); ;}程序运行结果:enter the number of stuednt:1The scores of No. 1 are:【】main(){static int score [][4]={{60,70,80,90,},{56,89,67,88},{34,78,90,66}};int * search(); /* 函数说明 */int * p;int i,m;printf("\nenter the number of stuednt:");scanf ("%d",&m);printf("\nThe scores of No. %d are:\n",m);p=search (score, m);for(i=0;i<4;i++)printf("%d\t",*(p+i));}int * search(pointer,n)int (*pointer)[4]; /* 指向一维数组的指针 */int n;{float *pt; ;pt=pointer+n-1;return(pt); ;}enter the number of stuednt:1The scores of No. 1 are:60 70 80 90 Press any key to continue实验4main(){ double (*function[3])();double x=1;int i;function[0]=sin;function[1]=cos;function[2]=tan;for (i=0; i<3; i++)printf("func No: %d---%d\n", i+1, execute(x, 【】); }execute (double x, 【】){ return ((*func)(x));}程序运行结果:func No: 【】func No: 【】func No: 【】#include <math.h>main(){double (*function[3])();double x=1;int i;function[0]=sin;function[1]=cos;function[2]=tan;for (i=0; i<3; i++)printf("func No: %d---%d\n", i+1, execute(x, function[i])); }execute (double x, double (*func)()){return ((*func)(x));}func No: 1---0func No: 2---0func No: 3---1Press any key to continuedouble execute (double x, double (*func)()){return ((*func)(x));}main(){double (*function[3])();double x=1;int i;function[0]=sin;function[1]=cos;function[2]=tan;for (i=0; i<3; i++)printf("func No: %d---%f\n", i+1, execute(x, function[i])); }func No: 1---0.841471func No: 2---0.540302func No: 3---1.557408Press any key to continue。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验10指针做函数参数编程训练实验目的:1.掌握指针的定义及使用;2.体会使用指针的作用;3.掌握指针做函数参数的作用;4.掌握指针做函数参数的基本步骤;实验题目:1.输入某年某月某日,计算并输出它是这一年的第几天。
/*函数功能:对给定的某年某月某日,计算它是这一年第几天函数参数:整型变量year,month,day,分别代表年,月,日函数返回值:这一年的第几天*/int DayofYear(int year,int month,int day);2.输入某一年的第几天,计算并输出它是这一年的第几月第几日。
/*函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日函数入口参数:整型变量year,存储年整型变量yearDay,存储这一年的第几天函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量整型指针pDay,指向存储第几日的整型变量函数返回值:无*/void MonthDay(int year,int yearDay,int *pMonth,int *pDay);3.输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。
1.year/month/day->yearDay2.yearDay->year/month/day3.ExitPlease enter your choice:参考程序及注释:#include <stdio.h>#include <stdlib.h>int DayofYear(int year, int month, int day);void MonthDay(int year, int yearDay, int *pMonth, int *pDay);void Menu(void);int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};int main(){int year, month, day, yearDay;char c;Menu(); /* 调用Menu函数显示一个固定式菜单*/c = getchar(); /* 输入选择*/switch (c) /* 判断选择的是何种操作*/{case '1':printf("Please enter year, month, day:");scanf("%d,%d,%d", &year, &month, &day);yearDay = DayofYear(year, month, day);printf("yearDay = %d\n", yearDay);break;case '2':printf("Please enter year, yearDay:");scanf("%d,%d", &year, &yearDay);MonthDay(year, yearDay, &month, &day);printf("month = %d, day = %d\n", month, day);break;case '3':exit(0); /* 退出程序的运行*/default:printf("Input error!");}return 0;}/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天*/int DayofYear(int year, int month, int day){int i, leap;/* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;否则leap值为0,用第0行dayTab[0][i]计算*/leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);for (i=1; i<month; i++){day = day + dayTab[leap][i];}return day; /* 返回计算出的day的值*/}/* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日*/ void MonthDay(int year, int yearDay, int *pMonth, int *pDay){int i, leap;leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);for (i=1; yearDay>dayTab[leap][i]; i++){yearDay = yearDay - dayTab[leap][i];}*pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量*/ *pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量*/}/* 函数功能:显示菜单*/void Menu(void){printf("1. year/month/day -> yearDay\n");printf("2. yearDay -> year/month/day\n");printf("3. Exit\n");printf("Please enter your choice:");}实验11 字符串与指针编程练习实验目的:1.熟悉字符串的输入及输出2.掌握字符指针做函数参数的方法3.掌握数组做函数参数的方法实验题目:1.编写一函数实现字符串的反序输出,函数原型如下:void invert(char *s);即将字符串s反序。
解题思路:用循环将串s的首尾字符对调,直到中间位置结束。
如:串“ABCDE\0”,将A与E对调(交换),B与D对调,循环次数是串的实际长度的一半。
2.在主函数main中输入一串字符串,并调用invert函数将此字符串反序,然后再将反序后的字符串输出。
3.编写一函数将字符串s中的字符c删除void charDel(char *s,char c);解题思路:假设s为“aebefe\0”串中的e字符删除,判断当前s指针是否指向e字符,若指向e字符,则将e字符后面的befe\0字符向前移动一位,然后移动s指针,重复这一过程。
4.编写函数void replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串,字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上。
解题思路:如果当前s指针指向的是c1字符,则把c2赋值给s指针所指向的地址空间,然后移动指针s,重复上述过程。
参考代码:#include "stdio.h"#include "string.h"void replace(char *s,char c1,char c2);void charDel(char *s,char c);void invert(char *s);int main(){char str[]="acbd";invert(str);puts(str);}void invert(char *s){int strLenth;char *i,*j,*mid,temp;//j和i所指向字符是相互交换的字符strLenth=strlen(s);mid=s+strLenth/2;//交换的次数应为字符串总长度除以2j=s+strLenth-1;//令j指向字符串的末尾,\0字符的前一个字符for(i=s;i<mid;i++)//i=s令i指针指向字符串的首部,i++令i指针指向下一个字符{temp=*i;*i=*j;*j=temp;//交换对应的字符j--;//字符串末尾指向前移}}void charDel(char *s,char c){char *p,*q;while(*s!='\0'){if(*s==c){p=s;q=s+1;while(*p++=*q++);//要删除的字符后面的字符串整体向前移动一位,也可以用下面的这段代码/*while(*p!='\0'){*p=*q;p++;q++;}*q='\0';*/}s++;}}void replace(char *s,char c1,char c2){while(*s!='\0'){if(*s==c1){*s=c2;s++;}}}(注:文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)。