例1、任意读入一个二至十六进制数(字符串),转换成十进制数后输出。
  #include "string.h"
  #include "ctype.h"
  main()
  {
  char x[20];
  int r,d;
  gets(x); /*输入一个r进制整数序列*/
  scanf("%d",&r); /*输入待处理的进制基数2-16*/
  d=Tran(x,r);
  printf("%s=%d ",x,d);
  }
  int Tran(char *p,int r)
  {
  int d,i,cr;
  char fh,c;
  d=0;
  fh=*p;
  if(fh=='-')p++;
  for(i=0;i<strlen(p);i++)
  {
  c=*(p+i);
  if(toupper(c)>='A')
  cr=toupper(c)-'A'+10;
  else
  cr=c-'0';
  d=d*r+cr;
  }
  if(fh=='-')
  d=-d;
  return(d);
  }
  (7)辗转相除法求两个正整数的大公约数 该算法的要领是:假设两个正整数为a和b,先求出前者除以后者的余数,存放到变量r中,若r不为0,则将b的值得赋给a,将r的值得赋给b;再求出a除以b的余数,仍然存放到变量r中??如此反复,直至r为0时终止,此时b中存放的即为原来两数的大公约数。
  例1、任意读入两个正整数,求出它们的大公约数。
  [法一:用while循环时,大公约数存放于b中]
  main()
  {
  int a,b,r;
  doscanf("%d%d",&a,&b);
  while(a<=0||b<=0); /*确保a和b为正整数*/
  r=a%b;
  while(r!=0)
  {
  a=b;b=r;r=a%b;
  }
  printf("%d ",b);
  }
  [法二:用do…while循环时,大公约数存放于a中]
  main()
  {
  int a,b,r;
  doscanf("%d%d",&a,&b);
  while(a<=0||b<=0); /*确保a和b为正整数*/
  do
  {
  r=a%b;a=b;b=r;
  }while(r!=0);
  printf("%d ",a);
  }
  【引申】可以利用大公约数求小公倍数。提示:两个正整数a和b的小公倍数=a×b/大公约数。
  (8)数组元素的插入、删除
  (1)数组元素的插入 此算法一般是在已经有序的数组中再插入一个数据,使数组中的数列依然有序。算法要领是:假设待插数据为x,数组a中数据为升序序列。
  ①先将x与a数组当前后一个元素进行比较,若比后一个元素还大,将x放入其后一个元素中;否则进行以下步骤;
  ②先查找到待插位置。从数组a的第1个元素开始找到不比x小的第一个元素,设其下标为i ;
  ③将数组a中原后一个元素至第i个元素依次一一后移一位,让出待插数据的位置,即下标为i的位置;
  ④将x存放到a(i)中。例题参见前面“‘排序’中插入法排序的例1”。
  (2)数组元素的删除 此算法的要领是:首先要找到(也可能找不到)待删除元素在数组中的位置(即下标),然后将待删元素后的每一个元素向前移动一位,后将数组元素的个数减1。
  例1、数组a中有若干不同考试分数,任意读入一个分数,若与数组a中某一元素值相等,将该元素删除。
  #define N 6
  main()
  {
  int fs[N]={69,90,85,56,44,80},x;
  int i,j,n;
  n=N;
  scanf("%d",&x); /*任意读入一个分数值*/ /*以下查找待删分数的位置,即元素下标*/
  for(i=0;i<n;i++)
  if(fs[i]==x)break;
  if(i==n)
  printf("Notfound! ");
  else /*将待删位置之后的所有元素一一前移*/
  {
  for(j=i+1;j<n;j++) fs[j-1]=fs[j];
  n=n-1; /*元素个数减1*/
  }
  for(i=0;i<n;i++)
  printf("%d",fs[i]);
  }