3. 在主函数main()中已有变量定义和函数调用语句:“int a=1,b= -5,c; c=fun (a ,,b)”; fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数。请你:
(1) 编写fun函数。
fun(int x , int y) { } (2) 写出这个主函数main() #include int fun(int x,int y); main()
{int a=1,b=-5,c; c=fun(a,b);
printf(“c=%d\\n”,c); }
int fun(int x,int y) {if(x>y)return x-y; else return y-x; }
4. 编写函数,其功能是删除字符串s中的所有数字字符。 解一:用外部数组编程 #include char s[20]; void del(); main()
{printf(“请输入一个字符串:”); gets(s); del(); puts(s); }
void del() {int i,j;
for(i=0;s[i]!=?\\0?;i++) if(s[i]>=?0?&&s[i]<=?9?)
{for(j=i;s[j]!=?\\0?;j++)s[j]=s[j+1]; i--; } }
解二:用指针作参数编程 #include void del(char *p); main()
{char s[20];
printf(\请输入一个字符串:\gets(s); del(s); puts(s); }
void del(char *p) {int i,j;
for(i=0;*(p+i)!='\\0';i++)
if(*(p+i)>='0'&&*(p+i)<='9')
{for(j=i;*(p+j)!='\\0';j++)*(p+j)=*(p+j+1); i--; } }
解三:用数组作参数编程 #include char *del(char s[]); main()
{char s[20],*p;
printf(\请输入一个字符串:\gets(s); p=del(s); puts(p); }
char *del(char s[]) {int i,j;
for(i=0;s[i]!='\\0';i++) if(s[i]>='0'&&s[i]<='9')
{for(j=i;s[j]!='\\0';j++)s[j]=s[j+1]; i--; }
return s;
}
5. 用函数调用重新实现实验7。即:编写函数求一个整数是否为水仙花数,并编写主程序调用该函数求出所有的水仙花数。(此题为选做)
#include int sxh(int n); main() {int i,p=0;
for(i=100;i<=999;i++) {p=sxh(i);
if(p==1)printf(“%d ”,i); } }
int sxh(int n) {int a,b,c; a=n/100;
b=(n-a*100)/10; c=n;
if(a*a*a+b*b*b+c*c*c==n)return 1; else return 0; }
6. 以下函数p的功能是用递归方法计算x的n阶勒让德多项式的值。已有调用语句p(n,x);请编写p函数。递归公式如下:(此题为选做)
(n?0)?1?Pn(x)??x (n?1)
?((2n?1)*x*P(x)?(n?1)*P(x))/n(n?1)n?1n?2?float p(int n, int x){ }
解:
#include float p(int n,int x); main() {int n,x; float y;
printf(\请输入n,x=\do
scanf(\while(n<0); y=p(n,x);
printf(\}
float p(int n,int x) {float y;
if(n==0)return 1; if(n==1)return x;
y=(float)((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n; return y; }
实验十四
1、编程实现:输入n(n<10)个整数,按从大到小的顺序对其排序。 #include main()
{int i,j,a[10],n,t; printf(“n=”); scanf(“%d”,&n); for(i=0;iif(a[i] printf(“M”,a[i]); printf(“\\n”); }
2. 编写程序,键盘输入与您同寝室的n位同学的姓名(用汉语拼音表示),请将这n位同学的姓名按字母顺序排序后输出。(此题为选做)
#include #include main() {int i,j;
char name[4][20],*p[4],*q;
printf(\请输入4位同学的姓名\for(i=0;i<4;i++)
{scanf(\ p[i]=name[i]; }
for(i=0;i<4;i++) for(j=i;j<4;j++)
if(strcmp(p[i],p[j])>0) {q=p[i];p[i]=p[j];p[j]=q;}
printf(\按顺序输出4位同学的姓名:\\n\for(i=0;i<4;i++) printf(\}
实验十六
1、编程,要求实现:在主程序main( )中输入2个整数,通过调用函数将两者的值互换。(要求分别用值传递方式,地址传递方式以及全局外部变量传递方式编程)。
解(1) 用值传递方式编程
用值传递方式不能将两者的值互换。
解(2) 用地址传递方式编程 #include
void swap(int *x,int *y ); main() {int x,y;
printf(“x,y=”);
scanf(“%d,%d”,&x,&y); swap(&x,&y);
printf(“x=%d,y=%d\\n”,x,y); }
void swap(int *x,int *y ) {int temp; temp=*x; *x=*y; *y=temp; }
解(3) 用全局外部变量传递方式编程 #include void swap(); int x,y; main()
{printf(“x,y=”);
scanf(“%d,%d”,&x,&y); swap();
printf(“x=%d,y=%d\\n”,x,y); }
void swap() {int temp;
temp=x;x=y;y=temp; }
2. 编写函数,求出M行N列二维数组每列元素中的最小值,通过形参传回主函数输出,并计算它们的和值。
#include #define M 4 #define N 3 int f(int m[]); main()
{int i,j,g[M][N],h[N],min,s=0;
printf(\请输入%d个整数:\for(i=0;iprintf(\行%d列数组为:\\n\for(i=0;i