编程题 - 孪生素数【用函数实现】

孪生素数是指间隔为 2 的相邻素数,例如最小的孪生素数是3和5,5和7也是。输入N找出2-N之间的孪生素数的个数。
输入:N
输出:个数
样例:
10
2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int is(int n)
{
int i;
for (i=2;i < n;i++)
if (n%i==0)
break;
if (i==n)
return 1;
else
return 0;//is函数判断n是否为素数
}
void main()
{
int n,i=0,x=2;
scanf("%d",&n);
while(x<n)
{
if(is(x) && is(x+2))
{
i++;
x++;
}
else
{
x++;
}
}
printf("%d",i);
}

编程题 - 小明的加减法【用函数实现】

叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如:
小明会把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。
现在,小明做了一些a+b和a-b的题目(a, b为整数且不含前导0),如果给你这些题目正确的答案,你能猜出小明会做得到什么答案吗?
输入:
两个整数x,y(-1000000 < = x, y < =1000000), x表示a+b的正确答案,y表示a-b的正确答案。
输入保证合法,且不需考虑a或b是小数的情况。
输出:
输出两个整数s t,之间用一个空格分开,其中s表示小明将得到的a+b答案,t表示小明将得到的a-b答案。
样例:
20 6
38 24

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
int rev(int a)
{
int m,o=0,i=1;
if (a<0)
{
a=-a;
i=-1;
}
while(a>=1)
{
m=a%10;
a=a/10;
o=o*10+m;
}
a=i*(o+a);
}
void main()
{
int x,y,a,b,s,t;
scanf("%d %d",&x,&y);
a=rev((x+y)/2);
b=rev((x-y)/2);
//printf("%d %d\n",a,b);
s=a+b;
t=a-b;
printf("%d %d",s,t);
}

编程题 - 最大最小和平均值

编写函数,寻找具有n个元素的一维数组中的最大值和最小值,并返回数组元素的平均值,函数原形如下:
double fun(int a[],int n,int *max,int *min);
如输入:
5
2 4 5 3 1
则输出为:
5
1
3.000000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
int main()
{
int i,j,t,a[99]={0};
int n,sum=0;
float av;
scanf("%d",&n); //input number
for(i=0;i<n;i++) scanf("%d",&a[i]); //input
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
} //now min=a0 max=an-1
for(i=0;i<n;i++)
sum=sum+a[i];
av=(float)sum/n;
printf("%d\n%d\n%f",a[n-1],a[0],av);
}

编程题 - 二进制转十进制

编写函数,将一个二进制数(以字符串形式表示)转换为十进制数。函数原型如下:
double binTodec(char *str);
其中str为接收的二进制数,函数的返回值为对应的十进制数。
如输入:
1010
则输出为:
10
又如输入:
100
则输出为:
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 33

int input(int);
char a[N];

int main()
{
int i,n,sum=0;

n=input(1);
for(i=n-1;i>=0;i--)
{
if((a[i]-'0')!=1&&(a[i]-'0')!=0)
n=input(0);
}

for(i=n-1;i>=0;i--)
sum+=(a[i]-'0')*((int)pow(2,n-1-i));
printf("%d",sum);
}

int input(int m)
{
printf("%s",m?"":"2");
scanf("%s",a);
return strlen(a);

}

编程题 - 编写函数去掉空格

编写函数,去掉一个字符串(长度不超过80)中除头部和尾部空格外的所有空格,并编写主函数进行调用测试(即返回去掉空格后的字符串。)。
注:字符串头部或尾部可能有多个空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<stdio.h>
#include<string.h>

char delspace(char a[])
{
char ss[80]; //目标输出字符串
int len = strlen(a);
int fspace = 0;
for (int i = 0; i < len; i++) //字符串首部的空格数
{
if (a[i] == ' ')
{
fspace++;
}
else
break;
}
for (int i = 0; i < fspace; i++) //把首部空格拷贝至输出字符串中
{
ss[i] = ' ';
}
int lspace = 0;
for (int i = len - 1; i >= 0; i--) //字符串尾部的空格数
{
if (a[i] == ' ')
{
lspace++;
}
else
break;
}
int j = fspace;
for (int i = fspace; i < len - lspace; i++) //字符串中间空格去掉
{
if (a[i] != ' ')
{
ss[j] = a[i];
j++;
}
}
for (int i = 0; i < lspace; i++) //补齐尾部空格
{
ss[j] = ' ';
j++;
}
for (int i = 0; i < j; i++)
{
printf("%c", ss[i]);
}
}

int main()
{
char s[80];
gets(s);
delspace(s);
return 0;
}

编程题 - 最大值排在中间,最小值排在最左,中值排在最右的排序

从键盘输入奇数个整型数(大于3),对该整数序列按如下规则排序:最大值排在中间,最小值排在最左,中值排在最右,其它值清为0。
输以空格隔开
定义排序函数原型为:void booble(int *array,int n);
运行样例如下所示:
输入
5
1 2 3 4 5
输出
1 0 5 0 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<stdio.h>
void no(int n)
{
int ni=1,no0;
no0=(n-1)/2;
while(ni<no0)
{
printf("0 ");
ni++;
}
}
int main()
{
int i,j,t,a[21]={0};
int n,no0,m,ni=1;
scanf("%d",&n);
//no0=(n-1)/2;
m=(n+1)/2;
//printf("Line1\n");
for(i=0;i<n;i++) scanf("%d",&a[i]);
//printf("\n");
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
//printf("below:\n");
//for(i=0;i<5;i++)
// printf("%d ",a[i]);
printf("%d ",a[0]);
no(n);
printf("%d ",a[n-1]);
no(n);
printf("%d",a[m-1]);
}

编程题 - 排序

编写冒泡排序函数,函数原型:void bubblesort(int a[],int n);对n个整数升序排序。
编写选择排序函数,函数原型:void selectsort(int a[],int n);对n个整数降序排序。
编写main函数,输入10个整数,利用函数将其按升序和降序分别输出排序结果。(输入输出数据间用一个空格分隔)
测试样例:
如输入:
5 2 8 9 10 1 3 4 7 6
则输出为:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main()
{
int i,j,t,a[10]={0};
int n=10;
for(i=0;i<n;i++) scanf("%d",&a[i]); //input
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
} //now min=a0 max=an-1
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d",a[n-1]);
printf("\n");
for(i=n-1;i>0;i--)
printf("%d ",a[i]);
printf("%d",a[0]);
}