用c语言编程

用c语言编程:整数集合M有如下定义 A:1属于M; B:如果x属于M,则2x+1属于M,3x+1属于M; C:没有别的整数属于M. 编写c程序按递增顺序生成并输出集合M的前30项.再编写一个函数,判定任意一个整数z是否属于集合M.

程序就是读取文件到数组,再将数组进行排序,最后写入文件。

读写文件流程:fopen获取文件流(根据读写需求,选择参数,使用完必须调用fclose函数关闭),fscanf读取文件内容,fseek控制文件流指针,fprintf写入文件。

选择排序:每个循环周期选出一个最值,交换一次。

下面是代码(数组为动态数组):

#include <stdio.h>

#include <malloc.h>

int maxLen;//数组长度

int *read2Nums(char path[]);//读取

int write2File(int *nums,char path[]);//写入

void showNums(int *nums);

int px(int *nums,int flag);//选择排序flag=1升序,flag=0降序

int main()

{

    int *nums=NULL;

    char rPath[]="c:\\000.dat",wPath[]="c:\\rank.dat";

    if(!(nums=read2Nums(rPath))) return 1;

    showNums(nums);

    printf("数组升序排列:\n");

    if(px(nums,1)==-1) return 1;

    showNums(nums);

    printf("数组降序排列:\n");

    if(px(nums,0)==-1) return 1;

    showNums(nums);

    printf("写入到文件路径%s下(存在覆盖,不存在新建)\n",wPath);

    if(write2File(nums,wPath)==-1) return 1;

    printf("写入成功!\n");

    return 0;

}

void showNums(int *nums)

{

    int i;

    if(nums) for(i=0,printf("文件内容:\n");i<maxLen;printf("%d ",nums[i]),i++);

    printf("\n");

}

int px(int *nums,int flag)

{

    int i,j,n,temp;

    if(!nums) return -1;

    for(i=0;i<maxLen-1;i++)

    {

        n=i;

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

        {

            if(flag && nums[n]>nums[j]) n=j;

            if(!flag && nums[n]<nums[j]) n=j;

        }

        temp=nums[i],nums[i]=nums[n],nums[n]=temp;

    }

    return 1;

}

int write2File(int *nums,char path[])

{

    int i;

    FILE *fp=NULL;

    if(!nums) return -1;

    if(!(fp=fopen(path,"w"))) return -1;

    //fseek(fp,SEEK_END);

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

        fprintf(fp,"%d ",nums[i]);

    fclose(fp);

    return 1;

}

int *read2Nums(char path[])

{

    int *nums=NULL,*temp=NULL,cnt=0;

    FILE *fp=NULL;

    maxLen=10;

    if(!(fp=fopen(path,"r"))) return NULL;

    nums=(int *)malloc(sizeof(int)*maxLen);

    if(!nums) return NULL;

    while(fscanf(fp,"%d",&nums[cnt++])!=-1)

        if(cnt==maxLen)//数组长度不够扩展(每次扩展10长度)

        {

            maxLen=maxLen+10;

            temp=(int *)realloc(nums,sizeof(int)*maxLen);

            if(temp) return NULL;

            nums=temp;

        }

    if(--cnt<maxLen)//函数结束前,删除多余地址,减少内存占用

    {

        maxLen=cnt;

        temp=(int *)realloc(nums,sizeof(int)*maxLen);

        if(!temp) return NULL;

        nums=temp;

    }

    fclose(fp);

    return nums;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-29
您若要C++程序就看我这个
#include
<iostream>
using
namespace
std;
int
main()
{
int
numbers[10];
int
i;
cout<<"请输入10个整数"<<endl;
for(i=0;
i<10;
i++)
{
cin>>numbers[i];
}
int
maxnum
=
numbers[0];
for(i=1;
i<10;
i++)
{
if(maxnum
<=
numbers[i])
{
maxnum
=
numbers[i];
}
}
int
sum
=
0;
for(i=0;
i<10;
i++)
{
sum
+=
numbers[i];
}
float
average
=
sum/10.0f;
cout<<"10个整数当中最大的是"<<maxnum<<endl;
cout<<"10个整数的平均数是"<<average<<endl;
return
0;
}
谢谢采纳!
第2个回答  推荐于2017-12-16
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

void insert(int *array, int num)//将num按递增顺序插到array中
{
int i,j;
for(i=29; i >= 0; i--)//寻找num的合适插入点
{
if(array[i] == num)
{
return;//集合没有相同项
}
else if(array[i] < num)
{
break;
}
}
if(i == 29 ) return;

for(j=28; j > i; j--)//将待插入位置后面的元素后移
{
array[j+1]=array[j];
}

array[j+1]=num;
}

int is_in_array(int *array, int num)/*判断num是否集合M的元素*/
{
int i;
/*:如果x属于M,则2x+1属于M,3x+1属于M*/
/*<=>*/
/*:如果x属于M,则(x-1)/2或(x-1)/3属于M (1除外)*/
if(num <= array[29] )
{
for(i=0; i<30; i++)
{
if(array[i] == num)
return 1;
}
return 0;
//如果num在array的前30项中则num是集合M中的元素返回1,否则返回0
}

if( (num-1)%3 == 0 )//num-1=3x是3的倍数
{
if(is_in_array(array, (num-1)/3))
return 1;
}

if( (num-1)%2 == 0 )
{
if(is_in_array(array, (num-1)/2))
return 1;
}
//递归思想
return 0;

}
int main()
{
int array[30]={1};
int num=1;
int i;
for(i=1; i < 30; i++)
{
array[i]=99999;
//初始化成一些大数,保证大于第30项即可
}

for(i=0; i < 30; i++)
{
insert(array, 2*array[i]+1);
insert(array, 3*array[i]+1);
/*:如果x属于M,则2x+1属于M,3x+1属于M*/
}
printf("the M is\n");

for(i=0; i < 30; i++)
{
printf("%d\t", array[i]);

if( i%5 == 4)
{
printf("\n");//每行5个
}
}
printf("please input a num to judge\n");
scanf("%d", &num);

if(is_in_array(array, num))
{
printf("%d is in M\n", num);
}
else
{
printf("%d is not in M\n", num);
}

return 0;
}本回答被提问者采纳