亂碼是因?yàn)槟爿敵龅氖侵骱瘮?shù)里的 result 而這個沒有初始化
創(chuàng)新互聯(lián)公司主營臨武網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),臨武h5重慶小程序開發(fā)搭建,臨武網(wǎng)站營銷推廣歡迎臨武等地區(qū)企業(yè)咨詢
所以是亂碼
1 主程序少了兩個 }
2 if(choice==1)
{
result = salary(); //雖然函數(shù)返回了 但是并沒有把值賦給任何變量,改為這樣 printf("%lf", result);
}
#includestdio.h
double salary();/*計(jì)算工資稅的函數(shù)*/
void main()
{
int choice;
char want0;
double result;
while(1)
{
printf("歡迎使用個人所得稅計(jì)算器\n");
printf("\n");
printf("1.工資、薪金所得稅計(jì)算\n");
printf("\n");
printf("請輸入需要計(jì)算的稅收項(xiàng)目序號:");
scanf("%d", choice);
if(choice==1)
{
result = salary();
printf("個人所得稅為:%lf。\n", result);
}
}
}
double salary()
{
double sal, result;
printf("請輸入您的薪水:");
scanf("%lf", sal);
if(sal=3000)
{
result=sal;
}
if(sal3000sal=4500)
{
result=sal*0.05;
}
if(sal4500sal=7500)
{
result=sal*0.1-75;
}
if(sal7500sal=12000)
{
result=sal*0.2-525;
}
if(sal12000sal=38000)
{
result=sal*0.25-975;
}
if(sal38000sal=58000)
{
result=sal*0.3-2725;
}
if(sal58000sal=83000)
{
result=sal*0.35-5475;
}
if(sal83000)
{
result=sal*0.45-13475;
}
return result;
}
程序一: 還是輸出1234,因?yàn)橹羔榩沒有改變,函數(shù)調(diào)用tstfn(p)內(nèi)對p的改變,不能應(yīng)該原值,如果要改變指針p的值,必須傳入指針的指針tstfn(p)。
程序二:輸出4321,函數(shù)調(diào)用tstfn(p),傳入指針p,在函數(shù)內(nèi)對p指針?biāo)赶騼?nèi)容進(jìn)行修改,原值也改變了。
程序三:函數(shù)中的臨時數(shù)組a,a當(dāng)函數(shù)返回時,a所指向的內(nèi)容已經(jīng)銷毀,a成為野指針,一個隨機(jī)值,非法返回a的值,對其使用,造成引用的非法內(nèi)存。
程序四:同程序三,p也是一個臨時變量,程序結(jié)束也被銷毀了,非法引用,也會造成非法引用內(nèi)存。
程序五:內(nèi)存報錯,對字符串的賦值不正確,因?yàn)閟tr是指向一個字符串常量,*str = ‘a(chǎn)’試圖更改一個字符串常量,所以出錯了。
程序六:
正確
輸出亂碼的原因見下圖標(biāo)紅的地方:
第一個標(biāo)紅處的for循環(huán)語句后面多了分號;?導(dǎo)致下面{}中的語句與for無關(guān)
而printf()語句中的i此時等于N,又stu[N]上沒有數(shù)據(jù),所以會輸出亂碼;
同理后面輸出最高成績學(xué)生時,i的值也為N,因此最后打印stu[i]時也會輸出亂碼;
我覺得你的本意應(yīng)該是輸出stu[no],所以要將最后printf中的stu[i]都改為stu[no]
但上面用no記錄成績最高學(xué)生下標(biāo)的語句no=i;?應(yīng)該寫在if內(nèi),即要如下修改:
if (maxstu[i].ave) {
max=stu[i].ave;
no=i;
}
還要注意max的類型應(yīng)該為float,no應(yīng)該賦初值0,因此前面要改為:
float max;
max=stu[0].ave;
no=0;
最后,建議將struct student結(jié)構(gòu)體的定義放在main()函數(shù)之外
如果幫到你,給個采納哈~
/*
*
main.c
*
*
Created
on:
2011-6-11
*
Author:
ice
*/
#includestdio.h
double
salary();/*計(jì)算工資稅的函數(shù)*/
int
main(void)
{
int
choice;
//
char
want0;////這個want0變量沒有使用
double
result;
while(1)
{
printf("歡迎使用個人所得稅計(jì)算器\n");
printf("\n");
printf("1.工資、薪金所得稅計(jì)算\n");
printf("\n");
printf("請輸入需要計(jì)算的稅收項(xiàng)目序號:");
scanf("%d",
choice);
if(choice==1)
{
result
=
salary();//要有一個值接受返回值才可以啊
printf("%lf",
result);
}
}
}
double
salary()
{
double
sal,
result;
printf("請輸入您的薪水:");
scanf("%lf",
sal);
if(sal=3000)
{
result=sal;
}
if(sal3000sal=4500)
{
result=sal*0.05;
}
if(sal4500sal=7500)
{
result=sal*0.1-75;
}
if(sal7500sal=12000)
{
result=sal*0.2-525;
}
if(sal12000sal=38000)
{
result=sal*0.25-975;
}
if(sal38000sal=58000)
{
result=sal*0.3-2725;
}
if(sal58000sal=83000)
{
result=sal*0.35-5475;
}
if(sal83000)
{
result=sal*0.45-13475;
}
return
result;
}
應(yīng)該是超出數(shù)組長度的問題,現(xiàn)在也沒有電腦不方便調(diào)試代碼,你可以自己先檢查一下,讀取的內(nèi)容放到了哪里,輸出的時候輸出的是什么
可以一步一步打印,如果有問題再繼續(xù)問
你計(jì)算數(shù)列的各項(xiàng)的時候有問題,'1' 的ASCII碼是49,所以兩個相加就是 98,而這已經(jīng)是字符 b 的ASCII碼了,所以修改如下
#include stdio.h
#include stdlib.h
#define n 10
int main(void)
{
FILE *fp;
int i;
int a1=1,a2=1,a3;
if((fp=fopen("testdata.txt","w"))==NULL)
{ printf("Open fail.\n"); exit(1); }
fprintf(fp,"%d ",a1); fprintf(fp,"%d ",a2);
for(i=3;i=n;i++)
{
a3=a1+a2;
fprintf(fp,"%d ",a3);
a1=a2; a2=a3;
}
fclose(fp);
system("pause");
return 0;
}