函式一 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=