ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:20KB ,
资源ID:7088360      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7088360.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(上机填空题912.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

上机填空题912.docx

1、上机填空题9129题目: 给定程序的功能是分别统计字符串中大写字母和小写字母的个数。 例如,给字符串ss输入:AaaaBBb123CCccccd,则输出结果应为:upper=5,lower=9。 注意:部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。 #include void fun ( char *s, int *a, int *b ) while ( *s ) if ( *s = A & *s = a & *s = z ) _2_ ; s+; main( ) char s100; int upper = 0, low

2、er = 0 ; printf( nPlease a string : ); gets ( s ); fun ( s, & upper, &lower ); printf( n upper = %d lower = %dn, _3_ ); 10题目: 请补充main函数,该函数的功能是:从键盘输入3个整数,然后找出最大的数并输出。 例如,输入:12,45,43,输出为45。 注意:部分源程序如blank.c给出。 仅在横线上填入所编写的若干表达式或语句,勿改动函数中的任何内容。 #include #include main() int a,b,c,max; clrscr(); printf(n

3、Input three numbers:n); scanf(%d,%d,%d,&a,&b,&c); printf(The three numbers are:%d,%d,%dn,a,b,c); if (ab) _1_; else _2_; if(maxc) _3_; printf(max=%dn,max); 11题目: 给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。 例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 注意:部

4、分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include void fun(char *s) int i, n, k; char c; n=0; for(i=0; si!=0; i+) n+; if(n%2=0) k=n-_1_ ; else k=n-2; c=_2_ ; for(i=k-2; i=1; i=i-2) si+2=si; s1=_3_ ; main() char s80=abcdefgh; printf(nThe original string is : %sn,s); fun(s); p

5、rintf(nThe result is : %sn,s); 题目: 请补充fun函数,该函数的功能是将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。 例如,若输入Are you come from Sichuan?,则输出are you come from sichuan?。 注意:部分源程序如blank.c给出。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 #include #include #include char *fun(char tt) int i; for(i=0;tti;i+) if(tti=A)&(_1_)

6、 _2_; return (_3_); main() char tt81; printf(nPlease enter a string: ); gets(tt); printf(nThe result string is: n%s,fun( tt ); 要实惠上淘宝个人护理 健康危机 09夏季男装最后一次大补货 试吃节 风靡世界的李维斯牛仔裤 购物新玩法 搭配更便宜 炒货节 数码,还是国外原产的好 在线配镜 超低价 巨便宜 卡哇伊小包大集合 时尚中国风 解答9分析: 题目要求统计字符串中大写字母和小写字母的个数,所以在main函数中使用gets函数接收从键盘上输入的字符串s,然后将s传入fun

7、函数,在fun函数中统计传入的字符串s中大写字母和小写字母的个数。 这里需要注意的是在main函数中upper、lower变量分别记录大写字母和小写字母的个数。这两个int类型的变量要在fun函数中统计字符串s中大写字母和小写字母的个数的时候进行增加的,然后退出fun函数回到main函数中upper、lower变量应该分别是大写字母和小写字母的个数。然而,根据C语言的语法,普通int类型的变量的值在某函数(例如fun函数)中进行变化之后退出该函数,在main函数中该变量将丢失在那个函数(例如fun函数)的变化而直接恢复到进入函数(例如fun函数)之前的值,也就是说在函数(例如fun函数)的变化

8、都是无效的。这显然不是我们所希望的,因为我们希望在fun函数中统计大小写字母的过程中upper、lower变量的值得到改变,退出fun函数直接输出upper、lower变量就可以看到大小写字母的个数了。 那如何解决这种问题呢?根据C语言的语法,以上问题可以通过使用指针解决。以上的问题是由于参数传递方式为传值方式所导致的,可以通过将传入的参数改为指针类型改变参数传递方式为传地址方式。所以fun函数的函数头为以下: void fun (char *s, int *a, int *b ) 分别对应upper、lower的a变量和b变量为指针类型,相应的main函数中传入fun函数的参数为&upper

9、,&lower。这样在fun函数中操作a、b指针才能达到预期效果。在fun函数中,a指针所指向的内存地址中存放了记录大写字母个数的值,而b指针所指向的内存地址中存放了记录小写字母个数的值。在fun函数中,我们通过*a、*b引用a、b指针所指向的内存地址中存放的大、小写字母个数的值,当发现大写或者小写字母的时候将*a或者*b加一。退出fun函数的时候,形式参数a、b由于超出作用域而消失,但是它们指向的内存地址中的值还保留着,这些值在main函数中可以分别通过upper、lower引用,从而解决了函数参数退出函数之后恢复原值的问题。 程序注解如下: #include /* s参数表示传入的字符串,

10、a、b参数表示大写字母和小写字母的个数 */ /* s是一个指针,指向传入的字符串的第一个字母 */ void fun ( char *s, int *a, int *b ) /* while(*s)是while(*s!=0)的简写方式 */ /* s指针指向的字母不为0,就是说循环检查到字符串结束符才退出循环 */ while ( *s ) /* 判断s指针指向的字母是否是大写字母,如果是就把*a加一 */ if ( *s = A & *s = a & *s = z ) (*b)+ ; /* s指针往后移动一个字母位置,准备判断下一个字母是否为大小写字母 */ s+; main( ) cha

11、r s100; /* upper、lower变量分别记录大写字母和小写字母的个数 */ int upper = 0, lower = 0 ; printf( nPlease a string : ); /* gets函数定义在stdio.h中,所以需要#include */ /* gets函数接收键盘输入的字符串,将其放入参数s数组中 */ gets ( s ); /* 取存放upper变量、lower变量的地址,将其作为指针传入fun函数 */ fun ( s, & upper, &lower ); /* 输出在fun函数中改变的upper、lower变量,也就是大小写字母个数 */ pri

12、ntf( n upper = %d lower = %dn, upper,lower ); 10分析: 程序要求从键盘输入3个整数,然后找出最大的数并输出。实现思路如下:首先判断前面两个整数,取两者较大者保存在变量max中,然后将max保存的较大者与第三个整数进行比较大小,同样也将两者较大者保存在max变量中,最后max变量记录的值就是3个参加比较大小的整数中最大的一个整数。 程序注解如下: #include #include main() int a,b,c,max; /* clrscr函数的作用是清屏,将输出窗口的已显示内容全部清除 */ /* clrscr定义在conio.h中,所以需要

13、#include */ clrscr(); /* 在输出窗口上输出提示信息Input three numbers: */ printf(nInput three numbers:n); /* 从键盘上输入3个整数,按照顺序赋值给a、b、c */ /* 由于指定了%d,%d,%d输入格式,输入的时候三个整数必须以逗号分隔 */ /* 例如输入12、45、43三个整数,输入格式如下:12,45,43 */ /* 三个整数输入之后按回车键即可完成整个输入过程 */ scanf(%d,%d,%d,&a,&b,&c); /* 将输入的三个整数输出 */ printf(The three numbers

14、are:%d,%d,%dn,a,b,c); /* 将前两个整数进行比较,将较大者放入max变量中 */ if (ab) max=a; else max=b; /* 将前两个整数的较大者也就是max与第三个整数进行比较大小 */ /* 较大者放入max变量中 */ if(maxc) max=c; /* 输出三个整数中的最大值 */ printf(max=%dn,max); 11分析: 题目要求在fun函数中把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动。要实现以上功能,我们可以有以下思路: 先计算字符串中包含的字符个

15、数,然后将最右边可能被移出字符串的字符保存在另外一个变量c中,然后从字符串右边第一个奇数位置的字符开始往左边循环,循环体中将奇数位置的字符覆盖右边临近的奇数位置的字符,当到了字符串最左边的时候循环结束,将预先保存在c变量中的右边被移出字符串的字符覆盖左边第一个奇数位置的字符即可。 这里需要注意的是字符串中第一个位置的下标为0,而不是1。这是因为字符串也是一个char类型的数组,而数组在C语言中第一个元素的下标是0,所以题目中所指的字符串第一个字符的下标是0。 以上所讲的思路为什么不从左边开始向右边循环呢?关键的问题在于如果从左边开始把下标为奇数的字符右移到下一个奇数位置的话,程序将出现逻辑混乱

16、。举一个具体的例子,例如字符串为abcdefgh,第一个奇数位置的字符为b,第二个奇数位置的字符为d,第三个奇数位置的字符为f,依次类推。当程序从左边开始把下标为奇数的字符右移到下一个奇数位置的时候,我们先从第一个奇数位置开始。当第一个奇数位置的字符b覆盖第二个奇数位置的字符d之后,我们想把原来第二个奇数位置的字符d 右移到下一个奇数位置的时候发现它已经被第一个奇数位置的字符b覆盖了,处理不方便。所以我们选择从右边到左边的处理方式。 程序注解如下: #include void fun(char *s) int i, n, k; char c; /* n为存放字符串s字符个数的变量,初始值为0

17、*/ n=0; /* 计算字符串s包含的字符个数,得到的个数存放在n变量中 */ for(i=0; si!=0; i+) n+; /* 计算字符串中最后一个奇数位置的下标 */ /* 如果字符串字符个数为偶数,最后一个奇数位置的下标k为个数减一 */ /* 如果字符串字符个数为奇数,最后一个奇数位置的下标k为个数减二 */ if(n%2=0) k=n-1 ; else k=n-2; /* 将最后一个奇数位置上的字符先保存在c变量中,准备开始循环 */ c= sk ; /* 从右边最后一个奇数位置开始,将前一个奇数位置的字符覆盖自己 */ for(i=k-2; i=1; i=i-2) si+2=

18、si; /* 以上循环结束后只有原来最后一个奇数位置的字符被丢失 */ /* 程序使用预先保存在c变量的值回放到第一个奇数位置 */ s1= c ; main() char s80=abcdefgh; printf(nThe original string is : %sn,s); fun(s); printf(nThe result is : %sn,s); 12分析: 题目要求将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。这里主要的问题是如何实现大写字母转化成小写字母。在程序设计方法中,大小写字母的互相转换可以使用以下技巧: 在ASCII码表中,大写字母A的ASCII码值为6

19、5,大写字母B的ASCII码值为66,大写字母C的ASCII码值为67,后面的大写字母的ASCII码值依次类推,大写字母在ASCII码表中是按顺序排列的,最后的Z的ASCII码值为90。小写字母a的ASCII码值为97,小写字母b的ASCII码值为98,小写字母c的ASCII码值为99,后面的小写字母的ASCII码值依次类推,小写字母在ASCII码表中也是按顺序排列的,最后的z的ASCII码值为122。 根据以上情况,我们可以发现所有对应的大写字母和小写字母ASCII码相差32。例如B和b的ASCII码相差32,K和k的ASCII码相差32,E和e的ASCII码也是相差32。利用这种特性和C语

20、言的语法,如果要将大写字母都改为对应的小写字母,只要将该字符加上32即可。同理,如果要将小写字母都改为对应的大写字母,只要将该字符减去32即可。例如以下程序就可以将字符D转化成d然后输出。 main() char c1 = D; char c2 = c1 + 32; printf(%c,c2); 程序注解如下: #include #include char *fun(char tt) int i; /* 开始循环逐一检查tt数组中每一个字符 */ /* for(i=0;tti;i+)是for(i=0;tti!= 0;i+)的简写方式 */ for(i=0;tti;i+) /* 如果tt数组当前

21、元素的ASCII码在A与Z之间,说明是大写字母 */ /* 如果是大写字母,就加上32转换成对应的小写字母 */ if(tti=A)&( tti=Z) tti+=32; /* 由于fun函数返回类型为char *类型 */ /* 再结合main函数中输出调用fun函数的返回值是转化之后的字符串 */ /* 所以判断fun函数应该返回tt数组 */ /* tt虽然是数组名称,但是C语言语法规定数组名同时也是指针 */ /* C语言语法规定数组名代表的指针指向数组第一个元素 */ return (tt); main() char tt81; /* 在输出窗口显示提示信息Please enter a string: */ printf(nPlease enter a string: ); /* 使用gets函数接收键盘输入的字符串,输入的字符串存入tt数组 */ /* gets函数定义在stdio.h中,所以需要#include */ gets(tt); /* 输出结果 */ printf(nThe result string is: n%s,fun( tt );

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1