材料学院-作业4-函数编程
- 格式:doc
- 大小:77.00 KB
- 文档页数:12
C语言-函数1. 以下正确的函数定义形式是()。
A)double fun(int x,int y) B)double fun(int x;int y)C)double fun(int x,int y);D)double fun(int x, y)2. 函数调用语句:func((x1,x2),(x3,x4,x5));含有的实参个数是()。
A)1 B)2C)4 D)53. 对函数调用描述错误的是()。
A)出现在执行语句中B)出现在表达式中C)作为函数的实参D)作为函数的形参4. 以下不正确的说法是()。
A)不同函数中可以使用同名变量B)函数内定义的变量只在本函数范围内有效C)形式参数是局部变量D)复合语句中定义的变量在本函数范围内有效5.以下正确的说法是()。
在C语言中A)实参和与其对应的形参各占用独立的存储单元B)实参和与其对应的形参共占用一个存储单元C)只有当实参和与其对应的形参同名时才共同占用存储单元D)形参是虚拟的,不占用存储单元6.对函数及其参数,在C语言中以下描述不正确的是()。
A)主函数main()可以有参数B)实参和形参必须类型一致C)函数调用时是实参传送给形参,而形参不能传送给实参D)函数的返回值可有可无7.在C语言程序中,下列说法中()是正确的。
A)函数的定义和调用都可以嵌套B)函数的定义和调用都不可以嵌套C)函数的定义可以嵌套,而调用不能嵌套D)函数的定义不能嵌套,而调用可以嵌套8.定义一个具有返回值的函数,但没加类型说明,该函数的默认类型为()。
A)int B)void C)float D)不确定9.函数返回值的类型取决于()。
A)函数的类型B)return语句中表达式的类型C)调用函数将值赋给的变量的类型D)函数类型与return语句中表达式类型中较高的类型10.C语言中形参的默认存储类别是()。
A)自动(auto)B)静态(static)C)寄存器( register) D)外部(extern)11.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传送方式是()。
实验4函数程序填空1.普通参数本题分值:4题目描述:输入日期的年份和月份,求该月有多少天。
要求编写函数int daynum(int year,intmonth),求出以year为年份、以month为月份的某个月的天数。
以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码://通过日期求某月的天数。
#include<iostream>using namespace std;int main(){int daynum(int year,int month);int y,m,d;cin>>y>>m;if(y<1900 || y>=3000 || m<1 || m>12){cout<<"输入错误!"<<endl;return 0;}d=daynum(__(1)__);//以y、m作实参调用函数,求出该月的天数cout<<"此月的天数为"<<d<<endl;return 0;}int daynum(int year,int month){int days;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: days=31; break;case 4:case 6:case 9:case 11: days=30; break;case 2: if(year%4==0&&year%100!=0 || year%400==0) days=29;elsedays=28;break;}return __(2)__;}2.字符数组参数本题分值:4题目描述:编写一个函数,用来求字符串s的任意子串。
函数原型为voidSubString ( chars[ ] , intstart , intlen , chard[ ] ) ;其中s是原字符串,d用来存放s中从第start个字符开始(1≤start≤strlen(s)),长度为len的子串。
实验4:函数编程(1)一、实验目的1.掌握定义函数的方法。
2.掌握函数声明、函数调用的一般方法。
3.掌握函数实参与形参的对应关系,以及“值传递”的方式。
二、实验要求1.复习函数的定义和调用方法。
2.编写程序,运行程序并记录运行结果。
3.认真填写实验报告。
三、实验内容3.写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:17、34、2、1、0。
分别运行并检查结果是否正确。
此步骤类型为调试程序,以下为此题的程序,其中有一些错误,请调试使之正确。
#include <stdio.h>#include<math.h>void main(){int prime(int n);int n;printf("\ninput an integer:");scanf("%d",&n);if(prime(n))printf("\n %d is a prime.\n",n);elseprintf("\n %d is not a prime. \n",n);}prime(int n){int flag=1,i;for(i=2;i<n/2 && flag==1;i++)if(n%i==0)flag=0;else n=1;return(i);}4.调用一个判别素数的函数,主函数中求出1~100之间的所有素数。
#include<stdio.h>#include<math.h>sushu(int m){int k,i;k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0) break;if(i>k)printf("%d ",m);return(k);}void main()第2章上机实验指导·137·{int a,n;for(n=2;n<=100;n++)a=sushu(n);printf("%d",a);}5.编写一个用海伦公式求任意三角形面积的函数,在主函数中输入三边长调用它,计算任意三角形的面积。
函数部分1:设计一个子函数,实现将两个整数交换,并在主函数中调用此函数。
2:设计一个子函数,统计任意一串字符中数字字符的个数,并在主函数中调用此函数。
3:设计一个子函数,对任意n个整数排序,并在主函数中输入10个整数,调用此函数。
4:设计一个子函数,将任意nxn的矩阵转置,并在主函数中调用此函数将一个4X4矩阵进行转置,并输出结果。
5:设计一个子函数,用以判断一个整数是否为素数,如果是,则返回1;否则返回0,并利用此函数,找出100—200之间的所有素数。
6:设计一个函数,找出任意两个整数的最大公约数,并在主函数中调用此函数。
7:设计一个子函数,判断二维数组是否为对称数组(对称矩阵),如果是,则返回1,否则返回0,并在主函数中调用此函数,判断一个4X 4矩阵是否是对称数组。
8:编写函数,求如下级数,在主函数中输入n,并输出结果。
A=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+4)+ …….+1/(1+2+3+ …+n)。
9:设计一个函数,求任意n个整数的最大数及其位置,并在主函数中输入10个整数,调用此函数。
10:设计一个函数,分别统计任意一串字符中字母的个数,并在主函数中调用此函数。
函数程序参考答案[不唯一]1:#include<>void swap(int* ,int*);main(){int a,b;printf("inpub two numbers:\n");scanf("%d%d",&a,&b);printf("the number is a=%d,b=%d",a,b);swap(&a,&b);printf("\nafter sorted the number is: a=%d,b=%d\n",a,b);}/*function:swap() */void swap(int *p,int *q){int temp;temp=*p;*p=*q;*q=temp;}2:#include<>int countnum(char*);main(){char str[100]={0};int count,i;printf("inpub a string:\n");gets(str);count=countnum(str);printf("the number of digital is: %d\n",count);}"function: int countnum() */int countnum(char *p){int count=0;while(*p!='\0'){if(*p>='0'&&*p<='9')count++;p++;}return count;3:#include<>void sort(int *,int);main(){int i,a[10]={0};printf("input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("the sorted numbers is:");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");}/*function: void sort() for bubble */void sort(int *p,int n){int i,temp,j;for(i=0;i<n-1;i++)for(j=0;j<n-i;j++){if(p[j]>p[j+1]){temp=p[j+1];p[j+1]=p[j];p[j]=temp;}}}4:#include<>void rotation(int *,int);main(){int i,j,a[4][4]={0};printf("input a 4x4 array:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("the array as follows:\n");for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%4d",a[i][j]);printf("\n");}printf("the array after rotation as follows:\n");rotation(*a,4);for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%4d",a[i][j]);printf("\n");}}/*function: void rotation() for bubble */void rotation(int *p,int n){int i,temp,j;for(i=0;i<n;i++)for(j=0;j<i;j++){temp=*(p+i*n+j);*(p+i*n+j)=*(p+j*n+i);*(p+j*n+i)=temp;}}5:#include<>#include<>int primenumber(int);main(){int m;printf("the prime numbers is:\n");for(m=100;m<=200;m++)if(primenumber(m))printf("%d ",m);printf("\n");}int primenumber(int x){int i,flag=1;for(i=2;i<=sqrt(x);i++)if(!(x%i)) flag=0;return flag;}6:#include<>#include<>int fmaxfactor(int,int);main(){int maxfactor,x,y;printf("Input two numbers:");scanf("%d%d",&x,&y);maxfactor=fmaxfactor(x,y);printf("the %d and %d's maxfactor is %d\n",x,y,maxfactor); }int fmaxfactor(int m,int n){int p;if(m<n){p=m;m=n;n=p;}p=m%n;while(p){m=n;n=p;p=m%n;}return n;}7:#include<>#include<>int sym(int (*p)[4],int);main(){int a[4][4],i,j;printf("Input array(16 data):");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);if(sym(a,4))printf("the array is a symmetrical array!\n");elseprintf("the array is not a symmetrical array!\n");}int sym(int (*p)[4],int n){int i,j,flag=1;for(i=0;i<n;i++)for(j=0;j<i;j++)if(p[i][j]!=p[j][i]) flag=0;return flag;}8:#include<>float fsum(int);main(){int n;float a;printf("input a number n=");scanf("%d",&n);a=fsum(n);printf("the sum is :%.2f\n",a);}float fsum(int m){int i,j;float sum=0,t;for(i=1;i<=m;i++){ t=0;for(j=1;j<=i;j++)t+=j;sum+=1/t;}return sum;}9:#include<>void fmaxvalue(int *,int,int*,int*);main(){int i,a[10],max,maxindex;printf("input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);fmaxvalue(a,10,&max,&maxindex);printf("the max is :%d\nthe position is:%d\n",max,maxindex); }void fmaxvalue(int *p,int length,int* fmax,int* fmaxindex) int i,j;*fmax=p[0];for(i=1;i<length;i++){if(*fmax<p[i]){*fmax=p[i];*fmaxindex=i;}}}10:#include<>#include<>int fcharnumber(char *);main(){char str[100]; printf("input a string:\n"); gets(str);printf("the number of chars is %d\n",fcharnumber(str));}int fcharnumber(char *p){int i,length,count=0; length=strlen(p); for(i=0;i<length;i++) { if((p[i]>='a'&&p[i]<='z')||(p[i]>='A'&&p[i]<='Z')) count++;}return count;}。
第1题:编写两个函数,函数功能分别是:求两个整数的最大合约数和最小公倍数,要求输入输出均在主函数中完成。
样例输入: 15 25样例输出: 5 75#include<iostream.h>int gbs(int a,int b){int a,b,c,d;int gys(int a,int b){int i;cin>>a>>b;{int i;for(i=a;;i++)c=gys(a,b);for(i=a;i>0;i--)if(i%a==0&&i%b==0)d=gbs(a,b);if (a%i==0&&b%i==0){ return i;cout<<c<<' '<<d;{ return i;break;}return 0;}break;}}}int main()第2题:编写函数 factors(num,k) ,函数功能是:求整数 num中包括因子 k 的个数,如果没有该因子那么返回0,比方: 32=2×2×2×2×2,那么 factors(32,2)=5 。
要求输入输出均在主函数中完成。
样例输入: 4 2 样例输出: 2样例输入: 8 3样例输出: 0#include<iostream.h>num=num/k;cin>>num>>k;int factors(int num,int k)a=num%k;b=factors(num,k);{int n=0,a;}cout<<b<<endl;a=num%k;return n;}return 0;while(a==0)int main()}{n++;{int num,k,b;第3题:编写函数,函数功能是:计算n 的阶乘,要求输入输出均在主函数中完成。
一、判断题(每小题2分,共20分)1. 主函数可以调用除自己以外的任何函数,子函数可以调用除主函数外的任何函数,包括它自己。
答案:T2. 主函数中定义的变量可以在其他函数中使用,主函数可以使用其他函数中定义的变量。
答案:F3. 不同的函数中不能使用相同的变量名。
答案:F4. 函数的某个参数有默认值时,其后面的参数都必须有默认值。
答案:T5. 模板函数的真正代码是在运行函数时产生。
答案:F6. void f(int a,char b,float c=1)与void f(int m,char n)互为重载函数。
答案:F7. 内联函数可以减少函数的调用,提高程序的运行速度。
答案:T8. 函数执行过程中通过 return 语句将函数值返回,当一个函数不需要返回值,需要使用void 作为类型名。
答案:T9. C++中,函数允许嵌套定义,允许嵌套调用。
答案:F10.各个函数在程序中定义的顺序是一定的,它们的顺序影响程序运行时的执行顺序和程序运行结果。
答案:F二、选择题(每题3分,共45分)1. 下列叙述错误的是()A. 一个函数中可以有多条return语句B. 调用函数必须在一条独立的语句中完成C. 函数中通过return语句传递函数值D. 主函数main也可以带有形参答案:B2. 在函数定义前加上关键字”inline”,表示该函数被定义为()A.重载函数B.内联函数C.成员函数D.普通函数答案:B3. 函数定义为Fun(int &k),变量定义n=100,则下面调用正确的是()A.Fun(20)B.Fun(20+n)C.Fun(n)D.Fun(&n)答案:C4. 必须用一对大括号括起来的程序段是()。
A.switch语句中的case标号语句B. if语句的分支C. 循环语句的循环体D. 函数的函数体答案:D5. 在函数的返回值类型与返回值表达式类型的描述中,错误的是()。
A.函数返回值的类型是在定义函数时确定的,在函数调用时不能改变B. 函数返回值得类型就是返回值表达式的类型C. 函数返回值的类型与返回值表达式类型不同时,函数表达式类型应该转换成返回值类型D. 函数返回值的类型决定了返回值表达式的类型答案:B6. 在函数的定义格式中,下面各组成部分中,()是可以省略的。
《函数》作业设计方案(第一课时)一、作业目标本作业设计旨在通过实践操作与理论学习相结合的方式,使学生能够:1. 理解函数的基本概念和作用;2. 掌握函数的基本语法和调用方法;3. 培养学生的逻辑思维能力和问题解决能力;4. 提高学生的信息技术实践操作能力。
二、作业内容本作业内容主要围绕《函数》这一主题展开,具体包括以下内容:1. 函数概念理解:学生需通过阅读教材、观看教学视频等方式,深入理解函数的概念、特性和作用。
并完成相关概念题,如填空题、选择题等。
2. 函数语法学习:学生需掌握函数的基本语法,包括函数的定义、调用、参数等。
并通过编程实践,编写简单的函数程序,实现特定功能。
3. 函数应用实践:学生需利用所学的函数知识,解决实际生活中的问题。
例如,设计一个计算器程序,实现加减乘除等基本运算功能。
4. 编程挑战:学生需完成一个编程挑战任务,如设计一个简单的游戏或应用,运用所学的函数知识,实现特定的功能或效果。
三、作业要求为保证作业的质量和效果,特提出以下要求:1. 学生需按照作业指导书的要求,认真阅读教材、观看教学视频等,充分理解函数的概念和语法。
2. 在编程实践环节,学生需亲自编写代码,并确保代码的正确性和可运行性。
如遇问题,可向老师或同学请教。
3. 在完成编程挑战任务时,学生需充分发挥自己的创新能力和团队协作能力,设计出有新意、实用的程序。
4. 作业需按时提交,并按照规定的格式和要求进行排版和命名。
5. 作业中应体现出学生的独立思考和解决问题的能力,避免抄袭和作弊行为。
四、作业评价本作业的评价将综合考虑以下方面:1. 学生对函数概念的理解程度;2. 学生编程实践的完成情况和代码的正确性;3. 学生在编程挑战任务中的创新能力和团队协作能力;4. 作业的按时提交情况和格式规范程度。
评价结果将以分数和评语的形式呈现,以便学生了解自己的学习情况和不足之处。
五、作业反馈为帮助学生更好地掌握《函数》这一知识点,老师将在作业反馈环节给出以下建议和指导:1. 针对学生在概念理解上的薄弱环节,提供进一步的解释和例证;2. 针对学生在编程实践中的错误和不足,提供改正方法和优化建议;3. 鼓励学生在编程挑战任务中发挥创新精神,探索更多的可能性;4. 提醒学生注意作业的按时提交和格式规范,以提高学习效率。
改错题:【程序功能】函数fun从a数组存储的字符串中取出所有十六进制数字字符依次存入字符数组b中,然后再将b数组中的数字字符串转换成一个整数并返回。
提示:库函数isxdigit(ch)的功能是检查ch是否是16进制数字字符,若是则返回1,否则返回0。
【测试数据与运行结果】测试数据:输入“xyz3F4tqk”运行结果:输出1012【含有错误的源程序如下】:#include<stdio.h>#include<string.h>long fun(char a[]){int i,j=0;long int k=0;char b[10]={0};for(i=0;a[i]!='\0';i++)if(isxdigit(a[i]))b[i++]=a[i];b[j]='\0';i=0;do{ if(isdigit(b[i])){k=k*16+b[i]-'0'; i++;}else{b[i]=isupper(b[i])?b[i]:b[i]-'a'+'A';k=k*16+b[i]-'A';i++;}}while(b[i]!='\0');return k;}void main(){char c[80]="xyz3F4tqk";long m;m=fun(c);printf("%ld\n",m);}【要求】1、根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
#include<stdio.h>#include<string.h>#include<ctype.h>//isxdigit()等函数头文件long fun(char a[]){int i,j=0;long int k=0;char b[10]={0};for(i=0;a[i]!='\0';i++)if(isxdigit(a[i]))b[i++]=a[i];b[j]='\0';i=0;do{ if(isdigit(b[i])){k=k*16+b[i]-'0'; i++;}else{b[i]=isupper(b[i])?b[i]:b[i]-'a'+'A';k=k*16+b[i]-'A';i++;}}while(b[i]!='\0');return k;}void main(){char c[80]="xyz3F4tqk";long m;m=fun(c);//传入字符串数组首地址printf("%ld\n",m);}编程题【程序功能】用一组整数验证命题:“任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数字与个位数字交换得到n2;求n1与n2差的绝对值得到n3;将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089。
若n1、n3是一位数或两位数,则在高位补0使其称为三位数。
”例如:n1:123,n2:321,n3:198(321-123),n4:891,n5:1089(198+891)【编程要求】(1)编写函数int fun(int a[],int b[],int n),其功能是用a指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b 数组中数据的个数。
(2)编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕【测试数据与运行结果】测试数据:123 765 1 45 121 1345 131 67 696 3589运行结果:123 765 1 45 67编一个函数fun(char s[ ]),函数的功能是把字符串中的内容逆置然后放入原来字符串的后面。
例子如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:abcdefggfedcba。
部分程序如下:保存文件名为3.c#include <string.h>#include <conio.h>#include <stdio.h>#define N 81fun(char s[ ]){ }main(){ char a[N];clrscr();printf("Enter a string:"); gets(a);printf("The original string is:");puts(a);fun(a);printf("\n");printf("The string after modified:");puts(a);}编一个函数locationt( ),函数的功能是求出数组中第二大的值的位置,并且将该值返回给主函数。
部分程序如下:保存文件名为4.c#include <stdio.h>#include <conio.h>#define VSIZE 20int vector[VSIZE];int location(int list[],int size){ }main(){int i;for(i=0;i<VSIZE;i++){vector[i]=rand();printf("Vector[%d]=%6d\n",i,vector[i]);}i=location(vector,VSIZE);printf("\n数组中第二大值为:vector[%d]=%6d\n",i,vector[i]);}函数的功能是:判断一个整数是否回文(不用数组的方式实现)。
思想方法:假定一个数x为123 ,s=0,s*10+(x的个位数) 赋值给s,x(123)降一位变为12赋值给x ,s*10+(x的个位数)赋值给s,x(12)再降一位变为1赋值给x,s*10+(x的个位数)赋值给s,现在x(1)再降一位就为0了,还需要再降一位吗?判断原来的123(x已经改变了,怎么办?可以事先赋值给替他变量吗?)是否等于s,如果相等则该数是回文,返回给主函数一个值1,否则返回给主函数0;主函数根据这个返回的值就可以判断是否任意输入的这个整数是否为回文,并在屏幕上输出是回文或不是回文。
部分程序如下,请把子函数补充完整并完全正确的运行程序。
#include<stdio.h>int f(int x){ }void main(){long int x;printf("任意输入一个整数");scanf("%ld",&x);if(f(x)) printf("%ld是回文",x);else printf("%ld不是回文",x);}函数的功能是:将大于整数m且紧靠m的k个素数输出到屏幕上。
思想方法:例如:若输入17,5,则应输出:19,23,29,31,37。
先输入一个值给m,然后从m+1的值开始,调用prime这个函数,该函数功能为判断一个数是否素数,得到返回值,1表示该数是素数,0表示不是素数,如是素数,用一个变量x计数一次,然后m+2的值调用prime这个函数,若是素数,用一个变量计数一次,直到计数变量的值等于k为止。
部分程序如下,请把函数补充完整并完全正确的运行程序。
#include<stdio.h>int prime(int x){ }void main(){int x,k,m;scanf("%d,%d",&m,&k);printf("大于整数%d且紧靠%d的%d的素数是\n ",m,m,k);for(x=0;x<=k;){ }}100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数选取出(如293)。
计算并输出上述这些素数及统计满足条件的素数个数输出到屏幕上。
思想方法:(1)从101开始,调用函数给出这个数据(求个位数字+十位数字)%10是否正好等于该数第百位上的数如是返回值1,否则返回值0,如果返回值1及满足以上要求(2)调用函数prime,判断这个数是否素数,判断素数的函数参照题目3的prime的函数的写法,如果prime函数返回值1同时满足以上2个条件则输出该数到屏幕上。
部分程序如下,请把程序补充完整并完全正确的运行程序。
提交源程序名称为4.c#include<stdio.h>int prime(int x){ }int f(int x){ }void main(){int x,count=0;for(x=101;x<1000;x++){ }printf("100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数个数为%5d ",count);}下列程序的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后.请编写函数chg(char s[])实现程序要求.例如:s字符串中原有内容为:Mn.123xyZ,则调用函数后,结果为:n.123xyZM.解题思想:先将第一个字符复制给一个变量,然后s[0]=s[1], s[1]=s[2], s[2]=s[3]……可以写成一个循环s[i]=s[1+i],直到s[i]还是s[i+1]的值为0?(字符串结束标记)。
请大家思考注意:部分源程序已给出。
#includes<stdio.h>void main(){int s[100];gets(s);chg(s);puts(s);}void chg(char s[ ]){ }#include"stdio.h"#include"string.h"#define SIZE 81void main(){void fun(char []);char s[SIZE];printf("Please input a string :\n");scanf("%s",s);fun(s);printf("The string after fun is :\n%s",s);}void fun(char s[SIZE]){int i,len;char c=s[0];len=strlen(s);for(i=1;i<len;i++)s[i-1]=s[i];s[i-1]=c;}下列程序的功能是:计算500-800区间内素数,主函数调用prime(x),返回值1就表示是素数,如果是素数就把这个素数存入数组a中,然后将所求素数的值从大到小的顺序排列,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。