1.常用库函数
输出
| printf( )
| putchar( )
| fgets( )
| fprint( )
| 输入
| scanf( )
| getchar( )
| fput( )
| fscanf( )
| 其他(1)
| sort( )
| abs( )
| sqrt( )
| malloc( )
| 其他(2)
| srand( )
| strcpy( )
| meset( )
| strlen( )
| 2.函数练习题
【交换两个整形变量的内容】
(1)a,b的值没有交换的原因:形参与实参存在于不同的地址块,对于形参的改变不会影响实参
可理解为:x,y分别在红色,黑色 盒子里---形参
a,b分别在黄色,绿色 盒子里---实参
(2)调用change(int x,int y)交换的是形参x,y;而实参a,b没有交换
(3)解决方法:取地址
void change(int* x,int* y){ int temp=0; temp=*x;//*x就是a *x=*y; *y=temp;}int main(){ int a=10; int b=20; printf("交换前a为%d b为%d\n",a,b); change(&a,&b); printf("交换后a为%d b为%d\n",a,b);} 【判断一个数是否为素数】
试除法只需到sqrt(x)即可
int is_prime(int x){ int j=0; for(j=2;j<=sqrt(x);j++) { if(x%j==0) return 0; } return 1;}int main(){ int i=0; for(i=100;i<200;i++) { if(is_prime(i)==1); printf("%d是素数\n",i); }} 四年一闰,百年不闰,四百年再闰
int is_prime(int x){ int j=0; for(j=2;j<=sqrt(x);j++) { if(x%j==0) return 0; } return 1;}int main(){ int i=0; for(i=100;i<200;i++) { if(is_prime(i)==1); printf("%d是素数\n",i); }} 【二分查找】
(1)设置三个指针:left,right,mid
(2)数组作为实参时,传递的是第一个元素的位置
int search(int arr[],int x,int sz){ int left=0; int right=sz-1; while(left<=right) { int mid=(left+right)/2; if(arr[mid]<x) left=mid+1; else if(arr[mid]>x) right=mid-1; else return mid; } return -1;}int main(){ int arr[]={1,2,3,4,5,6,7,8,9,10}; int key=7; int sz=sizeof(arr)/sizeof(arr[0]); int ret=search(arr,key,sz);//y接受到的是search()的返回值mid if(ret==-1) { printf("找不到key\n"); } else { printf("key已找到,元素下标为:%d\n",ret); } return 0;} 【每次调用函数,num的值加1】
(1)*p++; × (*p)++; √
void Add(int* p){ (*p)++;//num++}int main(){ int num=0; int i=0; for(i=0;i<4;i++) { Add(&num); printf("num=%d\n",num); }}
|