十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
乱码是因为你输出的是主函数里的 result 而这个没有初始化
创新互联公司主营临武网站建设的网络公司,主营网站建设方案,app软件定制开发,临武h5重庆小程序开发搭建,临武网站营销推广欢迎临武等地区企业咨询
所以是乱码
1 主程序少了两个 }
2 if(choice==1)
{
result = salary(); //虽然函数返回了 但是并没有把值赋给任何变量,改为这样 printf("%lf", result);
}
#includestdio.h
double salary();/*计算工资税的函数*/
void main()
{
int choice;
char want0;
double result;
while(1)
{
printf("欢迎使用个人所得税计算器\n");
printf("\n");
printf("1.工资、薪金所得税计算\n");
printf("\n");
printf("请输入需要计算的税收项目序号:");
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,因为指针p没有改变,函数调用tstfn(p)内对p的改变,不能应该原值,如果要改变指针p的值,必须传入指针的指针tstfn(p)。
程序二:输出4321,函数调用tstfn(p),传入指针p,在函数内对p指针所指向内容进行修改,原值也改变了。
程序三:函数中的临时数组a,a当函数返回时,a所指向的内容已经销毁,a成为野指针,一个随机值,非法返回a的值,对其使用,造成引用的非法内存。
程序四:同程序三,p也是一个临时变量,程序结束也被销毁了,非法引用,也会造成非法引用内存。
程序五:内存报错,对字符串的赋值不正确,因为str是指向一个字符串常量,*str = ‘a’试图更改一个字符串常量,所以出错了。
程序六:
正确
输出乱码的原因见下图标红的地方:
第一个标红处的for循环语句后面多了分号; 导致下面{}中的语句与for无关
而printf()语句中的i此时等于N,又stu[N]上没有数据,所以会输出乱码;
同理后面输出最高成绩学生时,i的值也为N,因此最后打印stu[i]时也会输出乱码;
我觉得你的本意应该是输出stu[no],所以要将最后printf中的stu[i]都改为stu[no]
但上面用no记录成绩最高学生下标的语句no=i; 应该写在if内,即要如下修改:
if (maxstu[i].ave) {
max=stu[i].ave;
no=i;
}
还要注意max的类型应该为float,no应该赋初值0,因此前面要改为:
float max;
max=stu[0].ave;
no=0;
最后,建议将struct student结构体的定义放在main()函数之外
如果帮到你,给个采纳哈~
/*
*
main.c
*
*
Created
on:
2011-6-11
*
Author:
ice
*/
#includestdio.h
double
salary();/*计算工资税的函数*/
int
main(void)
{
int
choice;
//
char
want0;////这个want0变量没有使用
double
result;
while(1)
{
printf("欢迎使用个人所得税计算器\n");
printf("\n");
printf("1.工资、薪金所得税计算\n");
printf("\n");
printf("请输入需要计算的税收项目序号:");
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;
}
应该是超出数组长度的问题,现在也没有电脑不方便调试代码,你可以自己先检查一下,读取的内容放到了哪里,输出的时候输出的是什么
可以一步一步打印,如果有问题再继续问
你计算数列的各项的时候有问题,'1' 的ASCII码是49,所以两个相加就是 98,而这已经是字符 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;
}