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); //关闭文件
}