重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果输入完全按照要求做的话,程序没问题啊,只不过 n 不能大于99,并且要求投票数字只能是1~9中的数字
成都创新互联是一家专业提供江干企业网站建设,专注与成都做网站、网站建设、H5高端网站建设、小程序制作等业务。10年已为江干众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
#include stdio.h
int main()
{
int A,B,C,D,E,Feipiao,i=0,n,s[100];
A=B=C=D=E=Feipiao=0;
char c;
scanf("%d",n);
if (n!=0)
{
getchar();
while ((c=getchar())!='\n')
//没有限制用户输入数据的个数,若超出100个,会导致溢出
{
if (c='0'c='9') //无法输入10以上的数字
s[i++]=c-'0';
}
}
s[i]='\0';//使用 0 作为数组结束的标志
i=0;
while (s[i]!='\0')//如果投票数字中含有 0 的话,会导致程序结果出错
{
if(in)
switch (s[i++])
{
case 1:A++;break;
case 2:B++;break;
case 3:C++;break;
case 4:D++;break;
case 5:E++;break;
default :Feipiao++;break;
}
else i++;
}
if (in)//若第二行输入数据的个数大于 n+1 个的话,会执行这一分支(没有包含等于 n+1 这种情况)
{
Feipiao+=(i-n);// i-n 是因为输入错误导致而多出的票数
}
printf("A:%d\nB:%d\nC:%d\nD:%d\nE:%d\nFeipiao:%d\n",A,B,C,D,E,Feipiao);
return 0;
}
欢迎追问和评论
unsigned char A =10;signed char B = -20;//计算的时候A = 0x0A;B = 0xEC;//转换为int计算,C语言的规定A -- 0x000000 0A;B -- 0xFFFFFF EC;A + B = 0xFFFF。
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。
对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),它们所代表的数值都是一样的。
数值本身是一个数学上的抽象概念。经过长期的演化、融合、选择、淘汰,系统简便、功能全面的十进制计数法成为人类文化中主流的计数方法,经过基础教育的训练,大多数的人从小就掌握了十进制计数方法。盘中放了十个苹果,通过数苹果我们抽象出来“十”这一数值,它在我们的脑海中就以“10”这一十进制编码的形式存放和显示,而不是其它的形式。从这一角度来说,十进制编码几乎就是数值本身。
#include stdio.h
#include stdlib.h
int main(int argc, char *argv[])
{
int in,temp,i,j;
int a=0,b=0,c=0,d=0,e=0,f=0,tot=0;
int r[6];//票数ARR
char ch[6]= {'A','B','C','D','E','F'}, temp1; //字母阵列
while(1)
{
printf("请输入投票代码1~6,0:over: ");
scanf("%d",in);
if(in==1)
{
a++; //a++ a一票 TOT++ 总票数
tot++;
}
if(in==2)
{
b++;
tot++;
}
if(in==3)
{
c++;
tot++;
}
if(in==4)
{
d++;
tot++;
}
if(in==5)
{
e++;
tot++;
}
if(in==6)
{
f++;
tot++;
}
if(in==0) //跳出回圈总结
break;
}
r[0]=a;
r[1]=b;
r[2]=c;
r[3]=d;
r[4]=e;
r[5]=f;
for(i=0; i5; i++)
{
for(j=0; j5-i; j++)
{
if(r[j]r[j+1])
{
temp=r[j];//票数排序
temp1=ch[j];// 对应名称排序
r[j]=r[j+1];
ch[j]=ch[j+1];
r[j+1]=temp;
ch[j+1]=temp1;
}
}
}
printf(" 排名 姓名 票数\n");
for(i=0; i6; i++)printf("%4d %4c %4d\n",i+1,ch[i],r[i]);
printf("TOTAL: %d \n\n",tot);
system("PAUSE");
return 0;
}
这程序太复杂了。简化后:
#include stdio.h
#include stdlib.h
int main(int argc, char *argv[])
{
int in,temp,i,j,tot=0;
int r[6]={0};//票数ARR
char ch[6]= {'A','B','C','D','E','F'}, temp1; //字母阵列
while(1)
{
printf("请输入投票代码1~6,0:over: ");
scanf("%d",in);
if(in==0) //跳出回圈总结
break;
tot++;
r[in-1]++;
}
for(i=0; i5; i++)
{
for(j=0; j5-i; j++)
{
if(r[j]r[j+1])
{
temp=r[j];//票数排序
temp1=ch[j];// 对应名称排序
r[j]=r[j+1];
ch[j]=ch[j+1];
r[j+1]=temp;
ch[j+1]=temp1;
}
}
}
printf(" 排名 姓名 票数\n");
for(i=0; i6; i++)printf("%4d %4c %4d\n",i+1,ch[i],r[i]);
printf("TOTAL: %d \n\n",tot);
system("PAUSE");
return 0;
}
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 50
#define M 500
struct sporter
{
int num;
char name[20];
int vote_num;
}spt[N]; /* spt[N]中每个数组元素对应一个运动员信息,vote_num记录得票数目.*/
struct vote
{
char id[10];
char name[20];
char address[20];
int a[10];
int score_order;/*次序分 */
int score_hit;/*命中分*/
int score_sum;
}vot[M]; /* vot[M]中每个数组元素对应一张选票信息,score_sum记录该票命中率*/
void printf_back();
void menu();
void menu_vote();
int save_spt();
void printf_onevote(int j);
int load_vote();
void search_vote();
void search_vote()
{
int m,i,flag=0;
char vs[20];
printf("Please input vote_id:\n");
scanf("%s",vs);
m=load_vote();
for(i=0;im;i++)
{
if(strcmp(vs,vot[i].id)==0)
{
flag=1;
printf_onevote(i);
}
}
if(flag==1)
printf("Found!");
else
printf("Not found!");
printf_back();
}
/*1_1. 加载候选运动员记录并可以计算记录个数的函数*/
int load_sporter() /*加载记录并可以计算记录个数的函数*/
{FILE *fp;
int i;
if((fp=fopen("sporter.txt","r"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/
{printf("\nCannot open file\n");
return 0;
}
for(i=0;!feof(fp);i++)
fscanf(fp,"%d%s",spt[i].num,spt[i].name);
fclose(fp);
return(i); /*返回记录个数*/
}
/*1_2. 显示一个运动员记录的函数*/
void printf_one(int i)
{
printf("%2d %-17s %d \n",spt[i].num,spt[i].name,spt[i].vote_num);
}
/*1_3. 显示n个运动员记录的函数*/
void printf_n(int n)
{int j;
for(j=0;jn;j++)
{
if(j%10==0)
{ printf("\n\nPass any key to contiune . . .");
getchar();
puts("\n\n");
}
printf_one(j);
}
getchar();
}
/*1_4. 加载候选选票记录并可以计算记录个数的函数*/
int load_vote()
{FILE *fp;
int i,j;
if((fp=fopen("vote.txt","r"))==NULL)
{printf("\nCannot open file\n");
return 0;
}
for(i=0;!feof(fp);i++)
{ fscanf(fp,"%s%s%s%",vot[i].id,vot[i].name,vot[i].address);
for(j=0;j10;j++)
fscanf(fp,"%d",vot[i].a[j]);
}
fclose(fp);
return(i); /*返回记录个数*/
}
/*1_5. 显示一张彩票记录的函数*/
void printf_onevote(int j)
{
int i;
printf("vote_id:%s\n",vot[j].id);
printf("vote_name:%s vote_address:%s\n",vot[j].name,vot[j].address);
printf("vote_sporter:");
for(i=0;i10;i++)
printf("%d, ",vot[j].a[i]);
printf("\n\n");
}
/*1_6. 显示n张彩票记录的函数*/
void printf_n_vote(int m)
{int j;
for(j=0;jm;j++)
{
if(j%10==0)
{ printf("\nPass any key to contiune . . .");
getchar();
puts("\n\n");
}
printf_onevote(j);
}
getchar();
}
/*1_7. 唱票函数*/
void stat_vote(int m)
{
int i,j,k;
for(i=0;i=m;i++)
{
for(j=0;j10;j++)
for(k=0;k20;k++)
if(vot[i].a[j]==spt[k].num)spt[k].vote_num++;
}
}
/*1_8. 依据得票数排序函数,使用选择排序法*/
void order_by_vote(int m)
{
int i,j,k;
struct sporter s;
for(i=0;im-1;i++)
{ k=i;
for(j=i+1;jm;j++) if(spt[j].vote_numspt[k].vote_num)k=j;
s=spt[i]; spt[i]=spt[k]; spt[k]=s;
}
}
/*1_9. 显示10佳信息及输出到文件函数*/
void print_spt10()
{
int i;
printf("\n\nThe 10 best sporter is:\n");
printf("order, num, name, vote_num\n");
for(i=0;i10;i++)
{
printf("%5d: %3d, %10s, %d \n",i+1,spt[i].num,spt[i].name,spt[i].vote_num);
}
getchar();
save_spt();
}
/*1_10. 保存函数*/
int save_spt() /*保存函数,保存10佳运动员记录*/
{FILE *fp1;
int i;
if((fp1=fopen("spt10.txt","w"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/
{printf("\nCannot open file\n");
return 0;
}
for(i=0;i10;i++)
fprintf(fp1,"%d %s %d\n",spt[i].num,spt[i].name,spt[i].vote_num);
fclose(fp1);
return 1;
}
/*1_11. 计算命中率函数*/
int calc_hit(int m)
{FILE *fp;
int i,j,k;
struct sporter s[10];
for(i=0;i10;i++)
{
s[i]=spt[i];
}
for(i=0;im;i++)
for(j=0;j10;j++)
for(k=0;k10;k++)
{
if(vot[i].a[j]==s[j].num) vot[i].score_order+=9-j; /*次序分*/
if(vot[i].a[j]==s[k].num) vot[i].score_hit+=10; /*命中分*/
vot[i].score_sum=vot[i].score_hit+vot[i].score_order;
}
if((fp=fopen("hit.txt","w"))==NULL)
{printf("\nCannot open file\n");
return 0;
}
for(i=0;im;i++)
fprintf(fp,"%s %d %d %d\n",vot[i].id,vot[i].score_order,vot[i].score_hit,vot[i].score_sum);
fclose(fp);
return 1;
}
/*1_12. 依据命中率对选票排序函数,使用选择排序法*/
void sort_vote(int m)
{
int i,j,k;
struct vote v;
for(i=0;im-1;i++)
{ k=i;
for(j=i+1;jm;j++) if(vot[j].score_sumvot[k].score_sum)k=j;
v=vot[i]; vot[i]=vot[k]; vot[k]=v;
}
}
/*1_13. 显示前10名获奖参选者信息函数*/
void print_vot10()
{
int i;
printf("\n\nThe 10 best voter is:\n");
printf("order, id, name, vote_sum\n");/*名次 选票号 姓名 命中率*/
for(i=0;i10;i++)
{
printf("%5d: %s, %10s, %d \n",i+1,vot[i].id,vot[i].name,vot[i].score_sum);
}
getchar();
}
/*1_14. 保存前10名获奖参选者信息到文件的函数*/
int save_vot10()
{FILE *fp1;
int i;
if((fp1=fopen("vot10.txt","w"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/
{printf("\nCannot open file\n");
return 0;
}
for(i=0;i10;i++)
fprintf(fp1,"%5d: %s, %10s, %d \n",i+1,vot[i].id,vot[i].name,vot[i].score_sum);
fclose(fp1);
return 1;
}
int n,m;
/*1_15. 从文件读入运动员及选票记录*/
void readfiles()
{
n=load_sporter();/*从文件读入候选运动员记录*/
printf_n(n);/* 显示候选运动员记录*/
m=load_vote();/*从文件读入选票记录*/
}
/*1_16. 计算10佳运动员*/
void calctensp()
{
stat_vote(m); /*唱票*/
order_by_vote(n); /*依据得票数对运动员记录排序*/
print_spt10();/*输出10佳运动员信息*/
}
/*1_17. 计算10个获奖参选者*/
void stattenvoter()
{
calc_hit(m); /*计算选票的命中率*/
sort_vote(m); /*依据命中率对选票记录排序*/
print_vot10();/*显示10个获奖参选者信息*/
save_vot10();/*输出10个获奖参选者信息到文件*/
}
/*1_18. 统计函数*/
void stat()
{
readfiles();
calctensp();
stattenvoter();
}
/*2_1. 浏览选票函数*/
void browse_vote()
{
int k;
k=load_vote();
printf_n_vote(k);
printf_back();
}
/*2_2. /*查找选票函数*/
////////////////////////////////////
/////////////////////////////////
/*2_3. 核对选票函数*/
void check()
{
int n,w;
/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/
do
{
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t 1.browse_vote"); /*浏览所有彩票*/
puts("\t\t\t\t 2.search_vote");/*输入彩票号码查找该彩票信息*/
puts("\t\t\t\t 3.back");/*返回*/
puts("\n\n\t\t **********************************************\n");
printf("Choice your number(1-3): [ ]\b\b");
scanf("%d",n);
if(n1||n3) /*对选择的数字作判断*/
{
w=1;
getchar();
}
else {w=0;}
}while(w==1);
/*选择功能*/
switch(n)
{case 1:browse_vote();break; /*统计模块*/
case 2:search_vote();break; /*查找选票模块*/
case 3:menu(); /*退出*/
}
}
/*公共函数*/
/*(1)任务结束时的选择退出还是返回*/
void printf_back()
{int w;
printf("\n\n\tSuccessful. ^_^\n\n");
printf("What do you want to do? \n\n\t1).Exit\t2).Back: [ ]\b\b");
scanf("%d",w);
if(w==1) exit(0);
else menu_vote();
}
/*(2)任务结束时的选择退出还是返回主菜单*/
void menu()
{
int n,w;
/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/
do
{
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t 1.statistic"); /*统计*/
puts("\t\t\t\t 2.check_vote");/*核对选票*/
puts("\t\t\t\t 3.exit");/*退出*/
puts("\n\n\t\t **********************************************\n");
printf("Choice your number(1-3): [ ]\b\b");
scanf("%d",n);
if(n1||n3) /*对选择的数字作判断*/
{
w=1;
getchar();
}
else w=0;
}
while(w==1);
/*选择功能*/
switch(n)
{case 1:stat();break; /*统计模块*/
case 2:check();break; /*核对选票模块*/
case 3:exit(0); /*退出*/
}
}
/*(3)任务结束时的选择退出还是返回核对彩票菜单*/
void menu_vote()
{
int n,w;
/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/
do
{
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t 1.browse_vote"); /*浏览所有彩票*/
puts("\t\t\t\t 2.search_vote");/*输入彩票号码查找该彩票信息*/
puts("\t\t\t\t 3.esc");/*返回*/
puts("\n\n\t\t **********************************************\n");
printf("Choice your number(1-3): [ ]\b\b");
scanf("%d",n);
if(n1||n3) /*对选择的数字作判断*/
{
w=1;
getchar();
}
else {w=0;}
}while(w==1);
/*选择功能*/
switch(n)
{case 1:browse_vote();break; /*统计模块*/
case 2:search_vote();break; /*查找选票模块*/
case 3:exit(0); /*退出*/
}
}
main() /*****************主函数****************/
{
menu();
}