夏凡与黄梦莹:HELP!请帮我用C语言编写这几个程序!!

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 00:11:23
俺有几道C语言作业,用C语言编写这几个程序。望高手帮忙解决.一定要容易读懂的哦~~谢谢
1)1到100的100个自然数排成一圈,从第1个数开始数,每数到第7个,那个数就出圈,问最后一个出圈的数是什么?
2)求1到1000之间的所有的质数之和。
3)给出两个数组A,B,
A={123,45,46,75,56,787,5,57,465,6,46,33,64,45,45,47,65,66,44,46}
B={22,234,56,35,56,4,6,73,5,65,56,87,567,87,97,97,65,87,66,77}
要求一个分别对A,B排序,再对A,B合并,使之排序。

第一题程序,请指正!
#include<stdio.h>
int fun(int *s);
void main()
{
int a[101]={0},i,s=0;
for(i=1;i<=100;i++)
a[i]=1;
while(fun(a)){
for(i=1;i<=100;i++){
s+=a[i]; /*将所有数组元素都赋为1,当被踢掉时赋成0*/
if(s%7==0)
a[i]=0;
}
}

}
int fun(int *s)
{
int i,flag=1,t=0;
for(i=1;i<=100;i++)
t+=s[i];
if(t==1){
flag=0;
for(i=1;i<=100;i++)
if(s[i]==1)
break;
printf("\ni=%d\n",i);}
return flag;
}

第二题。
#include<stdio.h>
static int s[800];/*定义一个数组存放质数*/
void prime(int *s);
void main()
{
int i=0;
long sum=0;
prime(s);

while(s[i]){
printf("%d ",s[i]);
sum+=s[i];
i++;}
printf("\n sum=%ld \n",sum);
}

void prime(int *s)/*思路是只要一个数不能被比它小的任意质数整除则为质数*/
{
int i,j;
s[0]=2;
for(i=3;i<1000;i++){
j=0;
while(s[j]){
if(i%s[j]==0)
break;
j++;}
if(s[j]==0)
s[j]=i;
}
}

第三题。
#include<stdio.h>
void sort(int *s,int n);
void geti(int *s);
void numcat(int *a,int *b);
void main()
{
int a[41]={123,45,46,75,56,787,5,57,465,6,46,33,64,45,45,47,65,66,44,46,0},
b[21]={22,234,56,35,56,4,6,73,5,65,56,87,567,87,97,97,65,87,66,77,0};
/*末尾加0使数组有字符串类似的性质*/

sort(a,20);/*排序*/
sort(b,20);/*排序*/
geti(a);
printf("\n");
geti(b);/*自定义的输出数组函数*/
printf("\n");
numcat(a,b);/*在a数组后接上b数组*/
sort(a,40);/*排序*/
geti(a);

}

void sort(int *s,int n) /*选择排序*/
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i;j<n;j++)
if(s[i]>s[j]){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}

void geti(int *s)
{
int i=0;
while(*s){
printf("%3d,",*s++);
i++;
if(i%10==0)
printf("\n");}
}

void numcat(int *a,int *b)
{
while(*a++);
a-=1;
while(*a++=*b++);
}