1、999|x0) printf(Please input(0x=999): ); scanf(%d,&x); printf(nThe result is: %dn,fun(x);。,【微答案】(1) 0(2) x(3) t+【微分析】填空1:变量n用于存放符合条件的整数的个数,应赋初值为0。填空2:根据题目要求,确定循环变量t的取值范围tvoid fun (char *s, char *t)/*found*/int i;i=0;sl = strlen(s);for (; isl; i+)ti = ssl-i;for (i=0;tsl+i = si;t2*sl = 0; char s100, t1
2、00;nPlease enter string s:%s, s);fun(s, t);The result is: %sn, t);(1)int i, sl;(2)ti=ssl-i-1;(1)变量s1没有定义。(2)该循环实现将s串中的字符逆序存入t串中,ti对应s串中的ssl-i-1。三、程序设计题函数fun的功能是: 将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。例如,当a45,b=12。调用该函数后,c=1425。 部分源程序存在文件PROG1.C中。数据文件IN.D
3、AT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。void fun(int a, int b, long *c)main() /* 主函数 */ int a,b; long c;Input a b:scanf(%d%d, &a, &b);fun(a, b, &c); %ldn, c);*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;本题的主要问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求
4、余可得到它们的个位数。得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。使用c时要进行指针运算。找出100999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;例如,当x值为5时,100999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。n=0;=_1_)s1=t%10; s2=(_2_)%10;if(s1+s2+s3=_3_)t+;while(
5、x0):(1) 999(2) t/10(3) x题目要求找出100999之间符合要求的数,所以while语句的循环条件是t999。变量s2存放三位数的十位,取出三位数十位数值的方法为s2(t/10)%10。题目需要判断各位上数字之和是否为x,所以if语句条件表达式是s1s2s3=x。从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642。void fun (long s, long t) long sl=10;s /= 10;*t = s % 10;while ( s 函数的形参类型应与实参类型相
6、同,主函数中函数fun()的调用方式说明其参数应为指针类型,所以形参t应定义为long *t。while循环的功能是,每循环一次就从s中的数上取出一位进行运算,直到取完为止,所以循环条件为s0。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。 部分源程序在文件PROG1.C文件中。#define N 16typedef struct char num10;int s; STREC;void fun( STREC a )STREC tmp;int i,j;for(i = 0; i N;for(j = i
7、+1; j j+) /* 请按题目要求完成以下代码 */ STREC sN=GA005,85,GA003,76,GA002,69,GA004,85, GA001,91,GA007,72,GA008,64,GA006,87,GA015GA013GA012GA014,91,GA011,66,GA017GA018GA016,72;FILE *out ;fun( s );The data after sorted :nfor(i=0;iN; if( (i)%4=0 )printf(printf(%s %4d ,si.num,si.s);out = fopen(c:testout.dat,w) ; if
8、( (i)%4=0 & i) fprintf(out, fprintf(out, %4d ,si.s);fprintf(out,fclose(out) ;STREC t;for(i=1;i+) /*用冒泡法进行排序,进行N1次比较*/for(j=0;jN-1;j+) /*在每一次比较中要进行N1次两两比较*/if(aj.s99999999|nn0(3) i*10变量i用来控制被取出的偶数在新数中的位置,应赋初值1。while语句的循环条件是s0。变量i用来标识个位、百位和千位等。输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。#define M 5int fun(int n, i
9、nt xx) int i, j, sum=0;printf( nThe %d x %d matrix:, M, M );for( i = 0; M; i+ ) for( j = 0; j+ )printf( %f , xxij );for( i = 0 ; n ;sum += xxii+xxi n-i-1 ;return( sum );main( ) int aaMM=1,2,3,4,5,4,3,2,1,0,6,7,8,9,0,9,8,7,6,5,3,4,5,6,7;printf ( nThe sum of all elements on 2 diagnals is %d.,fun( M, a
10、a );(1)int fun(int n,int xxM)(2)printf(,xxij);(1)当用数组作为函数的形参时,可以不定义数组的行数,但一定要定义数组的列数。(2)该处错误比较隐蔽,一般C语言上机考试很少涉及printf函数中的错误,此处只要明白d和f的区别就可以了。格式字符d表示以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示以小数形式输出单精度、双精度数据,隐含输出6位小数。将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。调用该函数后,c=42
11、51。*c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。得到后对应乘以1000、100、10、1,就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入一个整数:64862。 unsigned long x=0;while(n) t=n%10;if(t%2=_1_)x=_2_+t;n=_3_;(1)0(2) 10*x (3)n/10定义变量t用来存放某数的各
12、个位数值,此处判断t是否为偶数,即对2求余结果是否为0。将t作为x的个位数,原来x的各个位上升1位,即x10*x+1。每循环一次,通过除法运算,去掉数值最后一位。将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。87653142时,t中的数为:7531。void fun (long s, long *t) int d;long sl=1;t = 0;while ( s d = s%10;if (d%2 = 0) *t = d * sl + *t;sl *= 10;s /= 10;【微答案】 (1)*t=0;(2)if(d%2!=0)或if(d%2=1)(
13、1)由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t0。(2)变量d表示数s各个位上的数,此处的if条件应为判断d是否为奇数。编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString-SecondString程序输出:FirstString-SecondStringvoid fun(char p1, char p2) char s180, s240 ;Enter s1 and s2:%s%s, s1, s2) ;s1=%sn, s1) ;s2=%sn, s2) ;Invoke fun(s1,s2):fun(s1, s2) ;After invoking:prin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1