安徽大学_C语言平时作业 下载本文

则返回0。

#include int isprime(int a); main() {int a,n=0; printf(“a=”); scanf(“%d”,&a); if(a>0)n=isprime(a);

if(n==1)printf(“%d是素数”,a); else printf(“%d不是素数”,a); }

int isprime(int a) {int m;

for(m=2;m

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;i

if(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;i

printf(\行%d列数组为:\\n\for(i=0;i