编程pj
‘壹’ C语言编程—学生成绩查询系统!紧急!!!
这个是我自己做的类式的,你可以按自己的要求改下·不难的和你的差不多,给分哦
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 10
/*****定义结构体*****/
typedef struct students /*标记为students*/
{
char num[10]; /*学生学号*/
char name[10]; /*学生姓名*/
int age; /*年龄*/
char sex[10]; /*性别*/
float cyy; /*C语言成绩*/
float computer; /*计算机成绩*/
float english; /*英语成绩*/
float pj; /*平均成绩*/
}STU;
STU temp;
void sort(STU students[],int n); //排序
void save(STU students[] ,int n);//导出
int Locate(STU students[],int n);//查询
/*--------------显示菜单--------------------*/
char displaymenu()
{
char k;
system("cls");
printf(" 学生成绩管理 \n");
printf("-----------------------------------应用菜单-------------------------------------\n");
printf(" 1 输入学生成绩\n\n");
printf(" 2 输出学生成绩\n\n");
printf(" 3 查询学生成绩\n\n");
printf(" 4 修改学生成绩\n\n");
printf(" 5 查看成绩排序\n\n");
printf(" 6 查看成绩统计\n\n");
printf(" 7 保存数据\n\n");
printf(" 8 读取数据\n\n");
printf(" 9 退出系统\n\n");
printf(" 请选择你想进行的操作:");
k=getchar();
return k;
}
/*****定义输出函数*****/
void printheader() /*格式化输出表头*/
{
printf("\n\n************************学生成绩管理系统****************************\n\n\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | C语言成绩 |计算机成绩 | 英语成绩| 平均成绩 | \n");
}
void printdata(STU pp) /*格式化输出表中数据*/
{
STU* p;
p=&pp;
printf("| %-5s| %-5s | %-4d| %-4s| %-6.0f| %-6.0f| %-5.0f| %-6.0f|\n",p->num,p->name,p->age,p->sex,p->cyy,p->computer,p->english,p->pj);
}
/*****添加学生信息*****/
int add(STU students[] ,int *n)
{
int i=0;
system("cls");
printf(" \n");
printf(" 请输入学生信息 \n");
printf(" 退出请在学生号处输入:0 \n");
printf("请输入学生学号:\n ");
scanf("%s",students[i].num);
while(strcmp(students[i].num,"0") )//当输入的学号为0时结束输入
{
printf("请输入学生姓名:\n ");
scanf("%s",students[i].name);
printf("****************\n\n\n");
printf("请输入学生年龄:\n ");
scanf("%d",&students[i].age);
printf("****************\n\n\n");
printf("请输入学生性别:\n");
scanf("%s",students[i].sex);
printf("****************\n\n\n");
printf("请输入C语言成绩:\n ");
scanf("%f",&students[i].cyy);
printf("****************\n\n\n");
printf("请输入计算机成绩:\n ");
scanf("%f",&students[i].computer);
printf("****************\n\n\n");
printf("请输入英语成绩:\n ");
scanf("%f",&students[i].english);
printf("****************\n\n\n");
students[i].pj=(students[i].cyy+students[i].computer+students[i].english)/3;
printf("学生平均成绩: %-8.0f\n",students[i].pj);
i++;
printf("****************\n\n\n");
printf("请输入学生学号:\n ");
scanf("%s",students[i].num);
}
*n=i;
save(students ,i);
return i;
}
/*****查询学生信息函数*****/
int Locate(STU students[],int n)
{
int k,m=-1;
char num[10],name[20];
int i=0;
system("cls");
printf(" 退出请输入:0 \n");
printf("请选择以什么方式查询:1).按学生学号查询 2).按学生姓名查询 \n");
scanf("%d",&k);
if(k==1)
{
printf("请输入你要查询的学生学号:\n");
scanf("%s",num);
while(i<n)
{
if(strcmp(students[i].num,num)==0) /*若找到学号*/
{
printf(">>学生学号:%s\n*学生姓名:%s\n*学生年龄:%d\n*学生性别:%s\n>C语言成绩:%-8.0f\n>计算机成绩:%-8.0f\n>>英语成绩:%-8.0f\n>>平均成绩:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
getchar();
}
else if(k==2)
{
printf("请输入你要查询的学生姓名:\n");
scanf("%s",name);
while(i<n)
{
if(strcmp(students[i].name,name)==0) /*若找到姓名*/
{ printf("学生学号:%s\n学生姓名:%s\n学生年龄:%d\n学生性别:%s\n学生C语言成绩:%-8.0f\n计算机成绩:%-8.0f\n英语成绩:%-8.0f\n平均成绩:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
}
return m;/*返回一个根m便于修改学生信息*/
getchar();
}
/*****显示函数*****/
void input(STU students[],int n)
{
int i;
system("cls"); //清屏
if(n==0) /*表示没有学生信息记录*/
{
printf("\n没有学生记录!\n");
}
printf("\n\n");
printheader(); /*输出表格头部*/
i=0;
while(i<n) /*逐条输出数组中存储的学生信息*/
{
printdata(students[i]);
i++;
}
getchar();
}
/*****修改子程序*****/
void Modify(STU students[],int n)
{
int i;
if(n<=0)
{
system("cls");
printf(" \n退出请输入:0 \n");
printf("\n----------not found!----------\n");
getchar();
return ;
}
system("cls");
printf("修改学生信息");
input(students,n);
i=Locate(students,n); /*查询到该数组元素,并返回下标值*/
if(i!=-1) /*若i!=-1,表明已经找到该数组元素*/
{
printf("请输入新的学生信息: \n");
printf(" 学号: ");
scanf("%s",students[i].num);
printf(" 姓名: ");
scanf("%s",students[i].name);
printf(" 年龄: ");
scanf("%d",&students[i].age);
printf(" 性别: ");
scanf("%s",students[i].sex);
printf(" C语言: ");
scanf("%f",&students[i].cyy);
printf(" 英语: ");
scanf("%f",&students[i].english);
printf(" 计算机: ");
scanf("%f",&students[i].computer);
students[i].pj=(students[i].cyy+students[i].english+students[i].computer)/3;
printf("平均成绩: %-9.0f\n",students[i].pj);
save(students ,n);
printf("\n-------------修改成功!-------------\n");
}
else
printf("not found!\n");
getchar();
}
/*****学生成绩排序子程序*****/
void sort(STU students[],int n)
{
int i,j,a,b,c,d,e,f,k;
float p;
printf(" \n退出请输入:0 \n");
printf("成绩排序方式选择: 1.按C语言 2.按英语 3.按平均 \n ");
scanf("%d",&k);
if(k==1) /*用选择法对C语言排序*/
{
for(i=0; i<n; i++)
for(j=0;j<n-1;j++)
{
if(students[i].english<students[j+1].english)
{
temp=students[i];
students[i]=students[j+1];
students[j+1]=temp;
}
}
}
else if(k==2)/*英语用冒泡法*/
{
for(a=0; a<n-1; a++)
{
c=a;
for(b=a+1; b<n; b++)
if(students[b].cyy>students[c].cyy)
c=b;
if (c!=a)
{
temp=students[a];
students[a]=students[c];
students[c]=temp;
}
}
}
if(k==3) /*平均成绩用插入法*/
{
for(d=1;d<n;d++)
{
p=students[d].pj;
for(e=0;e<d;e++)
if(students[e].pj<p)
break;
if(e==d)
continue;
for(f=d;f>e;f--)
students[f]=students[f-1];
students[e]=temp;
}
}
input(students,n); /*显示排序后的所有记录*/
save(students ,n);
printf("\n 排序完成!\n");
}
/*****统计学生分数在各等级的人数子程序*****/
void Tongji(STU students[],int n)
{
int count6085=0,count85=0,count60=0;
int i=0;
system("cls");
printf(" \n退出请输入:0 \n");
input(students,n);
i=0;
while(i<n)
{
if(students[i].pj>85) {count85++;i=i+1;continue;} /*平均成绩=>85*/
if(students[i].pj>=60&&students[i].pj<=85) {count6085++;i=i+1;continue;} /*60<平均成绩<85*/
if(students[i].pj<60) {count60++;i=i+1;continue;} /*平均成绩<60*/
}
printf("\n************统计结果************\n\n");
printf("平均成绩高于85分的人数:%d \n",count85);
printf(" \n");
printf("平均成绩在65分和80分之间的人数:%d \n",count6085);
printf(" \n");
printf("平均成绩低于60分的人数:%d \n",count60);
printf(" \n");
printf("\n\n**********统计结束**********");
getchar();
}
/*****导出或保存数据*****/
void save(STU students[],int n)
{
FILE* fp;
int i=0;
fp=fopen("students","wb+");/*以读写方式打开创建一个二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n*******打开文件错误!*******\n");
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&students[i],sizeof(STU),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n*共导出%d个学生信息*\n",i);
getchar();
}
else
{
system("cls");
printf("**没有信息导出*\n");
getchar();
}
fclose(fp); /*关闭此文件*/
}
/*****导入数据*****/
void Read(STU students[],int * n)
{
FILE* fp;
int i=0;
fp=fopen("students","rb");/*以只读方式打开一个已有的二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n********打开文件错误!********\n");
exit(0);
}
for(i=0;i<N;i++)
{
if(fread(&students[i],sizeof(STU),1,fp)==1)/*每次读一条记录或一个结构数组元素至文件*/
continue;
else
break;
}
*n=i;
if(i>0)
{
printf("\n\n************共导入:%d 个学生信息 ************\n",i);
getchar();
}
else
{ system("cls");
printf("************没有信息导入!************\n");
getchar();
}
getchar();
fclose(fp); /*关闭此文件*/
}
/*****主函数*****/
void main()
{
STU students[N];
int n;
char s1[3],s2[3]={"1"};
int i,k;
printf("\n\n");
printf("******************************************************\n");
printf("^ < 欢迎使用本软件> ^\n\n");
printf("^ <版本 : oooo> ^\n\n\n");
printf("^ <姓名>:卢景光 <班级>: 09623 <学号>:34 ^\n");
printf("^ ^\n");
printf("******************************************************\n");
printf("\n\n");
for(i=0;i<3;i++)
{
printf("\n请输入密码:");
gets(s1);
if(strcmp(s1,s2)==0)
break;
else
printf("\n>密码错误,请重新输入");
}
if(i>2)
{
printf("\n您已连续3次输错,系统将退出!\n");
exit(0);
}
else
{
while(1)
{
k=displaymenu();
switch(k)
{
case '1' : add(students,&n); break;
case '2' : Read(students,&n);input(students,n) ;break;
case '3' : Read(students,&n);Locate(students,n);break;
case '4' : Read(students,&n);Modify(students,n);;break;
case '5' : Read(students,&n);sort(students,n);break;
case '6' : Read(students,&n);Tongji(students,n); break;
case '7' : save(students,n) ;break;
case '8' : Read(students,&n);break;
case '9' : system("cls");
printf("\n **********谢谢您的使用**********\n");exit(0);break;
default : printf("\n\n输入错误,输入必须是0~9之间的一个数字!请重新输入\n");getchar();getchar();
}
}
}
}
‘贰’ 如何编写程序
43、请编写函数countvalue(),它的功能是:求n以内(不包括n)同时能被3和7整数的
所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。
例如若n为1000时,函数值应为:s=153.909064。
部分源程序已给出。
请勿改动主函数main()和输入输出数据函数progreadwrite()的内容。
#include
#include
#include
double countvalue(int n)
{
}
main()
{
clrscr();
printf("s=%f\n",countvalue(1000));
progreadwrite();
}
progreadwrite()
{
FILE *fp,*wf;
int i,n;
float s;
fp=fopen("in.dat","r");
if(fp==NULL)
{printf("Can't open the data file in.dat\007\n");
return;
}
wf=fopen("out.dat","w");
for(i=0;i<10;i++)
{fscanf(fp,"%d",&n);
s=countvalue(n);
fprintf(wf,"%f\n",s);
}
fclose(fp);
fclose(wf);
}
/* 注:由于能同时被3和7整除的自然数最小的是21,而它们之间的间隔应是21(由最小
公倍数可得)。因而在for()循环可定成如下形式。*/
double countvalue(int n)
{
int i;
float s=0.0;
for(i=21;i
s+=i;
s=sqrt(s);
return s;
}
44、请编制程序,从文件in.dat中读取200个整数至数组xx中,不计数组xx绝对值最大的
数(若有重复值,则都不计),再求出绝对值最大数max及绝对值最大数的个数cnt和所
剩下200-cnt个数的算求平均值pj (保留2位小数)。
结果max,cnt1,min,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt,xx[N],max;
float pj;
FILE *fw;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
}
/* 注:该题的编程方法与题42相似。*/
void main()
{
int cnt,xx[N],max;
float pj;
FILE *fw;
int i,max0;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
max0=abs(xx[0]);
pj=0;
cnt=0;
for(i=1;i<N;I++)
if(max0 else max=abs(xx[i]);
for(i=0;i<N;I++)
if(abs(xx[i])<MAX0&&ABS(XX[I])>max) max=abs(xx[i]);
for(i=0;i<N;I++)
if(abs(xx[i])==max) cnt++;
else pj+=xx[i];
pj=(float)((int)pj*100/(200-cnt))/100;
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
}
45、已知在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数readdat
()读取这若干个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出
这文件中共有多少个正整数totnum;2、求这些数右移1位后,产生的新数是奇数的数的
个数totcnt,以及满足此条件的这些数(右移前的值)的算术平均值totpjz,最后调用
函数writedat()把所求的结果输出到文件out.dat中。
部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totnum=0;
int totcnt=0;
double totpjz=0.0;
int readdat(void);
void writedat(void);
void calvalue(void)
{
}
totpjz/=totcnt;
}
void main()
{
int i;
clrscr();
for(i=0;i if(readdat())
{printf("Can't open the data file in.dat!\007\n");
return;
}
calvalue();
printf("totnum=%d\n",totnum);
printf("totcnt=%d\n",totcnt);
printf("totpjz=%.2lf\n",totpjz);
writedat();
}
int readdat(void)
{
FILE *fp;
int i=0;
if((fp=fopen("in.dat","r"))==NULL) return 1;
while(!feof(fp))
fscanf(fp,"%d,",&xx[i++]);
fclose(fp);
return 0;
}
void writedat(void)
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d\n%d\n%.2lf\n",totnum,totcnt,totpjz);
fclose(fp);
}
/* 注:该题与题41相似。*/
void calvalue(void)
{
int i,data;
for(i=0;i<MAXNUM;I++)
{if(!xx[i]) break;
if(xx[i]>0) totnum++;
data=xx[i]>>1;
if(data%2)
{totcnt++;
totpjz+=xx[i];
}
}
totpjz/=totcnt;
}
46、请编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶
数的个数cnt2以及数级xx下标为奇数的元素值的算术平均值pj(保留2位小数)。
结果cnt1,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
/* 注:
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
int i,j=0;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
pj=0;
cnt1=cnt2=0;
for(i=0;i<N;I++)
{if(xx%2) cnt1++;
else cnt2++;
if(i%2) pj+=xx[i],j++;
}
pj=(float)((int)pj*100/j)/100;
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
47、已知在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数readdat
()读取这若干个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出
这文件中共有多少个正整数totnum;2、求出这些数中的各位数字之和是偶数的数的个数
totcnt,以及满足此条件的这些数的算术平均值totpjz,最后调用函数writedat()把所
求的结果输出到文件out.dat中。
部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totnum=0;
int totcnt=0;
double totpjz=0.0;
int readdat(void);
void writedat(void);
void calvalue(void)
{
}
void main()
{
int i;
clrscr();
for(i=0;i if(readdat())
{printf("Can't open the data file in.dat!\007\n");
return;
}
calvalue();
printf("totnum=%d\n",totnum);
printf("totcnt=%d\n",totcnt);
printf("totpjz=%.2lf\n",totpjz);
writedat();
}
int readdat(void)
{
FILE *fp;
int i=0;
if((fp=fopen("in.dat","r"))==NULL) return 1;
while(!feof(fp))
fscanf(fp,"%d,",&xx[i++]);
fclose(fp);
return 0;
}
void writedat(void)
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d\n%d\n%.2lf\n",totnum,totcnt,totpjz);
fclose(fp);
}
/* 注:该题的关键在于会不会取出一个数的个、十、百、千位上的数。a[i]%10对10求
余结果为个位数,a[i]%100/10先对100求余得出后两位数然后再除10,由于为整数因此
得出上一个后两位数的第一位。依此类推。*/
void calvalue(void)
{
int i;
for(i=0;i<MAXNUM;I++)
{if(!xx[i]) break;
if(xx[i]>0) totnum++;
if((xx[i]/1000+xx[i]/100%10+xx[i]/10%10+xx[i]%10)/2==0)
{totcnt++;
totpjz+=xx[i];
}
}
totpjz/=totcnt;
}
48、请编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶
数的个数cnt2以及数级xx值为奇数的元素值的算术平均值pj(保留2位小数)。
结果cnt1,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
/* 注:
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
int i;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
pj=0;
cnt1=cnt2=0;
for(i=0;i<N;I++)
if(xx[i]%2)
else cnt2++;
pj=(float)((int)pj*100/cnt1)/100;
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
49、已知在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数readdat
()读取这若干个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出
这文件中共有多少个正整数totnum;2、求出这些数中的各位数字之和是奇数的数的个数
totcnt,以及满足此条件的这些数的算术平均值totpjz,最后调用函数writedat()把所
求的结果输出到文件out.dat中。
部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totnum=0;
int totcnt=0;
double totpjz=0.0;
int readdat(void);
void writedat(void);
void calvalue(void)
{
}
void main()
{
int i;
clrscr();
for(i=0;i if(readdat())
{printf("Can't open the data file in.dat!\007\n");
return;
}
calvalue();
printf("totnum=%d\n",totnum);
printf("totcnt=%d\n",totcnt);
printf("totpjz=%.2lf\n",totpjz);
writedat();
}
int readdat(void)
{
FILE *fp;
int i=0;
if((fp=fopen("in.dat","r"))==NULL) return 1;
while(!feof(fp))
fscanf(fp,"%d,",&xx[i++]);
fclose(fp);
return 0;
}
void writedat(void)
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d\n%d\n%.2lf\n",totnum,totcnt,totpjz);
fclose(fp);
}
/* 注:与47题相似。*/
void calvalue(void)
{
int i;
for(i=0;i<MAXNUM;I++)
{if(!xx[i]) break;
if(xx[i]>0) totnum++;
if((xx[i]/1000+xx[i]/100%10+xx[i]/10%10+xx[i]%10)/2==1)
{totcnt++;
totpjz+=xx[i];
}
}
totpjz/=totcnt;
}
50、请编制程序,从文件in.dat中读取200个整数至数组xx中,不计数组xx最大的数(若
有重复值,则都不计),再求出最大数max及最大数的个数cnt和所剩下200-cnt个数的算
求平均值pj (保留2位小数)。
结果max,cnt1,min,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt,xx[N],max;
float pj;
FILE *fw;
int i,max0;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
}
/* 注:本题要注意先去掉最大数然后最求出次大数max及个数cnt。要在求max0时给ma
x任意赋一个不能等于max0的数,只有这样才能保证求次大数max时不会出错。*/
void main()
{
int cnt,xx[N],max;
float pj;
FILE *fw;
int i,max0;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
max0=xx[0];
pj=0;
cnt=0;
for(i=1;i<N;I++)
if(max0 else max=xx[i];
for(i=0;i<N;I++)
if(max0>xx[i]&&max for(i=0;i<N;I++)
if(xx[i]==max) cnt++;
else pj+=xx[i];
pj=(float)((int)pj*100/(200-cnt))/100;
printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);
fclose(fw);
}
51、下列程序的功能是:计算500-800区间内素数的个数cnt,并按所求素数的值从大到
小的顺序,再计算其间隔加、减之各,即第1个素数-第2个素数+第3个素数-第4个素数+
第5个素数……的值sum。请编写函数countvalue()实现程序的要求,最后调用函数writ
edat()把结果cnt和sum,输出到文件out11.dat中。
部分源程序已给出。
请勿改动主函数main()和输出数据函数writedat()的内容。
#include
int cnt,sum;
void countValue()
{
}
void main()
{
cnt=sum=0;
countValue();
printf("cnt=%d\n",cnt);
printf("sum=%d\n",sum);
writeDAT();
}
writeDAT()
{
FILE *fp;
fp=fopen("OUT11.DAT","w");
fprintf(fp, "%d\n%d\n",cnt,sum);
fclose(fp);
}
/* 注:本题要求从大到小的顺序进行加减运算,因此这里采用从800开始循环到500这样
就能保证出来的素数就是从大到小,内嵌的for()再加上if()是用来判断是否为素数。其
中k用来控制加减运算。*/
void countValue()
{
int i,j,k=1;
for(i=800;i>=500;i--)
{for(j=2;j<I;J++)
if(i%j==0) break;
if(j>=i)
{cnt++;
sum+=k*i;
k=-1*k;
}
}
}
52、请编制程序,从文件in.dat中读取200个整数至数组xx中,不计数组xx最小的数(若
有重复值,则都不计),再求出最小数min及最小数cnt和所剩下200-cnt个数的算求平均
值pj (保留2位小数)。
结果min,cnt,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt,xx[N],min;
float pj;
FILE *fw;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\nmin=%d,cnt=%d,pj=%6.2f\n",min,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",min,cnt,pj);
fclose(fw);
}
/* 注:与50相似。*/
void main()
{
int cnt,xx[N],min;
float pj;
FILE *fw;
int i,min0;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
min0=xx[0];
pj=0;
cnt=0;
for(i=1;i<N;I++)
if(min0>xx) min0=xx[i];
else min=xx[i];
for(i=0;i<N;I++)
if(min0<XX[I]&&MIN>xx[i]) min=xx[i];
for(i=0;i<N;I++)
if(xx[i]==min) cnt++;
else pj+=xx[i];
pj=(float)((int)pj*100/(200-cnt))/100;
printf("\n\nmin=%d,cnt=%d,pj=%6.2f\n",min,cnt,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",min,cnt,pj);
fclose(fw);
}
53、下列程序的功能是:先出5000以下符合条件的自然数。条件是:千位数字与百位数
字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位
数字之差的确10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写
函数countvalue(0实现程序的要求,最后调用小孩子数writedat()把结果cnt和sum,输
出到文件out13.dat中。
#include
int cnt,sum;
void countValue()
{
}
void main()
{
cnt=sum=0;
countValue();
printf("cnt=%d\n",cnt);
printf("sum=%d\n",sum);
writeDAT();
}
writeDAT()
{
FILE *fp;
fp=fopen("OUT13.DAT","w");
fprintf(fp, "%d\n%d\n",cnt,sum);
fclose(fp);
}
/* 注:该题的关键亦是如何取出各位数字。*/
void countValue()
{
int i;
for(i=1000;i<5000;i++)
if((i/1000+i/100%10)==(i/10%10+i%10))
if((i/1000+i/100%10)==(i%10-i/1000)*10)
{cnt++;
sum+=i;
}
}
54、请编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶
数的个数cnt2以及数级xx值为偶数的元素值的算术平均值pj(保留2位小数)。
结果cnt1,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include
#include
#define N 200
void read_dat(int xx[N])
{
int i,j;
FILE *fp;
fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
/* 注:已是很简单了吧!*/
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
int i;
clrscr();
fw=fopen("out.dat","w");
read_dat(xx);
cnt1=cnt2=0;
pj=0.0;
for(i=0;i<N;I++)
if(xx[i]%2) cnt1++;
else
pj=(float)((long)(pj*100/cnt2))/100;
printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
fclose(fw);
}
55、下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NIN
E+NINE的个数cnt,以及满足此条件所有的SIX与NINE的和SUM。请编写函数countvalue(
)实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out15.dat中
。
其中S,I,X,N,E各代表一个十进制数字。
#include
long cnt,sum;
void countValue()
{
}
void main()
{
cnt=sum=0;
countValue();
printf("cnt=%d\n",cnt);
printf("sum=%ld\n",sum);
writeDAT();
}
writeDAT()
{
FILE *fp;
fp=fopen("OUT11.DAT","w");
fprintf(fp, "%d\n%d\n",cnt,sum);
fclose(fp);
}
/* 注:由于有SIX+SIX+SIX=NINE+NINE可看出SIX的3倍必须大于等于2000(右边是一个
四位数字的数可知),因此从666开始循环,再由三个数的和是个偶数(右边为一个数的
2倍可知)可循环时步长为2。再由SIX和NINE中有一个共同数字I所以得出第一个if()判
断,还有NINE中有一共同数字N所以得出第二个if()判断。*/
void countValue()
{ int i;
printf("\n");
for(i=666;i<=999;i=i+2)
if(i/10%10==(3*i/2)/100%10)
{cnt++;
sum+=i+3*i/2;
}
}
_________________________________
本人只是为了上机能通过,不追求什么算法速度,答案仅供大家参考,我9号长春上机。(tonggu)
void countValue()
{
int i;
cnt=0;
sum=0;
for(i=1000;i<1500;i++)
if(i/1000==i/10%10 && i/3*3==i)
{
cnt++;
sum+=i*4;
}
}
‘叁’ 一个实例搞定MATLAB界面编程 pjimage.m 学习中遇到的问题
调试了半天终于get了。错误原因是h_pjimage = findobj('Tag','figure_pjimage');这一句寻找没成功,至于为什么不成功我也不清楚(把这句放到pjimage.m中寻找也找不到,很奇怪),然后就返回0x0 GraphicsPlaceholder(空的图形窗口)。然后我把这一句改成了h_pjimage = findobj(pjimage,'Tag','figure_pjimage');也就是指定在pjimage中寻找,之后就成功了。
‘肆’ 在编程里面,pj是什么字意
作者或上传者的网名
‘伍’ 编程分别输入两个按从小到大排序的数组a和b,将这两个有序数组合并,使合并后的数
#include<stdio.h>
#define N 20
int main()
{
int a[N]={ 0 }, b[N]={ 0 };
int anum,bnum,c[N+N];
int *pi, *pj,*pk;
scanf("%d",&anum); //输入数组a元素个数
for(pi=a;pi<a+anum;pi++)
{
scanf("%d",pi);
}
scanf("%d",&bnum); //输入数组b元素个数
for(pj=b;pj<b+bnum;pj++)
{
scanf("%d",pj);
}
/***** 在数组a和b都有数据时比较两个数组 *****/
/********** Begin *********/
pi=a,pj=b,pk=c;
while(pi<a+anum&&pj<b+bnum)
{
if(*pi<*pj)
{
*pk=*pi;
pk++;
pi++;
}
else
{
*pk=*pj;
pk++;
pj++;
}
}
if(pi<a+anum)
{while(pi<a+anum)
{*pk=*pi;
pk++;
pi++;}
}
if(pj<b+bnum)
{while(pj<b+bnum)
{*pk=*pj;
pk++;
pj++;}
}
for ( pk=c; pk<c+anum+bnum; pk++ ) printf("%d ", *pk );
/********** End **********/
/***** 如果数组a还有数据 *****/
/********** Begin *********/
/********** End **********/
/***** 如果数组b还有数据 *****/
/********** Begin *********/
/********** End **********/
/***** 输出数组c *****/
/********** Begin *********/
/********** End **********/
printf("\n");
return 0;
}
‘陆’ C语言一简单的编程
//#include "stdafx.h" 这是win32或mfc工程的头,控制台程序不要
#include <stdio.h>
#include <stdlib.h>
void get_max(int a[],int count,int &max, int &max_count);
void get_min(int a[],int count,int &min, int &min_count);
float get_pj(int a[],int count,int max,int max_count,int min,int min_count);
void countvalue(int *a, int *n);
void main()
{
int a[200],max,max_count,min,min_count;
float pj;
//用随机数初始a
for (int i = 0; i < 200; i++)
{
a[i] = i+1;
}
a[5] = a[10] = a[14] = 1;
a[9] = a[20] = a[17] = 200;
get_max(a,200,max,max_count);
get_min(a,200,min,min_count);
pj = get_pj(a,200,max,max_count,min,min_count);
printf("最大数为:%d,最大数的个数为:%d\n",max,max_count);
printf("最小数为:%d,最小数的个数为:%d\n",min,min_count);
printf("平均值为:%.2f\n",pj);
int b[300],n;
countvalue(b,&n);
for (int j = 0; j < n; ++j)
{
printf("%d\t",b[j]);
if((j+1)%10 == 0)
printf("\n");
}
printf("\n");
}
void get_max(int a[],int count,int &max, int &max_count)
{
max = a[0];
max_count = 1;
for (int i = 1; i < count; i++)
{
if(a[i] > max)
{
max = a[i];
max_count = 1;
}
else if(a[i] == max)
{
max_count++;
}
}
}
void get_min(int a[],int count,int &min, int &min_count)
{
min = a[0];
min_count = 1;
for (int i = 1; i < count; i++)
{
if(a[i] < min)
{
min = a[i];
min_count = 1;
}
else if(a[i] == min)
{
min_count++;
}
}
}
float get_pj(int a[],int count,int max,int max_count,int min,int min_count)
{
int sum = 0;
for (int i = 0; i <count; i++)
{
sum += a[i];
}
return (float(sum - max*max_count - min*min_count)/float(count - max_count - min_count));
}
void countvalue(int *a, int *n)
{
(*n) = 0;
for (int i = 7; i <= 1000; ++i)
{
if(((i%7 == 0)||(i%11 == 0)) && (i%77 != 0))
{
a[(*n)++] = i;
}
}
}