当前位置:文档之家› 实验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反序。

解题思路:用循环将串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++;}}}(注:文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注)。

相关主题