这3个定义函数的题目怎么做啊?(纯C语言)

时间:2023-02-11 07:29:48
纯C语言的题目

1.定义一个函数,返回其整数变元的字符串表示。例如,如果这个变元是25,函数就返回"25”。如果变元是-98,就返回"-98"。用适当的main()函数说明函数执行过程。

2.扩展上一题定义的函数,是函数接受第二个变元,以指定结果的字段宽度,是返回的字符串表示右对齐。用适当的main()函数说明函数执行过程。

3.定义一个函数,其参数是一个字符串,返回该字符串中的单词数(单词以空格和标点符号来分隔。假设字符串不含单双引号,也就是说没有像isn't这样的单词)。定义第二个函数,它的第一个参数是一个字符串,第二个参数是一个数组,该函数将第一个字符串变元分割成单词,把这些单词存储在第二个数组变元中,最后返回存储在数组中的单词。定义第三个函数,其参数是一个字符串,返回该字符串的字母数。使用这些函数实现一个程序,从键盘读入含有文本的字符串,输入文本中的所有单词,输入顺序是按照单词的中的字母数,由短到长。



函数返回值是数组怎么实现啊?还有右对齐怎么做啊?

17 个解决方案

#1


作业帖,鉴定完毕。

#2


作业贴吧。

#3


引用 1 楼 slowgrace 的回复:
作业帖,鉴定完毕。


我只是把具体题目写上去了而已~这不是作业

我是新手,想知道函数返回值是数组怎么实现啊?还有右对齐怎么做啊?

#4


C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。

#5


右对齐的话,可以算好长度,在前面补空格字符。

例如:12,123,1234,要右对齐的话,可以输出如下(其中*表示空格).

****12
***123
**1234

#6


#include <stdio.h>

int main(int argc, char *argv[])
{
int i = -1099,j = 0,m = 0;
char c[10] = {0};
if (i<0)
{
i = -i;
c[0] = '-';
}
for(j = 1; ;j++)
{
if(i == 0)
break;
m = i%10;
i = i/10;
c[j] = m+'0';
}
for(i = 0; i<j; i++)
{
printf("%c",c[i]);
}
return 0;
}

#7


该回复于2010-01-10 12:11:14被版主删除

#8


引用 6 楼 tianweishuiguo 的回复:
C/C++ code#include<stdio.h>int main(int argc,char*argv[])
{int i=-1099,j=0,m=0;char c[10]= {0};if (i<0)
    {
        i=-i;
        c[0]='-';
    }for(j=1; ;j++)
    {if(i==0)break;
        m= i%10;
 ?-


int main(int argc,char*argv[])
这个没学过~定义函数!

#9


引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


那第一个题目,定义的函数最后返回字符串的时候应该怎么返回啊?返回值是什么啊?

#10


引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


先谢过~

#11


引用 9 楼 w46212635 的回复:
引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


那第一个题目,定义的函数最后返回字符串的时候应该怎么返回啊?返回值是什么啊?


返回char *

#12


Ding XIXI ........

#13



//1.
#include "stdio.h"
#include "stdlib.h"
char * getStr(int num)
{
  char *str = (char*)malloc(sizeof(char)*16);//分配16个字节的空间应该够了
  memset(str,0,sizeof(str));
  itoa(num,str,10);
  return str;
}
int main() 
{
int i = -100;
char *str = getStr(i);
printf("%s",str);
free(str);
system("pause");
}
//======================================================
//2.
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
char * getStr(int num,int width)
{
  char tmp[16] = {0};
  char *str = (char*)malloc(sizeof(char)*16);
  memset(str,0,sizeof(str));
  itoa(num,tmp,10);
  strncpy(str,tmp,width);
  return str;
}

int main() 
{
int i = -100;
int width = 0;
char *str = getStr(i,3);//输出-10 三个字符
printf("%s",str);
free(str);
system("pause");
}

#14


1.定义一个函数,返回其整数变元的字符串表示。例如,如果这个变元是25,函数就返回"25”。如果变元是-98,就返回"-98"。用适当的main()函数说明函数执行过程。 


这个就是itoa函数,自己google吧

#15


2.扩展上一题定义的函数,是函数接受第二个变元,以指定结果的字段宽度,是返回的字符串表示右对齐。用适当的main()函数说明函数执行过程。 

字符对齐而已,在第一个的功能上,对获取的char *数据,后移到右边,左边补齐(不知道你题目的需求是补齐为什么)。

#16


3.定义一个函数,其参数是一个字符串,返回该字符串中的单词数(单词以空格和标点符号来分隔。假设字符串不含单双引号,也就是说没有像isn't这样的单词)。定义第二个函数,它的第一个参数是一个字符串,第二个参数是一个数组,该函数将第一个字符串变元分割成单词,把这些单词存储在第二个数组变元中,最后返回存储在数组中的单词。定义第三个函数,其参数是一个字符串,返回该字符串的字母数。使用这些函数实现一个程序,从键盘读入含有文本的字符串,输入文本中的所有单词,输入顺序是按照单词的中的字母数,由短到长。 


说穿了就是统计空格(连续的不算)和标点个数。

if(ch==" "&&pre==0)    //类似这样统计,pre用来标识前一个是否为空格
{
    count++;
    pre=1;
}

#17


不会做作业,以前学汇编时,书上那些叫法俺比较晕,C的作业也差不多,本来挺明白的事,让书一描述就糊涂了。

#1


作业帖,鉴定完毕。

#2


作业贴吧。

#3


引用 1 楼 slowgrace 的回复:
作业帖,鉴定完毕。


我只是把具体题目写上去了而已~这不是作业

我是新手,想知道函数返回值是数组怎么实现啊?还有右对齐怎么做啊?

#4


C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。

#5


右对齐的话,可以算好长度,在前面补空格字符。

例如:12,123,1234,要右对齐的话,可以输出如下(其中*表示空格).

****12
***123
**1234

#6


#include <stdio.h>

int main(int argc, char *argv[])
{
int i = -1099,j = 0,m = 0;
char c[10] = {0};
if (i<0)
{
i = -i;
c[0] = '-';
}
for(j = 1; ;j++)
{
if(i == 0)
break;
m = i%10;
i = i/10;
c[j] = m+'0';
}
for(i = 0; i<j; i++)
{
printf("%c",c[i]);
}
return 0;
}

#7


该回复于2010-01-10 12:11:14被版主删除

#8


引用 6 楼 tianweishuiguo 的回复:
C/C++ code#include<stdio.h>int main(int argc,char*argv[])
{int i=-1099,j=0,m=0;char c[10]= {0};if (i<0)
    {
        i=-i;
        c[0]='-';
    }for(j=1; ;j++)
    {if(i==0)break;
        m= i%10;
 ?-


int main(int argc,char*argv[])
这个没学过~定义函数!

#9


引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


那第一个题目,定义的函数最后返回字符串的时候应该怎么返回啊?返回值是什么啊?

#10


引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


先谢过~

#11


引用 9 楼 w46212635 的回复:
引用 4 楼 slowgrace 的回复:
C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个不可修改的左值,它不能作为赋值运算符的左操作数来接受另一个数组,因此函数返回值不能为数组。


那第一个题目,定义的函数最后返回字符串的时候应该怎么返回啊?返回值是什么啊?


返回char *

#12


Ding XIXI ........

#13



//1.
#include "stdio.h"
#include "stdlib.h"
char * getStr(int num)
{
  char *str = (char*)malloc(sizeof(char)*16);//分配16个字节的空间应该够了
  memset(str,0,sizeof(str));
  itoa(num,str,10);
  return str;
}
int main() 
{
int i = -100;
char *str = getStr(i);
printf("%s",str);
free(str);
system("pause");
}
//======================================================
//2.
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
char * getStr(int num,int width)
{
  char tmp[16] = {0};
  char *str = (char*)malloc(sizeof(char)*16);
  memset(str,0,sizeof(str));
  itoa(num,tmp,10);
  strncpy(str,tmp,width);
  return str;
}

int main() 
{
int i = -100;
int width = 0;
char *str = getStr(i,3);//输出-10 三个字符
printf("%s",str);
free(str);
system("pause");
}

#14


1.定义一个函数,返回其整数变元的字符串表示。例如,如果这个变元是25,函数就返回"25”。如果变元是-98,就返回"-98"。用适当的main()函数说明函数执行过程。 


这个就是itoa函数,自己google吧

#15


2.扩展上一题定义的函数,是函数接受第二个变元,以指定结果的字段宽度,是返回的字符串表示右对齐。用适当的main()函数说明函数执行过程。 

字符对齐而已,在第一个的功能上,对获取的char *数据,后移到右边,左边补齐(不知道你题目的需求是补齐为什么)。

#16


3.定义一个函数,其参数是一个字符串,返回该字符串中的单词数(单词以空格和标点符号来分隔。假设字符串不含单双引号,也就是说没有像isn't这样的单词)。定义第二个函数,它的第一个参数是一个字符串,第二个参数是一个数组,该函数将第一个字符串变元分割成单词,把这些单词存储在第二个数组变元中,最后返回存储在数组中的单词。定义第三个函数,其参数是一个字符串,返回该字符串的字母数。使用这些函数实现一个程序,从键盘读入含有文本的字符串,输入文本中的所有单词,输入顺序是按照单词的中的字母数,由短到长。 


说穿了就是统计空格(连续的不算)和标点个数。

if(ch==" "&&pre==0)    //类似这样统计,pre用来标识前一个是否为空格
{
    count++;
    pre=1;
}

#17


不会做作业,以前学汇编时,书上那些叫法俺比较晕,C的作业也差不多,本来挺明白的事,让书一描述就糊涂了。