77范文网 - 专业文章范例文档资料分享平台

程序设计题(3)

来源:网络收集 时间:2020-05-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

{ doublex0,x1; x1=0.0; do { x0=x1;//调用math库函数中的余弦函数 x1=cos(x0); } //当x0-x1的绝对值小于10的负6次方退出循环 while(fabs(x0-x1)>=1e-6); returnx1; } main() { printf(“Root=%f\\n”,fun()); } 分析:本题考查:迭代法求方程的实根;do…while循环语句,其形式为:do{语句}while(表达式);do…while循环与while循环的不同在于,它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do…while循环至少要执行一次循环语句。

用迭代方法求方程的一个实根,题目已经给出了算法,只要按照算法用合适的程序表达,就可以解题了。

19.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:将字符串中的前导*号移到字符串的尾部。

例如,字符串中的内容为:\,移动后,字符串中的内容应当是:\。在编写函数时,不得使用C语言提供的字符串函数。 #include #include voidfun(char*a) {

inti=0,n=0; char*p; p=a;

//判断*p是否是*号,并统计*个数 while(*p=='*') {

n++;p++; }

//将*之后的字符传递给a while(*p) {

//将*之后的字符串保存到a中 a[i]=*p;i++;p++; }

while(n!=0)

{

//在a后追加n个*号 a[i]='*';i++;n--; }

a[i]='\\0';//加上结束符

}

main() {

chars[81],*p;

chartest[4][80]={“********A*BC*DEF*G****”,”A******B*CD*EF*G*”,”****A****G:,”*d**b**a**e*”}; intI;

printf(\gets(s); fun(s);

printf(\puts(s); }

分析:本题考查:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。

函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。

20.学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,请编写函数fun,其功

11

能是:把分数最低的学生数据放入b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。

#include #defineN16 typedefstruct {charnum[10]; ints; }STREC;

intfun(STREC*a,STREC*b) {

intfun(STREC*a,STREC*b) {

inti,j=0,min=a[0].s; for(i=0;ia[i].s)

//首先循环找到分数最小的成绩 min=a[i].s;

//然后,将所有分数等于最小分数的项保存到b中 for(i=0;i

*b[j++]=a[i];j++;n++;

} returnn; }

main()

{STRECs[N]={{\},{\64},{\2\

{\2}};

STRECh[N]; inti,n;

n=fun(s,h);

printf(\for(i=0;i

printf(\printf(\}

分析:本题考查:查找结构体数组中的最小数据,需要通过for循环语句和if条件语句来完成。 本题中第一个循环语句的作用是遍历数组求出最低分数,第二个循环语句的作用是将数组中的 元素与最低分比较,查找是否存在与最低分相等的成绩。

21.编写函数fun,其功能是计算: s= ?????(??)+???? ?? +????(??)…+????(??) s作为函数返回值。

在C语言中可调用log(n)函数求ln(n)。log函数的引用说明为:doublelog(doublex)。 例如,若m的值为20,则fun函数值为6.506583。 #include #include #include #include doublefun(intm) { inti;

doubles=0.0;

for(i=1;i<=m;i++) s=s+log(i); returnsqrt(s); }

voidmain() {system(“CLS”);

printf(“%f\\n”,fun(20)); }

分析:本题考查:计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用。首先计算从1到m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。该题需要注意的是,log()函数的形式参数应当为double

12

型变量,而用于循环的基数变量为整数,需要进行强制转换。在返回的时候求出平方根。

22.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:只删除字符前导和尾部的*号,串中字母间的*都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中尾部*号的个数。在编写函数时,不得使用C语言提供的字符串函数。

例如,字符串中的内容为:\,删除后,字符串中的内容应当是:\。 #include #include

voidfun(char*a,intn,inth,inte) {

int i,j=0;

for(i=h;i

voidmain() {

chars[81],*t,*f; intm=0,tn=0,fn=0;

printf(\gets(s);

t=f=s; while(*t)

{t++;m++;}//m为字符串的长度 t--;//指针t指向字符串尾部 while(*t=='*')

{t--;tn++;}//指针指向最后一个字母,tn统计尾部’*’的个数

while(*f=='*') {f++;fn++;}//指针指向第一个字母,tn统计前导’*’的个数

fun(s,m,fn,tn);

printf(\puts(s); }

分析:本题考查:删除字符串前导*号和尾部*号,其主要思想就是把不删除的字符保留起来。

由于程序已经给出前导*号和尾部*号的个数,所以只要用循环语句将中间的字符保留起来。注意循环变量i的初值(h)和终止值(n-e),由于h和e分别表示a中的前导*号和尾部*号的个数,n是字符串的长度,所以从a[h]到a[n-e-1]之间的所有字符都要保留。循环结束后在新串的尾部加上结束符'\\0'。 本题技巧:

voidfun(char*a,intn,inth,inte) {a[n-e]='\\0'; strcpy(a,a+h);}

a[n-e]的作用是在最后一个字母后加上字符串结束符。本程序采用了strcpy()库函数。

23.函数fun的功能是:将s所指的字符串中下标为偶数的字符删除,剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为\时,在t所指数组中的内容应是:\。 #include #include #include #include voidfun(char*s,chart[])

{

inti,j=0,k=strlen(s);//k为字符串的长度

for(i=1;i

13

t[j]='\\0';//在字符串最后加上结束标识 } voidmain() { chars[100],t[100]; system(“CLS”) printf(\fun(s,t); printf(\} 分析:本题考查:删除字符串中指定字符,采用保留非指定字符的方法操作。

本题使用了一种i永远是奇数的循环方法,即for(i=1;i

24.编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。 例如,当a=45,b=12,调用该函数后c=2415。 #include #include

voidfun(inta,intb,long*c) {

*c=a+(b/10)*10+(a/10)*100+(b)*1000; }

main()

{inta,b;

longc;

printf(“Inputa,b;”); scanf(“%d%d”,&a,&b); fun(a,b,&c);

printf(“Theresultis:\\n”,c); }

分析:本题考查:如何取出数值n的各个位;知道数值n的各个位,又如何表示该数值;指针型变量的使用。

本题的主要问题如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数(a/10),分别用10对它们求余可得到它们的个位数(a)。得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。

25.假定输入的字符串中只包含字母和*号。编写函数fun,其功能是:除了尾部的号外,将字符中其它的*全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当是ABCDEFG*******。 #include #include

voidfun(char*a,char*p) {

char*t=a; for(;t<=p;t++) if(*t!='*')

*(a++)=*t;//将p以前所有不是*号的字符保留下来 for(;*t!='\\0';t++)

*(a++)=*t;//将p以后的所有*号保留下来 *a='\\0';//在字符串最后加上字符串结束标识 }

voidmain() {

chars[81],*t;

printf(\gets(s); t=s;

while(*t) t++;

t--;/*指针t指向字符串尾部*/ while(*t=='*')

t--;/*指针t指向最后一个字母*/ fun(s,t);

printf(\puts(s); }

14

分析:本题考查:删除字符串中非尾部*号,删除的主要思想就是把不删除的字符保留起来。

本题用两个循环语句来实现。第1个循环的作用是将指针p所指字母以前所有非*号的字符保留下来,即删除指针p以前所有的*号。第2个循环的作用是将指针p以后的所有*号保留下来。最后在新串的结尾加上结束符。

26.学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。 #include #defineN16 typedefstruct {charnum[10]; ints; }STREC;

voidfun(STRECa[]) { inti,j; STRECt;

for(i=1;i

for(j=0;j

if(a[j].s

a[j+1]=t;}//按分数的高低排列学生的记录,高分在

分析:本题考查:排序算法;结构体类型。

对N个数进行排序的算法很多,其中最简单的排序算法是冒泡算法。利用双层for循环嵌套和一个if判断语句来实现,外层循环用来控制需比较的轮数,内层循环用来控制两两比较。

前 }

voidmain()

{STRECs[N]={{\},{\64},{\2\,{\2}}; intI; fun(s);

printf(“Thedataaftersorted:\\n”) for(i=0;i

{if(i%4==0)//每行输出4个学生记录 printf(\}

printf(\

27.学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。 #include #defineN12 typedefstruct {charnum[10]; doubles; }STREC;

doublefun(STREC*a,STREC*b,int*n) { inti;

doubleav=0.0; *n=0;

for(i=0;i

av=av+a[i].s; av=av/N;

for(i=0;i

{b[*n]=a[i];*n=*n+1;} returnav; }

voidmain()

{STRECs[N]={{\},{\64},{\2\,

15

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库程序设计题(3)在线全文阅读。

程序设计题(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1025193.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: