1. 程式人生 > >函式一 2018年11月10日

函式一 2018年11月10日

以下內容僅供娛樂,歡迎隨時探討,請多指教
2018年11月10日
函式(一)
1、寫一個求階乘的函式,在主函式輸入一個整數,並輸出該整數的階乘。

#include <stdio.h>
int fact(int n)
{
    int i,fact=1;
    for(i=1;i<=n;i++)
    {
        fact*=i;
    }
    return fact;
}
int main()
{
	int n;
	printf("input n\n");
    scanf("%d",&n);
    printf("%d",fact
(n)); return 0; }

2、用一個函式求一元二次方程(a,b,c三個係數)的根(提示可能:實根、等根、虛根),並輸出結果。從主函式中輸入a,b,c的值。

#include"math.h"
#include"stdio.h"
void root(double a,double b,double c)
{
    double d;
    int n;
    d=sqrt(b*b-4*a*c);
    n=(int)d;
    if(n>0)
        printf("%lf\t%lf\n",(-b+d/(2*a)),(-b-d/(2*a)));
    else
if(n == 0) printf("%lf\n",-(b/(2*a))); else if(n<0) printf("實部%lf虛部%lf\n實部%lf虛部%lf\n" ,-b/(2*a),-d/(2*a),-b/(2*a),-d/(2*a)); } int main() { double a,b,c; printf("請輸入3個數a,b,c(形如ax*x+bx+c=0)\n"); //ax*x+bx+c=0,注意數學求解方法 scanf("%lf%lf%lf",&a,&b,&c); root
(a,b,c); return 0; }

3、用一個函式完成四則運算中的四種運算,從主函式中輸入兩個整數以及運算子,並輸出運算之後的結果。

#include"stdio.h"
#include"math.h"
int caculate(double s1,char a,double s2)
{
    double s;
    switch(a)
   {
       case '+':s=s1+s2;break;
       case '-':s=s1-s2;break;
       case '*':s=s1*s2;break;
       case '/':if(fabs(s2) <= 1e-6)printf("Wrong input!\n");
                else s=s1/s2;
                break;
       default:printf("Wrong input!\n");break;
    }
    return s;
}
int main()
{
    double s1,s2,s;
    char a;
    printf("輸入表示式的值"
      "(表示式的格式為:s1 $ s2,"
      " s1和s2是兩個實數)\n");
    scanf("%lf%c%lf",&s1,&a,&s2);
    s=caculate(s1,a,s2);
    printf("結果是:%.2lf",s);
    return 0;
}

4、寫一個判斷閏年的函式,在主函式輸入一個年份,並輸出是否是閏年的資訊。

#include <stdio.h>
void ask(int year)
{
    (year%4==0&&year%100!=0)||(year%400==0)?printf("Yes\n"):printf("No\n");
}
int main()
{
    int year;
    printf("請輸入年份\n");
    scanf("%d",&year);
    ask(year);
    return 0;
}

5、寫一個求圓面積的函式,在主函式輸入圓的半徑,並輸出圓的面積。

#include <stdio.h>
#define pi 3.1415926
double  s(double r)
{
    double s;
    s=pi*r*r;
    return s;
}
int main()
{
    double r;
    printf("請輸入半徑\n");
    scanf("%lf",&r);
    printf("面積是%.3lf\n",s(r));
    return 0;
}

6、猴子吃桃問題, 小猴摘了很多桃子,第一天吃了一半又多吃一個,第二天又吃掉餘下的一半再多吃一個,以後每天早上都吃了前一天剩下的一半零一個。如此下去,到第十天只剩一個桃子可以吃。寫一個求第x天剩餘的桃子個數的函式。從主函式中輸入具體的x值,並輸出相應的桃子個數。

#include <stdio.h>
int fun(int x)
{
    int i,sum=1;
    for(i=0;i<10-x;i++)
        sum=(sum+1)*2;
    return sum;
}
int main()
{
    int x;
    printf("請輸入天數(1--10)\n");
    scanf("%d",&x);
    printf("number=%d\n",fun(x));
    return 0;
}
/*遞迴法*/
#include<stdio.h>
int fun(int n)
{
    if(n==1)return 1;
    return (fun(n-1)+1)*2;
}
int main()
{
    int n;
    printf("input n\n");
    scanf("%d",&n);
    printf("%d\n",fun(n));
    return 0;
}

7、m個人的成績存放在score陣列中,請編寫函式fun,它的功能是:將低於平均分的人數作為函式值返回,將低於平均分的分數放在below所指定的函式中。
函式介面如下:int fun(int score[],int m,int below[])

#include <stdio.h>
int fun(int score[],int m,int below[]);
void input(int score[],int m);
int main()
{
	int score[1000],n,below[1000];
	printf("input your number of people\n");
	scanf("%d",&n);
	input(score,n);
	fun(score,n,below);
	return 0;
}
int fun(int score[],int m,int below[])
{
	int i=0,sum,k=0;;
	for(i=0,sum=0; i<m; i++)
		sum+=score[i];
	for(i=0; i<m; i++)
		if(score[i]<1.0*sum/m) {
			below[k++]=score[i];
		}
	for(i=0; i<k; i++)
		printf(" %d ",below[i]);
	return *below;
}
void input(int score[],int m)
{
	int i=0;
	printf("input your scores\n");
	for(i=0; i<m; i++)
		scanf("%d",score+i);
}

8、請編寫函式void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶數的各整數,並按從小到大的順序放在pp所指的陣列中,這些除數的個數通過形參n返回。
函式介面如下:void fun(int x, int pp[ ], int *n)

#include <stdio.h>

void fun(int x, int pp[ ], int *n)
{
    int j=0,i;
    for(i=1;i<=x;i+=2){
        if(x%i == 0)pp[j++]=i;
    }
    *n=j;
    for(i=0;i < j;i++)
        printf(" %d ",pp[i]);
    printf("\n");
}
int main()
{
    int x,pp[100],n;
    printf("input x\n");
    scanf("%d",&x);
    fun(x,pp,&n);
    printf("numbers=%d\n",n);
    return 0;
}

9、請編寫一個函式void fun(char *tt,int pp[]),統計在tt字元中"a"到"z"26個字母各自出現的次數,並依次放在pp所指的陣列中。
函式介面如下:void fun(char *tt, int pp[])

#include "stdio.h"
void fun(char *tt,int pp[]);
int main()
{
	char tt[1000];
	int pp[1000];
	printf("input your strings\n");
	gets(tt);
	fun(tt,pp);
}
void fun(char *tt,int pp[])
{
	int i,count=0;
	for(i=0; tt[i] != '\0'; i++)
		if(tt[i]>='a' && tt[i]<='z')pp[count++]=tt[i];
	for(i=0; i<count; i++)
		printf(" %d ",pp[i]);
	printf("\n");
	printf("ammount=%d\n",count);
}

10、請編寫一個函式void fun(int m,int k,int xx[]),該函式的功能是:將大於整數m且緊靠m的k個素數存入xx所指的陣列中。
函式介面如下:void fun(int m, int k, int xx[])

#include<stdio.h>

void fun(int m,int k,int xx[])
{
	int i,j,n;
	for(i=m+1,n=0; n<k; i++) {
		for(j=2; j<i; j++)
			if(i%j == 0)
				break;
		if(j>=i)
			xx[n++]=i;
	}
}
void main()
{
	int k,m,zz[100];
	printf("Please enter two integers:\n");
	scanf("%d%d",&m,&k);
	fun(m,k,zz);
	for(m=0; m<k; m++)
		printf(" %d ",zz[m]);
	printf("\n");
}

11、寫一個逆序存放字串的函式,在主函式中輸入字串,並輸出逆序後的字串。

#include <stdio.h>
void traverse(char str[])
{
	int i,j;
	char x;
	for(i=0; str[i]!='\0'; i++)
		for(j=0; j<i; j++)
			x=str[i],str[i]=str[j],str[j]=x;
	puts(str);
}
int main()
{
	char str[1000];
	printf("input strings\n");
	gets(str);
	traverse(str);
	return 0;
}

12、利用遞迴函式呼叫方式,將主函式所輸入的5個字元,以逆序列印輸出。

#include"stdio.h"
void fun(int n);
int main()
{
	printf("please input 5 strings:\n");
	fun(5);
	return 0;
}
void fun(int n)
{
	char next;
	if(n <= 1)
	{
		next = getchar();
		putchar(next);
	}
	else
	{
		next = getchar();
		fun(n-1);
		putchar(next);
	}
}

13、編寫函式fun,它的功能是:求出1到100之內能被7或者11整除,但不能同時被7和11整除的所有整數,並將他們儲存在陣列中,並統計這些數的個數。在主函式中輸出這些數以及個數。

#include "stdio.h"
int fun(int pp[])
{
	int i,count=0;
	for(i=1; i<100; i++)
		if(i%7==0||i%11==0)pp[count++]=i;
		return count;
}
int main()
{
	int pp[100],i;
	for(i=0; i<fun(pp); i++)
		printf("%d\t",pp[i]);
		return 0;
}

14、編寫一個函式,實現在一個已經排好序的陣列中插入一個數。在主函式中輸入有序的陣列,以及待插入的數,並輸出插入該數之後的陣列。

#include <stdio.h>
void fun(int k,int a[],int pos)
{
	int i,j;
	a[pos] = k;
	for(i = 0 ; i < pos+1 ; i++)
		for(j = 0 ; j < pos+1 ; j++) {
			int temp;
			if(a[i] < a[j]) {
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	printf("then are :\n");
	for(i = 0 ; i < pos+1 ; i++)
		printf("%5d",a[i]);
	printf("\n");
}
int main()
{
	int a[100] = {1,2,3,4,5};
	int i,k,pos=