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://lswzjz.com/article/dooijod.html