《实验10指针做函数参数编程训练》由会员分享,可在线阅读,更多相关《实验10指针做函数参数编程训练(5页珍藏版)》请在金锄头文库上搜索。
1、实验10指针做函数参数编程训练实验目的:1.掌握指针的定义及使用;2.体会使用指针的作用;3.掌握指针做函数参数的作用;4.掌握指针做函数参数的基本步骤;实验题目:1.输入某年某月某日,计算并输出它是这一年的第几天。/*函数功能:对给定的某年某月某日,计算它是这一年第几天函数参数:整型变量year,month,day,分别代表年,月,日函数返回值:这一年的第几天*/int DayofYear(int year,int month,int day);2.输入某一年的第几天,计算并输出它是这一年的第几月第几日。/*函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日函数入口参数:整型变量
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 #include int Day
3、ofYear(int year, int month, int day);void MonthDay(int year, int yearDay, int *pMonth, int *pDay);void Menu(void);int dayTab213 = 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();
4、/* 输入选择 */switch (c) /* 判断选择的是何种操作 */case 1:printf(Please enter year, month, day:);scanf(%d,%d,%d, &year, &month, &day);yearDay = DayofYear(year, month, day);printf(yearDay = %dn, yearDay);break;case 2:printf(Please enter year, yearDay:);scanf(%d,%d, &year, &yearDay);MonthDay(year, yearDay, &month,
5、&day);printf(month = %d, day = %dn, 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行元素dayTab1i计算;否则leap值为0,用第0行dayTab0i计算 */leap = (year % 4 = 0)
6、& (year % 100 != 0) | (year % 400 = 0);for (i=1; idayTableapi; i+)yearDay = yearDay - dayTableapi;*pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量 */*pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */* 函数功能:显示菜单 */void Menu(void)printf(1. year/month/day - yearDayn);printf(2. yearDay - year/month/dayn);printf(3. Exit
7、n);printf(Please enter your choice:);实验11 字符串与指针编程练习实验目的:1. 熟悉字符串的输入及输出2. 掌握字符指针做函数参数的方法3. 掌握数组做函数参数的方法实验题目:1. 编写一函数实现字符串的反序输出,函数原型如下:void invert(char *s);即将字符串s反序。解题思路:用循环将串s的首尾字符对调,直到中间位置结束。如:串“ABCDE0”,将A与E对调(交换),B与D对调,循环次数是串的实际长度的一半。2. 在主函数main中输入一串字符串,并调用invert函数将此字符串反序,然后再将反序后的字符串输出。3. 编写一函数将字符
8、串s中的字符c删除void charDel(char *s,char c);解题思路:假设s为“aebefe0”串中的e字符删除,判断当前s指针是否指向e字符,若指向e字符,则将e字符后面的befe0字符向前移动一位,然后移动s指针,重复这一过程。4. 编写函数void replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串,字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上。解题思路:如果当前s指针指向的是c1字符,则把c2赋值给s指针所指向的地址空间,然后移动指针s,重复上述过程。参考代码:#includ
9、e stdio.h#include string.hvoid 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;/
10、令j指向字符串的末尾,0字符的前一个字符for(i=s;imid;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+;