本文目錄一覽:
列出程序清單(c語言程序設計)
#includestdio.h
main()
{
int a,b,k;
printf(“請輸入 a:\n”);
scanf(“%d”,a);
printf(“請輸入 b:\n”);
scanf(“%d”,b);
k=a;a=b;b=k;
printf(“a=%d b=%d\n”,a,b);
}
C語言輸出清單並統計總金額
#includestdio.h
int main(){
int n,i,shul[100];
double dj[100],sum=0;
printf(“輸入書數\n”);
scanf(“%d”,n);
for(i=0;in;i++){
printf(“輸入單價\n”);
scanf(“%lf”,dj+i);
printf(“輸入數量\n”);
scanf(“%d”,shul+i);
sum+=dj[i]*shul[i];}
for(i=0;in;i++)
printf(“單價 %.3lf 數量 %d\n”,dj[i],shul[i]);
printf(“總價 %.3lf\n”,sum);
return 0;}
C語言 採用文件輸出話費清單
國際、國內、市話的電話號碼識別,我沒有寫。
你想寫,只要在我留的函數getcallType里寫代碼就行,其他不用改。參數:主叫號碼 、 被叫號碼。返回值:0或1或2,對應(國際、國內、市話)。
另外,輸入我沒有寫驗證,測試請規範輸入,時間必須2位數hh:mm:ss,你想寫驗證證,自己添加到我的函數inputInfo中就行。
#includestdio.h
#includestdlib.h
#includemalloc.h
#define n 6//輸入次數
typedef struct callInfo
{
char calldate[11];//通話日期
char callCode[15];//主叫碼
char beCallCode[15];//被叫碼
char beginTime[10];//起始時間
char endTime[10];//通話結束時間
long callTime;//通話時長,單位秒
double callPay;//通話費用
int callType;//國際長途:0,國內長途:1,市話:2
struct callInfo *next;
}CALLINFO;
CALLINFO *inputInfo(int con);//輸入,參數con:輸入的次數 返回首節點
void prfCallInfo(CALLINFO *callInfoHead);//打印鏈表
long getTime(char *beginTime,char *endTime);//計算通話時長,返回秒數,時間格式:小時:分鐘:秒
double getpay(long t,int callType);//計算費用,不足1分鐘按1分鐘算
int getcallType(char *callCode,char *beCallCode);//通過主叫號碼 和 被叫號碼,識別通話類別(國際、國內、市話),返回0或1或2。
void orderByPay(CALLINFO *callInfoHead);//排序 話費從高到低
void wirteFile(FILE *fp,CALLINFO *callInfoHead);
int main()
{
CALLINFO *callInfoHead=NULL;
FILE *fp=NULL;
callInfoHead=(CALLINFO *)malloc(sizeof(CALLINFO));
callInfoHead-next=NULL;
fp=fopen(“c:\\list2.txt”,”rt+”);
if(fp==NULL)
{
fp=fopen(“c:\\list2.txt”,”w”);
}
callInfoHead-next=inputInfo(n);
printf(“\n—-測試代碼所有費用默認按照市話計算—-\n”);
orderByPay(callInfoHead);
printf(“\n—-按照話費由高到低排序—-\n”);
prfCallInfo(callInfoHead);
printf(“\n—-開始寫入文件—-\n”);
wirteFile(fp,callInfoHead);
return 0;
}
void wirteFile(FILE *fp,CALLINFO *callInfoHead)
{
CALLINFO *callInfoNow=NULL;
fseek(fp, 0, SEEK_SET);//文件流指針重置到開頭
fprintf(fp,”%s %s %s %s %s\n”,”日期”,”主叫號碼”,”被叫號碼”,”起始時間”,”通話時間”);
while(callInfoHead-next!=NULL)
{
callInfoNow=callInfoHead-next;
fprintf(fp,”%s %s %s %s %s\n”,callInfoNow-calldate,callInfoNow-callCode,callInfoNow-beCallCode,callInfoNow-beginTime,callInfoNow-endTime);
callInfoHead=callInfoHead-next;
}
}
void orderByPay(CALLINFO *callInfoHead)//排序 話費從高到低
{
CALLINFO *callInfoNext=NULL,*callInfoNow=NULL,callInfoSave;
while(callInfoHead-next!=NULL)
{
callInfoNext=callInfoHead-next-next;
callInfoNow=callInfoHead-next;
while(callInfoNext!=NULL)
{
if(callInfoNow-callPaycallInfoNext-callPay)//高的往前移動,交換成員值保留鏈表指針
{
callInfoSave=*callInfoNow;
*callInfoNow=*callInfoNext;
*callInfoNext=callInfoSave;
callInfoNext-next=callInfoNow-next;
callInfoNow-next=callInfoSave.next;
}
callInfoNext=callInfoNext-next;
}
callInfoHead=callInfoHead-next;
}
}
void prfCallInfo(CALLINFO *callInfoHead)//打印鏈表
{
CALLINFO *callInfoNow=NULL;
printf(“\n通話日期 主叫碼 被叫碼 起始時間 通話結束時間 通話時長 通話費用\n”);
while(callInfoHead-next!=NULL)
{
callInfoNow=callInfoHead-next;
printf(“%s %s %s %s %s %ld %lf\n”,callInfoNow-calldate,callInfoNow-callCode,callInfoNow-beCallCode,callInfoNow-beginTime,callInfoNow-endTime,callInfoNow-callTime,callInfoNow-callPay);
callInfoHead=callInfoHead-next;
}
}
CALLINFO *inputInfo(int con)//輸入,參數con:輸入的次數 返回首節點
{
int i;
CALLINFO *callInfo0=NULL,*callInfoTail=NULL,*callInfoNew=NULL;
printf(“請分別錄入%d條通話記錄,每行1條\n格式:(通話日期、主叫碼、被叫碼、起始時間、通話時間)\n”,con);
for(i=0;icon;i++)
{
callInfoNew=(CALLINFO *)malloc(sizeof(CALLINFO));
scanf(“%s%s%s%s%s”,callInfoNew-calldate,callInfoNew-callCode,callInfoNew-beCallCode,callInfoNew-beginTime,callInfoNew-endTime); //輸入我沒有寫驗證,想寫驗證添加在這
callInfoNew-callTime=getTime(callInfoNew-beginTime,callInfoNew-endTime);//時間
callInfoNew-callType=getcallType(callInfoNew-callCode,callInfoNew-beCallCode);
callInfoNew-callPay=getpay(callInfoNew-callTime,callInfoNew-callType);//費用
callInfoNew-next=NULL;
if(callInfo0==NULL)
callInfo0=callInfoNew;
else
callInfoTail-next=callInfoNew;
callInfoTail=callInfoNew;
}
return callInfo0;
}
long getTime(char *beginTime,char *endTime)//計算通話時長,返回秒數,時間格式24制:小時:分鐘:秒
{
int h1,m1,s1,h2,m2,s2;
long t;
h1=(beginTime[0]-‘0’)*10+beginTime[1]-‘0’;
m1=(beginTime[3]-‘0’)*10+beginTime[4]-‘0’;
s1=(beginTime[6]-‘0’)*10+beginTime[7]-‘0’;
h2=(endTime[0]-‘0’)*10+endTime[1]-‘0’;
m2=(endTime[3]-‘0’)*10+endTime[4]-‘0’;
s2=(endTime[6]-‘0’)*10+endTime[7]-‘0’;
t=(h2-h1)*60*60+(m2-m1)*60+(s2-s1);
return t;
}
int getcallType(char *callCode,char *beCallCode)//通過主叫號碼 和 被叫號碼,識別通話類別(國際、國內、市話),返回0或1或2。
{
//我沒寫,你需要自己寫,測試代碼默認返回類別2,市話
return 2;
}
double getpay(long t,int callType)//計算費用,不足1分鐘按1分鐘算
{
//(1) 國際長途1.00元/分鐘,(2) 國內長途0.60元/分鐘,(3) 市話前3分鐘0.20元,3分鐘以後0.10元/分鐘。
double callpay;
if(t%60!=0)
t=t/60+1;
else
t=t/60;
if(callType==0)
callpay=t*1;
if(callType==1)
callpay=t*0.6;
if(callType==2)
{
if(t=3)
callpay=t*0.2;
else
callpay=3*0.2+(t-3)*0.1;
}
return callpay;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192828.html