网站建设资讯

NEWS

网站建设资讯

c语言函数老师提问 C语言函数问题

C语言函数问题(有挑战性难题)

先看下我的运行结果吧,会自动判断输入的m、n是否合法哦!

创新互联公司是一家专注于成都做网站、网站建设与策划设计,和硕网站建设哪家好?创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:和硕等地区。和硕做网站价格咨询:13518219792

上代码,注释只写了部分有助理解的。

#include stdio.h

int Found(int m, int n, int a[])

{

int i = 0;

int Count = 0;

int offset = 0; //数组a的下标

int qian, bai, shi, ge; //千位、百位、十位、个位的值

for(i=m; i=n; i++)

{

//取出千位、百位、十位、个位的值

qian = i/1000;

bai = (i%1000)/100;

shi = (i%100)/10;

ge = i%10;

if((qian= bai bai=shi shi=ge) (qian+ge == bai+shi)) //找到一个符合条件的数

{

Count++;

a[offset++] = i;

}

}

return Count;

}

int main()

{

int m = 0;

int n = 0;

int nResult[100] = {0};

int Count = 0;

int i = 0;

FILE* pFile = NULL;

char szInfo[100] = {0};

while(1)

{

printf("Please enter m and n:");

scanf("%d %d", m, n);

printf("\n");

if(m=1000 n=1200 mn)

break;

else

printf("输入数据不合法,请重新输入\n");

}

Count = Found(m, n, nResult);

pFile = fopen("104.out", "w");

if(NULL == pFile)

printf("打开文件失败\n");

sprintf(szInfo, "found %d numbers in %d ~ %d:\n", Count, m, n);

printf("%s", szInfo);

if(NULL != pFile)

{

fwrite("No. 104\n", 1, strlen("No. 104\n"), pFile); // 写入学号

fwrite(szInfo, 1, strlen(szInfo), pFile);   //写入部分信息

}

for(i=0; iCount; i++)

{

printf("%d  ", nResult[i]);

sprintf(szInfo, "%d  ", nResult[i]);

if(NULL != pFile)  //输出到屏幕的同时,顺便把该值写进文件

fwrite(szInfo, 1, strlen(szInfo), pFile);

}

printf("\n");

if(NULL != pFile)

fclose(pFile);

return 0;

}

自从工作以来,两年没上过百度知道了,当初上大学的时候天天在百度知道问问题,今偶尔闲娱,帮忙解答,想不到这里还是这么热闹,不禁想起了当年为一个链表、一个函数挑灯夜战的场景。只能叹时间太快,想不到都过去好几年了。做程序最需要毅力,小师弟,好好努力吧,嘿嘿,下班回家咯!

C语言提问,一函数实验题,疑问

这个是传值调用!要想让实参随着形参变,就需要使用传值调用,即形参用指针类型*或引用类型。

形参为指针类型:

#includestdio.h

void func(int *a,int *b);//函数声明

main()

{

int a=2,b=10;

func(a,b);//取地址符号,传过去的是对应的地址

printf("a=%d,b=%d\n",a,b);

}

void func(int *a,int *b)

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

求问一下关于c语言scanf函数的一些问题,就是说输入数据时,到底应该用什么分割,我们老师说用空格

scanf的输入方式完全要看代码的书写方式了。

先来讲一下scanf的输入原理吧:

1、scanf输入流的概念,当执行到scanf函数时,会检查输入流,如果为空,则要求用户输入。如果不为空,则根据scanf的格式化参数从输入流中读取

2、%d 用来输入一个整数类型,会跳过开始的空白字符(空格 tab 回车都算空白字符),一直扫描到第一个数字开始,然后开始往后扫描,当碰到空白字符或者非数字时停止,然后将前面的数字赋值给对应的变量。如果第一个不是数字,则scanf返回失败。

而%3d %2d这种带宽度修饰时,会最多扫描宽度的字符就停止。并且如果没有扫描到宽度就碰到空白字符或者非数字时也会停止

3、%c 用来输入一个字符,不会跳过最开始的空白字符。从输入流的第一个字符开始。

如果有%3c这种带宽度修饰时,会强制扫描宽度的字符,但是只会将第一个字符赋值给对应的变量。

4、%s 用来输入一个字符串,会跳过开始的空白字符(空格 tab 回车都算空白字符),然后从第一个非空白字符开始,然后开始往后扫描,当碰到空白字符停止,然后将前面的字符串赋值给对应的变量。由于碰到空白字符停止,所以%s无法接受进来空格。

5、%f 用来输入一个单精度浮点数类型,也就是float类型,其他同%d

6、%lf 用来输入一个双精度浮点数类型,也就是double类型,其他同%d

对于你上面的问题

scanf(%3d%2d%3c,abch)

输入123空格46空格abc

输出的是a=123 b=46 c=空格 才对

c语言,对被调用函数的提问

int add(inta ,intb,intc) 这种格式为对函数的声明和构造格式。这种格式要注明具体类型的……

int add(inta ,intb,intc) 

{

return a+b+c;

}

如果调用的话,格式为 sum=add(a,b,c);不带类型的,只传参数,其中使用到的sum,a,b,c要在之前进行声明或初始化的。

int sum,a,b,c;

sum=add(a,b,c);

提问几个C语言的问题,关于函数概念的

1、返回值是int,还有,你的指针概念不明确,这里稍微跟你讲一下,具体详细的还是看一下书吧

例如有如下定义:int * p;int a = 10;表示定义了一个int型的指针变量p和一个int型的变量a,并且a的值为10,使用时,要给p赋值,并且赋值应该是一个地址,即p = a;现在p的值就是a的地址,所以p就相当于a了,取出a的值就相当于取出p指向地址的值,所以*p就表示10这个值。

2、这里涉及到了强制类型转换,因为在fun2里的return 用了(int)把a+b的结果强制转化成了int型变量,例如:double a = 1.6; 执行了(int)a;之后,a的值就为1了,小数部分被省略。

3、fun(32,32)正确,而fun("abchina",32.0)不正确,在函数的形参里面定义的是一个char型和一个float型变量,而“abchina”是一个字符串,与函数中变量类型不同。


文章名称:c语言函数老师提问 C语言函数问题
文章网址:http://cdweb.net/article/dooijod.html