上机填空题3336.docx
- 文档编号:29099057
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:19.61KB
上机填空题3336.docx
《上机填空题3336.docx》由会员分享,可在线阅读,更多相关《上机填空题3336.docx(17页珍藏版)》请在冰豆网上搜索。
上机填空题3336
33
题目:
函数fun的功能是:
将形参a所指数组中的前半部分元素中值和后半部分元素中的值对换。
形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如:
若a所指数组中的数据依次为:
1、2、3、4、5、6、7、8、9,则调换后为:
6、7、8、9、5、1、2、3、4。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#defineN9
voidfun(inta[],intn)
{
inti,t,p;
p=(n%2==0)?
n/2:
n/2+___1___;
for(i=0;i { t=a[i]; a[i]=a[p+___2___]; ___3___=t; } } main() { intb[N]={1,2,3,4,5,6,7,8,9},i; printf("\nTheoriginaldata: \n"); for(i=0;i printf("%4d",b[i]); printf("\n"); fun(b,N); printf("\nThedataaftermoving: \n"); for(i=0;i printf("%4d",b[i]); printf("\n"); } 34 题目: 请补充fun函数,该函数的功能是: 分类统计一个字符串中元音字母和其它字符的个数(不区分大小写)。 例如: 输入aeiouAUpqr,结果为A: 2E: 1I: 1O: 1U: 2other: 3。 注意: 部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #include #defineN100 voidfun(char*str,intbb[]) { char*p=str; inti=0; for(i=0;i<6;i++) ___1___; while(*p) { switch(*p) { case'A': case'a': bb[0]++;break; case'E': case'e': bb[1]++;break; case'I': case'i': bb[2]++;break; case'O': case'o': bb[3]++;break; case'U': case'u': bb[4]++;break; default: ___2___; } ___3___ } } main() { charstr[N],ss[5]="AEIOU"; inti; intbb[6]; clrscr(); printf("Inputastring: \n"); gets(str); printf("thestringis: \n"); puts(str); fun(str,bb); for(i=0;i<5;i++) printf("\n%c: %d",ss[i],bb[i]); printf("\nother: %d\n",bb[i]); } 35 题目: str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。 请补充fun函数,该函数的功能是: 统计字符串str中的单词数,结果由变量num传回。 每个单词之间都由空格隔开,并且字符串str开始不存在空格。 例如: str="howareyou",结果为: num=3。 注意: 部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #defineN80 voidfun(char*s,int*num) { inti,n=0; for(i=0;___1___;i++) { if(s[i]>='a'&&s[i]<='z'&&s[i+1]==''||s[i+1]=='\0') ___2___; } ___3___; } main() { charstr[N]; intnum=0; printf("Enterastring: \n"); gets(str); while(str[num]) num++; fun(str,&num); printf("Thenumberofwordis: %d\n\n",num); } 36 题目: str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。 请补充fun函数,该函数的功能是把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。 例如: str="Abc123e456hui7890",结果为: 1234567890。 注意: 部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #defineN80 intbb[N]; intfun(chars[],intbb[],intnum) { inti,n=0; for(i=0;i { if(___1___) { bb[n]=___2___; n++; } } return___3___; } main() { charstr[N]; intnum=0,n,i; printf("Enterastring: \n"); gets(str); while(str[num]) num++; n=fun(str,bb,num); printf("\nbb="); for(i=0;i printf("%d",bb[i]); printf("\n"); } 来吧,淘宝网上有更多精采 特产年度热卖榜 进口美食地图 解答 33 分析: 程序注解如下: #include #defineN9 /*a为数组,n为a数组中成员的个数*/ voidfun(inta[],intn) { inti,t,p; /*计算数组a中间位置p,如果数组成员个数为偶数则取n/2,否则取n/2+1*/ /*n%2==0用于判断n是否为偶数*/ p=(n%2==0)? n/2: n/2+1; /*使用循环进行对换*/ for(i=0;i { /*将使用t变量保存左边的数组成员数据*/ t=a[i]; /*将左边数组成员对应的右边数组成员移动到左边位置*/ a[i]=a[p+i]; /*将预先存放在t变量中的原左边数组成员移动到右边位置*/ a[p+i]=t; } } main() { intb[N]={1,2,3,4,5,6,7,8,9},i; printf("\nTheoriginaldata: \n"); /*输出处理之前的数组成员*/ for(i=0;i printf("%4d",b[i]); printf("\n"); fun(b,N); printf("\nThedataaftermoving: \n"); /*输出处理之后的数组成员*/ for(i=0;i printf("%4d",b[i]); printf("\n"); } 34 分析: 题目要求在fun函数中分类统计传入的字符串str中元音字母和其它字符的个数(不区分大小写),然后将这些个数作为bb数组的成员。 元音字母一共有五个,分别是A、E、I、O、U。 由于不区分大小写,所以小写的a、e、i、o、u和A、E、I、O、U中对应的字符算一个字符。 例如A和a被看成同一个字符。 为了实现题目要求,程序设置指针p指向str字符串第一个字符,然后通过往后移动p指针逐一判断p当前指向的指针是否为元音字母或者非元音字母。 当发现某元音字母的时候将该元音字母的个数加一即可。 程序注解如下: #include #include #defineN100 /*str字符串统计元音字母和其它字符的个数的字符串*/ /*bb数组存放找到的元音字母和其他字符的个数*/ voidfun(char*str,intbb[]) { /*将p指针指向str字符串的第一个字符*/ char*p=str; inti=0; /*存放字符个数的bb数组每一个成员初始化为0,因为下面需要进行个数累加*/ for(i=0;i<6;i++) bb[i]=0; /*while(*p)是while(*p! ='\0')的简写方式* /*while循环的循环条件是p指针当前指向的字符不是结束标记符'\0'*/ while(*p) { /*判断p指针当前指向的字符是否为元音字符*/ switch(*p) { /*判断p指针当前指向的字符是否为'A'或者'a'*/ /*bb第一个成员记录'A'或者'a'的个数*/ case'A': case'a': bb[0]++;break; /*判断p指针当前指向的字符是否为'E'或者'e'*/ /*bb第二个成员记录'E'或者'e'的个数*/ case'E': case'e': bb[1]++;break; /*判断p指针当前指向的字符是否为'I'或者'i'*/ /*bb第三个成员记录'I'或者'i'的个数*/ case'I': case'i': bb[2]++;break; /*判断p指针当前指向的字符是否为'O'或者'o'*/ /*bb第四个成员记录'O'或者'o'的个数*/ case'O': case'o': bb[3]++;break; /*判断p指针当前指向的字符是否为'U'或者'u'*/ /*bb第五个成员记录'U'或者'u'的个数*/ case'U': case'u': bb[4]++;break; /*p指针当前指向的字符不是元音字符的时候*/ /*bb第六个成员记录非元音字符的个数*/ default: bb[5]++; } /*p指针移动到str字符串中下一个字符*/ p++; } } main() { charstr[N],ss[5]="AEIOU"; inti; intbb[6]; /*clrscr函数用于清除输出窗口中已经显示的内容*/ /*clrscr函数定义在conio.h,所以需要#include clrscr(); printf("Inputastring: \n"); /*gets函数用于接收键盘输入的字符串,将其放入参数中*/ /*gets函数定义在stdio.h,所以需要#include gets(str); printf("thestringis: \n"); /*puts函数用于将参数中包含的字符串输出在输出窗口*/ /*puts函数定义在stdio.h,所以需要#include puts(str); fun(str,bb); /*输出元音字母和对应的个数*/ for(i=0;i<5;i++) printf("\n%c: %d",ss[i],bb[i]); /*输出其他字符的个数*/ printf("\nother: %d\n",bb[i]); } 35 分析: 题目要求在fun函数中统计字符串str中的单词数,结果由变量num传回。 str是全部由小写字母字符和空格字符组成的字符串,每个单词之间都由空格隔开,并且字符串str开始不存在空格。 而要统计单词数,需要逐一检查str字符串中每一个字符。 (1)如果某一个位置的字符是小写字母而紧接着的后一个字符为空格,则说明发现一个单词。 (2)第一种方法不能发现最后一个单词,例如str字符串为"howareyou",最后一个单词"you"不符合以上要求,所以需要单独判断。 方法是判断某一个字符紧接着的后一个字符为字符串结束标记'\0'。 如果是则说明该字符位于字符串最后一个单词。 程序注解如下: #include #defineN80 /*num指针指向的地址里的内容为s字符串中字符的个数*/ voidfun(char*s,int*num) { /*n记录在s字符串中单词的个数*/ inti,n=0; /*逐一检查s字符串中的字符,由于num是指针类型*/ /*所以需要用*运算符取num指针指向的地址里的内容,即s字符串中字符个数*/ for(i=0;i<*num;i++) { /*判断是否发现一个新的单词,判断方法依循以上分析*/ if(s[i]>='a'&&s[i]<='z'&&s[i+1]==''||s[i+1]=='\0') /*当发现一个新的单词,记录单词个数的n需要加一*/ n++; } /*将单词数覆盖num指针指向的地址中的内容,以便main函数能接收到*/ *num=n; } main() { charstr[N]; intnum=0; printf("Enterastring: \n"); /*gets函数用于接收键盘输入的字符串,将其放入参数中*/ /*gets函数定义在stdio.h,所以需要#include gets(str); /*while(str[num])是while(str[num]! ='\0')的简写方式*/ /*以下while循环作用是逐个检查str字符串的字符是否为结束标记'\0'*/ /*所以当循环结束时,num则保存了str字符串的字符个数*/ while(str[num]) num++; /*采取传地址方式传入num变量的地址*/ fun(str,&num); /*输出单词的个数*/ printf("Thenumberofwordis: %d\n\n",num); } 36 分析: 题目要求在fun函数中把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。 在程序中,需要判断某一个字符是否是非数字字符还是数字字符。 判断方法就是检查该字符的ASCII码是否大于"0"字符的ASCII码而小于"9"的ASCII码。 也就是说只要某字符的ASCII码值在"0"字符和"9"字符两个ASCII码值之间,该字符就是数字字符。 ASCII全称是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)。 在这张表中,小写字母"0"的ASCII码值为48,小写字母"1"的ASCII码值为49,小写字母"2"的ASCII码值为50,后面的数字字符的ASCII码值依次类推,最后的"9"的ASCII码值为57。 所有的数字字符在ASCII码表中是按顺序排列的,它们在ASCII表的码值开始于48,结束于57。 而根据C语言的语法,判断两个字符之间的大小实际上是比较两个字符在ASCII表中的码值大小。 例如"7"字符大于"6"字符,因为"7"的ASCII码值为55,"6"的ASCII码值为54,"7"的ASCII码值大于"6"的ASCII码值。 使用C语言描述就是'7'>'6'这个表达式成立。 综上所述,判断某个字符是否为数字字符只要判断该字符的ASCII码值是否在"0"和"9"之间即可。 如果在这范围之内,该字符就是数字字符,否则不是。 程序采用for循环一个个检查str字符串中的每一个字符。 如果字符的ASCII码值位于'0'和'9'之间,则说明该字符是一个数字字符。 程序将它从char类型转换为int类型,然后将转换得到的值放入bb数组中。 程序将char类型的数字字符转换为int类型的数字采用了ASCII表中数字字符的ASCII码是连续的这个特性。 任何char类型的数字字符x减去'0',即x-'0'都将执行x的ASCII码值减去'0'的码值,由于数字字符的ASCII码是连续的,所以x-'0'的直接后果就是得到了和x对应的int类型的值,也就达到了将char类型的数字字符x转化为int类型的数值。 程序将str字符串中的数字字符从char类型转换为int类型之后放入bb数组,而放入bb数组的位置需要由n变量来决定。 由于数组从0开始,所以n初始值设置为0。 然后每一次在bb数组中放入一个数字之后n都必须增加一,以便下一次放入数字的时候能使用n指示放入的位置。 程序注解如下: #include #defineN80 intbb[N]; intfun(chars[],intbb[],intnum) { /*n指示数字放入bb数组的位置,由于数组从0开始,所以初始值设置为0*/ inti,n=0; for(i=0;i { /*当s[i]的ASCII码值在'0'和'9'之间的时候,即s[i]为数字字符的时候*/ if(s[i]>='0'&&s[i]<='9') { /*将s[i]的ASCII码值减去'0'的ASCII码值,得到s[i]与'0'的差距*/ /*作用就是将s[i]从char类型转换成int类型*/ bb[n]=s[i]-'0'; /*n变量加一,指示下一个数字放入bb数组的位置*/ n++; } } /*以上for循环结束的时候n变量的值则为bb数组中的数字个数*/ returnn; } main() { charstr[N]; intnum=0,n,i; printf("Enterastring: \n"); /*gets函数用于接收键盘输入的字符串,将其放入参数中*/ /*gets函数定义在stdio.h,所以需要#include gets(str); /*以下while循环作用是逐个检查str字符串的字符是否为结束标记'\0'*/ /*所以当循环结束时,num则保存了str字符串的字符个数*/ while(str[num]) num++; n=fun(str,bb,num); printf("\nbb="); /*输出保存在bb数组中的数字*/ for(i=0;i printf("%d",bb[i]); printf("\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 填空 3336