初级:
一.请编写函数long fun(long int x),功能是:将长整型数x中每一位上为奇数的数依次取出,并逆序和顺序分别构成一个新数返回。
例如:程序运行时输入123456789,输出:b=97531 和13579。
#include <stdio.h> //逆序输出 long fun(long int x) { int a; long b=0; while (x!=0) { a=x%10; if (a%2!=0) { b=b*10+a; } x=x/10; } return (b); } //顺序输出 long fun2(long int x) { int a,m=1; long b=0; while (x!=0) { a=x%10; if (a%2!=0) { b=a*m+b; m*=10; } x=x/10; } return (b); } int main() { long int x; printf("Please input a long int num:"); scanf("%ld",&x); long b=fun2(x); printf("b=%ld ",b); }
二 编写函数void fun(int *x,int n),它的功能是:求出数组x中的最小数和次最小数,并把最小数和a[0]中的数对调、次最小数和a[1]中的数对调,其余的数保持不变。
如程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。
#include <stdio.h> void fun(int *x,int n) { int i,j,k=0; for (i=0;i<2;i++) { int temp=x[i]; for (j=i;j<n;j++) { if (x[i]>x[j]) { x[i]=x[j]; k=j; } } x[i]=x[k]; x[k]=temp; } } int main() { int n; int x[50]; printf("input size N :"); scanf("%d",&n); for (int i=0;i<n;i++) { scanf("%d",&x[i]); } fun(x,n); for (i=0;i<n;i++) { printf("%d ",x[i]); } }
三. 编写函数long fun(int high,int n),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。
例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。
分析:素数就是只有1这个约数。high以内的数,肯定最大的因数是q=sqrt(high);,判断从2-q没有一个数能整除的即是素数
long fun(int high,int n) { int i,j,count=0,sum=0; int q=sqrt(high); for (i=high-1;i>=2;i--) { for (j=q;j>1;j--) { if (i%j==0 && i>j)//注意,&&后面的条件,负责会把素因子漏掉 break; } if (j<=1) { sum+=i; count++; } if (count==n) break; } return sum; } int main() { int high,n; scanf("%d %d",&high,&n); printf("%d ",fun(high,n)); }
四 函数void fun(int x,char * p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。
如输入13,输出1101,输入-13,输出-1101。
分析:能被2整除二进制位为0,否则为1,中间借助额外数组保存临时数据。
void fun(int x,char *p) { int i,k,j=0; int m=x; char s[50]; while (x!=0) { if (x%2==0) { s[j]='0'; } else s[j]='1'; j++; x=x/2; } for (i=j-1, k=0;i>=0;i--,k++) { if (m<0) { p[0]='-'; p[k+1]=s[i]; } else { p[k]=s[i]; } } if (i==-1) { if (m<0) { p[k+1]='