大三下--第四届中国矿业大学编程大赛

1111111111111111111111111111111111111111111111111111111111111111111111111

 

#include<stdio.h>
#include<stdlib.h>
void main()
{
   printf("  *****************************************************************/n/n");
   printf("              此程序功能为:根据输入范围k,给出此范围/n");
   printf("              内最大的10个能被13或17整除的自然数之和/n/n");
   printf("  *****************************************************************/n/n");
   int sum(int k);     //功能函数,传入整数k,输出k以内最大的10个能被13或17整除的自然数之和
   int choice,k,in1,in2,inflag1,result;
        //choice 存放用户输入的选择操作
        //k  存放用户输入的查找范围
        //inflag1 存放选择操作输入是否正确输入
        //result 存放符合要求的整数的累加和
   inflag1=0;

   printf("  请选择操作:(输入一位整数) 1:继续  其他数字键:退出    ");
   in1=scanf("%d",&choice);

   while(0==inflag1)    //循环判断输入的数据是否合法
   {
    while(1!=in1)    //输入的选择操作格式不对
    {
       printf("选择操作输入格式出错,请重新选择(输入一位整数):");
    in1=scanf("%d",&choice);
    }
    if(choice<0||choice>9)     //输入的整数范围不正确条件
    {
     printf("  您输入的整数不是一位,请重新输入:");
     in1=scanf("%d",&choice);   //重新输入
    }
    else
     inflag1=1;    //输入的格式和范围都正确   
   }
 
   while(0<=choice&&9>=choice)     //确保输入的choice值为一位整数,并且允许用户多次循环输入操作
   {
    if(1==choice)   //choice值为1,则正常执行程序
    {
          printf("  请输入范围整数k(k为整数):");
          in2=scanf("%d",&k);
        
    while(1!=in2)    //输入的范围整数格式不对
    {
         printf("选择操作输入格式出错,请重新选择(输入一位整数):");
      in2=scanf("%d",&choice);    //重新输入
    }
          

          result=sum(k);       //调用函数,并将函数结果赋值给result

          if(0==result)       //根据result值来判断输出情况
          printf("  在范围%d内找不足满足条件的10个数/n/n",k);
          else
             printf("  在范围%d内最大的10个能/n  被13或17整除的自然数之和为:%d/n/n",k,result);
         
    printf("  请选择操作:(输入一位整数) 1:继续  其他数字键:退出    ");   //运行结束再次选择操作,为下一次循环操作输入初值
          in1=scanf("%d",&choice);

    inflag1=0;
    while(0==inflag1)    //循环判断输入的数据是否合法
    {
            while(1!=in1)    //输入的选择操作格式不对
      {
              printf("  选择操作输入格式出错,请重新选择(输入一位整数):");
           in1=scanf("%d",&choice);
      }
            if(choice<0||choice>9)     //输入的整数范围不正确条件
      {
             printf("  您输入的整数不是一位,请重新输入:");
             in1=scanf("%d",&choice);   //重新输入
      }
            else
             inflag1=1;    //输入的格式和范围都正确   
    }
    }

    else exit(0);   // 其他整数值,则退出程序
   }
 
}

int sum(int k)
{
 int count,sum,flag,i;

 count=0;               //count 记下所找到满足要求的整数个数
 sum=0;                 //sum 为累计所找到的整数和
 flag=0;                //flag 为算法是否该结束标志。当其值为0时,则表示还应继续寻找满足条件的整数。其值为1时,表示10个整数都已找到
 
 for(i=k;i>0;i--)       //在K以内的整数内循环
 {
  if(0==i%13||0==i%17)//找到满足条件的整数,进行整数和累加和count计数
  {
   sum=sum+i;      
   count++;
  }

  if(10==count)      //当count值为10时,表示10个数已经找到
  {
   flag=1;
   break;
  }
 }

 if(1==flag)         //当for循环结束时,若flag值为1,则说明找到了满足条件的10个整数,则返回他们的和
  return sum;
 else return 0;      //否则返回0

}

 

 

 

2222222222222222222222222222222222222222222222222222222222222222222222

 

#include<iostream.h>

void main()
{
 int former1,former2,former3,former4,i,result1,result2,result3,result4;
 //formeri 中存放整数平方后结果的后i位
 //resulti 中存放整数平方后的结果


 cout<<"*************************************************"<<endl
  <<"*     “同构数”是指这样的整数:它恰好出现。    *"<<endl
  <<"*      在其平方数的右端如:376*376=141376。     *"<<endl
  <<"*   此程序功能就是找出10000以内的全部“同构数” *"<<endl
  <<"*************************************************"<<endl<<endl;
 cout<<"          一位同构数为:"<<endl<<endl;
 for(i=0;i<10;i++)   //寻找1-9的同构数
 {
  result1=i*i;          //result1中存放着整数平方的结果
  former1=result1%10;    //former1中存放平方后的个位数字
  if(i==former1)          //若整数平方后结果的后一位与原整数相同,则可判断此整数为一位同构数
   cout<<"          "<<i<<"*"<<i<<"="<<result1<<endl;
 }

 cout<<endl<<"          两位同构数为:"<<endl<<endl;
 for(i=10;i<100;i++)   //寻找10-99的同构数
 {
  result2=i*i;
  former2=result2%100;  //former2 中存放平方后结果的后两位数
  if(i==former2)
   cout<<"          "<<i<<"*"<<i<<"="<<result2<<endl;
 }
 
 cout<<endl<<"          三位同构数为:"<<endl<<endl;
 for(i=100;i<1000;i++)   //寻找100-999的同构数
 {
  result3=i*i;
  former3=result3%1000;  //former3中存放平方后结果的后三位数
  if(i==former3)
   cout<<"          "<<i<<"*"<<i<<"="<<result3<<endl;
 }

 cout<<endl<<"          四位同构数为:"<<endl<<endl;
 for(i=1000;i<10000;i++)   //寻找1000-9999的同构数
 {
  result4=i*i;
  former4=result4%10000;   //former4中存放平方后结果的后四位数
  if(i==former4)
   cout<<"          "<<i<<"*"<<i<<"="<<result4<<endl<<endl;
 }
}

 

3333333333333333333333333333333333333333333333333333333333333

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N  10

struct product        //存放产品的结构体
{
 int num;      //产品代码 
 char name[10];    //产品名称
 float  prize;     //单价
    int  quality;     //库存数量
}pro[N]={1001,"面包",2.5,50,1002,"书本",30.0,100,1003,"彩笔",3.0,55,1004,"书包",60.0,20,1005,"台灯",25.0,15,1006,"杯子",5.5,45,1007,"文具盒",6.0,50,1008,"橡皮",0.5,100,1009,"钢笔",10.0,150,1010,"帽子",25.0,25},infor[N];  
            //pro[]是存放十个产品信息的数组
            //infor[]中存放从文件中读出的信息      

void main()
{
 int flag,i,in,j,pnum;    //flag 用来标记要删除的产品信息是否找到
                          //in 用来标记输入的整数数据是否成功输入
                             //pnum 存放要删除的产品的产品代码
 bool cycle;         //cycle 用来标记判断输入数据格式是否合适的循环是否继续
 FILE *fpr,*fpw;     //读写的文件指针
   
 flag=0;             //其值为0,代表没找到。若其值为1,则表示已经找到
 cycle=true;

 printf("*******************************************************/n");
 printf("*   已知文件中存有库存产品的记录,该记录由产品代码、  */n");
 printf("*   产品名称、单价、数量等域组成,设该文件中的内容    */n");
 printf("*   是按产品代码由小到大的顺序存储(产品代码由1001    */n");
 printf("*   -1010中间无缺货)。此程序实现当输入某产品代码则   */n");
 printf("*              打印出该产品记录的功能。               */n");
 printf("*******************************************************/n/n");
 
 //创建文件并写入产品信息

 if((fpw=fopen("a.dat","w"))==NULL)        //以写的方式打开文件及出错处理
 {
  printf("/nFile could not open!/nExiting program!/n");
  exit(0);
 }
 for(i=0;i<N;i++)
 {
  if(1!=fwrite(&pro[i],sizeof(struct product),1,fpw))   //将信息写入文件,并进行出错处理
   printf("Writing failed!");
 }
 fclose(fpw);   //关闭文件

 //以读方式打开文件,并将文件信息读入数组infor[]

 if((fpr=fopen("a.dat","r"))==NULL)      //以读方式打开文件,并进行出错处理    
 {
  printf("/nFile could not open!/nExiting program");
  exit(0);
 }
 printf("/n输入文件的产品信息为:/n/n");
 printf("代码/t名称/t单价/t/t数量/n/n");
 for(i=0;1==fread(&infor[i],sizeof(struct product),1,fpw);i++)        //读文件信息并输出
  printf("%d/t%s/t%f/t%d/n",infor[i].num,infor[i].name,infor[i].prize,infor[i].quality);
 printf("/n");
    fclose(fpr);     //关闭文件

    //用户输入所要删除的产品代码,并将数组infor[]中信息进行更新

 printf("/n请输入要删除的产品的产品代码(四位整数):");
 in=scanf("%d",&pnum);

 
 while(cycle)
 {
  while(1!=in)                //输入格式错误处理,退出此循环代表输入数据是整数
  {
       printf("输入的产品代码格式错误!/n");
       in=scanf("%d",&pnum);  //输入格式不对时,重新输入
  }
     if(pnum<1000||pnum>9999)     //输入数据不是四位整数的条件
  {
    printf("输入的产品代码不是四位整数,请重新输入:");
    in=scanf("%d",&pnum);   //范围不对时,重新输入
  }
  else
   cycle=false;          //格式、范围都正确后,退出循环
 }
     
 for(i=0;i<N&&flag==0;i++)
 {
  if(pnum==infor[i].num)        //找到要删除的信息
  {
   printf("/n删除的产品信息为:/n/n");
            printf("%d/t%s/t%f/t%d/n/n",infor[i].num,infor[i].name,infor[i].prize,infor[i].quality);    //输出此信息
   flag=1;          //标记已经找到所要删除的信息
   for(j=i;j<N-1;j++)                //将被删除信息后的信息前移
   {
    infor[j].num=infor[j+1].num;
    strcpy(infor[j].name,infor[j+1].name);
    infor[j].prize=infor[j+1].prize;
    infor[j].quality=infor[j+1].quality;
   }
  }
 }
 if(0==flag)           //处理没有找到要删除的信息的情况
 {
  printf("/n没有找到所要求删除的信息!/n/n");
  exit(0);
 }
 
    //以写的方式打开文件,并将更新后的信息写入文件

 if((fpw=fopen("a.dat","w"))==NULL)        //以写的方式打开文件及出错处理
 {
  printf("/nFile could not open!/nExiting program!/n");
  exit(0);
 }
 for(i=0;i<N-1;i++)          //将删除后的N-1条信息写入原文件
 {
  if(1!=fwrite(&infor[i],sizeof(struct product),1,fpw))
  {
   printf("/nWriting failed!/n/n");
  }
 }
 fclose(fpw);          //关闭文件
   
 //以读的方式打开文件,并将文件信息输出

 if((fpr=fopen("a.dat","r"))==NULL)        //以读的方式打开文件及出错处理
 {
  printf("/nFile could not open!/nExiting program!/n");
  exit(0);
 }
 
 printf("删除操作后,文件中信息为:/n/n");
 for(i=0;1==fread(&infor[i],sizeof(struct product),1,fpw);i++)         //依次读出文件信息并输出
  printf("%d/t%s/t%f/t%d/n",infor[i].num,infor[i].name,infor[i].prize,infor[i].quality);
 printf("/n");
 fclose(fpr);     //关闭文件

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值