成绩等级判断
注意程序不是一下就写出来的,要经过调试。有一个叫黑盒测试,我的理解是看不到源码,去测试程序功能。
以下程序都是先在主函数里构思好函数,最后再去实现功能模块。
#include <stdio.h>
void display(void);
void scoreSCAN(int *score);
void scorePRIN(int score);
int main(void)
{
int score=0;
while(1)
{
//1.成绩输入提示
display();
//2.成绩输入
scoreSCAN(&score);
if(score==111){
printf("See you!\n");
break;
}
//3.成绩判断并输出结果
scorePRIN(score);
}
return 0;
}
void display(void)
{
printf("###<><><><><><>$$$$<><><><><>SCORE<><><><><>$$$$<><><><><><>###\n");
printf("please input score(total score 100,quit is 111):\n");
}
void scoreSCAN(int *score)
{
Again:
scanf("%d",score);
getchar();//有一个问题,我们在电脑键盘上输入时常忽略了回车。
if(*score == 111)return;
if(*score <0 || *score >100){
printf("your input is error!!!\ninput again:");
goto Again;
}
}
void scorePRIN(int score)
{
if(score==100)
{
printf("your score is perfect!A+\n");
}else{
switch(score/10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
printf("your score no pass.D\n");
break;
case 6:
printf("your score pass.C\n");
break;
case 7:
case 8:
printf("your score ok.B\n");
break;
default:
printf("your score good.A\n");
}
}
}
简易计算器
#include <stdio.h>
void dispaly();
void symbollSCAN(char *sf);
void dataSCAN(int *data1,int *data2);
void conpulter(char sf,int data1,int data2);
int main(void)
{
char sf;
int data1,data2;
//1.提示
dispaly();
while(1)
{
//2.计算方式选择
symbollSCAN(&sf);
if(sf=='q')break;
//3.计算数值输入
dataSCAN(&data1,&data2);
//4.计算并输出结果
conpulter(sf,data1,data2);
}
printf("See you again.\n");
return 0;
}
void dispaly()
{
int i=5;
while(i--)
{
if(i==2)printf("$$$ simple calculator $$$\n");
else printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
}
}
void symbollSCAN(char *sf)
{
while(1)
{
printf("please input (+ - * / %%,<q> is quit):");
scanf("%c",sf);
getchar();
if(*sf!='+' && *sf!='-' && *sf!='*' && *sf!='/' && *sf!='%' && *sf!='q')
{
printf("input error,please input again.\n");
}else break;
}
}
void dataSCAN(int *data1,int *data2)
{
printf("please input data1:");
scanf("%d",data1);
getchar();
printf("please input data2:");
scanf("%d",data2);
getchar();
}
void jia(int data1,int data2)
{
int result=0;
result=data1+data2;
printf("result:%d+%d=%d\n",data1,data2,result);
}
void jian(int data1,int data2)
{
int result=0;
result=data1-data2;
printf("result:%d-%d=%d\n",data1,data2,result);
}
void cheng(int data1,int data2)
{
int result=0;
result=data1*data2;
printf("result:%d*%d=%d\n",data1,data2,result);
}
void chu(int data1,int data2)
{
float result=0;
result=(float)data1/data2; //此处为类型强转
printf("result:%d/%d=%.2f\n",data1,data2,result);
}
void quyu(int data1,int data2)
{
int result=0;
result=data1%data2;
printf("result:%d%%%d=%d\n",data1,data2,result);
}
void conpulter(char sf,int data1,int data2)
{
switch(sf) //虽然比较LOW 但是我还是用拼音命名变量名,尽情笑话我吧!因为我TM自己都笑了。其实我平时很严肃的,所以偶尔的傻逼行为给我带来了不一样的感触.当然工作中可不能这么搞。
{
case '+':jia(data1,data2);break;
case '-':jian(data1,data2);break;
case '*':cheng(data1,data2);break;
case '/':chu(data1,data2);break;
case '%':quyu(data1,data2);break;
}
}
数组模拟学生成绩操作应用
#include <stdio.h>
void scoreSCAN(int score[],int len);
void scorePRIN(int *score,int len);
int foundMAXscore(int *score,int len);
int foundMINscore(int *score,int len);
float foundAVEscore(int *score,int len);
int main(void)
{
int score[7];
int len=sizeof(score)/sizeof(score[0]);
int max, min;
float ave;
//1.成绩录入
scoreSCAN(score,len);
//2.成绩输出
scorePRIN(score,len);
//3.找最高分
max=foundMAXscore(score,len);
//4.找最低分
min=foundMINscore(score,len);
//5.找平均分
ave=foundAVEscore(score,len);
//6.结果输出
printf("MAX:%d\nMIN:%d\nAVE:%.2f\n",max,min,ave);
return 0;
}
void scoreSCAN(int score[],int len)
{
int i;
for(i=0;i<len;i++)
{
printf("please input %d student score:",i+1);
scanf("%d",&score[i]);
getchar();
}
}
void scorePRIN(int *score,int len)
{
while(len--)
{
printf("%d ",*score++);
}
putchar('\n');
}
int foundMAXscore(int *score,int len)
{
int mx=score[0];
int i;
for(i=0;i<len;i++)
{
if(mx<score[i])mx=score[i];
}
return mx;
}
int foundMINscore(int *score,int len)
{
int mx=*score;
while(len--)
{
if(mx>*score)mx=*score;
score++;
}
return mx;
}
float foundAVEscore(int *score,int len)
{
int ch=len;
float ave;
int total=0;
while(len--)
{
total+=*score++;
}
return (float)total/ch;
}
进阶——使用结构体数组和结构体指针
下面两个程序是之前好久写得,现在回头看会觉得有很多问题,代码臃肿,有许多地方可以优化
结构体指针学生成绩进阶
#include <stdio.h>
#include <stdlib.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
typedef struct student
{
char *name;
int score;
}STU;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STU* informationSCAN(int len)
{
int i;
STU *head=(STU*)malloc(sizeof(STU)*len);
for(i=0;i<len;i++)
{
printf("please input student name:");
head[i].name=(char*)malloc(30);
scanf("%s",head[i].name);
printf("please input student score:");
scanf("%d",&head[i].score);
}
return head;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void informationPRIN(STU *head,int len)
{
while(len--)
{
printf("Student:%d %s\n",head->score,head->name);
head++;
}
putchar('\n');
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void maopaoSX(STU *head,int len)
{
int i, j;
i=j=0;
STU temp;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(head[i].score>head[j].score)
{
temp=head[i];
head[i]=head[j];
head[j]=temp;
}
}
}
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void maopaoJX(STU *head,int len)
{
int i, j;
i=j=0;
STU temp;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(head[i].score<head[j].score)
{
temp=head[i];
head[i]=head[j];
head[j]=temp;
}
}
}
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STU maxSTU(STU *head,int len)
{
STU max=*head;
int i;
for(i=0;i<len;i++)
{
if(max.score<head[i].score)max=head[i];
}
return max;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STU minSTU(STU *head,int len)
{
STU min=*head;
int i;
for(i=0;i<len;i++)
{
if(min.score>head[i].score)min=head[i];
}
return min;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
float aveSTU(STU *head,int len)
{
int total=0;
int i;
for(i=0;i<len;i++)
{
total+=head->score;
head++;
}
return (float)total/len;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void display()
{
int i;
for(i=0;i<5;i++)
{
if(i==2)
{
printf("[]-------------> STUDENT SCORE SYSTEM <-------------[]\n");
}else{
printf("[][][][][][][][][][][][][][][][][][][][][][][][][][][]\n");
}
}
}
int main()
{
int len;
display();
printf("How many student:");
scanf("%d",&len);
STU *stu1=informationSCAN(len);
informationPRIN(stu1,len);
maopaoJX(stu1,len);
informationPRIN(stu1,len);
maopaoSX(stu1,len);
informationPRIN(stu1,len);
STU max=maxSTU(stu1,len);
STU min=minSTU(stu1,len);
float ave=aveSTU(stu1,len);
printf("MAX:%s %d\nMIN:%s %d\nAVE:%f\n",max.name,max.score,min.name,min.score,ave);
free(stu1);
printf(">>>>>>>>>>>>>>>>>>>>> See You! <<<<<<<<<<<<<<<<<<<<<<\n");
return 0;
}
结构体数组功能扩展版——学生成绩系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*----------------------------------------------*/
typedef struct student
{
char name[30];
char xb[10];
int Cscore;
int Mscore;
int Escore;
}STU;
/*----------------------------------------------*/
STU* stuNUM(int len)
{
STU *stu=(STU*)malloc(len*sizeof(STU));
return stu;
}
//..............................................................................................*/
void informationSCAN(STU *head,int len)
{
int i=0;
for(i=0;i<len;i++)
{
printf("please input student %d ------------------------------>name:",i+1);
scanf("%s",head[i].name);
printf("please input student %d ----------------------->xinbie:",i+1);
scanf("%s",head[i].xb);
printf("please input student %d ---------------->Cscore:",i+1);
scanf("%d",&head[i].Cscore);
printf("please input student %d --------->Mscore:",i+1);
scanf("%d",&head[i].Mscore);
printf("please input student %d -->Escore:",i+1);
scanf("%d",&head[i].Escore);
}
}
/*-------------------------------------------------------------*/
void informationPRIN(STU *head,int len)
{
printf("<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n");
printf("Student: XB: total: ave: C: M: E:\n");
while(len--)
{
int total=0;
float ave;
total=head->Cscore+head->Mscore+head->Escore;
ave=(float)total/3;
printf("%10s %6s (%5d) (%6.2f) %5d %5d %5d \n",head->name,head->xb,total,ave,head->Cscore,head->Mscore,head->Escore);
head++;
}
printf("<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n");
}
/*-------------------------------------------------------------*/
void CscorePX(STU *head,int len)
{
int i, j;
STU temp;
i=j=0;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(head[i].Cscore<head[j].Cscore)
{
temp=head[i];
head[i]=head[j];
head[j]=temp;
}
}
}
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void MscorePX(STU *head,int len)
{
int i, j;
STU temp;
i=j=0;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(head[j].Mscore<head[j+1].Mscore)
{
temp=head[j];
head[j]=head[j+1];
head[j+1]=temp;
}
}
}
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void EscorePX(STU *head,int len)
{
int i, j;
STU temp;
i=j=0;
for(i=0;i<len-1;i++)
{
int jh=0;
for(j=0;j<len-i;j++)
{
if(head[jh].Escore>head[j].Escore)jh=j;
}
temp=head[jh];
head[jh]=head[len-i-1];
head[len-i-1]=temp;
}
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void totalscorePX(STU *head,int len)
{
int i, j;
STU temp;
i=j=0;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((head[i].Cscore+head[i].Mscore+head[i].Escore)<(head[j].Cscore+head[j].Mscore+head[j].Escore))
{
temp=head[i];
head[i]=head[j];
head[j]=temp;
}
}
}
}
/*------------------------------------------------------------------------------------*/
void scoreDPX(STU *head,int len,void (*p)())
{
int px=0;
int cnt=4;
while(cnt--)
{
printf("please input pai_xu_fang_shi(1.Cscore 2.Mscore 3.Escore 4.totalscore)\nplease input number(1 2 3 4):");
scanf("%d",&px);
switch(px)
{
case 1: CscorePX(head,len);break;
case 2: MscorePX(head,len);break;
case 3: EscorePX(head,len);break;
case 4: totalscorePX(head,len);break;
default:printf("your input is error!\n");
exit(-1);
}
// if(px==1 || px ==2 || px==3 || px==4)break;
p(head,len);
}
p(head,len);
}
/*-----------------------------------------------------------------------------------*/
void scoreAVE(STU *head,int len)
{
float ave;
int total=0;
int chushu=len;
while(len--)
{
total+=head->Cscore+head->Mscore+head->Escore;
head++;
}
ave=(float)total/chushu;
printf("Student total average score is %.2f\n",ave);
}
/*--------^----------------------------^_^_^_^_^_^_^_^_^_^----------*/
void nameXG(STU *head,int len,char *name,char *Nname)
{
while(len--)
{
if(!strcmp(head->name,name))
{
strcpy(head->name,Nname);
return;
}
head++;
}
printf("NO point the Student Name!\n");
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void xinbieXG(STU *head,int len,char *name,char *Nxb)
{
while(len--)
{
if(!strcmp(head->name,name))
{
strcpy(head->xb,Nxb);
return;
}
head++;
}
printf("NO point the Student Name!\n");
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void CscoreXG(STU *head,int len,int score,int Nscore)
{
while(len--)
{
if(head->Cscore==score)
{
head->Cscore=Nscore;
return;
}
head++;
}
printf("NO point the Chinses SCORE!\n");
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void MscoreXG(STU *head,int len,int score,int Nscore)
{
while(len--)
{
if(head->Mscore==score)
{
head->Mscore=Nscore;
return;
}
head++;
}
printf("NO point the Math SCORE!\n");
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void EscoreXG(STU *head,int len,int score,int Nscore)
{
while(len--)
{
if(head->Escore==score)
{
head->Escore=Nscore;
return;
}
head++;
}
printf("NO point the English SCORE!\n");
}
/*------------------------------------------------------------------------------------*/
void informationXG(STU *head,int len,void (*p)())
{
int a=100;
int b=0;
int cnt=0;
char targetName[30];
char newName[30];
char newXB[10];
int score;
int newScore;
printf("Whether to modify the information?\nYES is (1):");
scanf("%d",&a);
if(a==1)
{
printf("How many do you want write?:");
scanf("%d",&cnt);
while(cnt--)
{
printf("modify(1.name 2.xinbie 3.Cscore 4.Mscore 5.Escore):");
scanf("%d",&b);
switch(b)
{
case 1:printf("please input modify name target:");
scanf("%s",targetName);
printf("please input new name:");
scanf("%s",newName);
nameXG(head,len,targetName,newName);
break;
case 2:printf("please input modify name target:");
scanf("%s",targetName);
printf("please input new xinbie:");
scanf("%s",newXB);
xinbieXG(head,len,targetName,newXB);
break;
case 3:printf("please input modify Cscore target:");
scanf("%d",&score);
printf("please input new Cscore:");
scanf("%d",&newScore);
CscoreXG(head,len,score,newScore);
break;
case 4:printf("please input modify Mscore target:");
scanf("%d",&score);
printf("please input new Mscore:");
scanf("%d",&newScore);
MscoreXG(head,len,score,newScore);
break;
case 5:printf("please input modify Escore target:");
scanf("%d",&score);
printf("please input new Escore:");
scanf("%d",&newScore);
EscoreXG(head,len,score,newScore);
break;
default:printf("your input is error!\n");
exit(-1);
}
//if(b==1||b==2||b==3||b==4||b==5)break;
p(head,len);
}
}
}
/*------------------------------------------------------------------------------------*/
void display()
{
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("$$$oooooooooooooooooooooooooooooooooooooooooooooooooooo$$\n");
printf("$$$ $$$\n");
printf("$$$ STUDENT SCORE SYSTEM $$$\n");
printf("$$$ $$$\n");
printf("$$ooooooooooooooooooooooooooooooooooooooooooooooooooooo$$\n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
}
/*------------------------------------------------------------------------------------*/
int main()
{
void (*p)();
display();
int len;
printf("How many student?:");
scanf("%d",&len);
STU *stu=stuNUM(len);
informationSCAN(stu,len);
informationPRIN(stu,len);
p=informationPRIN;
scoreDPX(stu,len,p);
scoreAVE(stu,len);
informationXG(stu,len,p);
printf("\n################## See you! ###################\n");
free(stu);
return 0;
}