当前位置:文档之家› 全国计算机二级复习重要C语言程序小算法

全国计算机二级复习重要C语言程序小算法

全国计算机二级复习重要C语言程序小算法
全国计算机二级复习重要C语言程序小算法

全国计算机二级复习重要C语言程序小算法

1.对某一正数的值保留2位小数,并对第三位进行四舍五入。

double fun(float x)

{

x=(int)(x*100+0.5)/100.0;

}

2.判断一个数是否为素数,是素数则返回1,否则返回0.

方法一:

int sushu(int x)

{ int i;

for(i=2;i<=x/2;i++)

if(x%i==0) return 0;

return 1;

}

方法二:

int sushu(int x)

{

int i;

for(i=2;i<=x-1;i++)

if(x%i==0) return 0;

if(i<=x-1) return 1;

else return 0;

}

方法三:#include

int sushu(int x)

{

int i ;

for (i=2;i<=sqrt(x);i++)

if(x%i==0) return 0;

return 1;

}

3.判断一个数是否为水仙花数,“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

int shuixianhua(int x)

{

int g,s,b;

g=x%10; s=x/10%10; b=x/100%10;

if(g*g*g+s*s*s+b*b*b==x) return 1;

else return 0;

}

4.判断一个数是否为完数。一个数如果恰好等于它的因子之和,这个数就称为“完

数”。例如6=1+2+3.

int wanshu(int x)

{ int s=1,i;

for(i=2;i

if(x%i==0) s+=i;

if(s==x) return 1;

else return 0;

}

5.求两个数的最大公约数和最小公倍数。

gygb(int a,int b,int *pgy,int *pgb)

{ int r;

*pgb=a*b;

while( (r=a%b)!=0 ) /*r!=0说明存在公约数*/

{ a=b; b=r; }

*pgy=b; *pgb/=b; /*传递公约公倍的指针到调用函数,用以存值*/ }

6.判断一个数是否为回文数。

int huiwen(int x)

{ int y=0,t=x;

while(x!=0)

{ y=y*10+x%10;

x/=10;

}

if(y==t) return 1;

else return 0;

7.输出一个数的逆序数。

int x;

do {

printf(“%d”,x%10);

x=x/10;

}while(x!=0);

8.输出一维数组中的最大值。

int fmax(int a[],int n) /* 相当于int *a */

{ int mi=0,i;

for(i=0;i

if(a[i]>a[mi]) mi=i;

return a[mi];

}

9.一维数组的逆置。

方法一:

void f(int a[])

{ int b[N],i;

for(i=0;i

for(i=0;i

}

方法二:

int i=0,j=N-1,t;

while(i

{ t=a[i]; a[i]=a[j]; a[j]=t;

i++; j--;

}

方法三:

int i=0,t;

while(i

{ t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;

i++;

}

10.一维数组的查找。找到则返回下标,没找到返回-1。(1)顺序查找

int search(int a[],int n,int x)

{ int i;

for(i=0;i

if(a[i]==x) return i;

return -1;

}

(2)二分查找

int search(int a[],int n,int x)

{ int low=0,high=n-1,mid;

while(low<=high)

{ mid=(low+high)/2;

if(a[mid]

else if(a[mid]>x) high=mid-1;

else return mid;

}

return -1;

}

11.一维数组的排序。

(1)交换排序

void sort1(int a[],int n)

{ int i,j,t;

for(i=0;i

for(j=i+1;j

if(a[j]

}

(2)选择排序

void sort1(int a[],int n)

{ int i,j,k,t;

for(i=0;i

{ k=i;

for(j=i+1;j

if(a[j]

if(k!=i) t=a[i],a[i]=a[k],a[k]=t; } }

(3)冒泡排序

void sort1(int a[],int n)

{ int noswap,i,j,t;

for(i=0;i

{ noswap=1;

for(j=n-1;j>i;j--)

if(a[j]>a[j-1])

{t=a[j],a[j]=a[j-1],a[j-1]=t;

noswap=0;}

if(noswap) break;

}

}

(4)插入排序

void sort_insert(int a[],int n)

{ int i,t,j;

for(i=1;i

{ t=a[i];

j=i-1;

while(a[j]>t&&j>=0)

{a[j+1]=a[j];j--;}

a[j+1]=t;

}

}

12.插入

(1)位置插入

for(i=n;i>=p;i--) /*p是要插入的下标*/

a[i+1]=a[i];

a[p]=x;

(2)按值插入

eg字符串中所有数字字符前插入#

void insert(char str[])

{ int i=0,j;

while(str[i])

{ if(str[i]>=’0’&&str[i]<=’9’)

{ for(j=strlen(str);j>=i;j--)

str[j+1]=str[j];

str[i]=’#’;

i+=2;

}

else i++;

}

}

13.删除

(1)位置删除

for(j=p+1;j

/*字符串采用

for(j=p;j

(2)按值删除

eg.从字符数组s中删除存放在c中的字符,重复出现的也删除。void delet(char s[] ,char c)

{ int j,k;

for(j=k=0;s[j]!= '\0';j++)

if(s[j]!=c)

s[k++]=s[j];

s[k]= '\0';

}

14.有序数组归并

void guibing(int a[],int b[],int c[])

{ int i,j,k;

i=j=k=0;

while(i

if(a[i]

else c[k++]=b[j++];

while(i

while(j

}

15.二维数组中每行最大值

fmax(int a[3][4])

{ int b[3],mj,i,j;

for(i=0;i<3;i++)

{ mj=0;

for(j=0;j<4;j++)

if(a[i][j]>a[i][mj]) mj=j;

b[i]=a[i][mj];

}

}

16.二维数组转置

上三角

for(i=0;i

for(j=i;j

下三角

for(i=0;i

for(j=0;j<=i;j++)

17.多个字符串排序

sort(char str[][20],int n)

{ int i,j;

char t[20];

for(i=0;i

for(j=i+1;j

if(strcmp(str[j],str[i])<0)

{strcpy(t,str[j]);

strcpy(str[j],str[i]);

strcpy(str[i],t);

}

}

/*字符串用指针数组存储*/

char *pstr[3]={“def”,”abc”,”amn”}; int i,j;

char *pt;

for(i=0;i

for(j=i+1;j

if(strcmp(pstr[j],pstr[i])<0)

{pt=pstr[j];pstr[j]=pstr[i];

pstr[i]=pt;}

}

18.字符串的模式匹配

int pipei(char s[],char t[])

{ int i=0,j=0;

while(s[i]&&t[j])

if(s[i]==t[j]) i++,j++;

else i=i-j+1,j=0;

if(t[j]) return -1;/*失败*/

else return i-j; /*成功返回匹配的下标*/

}

19.统计单词个数

int fcount(char str[])

{ int i=0,n=0,flag=1;

while(str[i])

{ if(isalpha(str[i]))

{ if(flag==1) n++,flag=0;}

else flag=1;

i++;

}

return n;

}

递归程序见提纲11页。单链表见提纲20-21页。

补充:

1.输出9*9口诀。共9行9列,i控制行,j控制列。

#include "stdio.h"

main()

{int i,j,result;

for (i=1;i<10;i++)

{ for(j=1;j<10;j++)

{ result=i*j;

printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/ }

printf("\n");/*每一行后换行*/

}

}

2.编程打印直角杨辉三角形。

main()

{int i,j,a[6][6];

for(i=0;i<=5;i++)

{a[i][i]=1;a[i][0]=1;}

for(i=2;i<=5;i++)

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j]+a[i-1][j-1];

for(i=0;i<=5;i++)

{for(j=0;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");}

}

3.统计出若干学生的平均成绩,最高分和最高分的人数。

float fun(float a[],int n)

{ float max=0; int J=0;

int i;float sum=0,ave;

max=a[0];

for(i=0;i

{ if (max

sum+=a[i];}

ave=sum/n;

for(i=0;i

if(a[i]==max) J++;

return ave;

}

4.输入一个字符串,只保留字母字符,并统计新字符串字母的个数。

fun(char *ptr)

{ inti,j;

for(i=0,j=0;*(ptr+i)!='\0';i++)

if(*(ptr+i)<='z'&&*(ptr+i)>='a'||*(ptr+i)<='Z'&&*(ptr+i)>='A')

{ *(ptr+j)=*(ptr+i);

j++;}

*(ptr+j)='\0'; return j;

}

5.求5行5列矩阵的主、副对角线上元素之和。注意,两条对角线相交的元素只加一次。

int fun(int a[M][M])

{ int s=0;

int i,j;

for(i=0;i

s=s+a[i][i]+a[i][M-1-i];

s=s-a[(M-1)/2][(M-1)/2];

return s;

}

相关主题
文本预览
相关文档 最新文档