binsearch函数:折半查找函数。
该函数用于判定已排序的数组v中是否存在某个特定的值x。数组v的元素必须以升序排列。如果v中包含x,则该函数返回x在v中的位置(介于0~n-1之间的一个整数);否则返回-1。
#include <stdio.h>
int binsearch(int x,int v[],int n);
int main()
{
int s=7;
int n,m;
int a[10]={1,2,3,4,5,6,7,8,9};
n=sizeof(a)/sizeof(int);
m=binsearch(s,a,n);
printf("%d",m);
return 0;
}
int binsearch(int x,int v[],int n)
{
int low,high,mid;
low = 0;
high = n - 1;
while (low <= high){
mid = (low+high)/2;
if (x < v[mid])
high=mid-1;
else if (x > v[mid])
low=mid+1;
else
return mid;
}
return -1;
}
用switch语句 编写一个程序以统计各个数字、空白符及其他所有字符出现的次数。
#include <stdio.h>
int main()
{
int c,i,nwhite,nother,ndigit[10];
nwhite=nother=0;
for (i = 0; i < 10; i++) {
ndigit[i]=0;
}
printf("The input string is:");
while ((c=getchar()) !=EOF){
printf("%c",c);
switch (c) {
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
ndigit[c-'0']++;
break;
case ' ':
case '\n':
case '\t':
nwhite++;
break;
default:
nother++;
break;
}
}
printf("\n");
printf("digits=");
for (i=0;i<10;i++){
printf("%d",ndigit[i]);
}
printf(",white space = %d,other = %d", nwhite,nother);
return 0;
}
将s转换为整型数,atoi函数,版本二
#include <ctype.h>
int atio(char s[])
{
int i,n,sign;
for(i=0; isspace(s[i]);i++)
;
sign = (s[i] == '-') ? -1:1;
if (s[i] == '+' || s[i] == '-')
i++;
for (n = 0; isdigit(s[i]); i++) {
n = n*10+(s[i] - '\0');
}
return sign * n;
}
shellsort函数:按递增顺序对v[0]···v[n-1]进行排序
//按照递增顺序对数组v进行排序
void shellsort(int v[],int n)
{
int gap,i,j,temp;
for (gap = n/2; gap > 0 ; gap /= 2) {
for (i = gap; i < n; i++) {
for (j = i-gap; j >= 0 && v[j] > v[j+gap] ; j -= gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}
}
}
reverse函数:用于倒置字符串s中各个字符的位置
#include <string.h>
void reverse(char s[])
{
int c,i,j;
for (i = 0 , j = strlen(s)-1; i < j; i++ , j--) {
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
itoa函数:将数字n转换为字符串并保存到s中
void itoa(int n,char s[])
{
int i,sign;
if((sign = n) < 0)
n=-n;
i=0;
do {
s[i++] = n % 10 + '0';
}while((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
trim函数:删除字符串尾部的空格符、制表符和换行符
#include <string.h>
int trim(char s[])
{
int n;
for (n = strlen(s)-1; n >= 0; n--) {
if (s[n] !=' ' && s[n] != '\t' && s[n] != '\n')
break;
}
s[n+1] = '\0';
return 0;
}