C语言问题,求帮助??这个编程里的flag 编程=1,,,flag 编程==1,,,还有%4d.的.是什么意思??最高手指教!!不甚感激

共有 3389 人关注过本帖
标题:能否帮我解释几条语句,对我的进步很重要!! 谢谢~ 询问if(i==x) flag=1这 ...
来 自:黑龙江
等 级:论坛游民
帖 子:129
专家分:92
结帖率:96%
&&已结贴√
&&问题点数:20&&回复次数:19&&&
能否帮我解释几条语句,对我的进步很重要!! 谢谢~ 询问if(i==x) flag=1这一句
程序代码:
#include&stdio.h&//将一个偶数拆分成两个素数
#include&math.h&//这个没有必要吧?
int flag=<font color=#;//这里仅仅是将flag 设为全局变量么?
void ss(int x)
int i=<font color=#;
for(i=<font color=#;i&x;i++)
&&& if(x%i==<font color=#) break;
if(i==x) flag=<font color=#;//这里是什么意思,flag这里是“=”(这里赋值吧)?还是if括号中的 i==x 什么意思? //i能取到x么? 请看17楼
void ss(int x);
void main()
int i,j,n;
printf(&请输入一个大于4的偶数:&);
scanf(&%d&,&n);
for(i=<font color=#;i&=(n/<font color=#);i+=<font color=#)
&&& j=n-i;
&&& ss(i);
&&& if(flag==<font color=#)//这里&&flag 又变成了 “==”&&蒙了,什么意思?
&&&&&&&&flag=<font color=#;//唉。。。还是 什么意思?
&&&&&&&&ss(j);
&&&&&&&&if(flag==<font color=#)//同上&&疯了~~
&&&&&&&&printf(&%d能被拆成的两个素数分别为:%d,%d\n&,n,i,j);
&&&&&& flag=<font color=#; //一次输出后,标志位应该归零(必须的么? 因为是循环语句的原因吧?)
&&& printf(&\n&);
还请朋友能帮帮忙~ 麻烦你们了!!
[ 本帖最后由 vvvevvv 于
15:54 编辑 ]
搜索更多相关主题的帖子:
等 级:蜘蛛侠
帖 子:550
专家分:1176
== 表示判断是否相等
= 表示赋值
你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
等 级:蜘蛛侠
帖 子:550
专家分:1176
你大概还没有学if条件选择结构,去看看相关的东西就明白了
你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
来 自:黑龙江
等 级:论坛游民
帖 子:129
专家分:92
回复 2楼 zghnxzdcx
这个...我是知道的,但是 这里 我感觉&&用的很乱!!
等 级:蜘蛛侠
帖 子:550
专家分:1176
== 只在if里面出现,很乱吗?
你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
== 是逻辑运算符
=&&是赋值运算符
到底是“出来混迟早要还”还是“杀人放火金腰带”?
来 自:黑龙江
等 级:论坛游民
帖 子:129
专家分:92
回复 3楼 zghnxzdcx
学了!! 我一直 都觉得 在if方面&&我接触的,用的都是明显的判断。到了&&0 啊 1 啊&&我就分的不清了
还请帮我解释解释&&~~谢谢~~
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
你可以先看下书
到底是“出来混迟早要还”还是“杀人放火金腰带”?
等 级:蜘蛛侠
帖 子:550
专家分:1176
回复 7楼 vvvevvv
这个自己慢慢悟吧,我的语言表达不清楚
你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
来 自:黑龙江
等 级:论坛游民
帖 子:129
专家分:92
回复 5楼 zghnxzdcx
一会 =&&&一会 ==&&&一会括号里是=&&一会括号外是==&&& 蒙了&&
帮帮忙~谢谢~
版权所有,并保留所有权利。
Powered by , Processed in 0.191031 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言中基础小问题详细介绍
转载 & & 作者:
这篇文章详细介绍了C语言中基础小问题,有需要的朋友可以参考一下
1、printf格式输出函数 如果格式控制说明项数多于输出表列个数,则会输出错误数据;如果输出表列个数多于格式控制说明数,则多出数不被输出。%md,m指的是输出字段的宽度。如果输出字段位数小于m,则左端以空格补齐,若大于m,则按照实际位数输出。%-md,基本同上,只不过不同之处在于,空格在右端补齐printf参数可以是常量,变量或表达式,VC++ 6.0中采用从右向左顺序求值,从左向右输出如 代码如下:int x = 5;&printf("%4d%4d%4d", x, ++x, ++x);输出的是7,7,6. 而不是5,6,7注意,不同的编译器可能输出不同结果,直接用gcc编译结果为7,7,72、0-9数字转为字符数字为m,则m+‘0'即为m的字符形式‘m'3、小写字母变为大写字母 c为小写字母,则c-'a'+'A'即为对应的大写字母4、switch如果找到匹配的case入口,则执行后面的语句,执行完语句之后,并不像if语句那样退出,如果没有遇到break语句,将逐条执行后面所有的case语句,不再进行条件判断。case入口后面的语句可以是一句,也可以是多句,并且不需要大括号。5、字符数组存储字符串当char str[5]=new {"china"};时,程序会出问题,输出的时候会在china后带乱码,这是因为china字符串后还有一位'\0',因此应该给str数组多一位。即char str[6]=new {"china"};且'\0'只表示字符串的结束,并不会输出。scanf("%s",str);不能存入空格,因为认为空格代表字符串的结束。gets(str);可以在字符串中间加入空格。puts(str);在输出字符串后自动加入换行6、字符串操作函数字符串拷贝函数:strcy(str1,str2); 将字符串str2拷贝到str1中。字符串连接函数:strcat(str1,str2); 将str2连同'\0'一起连接到str1的最后一个字符(非'\0')后面,结果放在str1中。字符串比较函数:strcmp(str1,str2); 比较str1和str2的大小,如果str1==str2,则返回0;如果str1&str2,则返回正整数;如果str1&str2,则返回负整数。字符串长度函数:strlen(str); 返回字符串str的实际长度,不包括末尾的'\0'。7、函数的参数和单向值传递函数的参数分为实参和形参。形参出现在函数定义中,在整个函数体中使用,离开函数体则不能使用。实参出现在主调函数中,进入被调函数后,实参不能被使用。形参只有被调用时才被编译系统分配内存单元,在调用结束时候,编译系统即刻释放所分配的内存单元,因此形参只在函数内部有效,函数调用结束返回主调函数后则不能再使用;单向传值:只能把实参的值传递给形参,不能把形参的值反向传递给实参,叫做单向值传递。因此,函数调用过程中,形参的值发生改变,实参的值不会改变8、数组作为参数数组名可以作为函数实参,这时候形参可以是数组或者指针。且形参是一维数组时候可以不指定长度。形参是二维数组时候,第一维大小可以省略,要指定第二维的大小。9、变量的存储方式(1)局部变量局部变量在每次函数调用时,系统会在内存的动态存储区为他们重新分配内存单元,随着函数的频繁调用,某个变量的存储位置会随着程序的运行不断变化,所以未赋值的局部变量的值是不确定的。函数中的局部变量不能作为返回值,因为函数结束后,局部变量要被回收。(2)static类型静态变量在编译的时候被分配内存、赋初值,并且只会被赋初值一次。未赋初值的静态变量,系统自动赋初值0(或'0')。静态变量在内存静态存储区占用固定的内存单元。即使它所在的函数调用结束,也不会释放存储单元,其值也会继续保留,下次调用,会继续使用该值。静态变量分为静态局部变量和静态全局变量,静态全局变量就是定义在函数体外的静态变量,静态局部变量就是定义在函数体内的静态变量。如下: 代码如下:#include&stdio.h&void f(){&&& static int a=0; //编译时被赋初值,且整个过程只被赋初值一次&&& ++a;&&& printf("%-2d",a);}main(){&&& f();&&& f();&&& f();}以上程序的输出结果为1 2 3因为对static变量赋初值是在编译时完成,而且只赋值一次,之后在调用函数不会执行赋初值操作,因此输出1 2 3 ;若去掉static关键字,那么结果就会变为1 1 1 ;由此看出,函数反复调用多次,局部变量每次都会被赋初值,而静态变量只是在第一次被调用的时候赋初值。此处特变注意:java中是没有静态局部变量的,只会有针对类的静态全局变量。(3)寄存器类型定义形式: register 数据类型 变量名;寄存器类型局部变量的作用域、生存期与局部变量相同。寄存器的个数有限,寄存器的存储数据位数有限,所以寄存器类型的变量不能太多,而且有整型变量和字符型变量才能被定义为寄存器类型的局部变量。现在的优化系统可以自动的判断把相关变量存到寄存器中。(4)外部变量10、编译预处理#include&文件名&和#include"文件名"的区别是:使用尖括号时,编译预处理程序只在系统指定的文件夹中寻找;而使用双引号,编译预处理程序首先在当前文件所在的文件夹中寻找,如果找不到,则在系统指定的文件夹中再寻找。11、&和*优先级都属于第二级,从右向左运算12、*与++、--运算符都属于第二级,从右向左计算*p++& 等价于& *(p++)*++p& 等价于& *(++p)13、[& ]和*[& ]优先级高于*13、二维数组的行地址和列地址int a[2][2]={1,2,3,4};则a为首地址,第一行首地址;*a和a[0]都是第一行第一个元素的地址a+1为第二行行地址*(a+1)为第二行第一个元素地址,a[1]也为第二行第一个元素地址14、指向数组的指针变量(数组指针)int *(p) [4];表示一个指向含有4个int元素的数组的指针。(1)p指向一维数组的首行地址 代码如下:main(){&&& int a[2]={1,2};&&& int (*p)[2];&&& p=&a;//p是指向数组的指针,即行指针,因此要用&a给其赋值,&a为数组地址&&& printf("%d\n",**p);//取第一个元素,其中p为行地址,*p为元素地址,**p为元素值&&& printf("%d\n",*(*p+1));//取第二个元素&&& //也可以如下取值&&& printf("%d\n",(*p)[0]);//(*p)可以取代a&&& printf("%d\n",(*p)[1]);}(2)p指向二维数组的首行地址 代码如下:main(){&&& int a[2][2]={1,2,3,4};&&& int (*p)[2];&&& p=a;//p指向二维数组的首行地址&&& printf("%d\n",**p);//*p是元素的地址,**p则为元素内容&&& printf("%d\n",*(*(p+1)+1));}15、指针数组int *p[4];表示一个数组中含有4个int型指针。char *p[4];表示一个数组中含有4个char型数组,或则4个字符串16、二维数组中的各个地址int a[2][3];则a为首行地址,*a为首行第一个元素地址,**a为首行第一个元素的值a+1为第二行地址,*(a+1)为第二行第一个元素的地址,**(a+1)为第二行第一个元素的值*(a+1)与a[1]等价:都代表第二行第一个元素的地址例子: 代码如下:main(){&&& int a[2][2]={1,2,3,4};&&& printf("a=%d\n",a);&&& printf("*a=%d\n",*a);&&& printf("**a=%d\n",**a);&&& printf("*a+1=%d\n",*a+1);&&& printf("a+1=%d\n",a+1);&&& printf("a[1]=%d\n",a[1]);&&& printf("a[1]+1=%d\n",a[1]+1);&&& printf("*a[1]=%d\n",*a[1]);}17、字符指针变量在接受输入字符串时,必须先开辟存储空间char *scanf("%s",cp);以上是错误的。可以改为:char cp[20];scanf("%s",cp);或者char *cp,str[20];cp=scanf("%s",cp);总之,一定要先开辟空间,再接受字符串18、c和c++中的返回值不能是数组,java返回值可以是数组19、指针函数和函数指针指针函数:int * function();函数指针: 代码如下:int (*p) ();int max(int a,int b);p=int a=(*p)(2,3);20、关于变量的生命周期函数中定义的局部变量是不能作为返回值的,因为函数结束后,局部变量就被回收了。21、结构体结构体中可以嵌套结构体,但不能是其本身。且成员结构体的定义必须在主结构体之前。22、mallocmalloc函数位于stdlib.h中,函数原型为void * malloc(unsigned size);eg: struct student *p=(struct student *)malloc(sizeof(struct student));因为malloc返回的是一个void类型的指针,所以要强制转换。23、free该函数原型为void& free(void * ptr)释放有指针ptr指向的动态分配的内存空间。为保证动态存储区的有效利用,当某个存储空间不再使用时,就应该及时释放它。24、结构体和共用体(1)结构体结构体可以作为函数的参数和返回值。结构体只有在初始化的时候才能直接用大括号{}形式赋值;当先声明,后赋值时候,就只能单个元素赋值,不能再用大括号形式了。这个跟数组的赋值类似。举例如下 代码如下:struct student{&&&&&& char *};struct student stu={1,'typ'};//是正确的但是下面的是错误的 代码如下:struct student stu;stu={1,"typ"};//是错误的此时这能stu.bh=1;stu.name="typ"(2)共用体共用体不能作为函数的参数和返回值共用体不能同时存放,每一时刻只能存放一个成员,以最后一次存放的成员为有效成员。共用体的大小是最大元素所占用的大小;共用体可以出现在结构体类型中,反之,结构体也可以出现在共用体的类型中25、枚举类型 代码如下:enum color {red,green,blue};enum color c=int i=//值为026、类型标识符的重定义c语言中用关键字typedef来声明新的类型名typedef int INTEGER;INTEGER x,y;等价于int x ,又比如结构体定义: 代码如下:typedef struct{&&&&&& char name[10];&&&}student& stu1, stu2, *s;另外,typedef只是进行类型重定义,只是为该类型命名一个别名,并不产生新的数据类型27、位运算包括(与、或、异或、取反)。其中,位运算符进行运算时,数都是以补码形式参加运算,且符号位参与运算。异或:相同为0,不同为1a^a=0;a^0=a;a^~a=1;此处可以用异或来实现两数的交换a=a^b;b=b^a;a=a^b;这样避免引入临时变量28、移位运算(1)a&&b,表示a的二进制值左移b位(2)a&&b,表示a的二进制值右移b位移位运算具体实现有3种形式:(1)循环移位:移入的位等于移出的位(2)逻辑移位:移出的位丢失,移入的位取0(3)算术移位:移出的位丢失,左移入的位取0,右移入的位取符号位,符号位保持不变C语言的移位运算与具体的C编译系统有关,如VC++6.0采用的是算术移位注意:移位操作并不会改变原操作数的值。例如a&&2运算后,a的值保持不变,除非通过赋值a=a&&2来改变a的值。29、文件(1)C语言中文件是字节流文件.(2)C中为用户定义的文件类型是FILE,FILE文件类型是结构体类型,FILE结构是用关键字typedef定义出的一种结构。 代码如下:struct& _iobuf{char * _int _char *int _int _.........};typedef struct& _iobuf& FILE;(3)文件打开与关闭文件指针 = fopen("文件路径\\文件名", "文件操作方式");操作方式分为r,w,a,r+,w+,a+如果fopen打开失败,则返回NULL如果缓冲区未满512B,那么不会写到磁盘中,万一程序异常终止,则缓冲区中数据丢失,导致文件不完整。只有对打开文件执行关闭操作时,才能强制把缓冲区中不足512B的数据写到磁盘文件中,保证文件的完整性。fclose函数用来关闭文件fclose(文件指针);返回值是一个整数值,若为0,表示正常关闭,否则表示无法正常关闭文件。(4)文件的输入和输出读写一个字符:char fgetc(文件指针);EOF fputc(字符,文件指针)读写一个字符串:fgets(字符串s,读入字符个数n,文件指针)---&在中途遇到\n或者EOF停止,读n-1个字符,在末尾加'\0';fputs(字符串,文件指针)---&字符串的结束标记不会写入文件格式化读写:fscanf(fp, "%d%s", &i, s)---&从文件中读取数据保存到变量;fprintf(fp, "%d%c", j, c)---&按指定格式向文件写入数据成块读写:fread(buffer,size,count,fp)和fwrite(buffer,size,count,fp)buffer是一个指针,fread()中表示存放“输入数据”的变量首地址,fwrite()中表示存放“输出数据”的变量首地址size表示数据块的字节数count表示数据块个数fp文件指针返回值都是count值(4)其他文件操作的函数feof(fp)判断文件的末尾标志,到达末尾返回1,否则返回0rewind(fp)用于定位,是文件的位置指针返回文件开头。fseek(fp, offset, base)用来控制文件内部位置指针移动。base是位置移动的基准点。offset是偏移量ftell(fp)用于获取位置指针的位置,相对于文件开头。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具导读:就爱阅读网友为您分享以下“2010南开二级C语言上机100题---带解析1”的资讯,希望对您有所帮助,感谢您对92to.com的支持!遍历字符串;通过if条件语句,判断是否相同。【解题思路】 从字符串ss中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若ss串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若ss串的字符和c串的字符不对应相同,则继续对ss串的下一个字符进行处理。本程序是采用逐一比较的方式找出出现的次数。循环的作用是在串中从左到右逐一走动,if( )的作用是进行判断是否相同,若与c相同,则表示又出现一次。 第四套请补充函数fun,该函数的功能是:把ASCII码为偶数的字符从字符串str中删除,结果仍然保存在字符串str中,字符串str从键盘输入,其长度作为参数传入函数fun。 例如,输入&abcdef&,输出&ace&。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序:#include &stdlib.h&#include &stdio.h&#define N 80【1】{int i,【2】;for (i=0;i&n;i++){if(s[i]%2!=0)s[j++]=s[i];}【3】;}void main(){int i=0, strlen=0;char str[N];system(&CLS&);printf(&\nInput a string:\n&);gets(str);while(str[i]!=&#39;\0&#39;){strlen++;i++;}fun(str, strlen);printf(&\n*** display string ***\n&);puts (str);}【参考答案】 (1) void fun(char s[],int n) (2) j=0 (3) s[j]=&#39;\0&#39; 【考点分析】 本题考查:函数定义,需要确定类型标识符、函数名和形式参数。变量初始化,变量声明后,要进行初始化赋值,我们对变量进行初始化时,必须确定好变量的作用。字符串结束标识&#39;\0&#39;,用来结束字符串,是经常考查的知识点。 【解题思路】 填空1:由main函数调用函数fun的格式可以知道,函数fun没有返回值,第一个参数是字符数组,第二个参数是整型变量。 填空2:变量j声明时,没有初始化,所以在使用j之前要将它初始化为0。 填空3:当把所有ASCII码为偶数的字符都存入字符串s中后,要在最后加上&#39;\0&#39;,表示字符串的结束。下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include &stdio.h&#include &conio.h&long fun(long num){/*************found**************/do{k *=num%10;/
/*************found**************/num \=10;}while(num);return(k);}main(){printf(&\Please enter a number: &);scanf(&%ld&,&n);printf(&\n%ld\n&,fun(n));}【参考答案】 (1)错误:正确:long k=1;(2)错误:num\=10;
正确:num/ =10;【考点分析】 变量初始化,保存乘积的变量初始化为1。 【解题思路】 (1)k用来存放各位数字的积,初值应为1。 (2)这里是一个符号错误,除号使用&/&来表示的。 请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传给m的值为50,则程序输出: 7
49 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include&conio.h&#include&stdio.h&#include&stdlib.h&#define M 100void fun(int m, int *a, int *n){}void main(){ FILE *int aa[M],n,k;system(&CLS&);fun(50,aa,&n);for(k=0;k&n;k++)if((k+1)%20==0)
/*每行输出20个数*/{printf(&%4d&,aa[k]);printf(&\n&);}else printf(&%4d&,aa[k]);printf(&\n&);/******************************/wf=fopen(&out.dat&,&w&);for(k=0;k&n;k++)fprintf(wf,&%4d&,aa[k]);fclose(wf);/*****************************/}【参考答案】 void fun(int m, int *a, int *n) { int i,j=0; for(i=1;i&=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j;
/*返回这些数的个数*/ } 【考点分析】 本题考查:整除的判断方法,用%对除数求余,若余数为0,表示能被整除。if语句条件表达式,注意&逻辑与&和&逻辑或&的区别。for循环语句,注意循环变量的取值范围。一维数组的定义与引用。 【解题思路】 本题要找出能被7或11整除的所有整数,注意数学中的&或&和C语言中的&或&的区别,在此处,if条件语句中用&||&运算符,若要找能同时被7和11整除的所有整数,则在if( )中,应用&&&&运算符。 第五套请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。 例如,1900年不是闰年,2004是闰年。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序:#include &stdlib.h&#include &stdio.h&#include &conio.h&int fun(int n){int flag=0;
if(n%4==0){if (【1】)flag=1;}if (【2】)flag=1;return【3】;}void main(){system(&CLS&);printf(&Input the year:&);scanf(&%d&,&year);if (fun(year))printf(&%d is a leap year. \n&,year);elseprintf(&%d is not a leap year.\n&,year);}【参考答案】 (1) n%100!=0或n%100 (2) n%400==0
(3) flag 【考点分析】 本题考查:判断闰年的算法,年份能被4整除但不能被100整除,或者年份能被400整除。return语句,负责将函数值返回给主调函数。一般情况下,flag在C语言中作为一种标志来使用,本书中有多个题目都使用了flag标志。 【解题思路】 填空1:判断闰年的方法是,年份能被4整除但不能被100整除,或者年份能被400整除。n不能被100整除,即对100取余非零。 填空2:能被400整除的年份也是闰年,n能被400整除,即对400取余为零。 填空3:flag标记年份n是否为闰年,当flag为1时,是闰年,当flag为0时,不是闰年。 下列给定程序中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include
&stdio.h&#include
&conio.h&double fun(int
n){ double result =1.0;/*************found**************/if n==0return 1.0;while(n&1&&n&170)/*************found**************/result=n--;}void main(){printf(&Input
N:&);scanf(&%d&,&n);printf(&\n\n%d!=%lf\n&,n,fun(n));}【参考答案】 (1)错误:if n==0
正确:if(n==0) (2)错误:result =n--;正确:result *=n--; 【考点分析】 本题考查:if语句,一般情况下,需要根据题目要求确定条件表达式的内容,同时需要注意其格式。计算阶乘的方法,n!=n*(n-1)!。 请编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。 例如,当a=45,b=12,调用该函数后,c=5241。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:#include &stdio.h&#include &conio.h&void fun(int a ,int b,long *c){}void main(){int
a,b;FILE *printf(&Input a ,b: &);scanf(&%d%d&,&a,&b);fun(a,b,&c);printf(&The result is :%ld\n&
,c);/******************************/out=fopen(&out.dat&,&w&);fun(a+11,b+22,&c);fprintf(out,&%ld\n&,c);fclose(out);/******************************/}【参考答案】 void fun(int a,int b,long *c) { *c=(a%10)*1000+(b%10)*100+(a/10)*10+b/10; } 【考点分析】 本题考查:如何取出数值n的各个位,主要是考查&#39;%&#39;和&#39;/&#39;的交换使用。两个整型数相除,&#39;/&#39;用来求得数的整数部分,&#39;%&#39;用来求余数。 【解题思路】 本题中主要的问题是怎么取出a和b的个位数和十位数,取出后怎么表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以、10、1就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。 第六套请补充函数fun,函数fun的功能是求n的阶乘。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include &stdio.h&long fun(int
n){if (【1】)return(n*fun(【2】));return【3】;}void main(){printf(&10!=%ld\n&,fun(10));}【参考答案】 (1)n&1或1&n
(3)1 【考点分析】 本题考查:if语句条件表达式,这类题目一般解法是根据题意确定表达式的值,如果表达式的值为真,则执行下面的语句;如果值为假,则不执行该语句。递归算法的掌握,递归是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。 【解题思路】 填空1:求阶乘时,采用递归的算法,n&1和n==1这两种情况的处理方法不同,需要分开考虑。 填空2:阶乘的算法是,当n&1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。 填空3:n==1是递归的终止条件,返回值为1。
下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include &stdio.h&#include &conio.h&#include &stdlib.h&int fun(int k){ int m=0,mc=0,while((k&=2)&&(mc&10)){/*************found**************/if((k%13=0)||(k%17=0)){ m=m+k;mc++;}k--;/*************found**************/}void main(){system(&CLS&);printf(&%d\n &,fun(500));} 【参考答案】 (1 )错误:if((k%13=0)||(k%17=0)) 正 确:if((k%13
欢迎转载:
推荐:    

我要回帖

更多关于 8flag 的文章

 

随机推荐