函数篇
-
编写一个函数,可以实现给出算数运算的功能,给出两个值以及算数运算符号可以算出相应的结果
#include<stdio.h> int math(int a,int b,char c);//开头声明一个自己定义的函数 int main() { int a,b,c,sum; printf("请输入计算公式:"); scanf("%d%c%d",&a,&c,&b); sum=math(a,b,c);//插入定义的函数 printf("sum=%d\n",sum); return 0;} int math(int a,int b,char c)//在括号里定义a,b,c的类型 { int sum;//形参?扮演这个函数的主角,和主函数的sum无关 switch(c)//switch语句括号里面是字符变量,下面的case就是字符变量的几种情况 { case '+':sum=a+b;break;//break是满足这个case后就直接执行此语句并跳出循环 case '-':sum=a-b;break; case '*':sum=a*b;break; case '/':sum=a/b;break; case '%':sum=a%b;break; default:break; } return sum;//定义了什么形参就返回什么形参? }
-
编写一个函数,判断是不是素数,是的话返回1,不是就返回0
#include<stdio.h> #include<math.h>//下面要调用数学函数 int isprime(int n);//开头就声明一个自己定义的函数,括号里可以只写n int main() { int n;//一定要在这个主函数里定义这个变量,n在这里是局部变量,要用的,不能删掉这行 printf("请输入一个整数:"); scanf("%d",&n); printf("%d\n",isprime(n)); 输出isprime函数的返回值n, return 0; } int isprime(int n) //函数的实现部分 { int i; //循环变量 for(i=2;i<=sqrt(n);i++)//sqrt是开方函数, i<=sqrt(n)是为了提高效率,减少不必要的循环次数。 { if(n%i==0)//是素数的条件 { return 0;//返回值是0 } } return 1;//循环结束后,没有找到能整除n的数,说明n是素数,返回1表示是素数 } //循环从2开始遍历到i的平方小于等于n为止(即i的平方大于等于n时终止循环) //这是因为如果存在一个大于sqrt(n)的整数k,使得n能被k整除,那么必然存在比k小且整除n的因子,即k的倒数小于sqrt(n)。 //因此,在循环中只需要遍历到i的平方小于等于n即可,不需要继续遍历到n,可以提高代码的效率。
-
编写一个函数实现求数组的总和
#include<stdio.h> int add(int a[],int n);//声明一个自己定义的函数,a是数组,n是元素个数 int main() { int a[10]={1,2,3,4,5,6,7,8,9,10};//给数组里的每个值都给赋值 int sum; sum=add(a,10);//调用定义的函数 ,括号里的两个变量都赋予了具体的值,表示数组a有十个元素;返回的''sum''就在add函数的箱子里,然后把这个箱子里的值赋给这里的局部变量sum printf("sum=%d",sum); return 0; } int add(int a[],int n)//自己定义的函数的实现部分 ,这里的a和n都要定义了才能使用 { int i,sum=0; for(i=0;i<10;i++)//这里i<10是有意义的,a[10]中的10是长度,包含a[0]~a[9]十个数组,所以a[i]中的i只需小于10即可,即直到等于9的时候循环结束 { sum+=a[i];//等价于sum=sum+a[i];累加 } return sum;//返回sum的值给这个函数的“箱子”里 }
-
编写一个函数,实现冒泡排序的功能
#include<stdio.h>int bubble(int a[],int n);//可以改为void bubble...同时下面也要改为void因为他不返回任何值,就是一个函数执行表达式 int main() { int a[6]={20,40,10,5,50,30}; int i = 0; bubble(a,10);//调用冒泡排序 for(i=0;i<6;i++) { printf("%d ",a[i]); } return 0; } int bubble(int a[],int n)//冒泡函数的实现部分 { int j,i,temp;//两个循环变量和一个中间变量 for(j=0;j<6;j++) { // 外部总共要遍历 n-1 次(n 为元素个数) int k = 0; // --有序判断控制器 for(i=0;i<6-j-1;i++) { // 每一次将最大值放在最后以后,前面的数两两比较次数减1,只需要和最大值前面的元素比较 if(a[i] > a[i+1]) { // 比较相邻两者大小关系,如果前面元素大则需要改变位置 temp = a[i]; // 通过中间变量交换两者位置 a[i] = a[i+1]; a[i+1] = temp; k = 1; } } if(k == 0) { // 当等于0则没有交换 break; } } }
-
编写一个函数,实现输入一个字符串,可以求出字符串当中的大写、小写、数字、空格以及其他的字符的个数
#include<stdio.h> #include<math.h> void count(char str[],int a[]); int main() { char str[50]; int a[5]={0}; printf("请你输入一个字符串:"); gets(str); count(str,a);//调用‘数数’函数 printf("大写:%d\n",a[0]); printf("小写:%d\n",a[1]); printf("数字:%d\n",a[2]); printf("空格:%d\n",a[3]); printf("其他:%d\n",a[4]); return 0; } void count(char str[],int a[])//无需返回函数的实现部分 { int i=0; while(str[i]!='\0')//当还没有碰到字符串结尾的时候,维持循环 { if(str[i]>='A'&&str[i]<='Z')//大写字母部分 { a[0]++; } else if(str[i]>='a'&&str[i]<='z')//小写字母部分 { a[1]++; } else if(str[i]>='0'&&str[i]<='9')//数字部分 { a[2]++; } else if(str[i]==' ')//空格部分 { a[3]++; } else//其他 { a[4]++; } i++;//下标加一,为的是检测到下一个字符 } }
-
编写一个函数(int strlrn(char str[])),实现字符串长度的求取
#include<stdio.h> int strlen(char str[]);//声明一个函数 int main() { char str[50]; printf("请输入一个字符串:"); gets(str); printf("%d\n",strlen(str)); return 0; } int strlen(char str[]) { int i=0; while(str[i]!='\0')//在字符串输入完成后才结束循环 { i++; //下标自增 } return i;//把函数求得的字符串长度的值返回 }
-
编写一个函数void strlwr(char str[]),实现字符串小写变大写的功能
#include<stdio.h> void strlwr(char str[]);//声明一个大写变小写的函数 int main() { char str[50];//定义一个存放字符串的长度为50的数组 printf("请输入一个字符串:"); gets(str);//输入--scanf("%s", str[50])和gets(str)并不等价。用前者会输不出来 //scanf("%s", str[50])是使用scanf函数来读取字符串,%s表示读取字符串,str[50]表示将字符串存储到str的第50个字符位置开始的内存空间中。 //而gets(str)是使用gets函数来读取字符串,str表示要存储字符串的数组。 strlwr(str);//调用 printf("%s\n",str); return 0; } void strlwr(char str[]) //实现部分 { int i=0; for(i=0;str[i]!='\0';i++)//for,if语句都只有一个执行语句就可以都省略{} if(str[i]>='A'&& str[i]<='Z')//没有else,默认不符合条件就不会执行,按原样输出 str[i]=str[i]+32; //大写转换小写 }
-
编写一个函数void strcpy(char to[],char from[]),实现字符串复制功能
#include<stdio.h> void strcpy(char to[],char from[]); //字符串复制函数 int main() { char str[50],a[50];//定义了两个字符数组,长度都为50,超过长度了就不会输出任何东西,接下来就是使用字符串处理函数对这些数组进行操作,比如拷贝、连接、比较等等。 printf("请输入一个字符串:"); gets(a);//输入 strcpy(str,a);//调用复制函数 printf("%s\n",str); return 0; } void strcpy(char to[],char from[]) //无返回值的函数的实现,定义了两个字符串数组,且表意清晰 { int i;//这里int一定要有 for(i=0;from[i]!='\0';i++) { to[i]=from[i]; } to[i]='\0';//代表字符结束 }
-
编写一个函数int strcmp(char str1[],char str2[]),实现字符串比较功能
#include<stdio.h> int strcmp(char str1[],char str2[]);//字符串比较函数 int main() { char str[50],a[50]; printf("请输入字符串a:"); gets(a); printf("请输入字符串str:"); gets(str); printf("%d\n",strcmp(str,a));//这个格式就要用到有返回值的函数了 return 0; } int strcmp(char str1[],char str2[]) { int i=0; while(str1[i]!='\0' || str2[i]!='\0')//只要有一个还没有结束 { if(str1[i]>str2[i]) { return 1; //只要比出结果就结束函数 } if(str1[i]<str2[i]) { return -1; } i++; //没有比出结果继续比下一位 } return 0; //走到这代表相等 }
10.编写一个函数可以求出任意整数的质数,并输出因子的乘积表示格式:12=223
#include<stdio.h>
void number(int n);
int main()
{
int n;
printf("请输入一个整数:");
scanf("%d",&n);
number(n);
return 0;
}
void number(int n)
{
int temp=n;
int i,j=0,a[20]={0};//数组用来存储质因数
for(i=2;i<=n;i++)//判断是否为n的质因数
{
if(n%i==0)
{
a[j++]=i;//j用来记录质因数个数
n=n/i; //去除已找到的质因数
i=1; //重新从1开始判断是否还有其他质因数
}
}
printf("%d=%d",temp,a[0]);
for(i=1;i<j;i++)//重新遍历数组a
{
printf("*%d",a[i]);
}
printf("\n");
}
-
编写一个函数可以求出整数的位数
#include<stdio.h> int bitNumber(int n); int main() { int n; printf("请输入一个整数:"); scanf("%d",&n); printf("位数:%d\n",bitNumber(n));//输出函数的回归值 return 0; } int bitNumber(int n) { int i=0; if(n<0) { n=-n; //让负变正 } while(n>0) { n/=10; i++;//用来计算n的位数 } return i;//返回目标值 }*