功能:编写函数fun计算下列分段函数的值: ×^2+×+6x<0日x-3 f×=×^2-5x+60≤x<10日x*2及**3 x^2-×-1其它#include <stdio.h> float fun(float x) **********Program********** /********** End **********/ main() float x,f; printf("input x="); scanf("%f" &x); f=fun(x); printf(“x=5f,f(x)=%f1n"',x,f);
时间: 2023-07-23 14:39:52 浏览: 215
代码存在一些问题,应该为:
```
#include <stdio.h>
float fun(float x) {
if (x < 0) {
return x * x + x + 6;
} else if (x >= 0 && x < 10) {
return x * x - 5 * x + 6;
} else {
return x * x - x - 1;
}
}
int main() {
float x, f;
printf("input x=");
scanf("%f", &x);
f = fun(x);
printf("x=%f, f(x)=%f\n", x, f);
return 0;
}
```
该代码实现了计算下列分段函数的值:
- x^2+x+6,当x<0
- x^2-5x+6,当0<=x<10
- x^2-x-1,其他情况
并输出结果。
相关问题
Prog1.c 23 【程序改错】 5 题目:主函数main()调用fun()函数,其中fun函数的功能是:计算二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为:135 7 9299946999813570则函数值1+3+5+7+9+4+8+0+7+5+3+1+6+2-61. 12 下面给定的程序存在错误,请改正。 I 注意:不得增行或删行,也不得更改程序的结构。 2021#include <stdio.h>****FOUND*********int fun (int a [4] []){24int i,j,sum=0;for (i=0;i <4ji++)for (j-0;j <5;j++)**FOUND***********/if (i--08&j==088i==388j==4)FOUND***********/sum=a [i] [j];return sum;29303132333435日{36int aa [4] [5]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};37int i,j,y;38printf ("The original data is: \n") ;39for (i=0;i <4;i++)40{白414243444546474for (j=0;j <5jj++)printf ("X6d",aa [i] [j]);printf ("\n") ;
以下是修改后的代码:
```
#include <stdio.h>
int fun(int a[4][5]) {
int i, j, sum = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
if (i == 0 || i == 3 || j == 0 || j == 4) {
sum += a[i][j];
}
}
}
return sum - 61;
}
int main() {
int aa[4][5] = {{1, 3, 5, 7, 9}, {2, 9, 9, 9, 4}, {6, 9, 9, 9, 8}, {1, 3, 5, 7, 0}};
int i, j, y;
printf("The original data is: \n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
printf("%d ", aa[i][j]);
}
printf("\n");
}
y = fun(aa);
printf("The result is: %d\n", y);
return 0;
}
```
修改说明:
1. 在fun函数中,修改了if语句的条件,使其只计算二维数组周边的元素之和,同时将最后的sum - 61作为函数返回值。
2. 在主函数中,修改了输出二维数组的方式,使其按照题目要求输出。同时调用fun函数并输出结果。
1. 必做题 请编写一个函数 GetBirthDate, GetBirthDate 的功能是将一个身份证号码中的出生日期转为整数,其中 GetBirthDate 函数的调用形式已经在 main 函数内给出。 1. int main(void){ 2. char id[]="51010219990506001X"; 3. int date=0,year,month,day; 4. 5. date= GetBirthDate(id); 6. year=date/10000; 7. month=date/100%100; 8. day=date%100; 9. printf("%04d-%02d-%02d\n",year,month,day); 10. 11. return 0; 12. } 2. 选做题 a) 请分析下列程序中指针的使用有什么问题。 #include int main(void){ int *p; *p = 8; printf("%d", *p); return 0; } b) 请分析下列程序中指针的使用有什么问题。 #include int* fun(){ int n = 8; return &n; } int main(void){ int *p; p = fun(); printf("%d", *p); return 0; } c) 请分析下列程序中指针的使用有什么问题。 #include int main(void){ char *p = "abc"; *p = '@'; printf("%s", p); return 0; }
1. GetBirthDate函数的实现如下:
```c
int GetBirthDate(char *id){
int year = (id[6]-'0')*1000 + (id[7]-'0')*100 + (id[8]-'0')*10 + (id[9]-'0');
int month = (id[10]-'0')*10 + (id[11]-'0');
int day = (id[12]-'0')*10 + (id[13]-'0');
return year*10000 + month*100 + day;
}
```
该函数将身份证号码中的出生日期提取出来,并且以整数的形式返回,具体实现方法是通过字符串下标获取身份证号码中对应的数字字符,然后将其转为整数相加得到年月日,最终返回一个整数表示出生日期。
2. a) 在该程序中,指针p没有被初始化,即没有被赋值为指向某个合法的内存地址,直接使用*p会导致未知的结果,可能会崩溃程序。
正确的做法应该是先为指针p分配一块内存空间,然后将*p赋值为8,如下所示:
```c
int main(void){
int *p = (int *)malloc(sizeof(int));
*p = 8;
printf("%d", *p);
free(p);
return 0;
}
```
b) 在该程序中,fun函数返回的是一个指向局部变量n的指针,当fun函数执行完毕之后,n所在的内存空间就被释放了,p指向的内存空间已经不再是有效的,使用*p会导致未知的结果,可能会崩溃程序。
正确的做法应该是在fun函数中动态分配一个内存空间,并将n的值赋值给该内存空间,然后返回该内存空间的指针,如下所示:
```c
int* fun(){
int *p = (int *)malloc(sizeof(int));
*p = 8;
return p;
}
int main(void){
int *p = fun();
printf("%d", *p);
free(p);
return 0;
}
```
c) 在该程序中,指针p指向了一个常量字符串"abc",该字符串存储在程序的只读数据段中,不允许修改,但是通过*p = '@'尝试修改该字符串的值,会导致程序崩溃或者未知的结果。
正确的做法应该是将"abc"复制到一个可读写的内存空间中,然后将指针p指向该内存空间,如下所示:
```c
int main(void){
char str[] = "abc";
char *p = str;
*p = '@';
printf("%s", p);
return 0;
}
```
阅读全文