1、上机填空题374037题目: 从键盘输入一组无符号整数并保存在数组xxN中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入fun函数。请补充fun函数,该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由fun函数返回。 例如:当xx8=123,11,23,222,42,333,14,5451时,bb3=42,333,5451。 注意:部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #define N 1
2、000 int fun(int xx,int bb,int num) int i,n=0; int g,s; for(i=0;i5) _2_; return _3_; main() int xxN; int yyN; int num=0,n=0,i=0; printf(Input number :n); do scanf(%u,&xxnum); while(xxnum+!=0); n=fun( xx,yy,num ); printf( nyy = ); for(i=0;in;i+) printf(%u ,yyi); printf(n); 38题目: 请补充fun函数,该函数的功能是判断一个数的
3、个位数字和百位数字之和是否等于其十位上的数字,是则返回yes!,否则返回no!。 注意:部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #include char *fun(int n) int g,s,b; g=n%10; s=n/10%10; b=_1_; if(g+b)=s) return _2_; else return _3_; main() int num=0; clrscr(); printf(*Input data *n ); scanf(%d,&num); printf(n
4、nn); printf(* The result *n ); printf(%sn,fun( num ); 39题目: 请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定字符数的子字符串。其中,str1指向原字符串,截取后的字符串存放在str2所指的字符数组中,n中存放预截取的字符个数。 例如,当str1=abcdefg,然后输入3,则str2=abc。 注意:部分源程序如blank.c给出。 仅在横线上填入所编写的若干表达式或语句,请勿改动函数中的其它任何内容。 #include #include # define LEN 80 main() char str1LEN,st
5、r2LEN; int n,i; clrscr() ; printf(Enter the string:n); gets(str1); printf(Enter the position of the string deleted:); scanf(_1_); for(i=0;in;i+) _2_; str2i=0; printf(The new string is:%sn,_3_); 40题目: 请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。 例如,当str1=abcdefg时,则str2=ace
6、g。 注意:部分源程序如blank.c给出。 仅在横线上填入所编写的若干表达式或语句,请勿改动函数中的其它任何内容。 #include #include # define LEN 80 main() char str1LEN,str2LEN; char *p1=str1,*p2=str2; int i=0,j=0; clrscr() ; printf(Enter the string:n); scanf(_1_); printf(* the origial string *n); while(*(p1+j) printf(_2_,*(p1+j); j+; for(i=0;ij;i+=2) *p
7、2+=*(str1+i); *p2=0; printf(nThe new string is:%sn,_3_); 逛商场走累了,上淘宝网也许会有惊喜! 解答37分析: 题目要求在fun函数中从参数x x数组中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在参数bb数组中,其个数作为fun函数的返回值返回。此题关键的地方在于如何取得一个数字的个位和十位的数字。题目给出的程序使用了程序设计中常用的一种技巧。即使用整除运算(/)和取模运算(%)。 在程序设计方法中,整除运算(/)和取模运算(%)可以相互配合用于取得整数的各个位数上的数字。例如给出整数a,以下方法可以取得任意位数上的数字。
8、(1)取得个位上的数字,我们可以使用a%10即可。 (2)取得十位上的数字,我们可以使用a/10%10即可。注意这里a/10不一定能取得十位数上的数字,因为a如果大于等于100的情况下,a/10只是去掉个位上的数字而已。 (3)取得百位上的数字,我们可以使用a/100%10即可。 (4)取得千位上的数字,我们可以使用a/1000%10即可。 (5)取得万位上的数字,我们可以使用a/10000%10即可。 (6)更高位的数字依次类推。 从以上可以看出,取得整数的低位可以使用取模运算(%)。要取低位的几位数字可以通过取模10的倍数来控制。例如取12345的最低位通过12345%10=5,取1234
9、5的低两位通过12345%100=45,取12345的低三位通过12345%1000=345,其余的依次类推。 取得整数的最高位可以使用整除运算(/)。要取高位的几位数字可以通过整除10的倍数来控制。例如取12345的最高位通过12345/10000=1,取12345的高两位通过12345/1000=12,取12345的高三位通过12345/100=123,其余的依次类推。有的考生可能会问,12345除以100不是123.45吗?小数部分怎么没有了?这是由于C语言语法的规定,整除运算(/)用于两个整数之间,结果也为整数,即使存在小数部分也会被放弃。 程序注解如下: #include #defi
10、ne N 1000 /* 在x x数组中找出符合条件的整数,将它们保存在参数bb数组中 */ /* num参数为xx数组中整数的个数 */ int fun(int xx,int bb,int num) /* n指示数字放入bb数组的位置,由于数组从0开始,所以初始值设置为0 */ int i,n=0; /* g保存个位数字,s保存十位数字 */ int g,s; /* 使用for循环逐一检查xx数组中每一个整数 */ for(i=0;i5) /* 符否大于5的条件,则将该整数放入bb数组中 */ /* bbn+=xxi相当于bbn=xxi;n+;两句语句 */ bbn+=xxi; return
11、 n; main() int xxN; int yyN; int num=0,n=0,i=0; printf(Input number :n); /* 反复输入整数放入xx数组中,直到输入0为止 */ /* num变量每输入一个整数则加一,最后num保存了xx数组中整数的个数 */ do scanf(%u,&xxnum); while(xxnum+!=0); n=fun( xx,yy,num ); printf( nyy = ); /* 输出符合条件的所有整数 */ for(i=0;in;i+) printf(%u ,yyi); printf(n); 38分析: 题目要求在fun函数中判断一个
12、数的个位数字和百位数字之和是否等于其十位上的数字,是则返回yes!,否则返回no!。实现以上要求的关键在于如何取得一个整数的个位、十位和百位数字。通过整除(/)和取模(%)运算,我们可以得到一个整数的任意位数上的数字。例如给出整数a,各个位数的数字可以通过以下方式得到: (1)取得个位的数字,可以通过a%10得到。例如12345%10=5 (2)取得十位的数字,可以通过a/10%10得到。例如12345/10%10=4 (3)取得百位的数字,可以通过a/100%10得到。例如12345/100%10=3 (4)取得千位的数字,可以通过a/1000%10得到。例如12345/1000%10=2
13、(5)其余位数的数字依次类推 所以,程序使用以上的方法在fun函数中分别得到个位数字g、十位数字s、百位数字b,然后将个位数字g加上百位数字b判断是否等于十位数字s。如果等于则返回字符串yes!,否则返回字符串no!。 程序注解如下: #include #include char *fun(int n) int g,s,b; /* 取得参数n的个位数字,保存在g变量中 */ g=n%10; /* 取得参数n的十位数字,保存在s变量中 * s=n/10%10; /* 取得参数n的百位数字,保存在b变量中 */ b=n/100%10; /* 判断个位数字和百位数字之和是否等于十位上的数字 */ i
14、f(g+b)=s) return yes!; else return no!; main() int num=0; /* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */ /* clrscr函数定义在conio.h中,所以需要#include */ clrscr(); printf(*Input data *n ); /* 从键盘上输入要判断的整数 */ scanf(%d,&num); printf(nnn); printf(* The result *n ); /* 输出fun函数的返回值 */ printf(%sn,fun( num ); 39分析: 题目要求在main
15、函数中实现从字符串str1中截取前面n个字符数的子字符串,然后将截取的子字符串放入str2字符串数组中。 程序注解如下: #include #include # define LEN 80 main() char str1LEN,str2LEN; int n,i; /* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */ /* clrscr函数定义在conio.h中,所以需要#include */ clrscr() ; printf(Enter the string:n); /* gets函数的作用是接收从键盘输入的字符串,将其放入str1参数中 */ /* gets函数定义
16、在stdio.h中,所以需要#include */ gets(str1); printf(Enter the position of the string deleted:); /* 输入要从str1字符串中截取的字符个数,将其放入n变量中 */ scanf(%d,&n); /* 使用循环将str1字符串前n个字符一个一个地复制到str2字符数组中 */ for(i=0;in;i+) str2i=str1i /* 设置str2的字符串结束标记 */ str2i=0; /* 根据The new string is:的提示信息得知要输出得到的新字符串str2 */ printf(The new s
17、tring is:%sn,str2); 40分析: 第一个填空处要注意str1是数组名,而数组名同时也是一个指针名称,所以不需要填写&str1的,即不需要针对str1取地址。 第二个填空处要注意*(p1+j)是取指针p1后第j个位置的地址存放的内容,即取出那个地址中的字符,所以填写%c。 第三个填空处输出得到的新的字符串,从nThe new string is:%sn中的%s也可以看出是填写一个字符串,所以填写str2。 程序注解如下: #include #include # define LEN 80 main() char str1LEN,str2LEN; /* p1初始值指向str1第一
18、个字符 */ /* p2初始值指向str2第一个字符 */ char *p1=str1,*p2=str2; int i=0,j=0; /* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */ /* clrscr函数定义在conio.h中,所以需要#include */ clrscr() ; printf(Enter the string:n); /* 根据Enter the string:提示信息得知输入的是要进行处理的字符串str1 */ scanf(%s,str1); printf(* the origial string *n); /* 逐一输出str1字符串每一个字符,同时j记录str1字符串中的字符个数 */ /* while(*(p1+j)是while(*(p1+j)!=0)的简写方式 */ while(*(p1+j) printf(%c,*(p1+j); j+; /* 将str1字符串中数组下标为偶数的字符复制到str2数组中 */ /* p2初始值指向str2第一个字符,每复制一个字符p2往后移动一个字符位置 */ for(i=0;ij;i+=2) *p2+=*(str1+i); *p2=0; printf(nThe new string is:%sn,str2);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1