用c语言写需要地址传递一个判断正负的函数,如果是负数则重新输入,如果是正数就用指针传递出去
时间: 2024-03-27 19:37:08 浏览: 103
好的,下面是用 C 语言实现的代码:
```c
#include <stdio.h>
void check_positive(int *num) {
while (*num <= 0) {
printf("请输入一个正数:");
scanf("%d", num);
}
}
int main() {
int num;
printf("请输入一个数:");
scanf("%d", &num);
check_positive(&num);
printf("正数为:%d\n", num);
return 0;
}
```
这个程序中,`check_positive` 函数用指针传递一个整数,并且判断这个整数是否为正数。如果是负数,则会重新要求用户输入;如果是正数,则不做任何操作,直接返回。在 `main` 函数中,我们先读取一个整数,然后调用 `check_positive` 函数,将读取的整数的地址传递给它。最后输出正数即可。
相关问题
用c语言编写一个程序,输入整数n,再输入n个整数,用自定义函数count记录正数负数和0的个数,输出统计结果
好的,以下是代码:
```c
#include <stdio.h>
void count(int arr[], int n, int* pos, int* neg, int* zero)
{
for (int i = 0; i < n; i++)
{
if (arr[i] > 0)
(*pos)++;
else if (arr[i] < 0)
(*neg)++;
else
(*zero)++;
}
}
int main()
{
int n;
printf("请输入整数n:");
scanf("%d", &n);
int arr[n];
printf("请输入n个整数:");
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
int pos = 0, neg = 0, zero = 0;
count(arr, n, &pos, &neg, &zero);
printf("正数个数:%d,负数个数:%d,0的个数:%d\n", pos, neg, zero);
return 0;
}
```
代码解释:
1. 自定义函数count:输入数组arr、数组长度n和三个指向int类型的指针pos、neg、zero,用于记录正数、负数和0的数量。使用for循环遍历数组,根据元素的正负性和是否为0,分别将对应指针所指向的变量加1。
2. 主函数:输入整数n和n个整数,调用count函数统计正数、负数和0的数量,最后输出结果。
用c语言编写程序实现:输入一组数字型字符串,将其转换成double型的浮点数。 要求:不能使用系统函数atof,需要自己定义实现该函数。 输入格式: 输入多个数字型的字符串,每个字符串之间换行符隔开。字符串可能包括空格符、正负符号、小数点以及其它非数字字符。 对输入的字符串进行转换时,首先跳过行首的空格字符,直到遇上数字、小数点或正负符号才开始做转换,而再遇到其它非数字字符时或字符串结束时才结束转换,并将结果返回。 当输入字符'q'时,程序结束。 输出格式: double型浮点数,显示小数点后六位。 当为正数时,浮点数第一位不显示'+'。 当为负数时,浮点数第一位显示'-'.
好的,我会尽量详细地回答你的问题。对于你的问题,我可以提供如下的C语言代码实现:
```c
#include <stdio.h>
#include <ctype.h>
double str2double(char *str) {
double res = 0.0;
int sign = 1;
int point = 0;
int cnt = 0;
while (*str) {
if (*str == '-') {
sign = -1;
} else if (*str == '+') {
sign = 1;
} else if (*str == '.') {
point = 1;
} else if (isdigit(*str)) {
if (point) {
res = res * 10.0 + (*str - '0');
cnt++;
} else {
res = res * 10.0 + (*str - '0');
}
} else if (isspace(*str)) {
if (res > 0.0) {
break;
}
} else {
break;
}
str++;
}
return sign * res / (point ? pow(10.0, cnt) : 1.0);
}
int main() {
char str[100];
while (1) {
scanf("%s", str);
if (*str == 'q') {
break;
}
printf("%.6lf\n", str2double(str));
}
return 0;
}
```
这个程序实现了输入一组数字型字符串,将其转换成double型的浮点数的功能,同时满足了题目要求不能使用系统函数atof,需要自己定义实现该函数的要求。
具体来说,程序首先定义了一个str2double函数,它接受一个char类型的指针参数,表示一个数字型的字符串,然后将其转换成double型的浮点数,并将其返回。
函数的实现采用了一个循环,对于每个字符,判断其是否是数字、小数点、正负符号或空格符等情况,然后根据情况进行处理。具体来说,如果遇到了一个数字,就将其添加到结果中;如果遇到了一个小数点,就将其标记,并且记录小数点后面的数字个数;如果遇到了一个空格符,就判断当前结果是否大于0,如果是,说明已经处理完了一个数字,就可以结束了;如果遇到了其它非数字字符,就直接结束处理。
另外,程序还定义了一个main函数,它不断从标准输入中读取数字型的字符串,并调用str2double函数将其转换成double型的浮点数,并按照题目要求的格式输出结果。当输入字符'q'时,程序结束。
希望我的回答能够帮助到你!
阅读全文