《C语言编程05.doc》由会员分享,可在线阅读,更多相关《C语言编程05.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、题目填空题str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。例如:str=“how do you do”,结果为:num=4。注意:部分源程序给出如下。试题程序:#include#define N 80void fun(char *s,int *num) int i,n=0; for(i=0; i=a&si=z&(si+1= |si+1=0)n+【2】; *num=n【3】;main() char strN; int nu
2、m=0; printf(Enter a string:n); gets(str); while(strnum)num+; fun(str,&num); printf(The number of word is :%dnn,num);答案【1】i*num【2】n+【3】*num=n知识点评析填空1:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。填空2:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。填空3:题目要求结果由变量num传回,所以要将n的值赋给指针num所
3、指的单元。相关知识题目改错题下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=1-1/21/3-1/4(-1)(m+1)/m例如,若输入5,则应输出0.783333。请改正程序中的错误,使它能得到正确结果。试题程序:#include #include /*found*/int fun(int m) double t=1.0,j=1.0; int i;/*found*/ for(i=1;im;i+) j=-1*j;t+=j/i; return t;main() int m; clrscr(); printf(nPlease enter 1 integer number:
4、); scanf(%d,&m); printf(nThe result is %lfn, fun(m);答案(1)错误:int fun(int m)正确:double fun(int m)(2)错误:for(i=1;im;i+)正确:for(i=2;i=m;i+)知识点评析错误1:函数的返回值为实型数,所以应定义为double类型。错误2:根据题目的公式,参加运算的数应从2到m,包括m。相关知识题目编程题请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。试题程序:#include #in
5、clude void fun(int *a,int *n)main( ) int aa1000, n, k; clrscr( ); fun(aa,&n); for(k=0;kn;k+) if(k+1)%10=0) printf(%5d ,aak); printf(n ); /*一行写10个数*/ else printf(%5d ,aak);答案void fun(int *a,int *n) int i,j=0; for(i=1;i=1000;i+) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/ if(i%5=0|i%13=0)&i%65!=0)
6、 aj+=i; *n=j; /*传回满足条件的数的个数*/知识点评析注意本题题目是找出能被5或13整除但不能同时被5和13整除的所有整数。能同时被5和13整除的整数一定能被65整除,且不能被65整除的数不一定就是能被5或13整除的数。所以可得出程序中的if()。按运算优先级可知(i%5=0|i%13=0),注意,两边必须要有小括号。相关知识题目填空题str是一个由数字和字母字符组成的字符串,num传入字符由变量串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。例如:str=“Bcd123e456hui890”,结果
7、为:123456890。试题程序:#include#define N 80int bbN;int fun(char s,int bb,int num) int i,n=0; for(i=0;i=0&si=9)bbn=si-0【2】;n+; return n【3】;main() char strN; int num=0,n,i; printf(Enter a string:n); gets(str); while(strnum)num+; n=fun(str,bb,num); printf(nbb= ); for(i=0;i= 0 &si= 9【2】si- 0【3】n知识点评析填空1:如果当前字
8、符的ASCII码大于字符0的ASCII码,而小于字符9的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符0的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。相关知识题目改错题下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:85 65.5 69 95.5 87 55 62.5 75则高于平均分的学生人数为4(平均分为74.312500
9、)。试题程序:#include #include #define N 20int fun(float *s, int n,float *aver) /*found*/int ave ,t=0; int count=0,k,i; for(k=0;kn;k+) t+=sk; ave=t/n; for(i=0;in;i+)/*found*/ if(siave) count+;/*found*/ aver=ave; return count;main() float s30,aver; int m,i; clrscr(); printf(nPlease enter m: ); scanf(%d,&m)
10、; printf(nPlease enter %d mark :n,m); for(i=0;im;i+) scanf(%f,s+i); printf(nThe number of students :%dn,fun(s,m,&aver); printf(Ave=%fn,aver);答案(1)错误:int ave ,t=0;正确:float ave ,t=0.0;(2)错误:if(siave)(3)错误:aver=ave;正确:*aver=ave;知识点评析错误1:ave和t分别用来存放成绩的平均值和总分,应为实型数。错误2:根据题意,找出高于平均分的数,所以此处的关系运算符应为错误3:aver
11、是指针,而ave是一个数,不能将一个数赋值给一个指针,而要用符号*。相关知识题目编程题请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing nanchang (为回车键),函数将返回nanjing。试题程序:#includechar *fun(char *s, char *t)main() char a20,b10,*p,*q; int i; printf(Input 1th string: ); gets(a); printf(Input 2th str
12、ing: ); gets(b); printf(%s,fun(a,b);答案char *fun(char *s, char *t) int i,j; for(i=0;si!= 0;i+); /*求字符串的长度*/ for(j=0;tj!= 0;j+); if(i=j) /*比较两个字符串的长度*/ return s; /*函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/ else return t;知识点评析本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。