实验6 函数与编译预处理(参考答案)

合集下载

实验五_函数与编译预处理

实验五_函数与编译预处理

《C语言程序设计》实验报告实验五函数与编译预处理学号姓名一、实验目的1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系;2、掌握并正确使用数组作为函数参数;3、掌握函数的嵌套调用和递归调用的方法;4、理解变量的作用域和生存期;5、掌握宏定义、文件包含。

二、实验内容1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。

#include <stdio.h>int fun(int k){int result=1,i;for(i=1;i<=k;i++){result=result*i;}return result;}void main(){int n;printf("Input n please(1<=n<=10)");scanf("%d",&n);printf("%d!=%d\n",n,fun(n));}『运行结果:』2、编写程序,输出2~n之间的所有素数,n由键盘输入。

要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。

程序代码:『运行结果:』3、编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。

并写出2组以上程序运行结果。

程序代码:运行结果:』三、问题讨论1、举例说明自动变量和静态变量的区别。

四、实验总结1 总结本次实验完成情况、相关知识掌握情况2 总结本次实验编辑、编译、连接、运行所取得的经验3 分析本次实验出现的主要错误最直接原因。

C++程序设计实践教程思考题答案

C++程序设计实践教程思考题答案

实验1 C++基础6.编写程序,输入某大写字母的ASCII码值,输出该字母的对应小写字母。

#in clude<iostream>using n amespace std;int mai n(){int i;cin> >i;if(i>=65 && 1<=90 )cout<<char(i-'A'+'a')vve ndl;elsecout«"输入有误"<<endl;} return 0;实验2三、实验思考1.输入直角三角形的两条直角边长,调用平方根库函数sqrt来求斜边的长度#in clude<iostream>#in clude<cmath>using n amespace std;int mai n(){ float a,b,c;coutvv"请输入直角三角形的两条边长:";cin> >a>>b;c二sqrt(a*a+b*b);cout«"直角三角形的斜边="<<c<<endl;return 0;}2 •从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符。

#in clude<iostream>using n amespace std;int mai n(){char c;1coutvv"请输入一个字符:";cin> >c;if(c>='A'&& c<='Z')c+='a'-'A';coutvvcvve ndl;return 0;3•输入一个学生的成绩,如高于60分,贝V输出“ pass” ;否则,输出“failed ”。

5--函数和编译预处理

5--函数和编译预处理

一、选择题1、函数调用语句int fun( ) { return 50,60; },则函数调用后返回值为()。

A、50B、60C、50,60D、编译错2、设有函数定义调用语句“f((e1,e2),(e3,e4,e5));”,则实参个数是()。

A、2B、3C、4D、53、若用下列程序f(char a){ float b=5;b+=a/b;return b;}则函数返回值的类型是()。

A、intB、charC、voidD、float4、若定义函数int f(int x) { x++; return x; }执行以下语句:int a=5; f(a)+f(a);则a的值是()。

A、5B、6C、7D、85、下列程序的运行结果是()。

fun1(int a, int b){ return fun2(a++, --b); }fun2(int a, int b){ return a/b; }void main( ){ int x=5, y=6;cout<<fun1(x,y);}A、1B、1.6C、2D、语法错6、以下程序执行后输出结果是()。

int f(int x,int y){ return (y-x)*x; }void main( ){ int a=3, b=4, c=5, d;d=f(f(a,b),f(a,c));cout<<d;}A、3B、8C、9D、67、设有宏定义和语句#define P(x, y) x/y#define PP(a,b) a*bint c=P(2+3, 2+3)+PP(2+3, 2+3);则变量C的值是()。

A、26B、17C、17.5D、318、若有定义int k=3,以k+1作为参数,对下列宏定义进行宏展开,则最终结果不为7的是()。

A、#define s(x) x*xB、#define s1(x) (x)*(x)C、#define s2(x) (x*x)D、#define s4(x) (x*(x))9、下列编译预处理指令没有语法错误的是()。

大学生C语言程序设计(第四版谭洪强)实验6答案

大学生C语言程序设计(第四版谭洪强)实验6答案

实验六参考答案(参考答案)(1) 设计程序sy6-1.c,输入一个字符串,将其中的大写字母都改为对应的小写字母,其他字符不变。

例如,若输入"Ab,cD",则输出"ab,cd"。

算法分析:使用for循环遍历字符串,在遍历的过程中,如果该元素是大写字母时,能过str[i]=str[i]+32把大写字母置换成相应小写字母参考答案:#include<stdio.h>#include<string.h>void main(){char str[100];int i;printf("请输入一个字符串:");gets(str);for(i=0;str[i]!='\0';i++)if(str[i]>='A'&&str[i]<='Z') str[i]=str[i]+32;printf("输出转换后的字符串:");puts(str);}运行结果:(2) 设计程序sy6-2.c,输入一个字符串,删除其中所有的小写字母'c'。

例如,若输入字符串"ac abc bcdef",则应输出字符串" a ab bdef"算法分析:在原字符数组中删除指定字符时,当遍历的字符不等于要删除的字符时,在原数组中赋值。

注意在赋值的时候,元素下标不同步,所以用j做为删除后的下标,并且是赋一个值,其下标自动加1,所以最后j的值为数组的长度,另外为了保证字符数组能正确输出,所以在最后要人为加一个\0参考答案:#include<stdio.h>#include<string.h>void main(){int i,j=0;char str[20];printf("请输入一个字符:");gets(str);for(i=0;str[i]!='\0';i++)if(str[i]!='c')str[j++]=str[i]; //将指定字符c删除str[j]= '\0';printf("请输入一个字符:");puts(str);}运行结果:(3) 设计程序sy6-3.c,输入一个字符串,统计其中 'a' 到 'z' 26 个英文小写字母各自出现的次数。

C实验报告6参考答案

C实验报告6参考答案

《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验6 数组程序设计一、实验目的1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。

2. 掌握字符数组和字符串函数的使用。

3. 掌握与数组有关的算法。

二、实验内容1(1)下列程序的功能为:为指定的数组输入10个数据,并求这些数据之和。

纠正程序中存在的错误,以实现其功能。

程序以文件名保存。

#include<>void main(){int n=10,i,sum=0;int a[n]; int a[10];for(i=0;i<10;i++){scanf("%d",a[i]); scanf("%d",&a[i]);sum=sum+a[i];}printf("sum=%d\n",sum);}(2)下列程序的功能为:将字符串b 连接到字符串a 。

纠正程序中存在的错误,以实现其功能。

程序以文件名保存。

#include<>void main( ){ char a[]="wel",b[]="come"; char a[20]="wel",b[]="come";int i,n=0;while(!a[n]) n++; while(a[n] != '\0') n++;for(i=0;b[i]!='\0';i++)a[n+i]=b[i];a[n+i]=’\0’;printf("%s\n",a);}(3)下列程序的功能为:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。

也可能没有鞍点。

纠正程序中存在的错误,以实现其功能。

程序以文件名保存。

#include<>#define N 4#define M 4main(){for (i=0;i<N;i++)for (j=0;j<M;j++)scanf("%d",&a[i][j]);flag2=0;for (i=0;i<N;i++){max=a[j][0]; max=a[i][0];for (j=0;j<M;j++)if (a[i][j]>max) if (a[i][j]>=max){max=a[i][j];maxj=j;}for (k=0,flag1=1;k<N&&flag1;k++)if (max>a[k][maxj])flag1=0;if (flag1){printf("\nThe saddle point is:a[%d][%d]=%d\n",i,maxj,max);flag2=1;}}if ( flag2) if (! flag2)printf("\nThere is no saddle point in the Matrix\n");}2.程序填空题(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。

实验6 函数与编译预处理

实验6 函数与编译预处理

实验六函数与编译预处理(4学时)实验前必须做的操作...............——..新建文件夹:1、先在对应的K:盘上建立一个父文件夹(用来存放本人整个学期的作业),格式为:“专业+班级+学号+姓名”,如:工业1091班、学号为05的匡珍春同学,其父文件夹名称为:工业109105匡珍春,然后在此父文件夹下建立子文件夹,名称为:实验6(用来存放实验6需要上交的文件)。

2、在E:盘上建立一个以本人姓名为名称的文件夹(本次实验的工作文件夹),例如:E:\匡珍春【实验目的】1、掌握自定义函数的一般结构及定义函数的方法;2、掌握函数的形式参数、实际参数、函数返回值等重要概念;3、掌握函数实参与形参间的“值传递”方式;4、掌握函数声明、函数调用的一般方法;5、掌握模块化程序设计思想,会采用C语言中函数进行模块化程序设计;6、掌握全局变量和局部变量作用域以及全局变量和局部变量的使用方法;7、掌握函数的嵌套调用的程序的执行过程,会使用嵌套调用设计程序;8、掌握使用函数递归调用的程序的执行过程,会使用递归程序解决实际问题;9、理解宏的概念,掌握宏定义。

了解文件包含的概念,掌握其用法;10、学习对多文件程序的编译和运行;11、熟练掌握VC程序调试方法,包括断点的设置和取消,以及单步执行跟踪进入函数和跳出函数的方法。

【实验内容】[实验任务一]:断点的设置和取消、单步执行跟踪进入函数和跳出函数方法练习程序跟踪调试实例6-1:调试示例(请仔细按以下各步骤进行操作):从键盘输入一个正整数n,计算n! 的值,要求定义和调用函数fact(n),计算n!。

Input n: 1010! = 3628800说明:实验五中我们使用了程序运行到光标位置调试程序,本次实验需要掌握设置断点,以及单步调试进入函数和跳出函数的方法。

【操作步骤】:(1)输入源程序,并以error6_1.c文件名最终保存在实验6文件夹里,编译程序,出现警告信息:双击该警告信息,箭头指向“f=fact(n);”这一行,警告信息指出函数“fact”没有定义,而函数“fact”实际上已经定义了,这是为什么呢?因为函数在调用之前,必须先声明。

实验六 函数与编译预处理

实验六  函数与编译预处理

实验六函数与编译预处理1.void main(){float a,b,c;scanf("%f%f",&a,&b);c=add(a,b);printf("sum is %f\n",c);}float add(float x,float y){float z;z=x+y;return(z);}//错误的地方,(1)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面. 更正后的程序:#include<stdio.h>float add(float x,float y){float z;z=x+y;return(z);}void main(){float a,b,c;scanf("%f%f",&a,&b);c=add(a,b);printf("sum is %f\n",c);}2.void main(){int a=3,b=6;printf("a=%d,b=%d\n",a,b);exchange1(a,b);printf(:a=%d,b=%d\n",a,b);}void exchange1(int x,int y){int t;t=x;x=y;y=t;printf("x=%d,y=%d\n",x,y);}//错误的地方,(1)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面.更正后的程序:#include<stdio.h>void exchange1(int x,int y){int t;t=x;x=y;y=t;printf("x=%d,y=%d\n",x,y);}void main(){int a=3,b=6;printf("a=%d,b=%d\n",a,b);exchange1(a,b);printf("a=%d,b=%d\n",a,b);}3.long int fac(int n){long int p;int i;p=1;for(i=1;i<=n;i++)p=p*i;return(p);}int cmn(int m,int n){int x;x=fac(m)/(fac(n)*fac(m-n));return(x);}void main(){int m,n,c;scanf("%d%d",&m,&n);c=cmn(m,n);printf("c=%d\n",c);}//应该加个#include<stdio.h> 头文件4.int a=7,b=9;void main(){int i,a=5,x=80,y=60;for(i=1;i<4;i++){printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));b+=6;}printf("result_sum=%d\n",sum(x,y));}int sum(int x,int y){extern int m,n;int temp;temp=x+y+m+n+a+b;return(temp);}int m=12,n=25;int max(int 1,int b){return(a>b?a:b);}程序更正:#include<stdio.h>int a=7,b=9;void main(){int i,a=5,x=80,y=60;int max(int a,int b);int sum(int x,int y);for(i=1;i<4;i++){printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));b+=6;}printf("result_sum=%d\n",sum(x,y));}int sum(int x,int y){extern int m,n;int temp;temp=x+y+m+n+a+b;return(temp);}int m=12,n=25;int max(int a,int b){return(a>b?a:b);}5.调试运行以下程序.#include<stdio.h>int fun(int a){int b=0;static int c=2;b+=c;c+=1;return(a+b-c);}void main(){int a=3,i;for(i=0;i<3;i++) printf("%4d",fun(a));}6.略7.略8.#include<stdio.h>#define DEBUGvoid main(){int a=14,b=15,temp;temp=a/b;#ifdef DEBUGprintf("a=%d,b=%d",a,b);#endifprintf("temp=%d\n",temp);}程序结果为:a=14,b=15,temp=0(1)第二行中,宏定义是可以没有具体的值的,在这里只是定义了一个宏名.DEBUG没有值.(2)第7~9行为:#ifdef DEBUGprintf("a=%d,b=%d",a,b);#endif会被编译,因为种种原因DEBUG已经被定义过.(3)如将第2行删除,程序运行结果为:temp=0 因为没有定义DEBUG,所以原来第7~9行的程序没有执行.(4)第9行不能删除,因为#ifdef 和#endif必须成对出现.9.编程题#include<stdio.h>long int fac(int n){long int p;int i;p=1;for(i=1;i<=n;i++)p=p*i;return(p);}void main(){int m,n,c;scanf("%d%d",&m,&n);c=fac(n)/(fac(n-m)*fac(m));printf("c=%d",c);}。

北科c++实验6_函数与预处理

北科c++实验6_函数与预处理

本周实验内容:函数与预处理1完成下面实验内容,将程序清单或运行结果截图复制到实验文档中,以“学号+姓名+班级+实验6.doc”命名实验文档,将文档上传至ftp 服务器上的“C++\”目录下。

注:本此实验内容与教材略有不同,请按本文档完成实验内容。

一、实验目的1、理解函数的概念和定义。

2、锻炼调试程序的能力。

二、实验内容和实验要求按实验指导书P166至P167的要求,完成实验6的实验内容及自测练习。

1.练习题1思考题及问题:2.练习题2思考题及问题:3.练习题3思考题及问题:4.练习题4思考题及问题:5.练习题五(此题为新增内容)⑴数字反射⑵要求编写一个函数,接收一个整数值,返回这个数中数字逆序后的结果值。

例如:给定数7631,函数返回1367.⑶思路①通过% 10运算与循环的结合,可依次获得给定数的每位数字。

例如:7631%10=1,获得了个位数;7631 / 10 =763,即丢掉了个位数字。

继续下去,可依次得到数字1、3、6、7.②边循环边将每次得到的数字添加到需返回的数值中。

例如:0*10+1=1;1*10+3=13;13*10+6=136;136*110+7=1367.6.练习题六(此题为新增内容)⑴猜数字游戏⑵要求编写一个程序,可以玩“猜数字”的游戏。

具体描述如下:程序在1~1000之间的整数中随机选择需要猜的数。

然后显示:I have a number between 1 and 1000.Can you guess my number?Please type your first guess.玩家于是输入猜想的第一个数。

程序会做出如下响应之一:1.Excellent You guessed the number!Would you like to play again (y or n)?2.Too low. Try again.3.Too high. Try again.如果玩家的猜测是不正确的,程序应继续循环,直到玩家最终猜对为止。

实验6 函数 习题及答案

实验6  函数 习题及答案
}
(2)a2.cppe "stdio.h"
int fun(int num)
{
int k=1;
do
{
k*=num %10;/
num/=10;
}while(num);
return(k);
}
void main()
{
int n=26;
printf("%d\n",fun(n));
#include "stdio.h"
int swap(int a,int b)
{
int c,s;
c=a;
a=b;
b=c;
s=a+b;
return s;
}
void main()
{
int a,b,s;
a=3;b=4;
s=swap(a,b);
printf("a=%d b=%d s=%d\n",a,b,s);
{
flag=1;
t[i++]=c;
}
else if(flag)
{
t[i]='\0';
printf("decimal number %d:\n",htoi(t));
printf("continue or not(Y/N)?");
c=getchar();
if(c=='N' || c=='n')
flag1=0;
}
(4)b4.cpp
程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数dele在字符串中查找并删除该字符,最后输出该字符串。
#include "stdio.h"

函数和编译预处理

函数和编译预处理

一、选择题1、函数调用语句int fun( ) { return 50,60; },则函数调用后返回值为()。

A、50B、60C、50,60D、编译错2、设有函数定义调用语句“f((e1,e2),(e3,e4,e5));”,则实参个数是()。

A、2B、3C、4D、53、若用下列程序f(char a){ float b=5;b+=a/b;return b;}则函数返回值的类型是()。

A、intB、charC、voidD、float4、若定义函数int f(int x) { x++; return x; }执行以下语句:int a=5; f(a)+f(a);则a的值是()。

A、5B、6C、7D、85、下列程序的运行结果是()。

fun1(int a, int b){ return fun2(a++, --b); }fun2(int a, int b){ return a/b; }void main( ){ int x=5, y=6;cout<<fun1(x,y);}A、1B、1.6C、2D、语法错6、以下程序执行后输出结果是()。

int f(int x,int y){ return (y-x)*x; }void main( ){ int a=3, b=4, c=5, d;d=f(f(a,b),f(a,c));cout<<d;}A、3B、8C、9D、67、设有宏定义和语句#define P(x, y) x/y#define PP(a,b) a*bint c=P(2+3, 2+3)+PP(2+3, 2+3);则变量C的值是()。

A、26B、17C、17.5D、318、若有定义int k=3,以k+1作为参数,对下列宏定义进行宏展开,则最终结果不为7的是()。

A、#define s(x) x*xB、#define s1(x) (x)*(x)C、#define s2(x) (x*x)D、#define s4(x) (x*(x))9、下列编译预处理指令没有语法错误的是()。

C语言程序设计实验六函数答案《西北民大电气学院》

C语言程序设计实验六函数答案《西北民大电气学院》

实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。

函数与编译预处理实验报告

函数与编译预处理实验报告

函数与编译预处理实验报告1. 背景函数与编译预处理是计算机编程中非常重要的两个概念,它们对于程序的结构和执行效率都起着关键作用。

函数是一段可重复使用的代码块,通过将任务划分为多个函数可以提高代码的可读性与维护性。

而编译预处理则是在编译过程中对源代码进行预处理,包括宏展开、文件包含和条件编译等操作。

本次实验通过设计并实现一段使用函数和编译预处理的程序,旨在加深对函数和编译预处理的理解,掌握它们的基本概念和使用方法,并通过实践感受它们对程序结构和性能的影响。

2. 分析2.1 需求在实验中,我们需要设计一个问题,通过函数和编译预处理来实现对问题的解决。

首先,我们需要确定问题的具体要求和输入输出规范。

只有明确了问题的需求,才能设计出合适的函数和合理的编译预处理指令。

2.2 设计根据实验要求,我们可以设计一个简单的问题:计算一个整数的平方。

用户输入一个整数,程序输出该整数的平方。

这是一个简单的计算问题,可以通过函数和编译预处理来实现。

我们可以设计一个函数calculate_square用于计算平方,并通过编译预处理指令来实现输入输出的控制。

具体的实现细节如下:#include <stdio.h>// 函数:计算平方int calculate_square(int x) {return x * x;}// 编译预处理指令:实现输入输出控制#define ENABLE_INPUT_OUTPUT#ifdef ENABLE_INPUT_OUTPUTint main() {int num;printf("Please enter an integer: ");scanf("%d", &num);int result = calculate_square(num);printf("The square of %d is %d.\n", num, result);return 0;}#endif上述代码中,我们定义了一个函数calculate_square用于计算整数的平方。

函数和编译预处理.doc

函数和编译预处理.doc

函数和编译预处理函数和编译预处理(第五章)一、单项选择题1.关于函数,以下正确的描述是(B)A,函数的定义可以嵌套,但函数的调用不可以嵌套B,函数的定义不可以嵌套,但函数的调用可以嵌套C,函数的定义可以嵌套,函数的调用也可以嵌套D,函数的定义和函数的调用都不M以嵌套2.关键字inline用于定义内联函数,定义时,是将该关键字(D )A.取代定义函数的类型标识符B.取代被定义的函数名C.加在类型标识符之后D.加在类型标识符之前3.以下不正确的描述为(B )A.在函数之外定义的变量称为外部变量,外部变量是全局变量。

B.在函数之内说明的外部变量是局部变量,仅在本函数中有效。

C.在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。

D.文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。

4.以下正确的描述为(C )A,每个C++程序必须在开头用预处理命令^include <iostream. h>B,预处理命令必须位于C++源程序的首部C.在C++中,预处理命令都以#开头D.C++语言的预处理命令只能实现宏定义和条件编译的功能5.在下面的函数原型说明中,存在着语法错误的是(D )A.void BC(int a, int) ;B. void BD(int , int);C. void BE(int , int=5) ;D. int BF(int x ; int y);6.下列哪个不是重载函数在调用时选择的依据(C )A.形参类型B.形参个数C.函数返回值类型D.函数名7.在一个源程序文件中有以下函数定义,其中(D )是重载函数。

A.ABCB. BCDC. ACDD.全部A) int sum (float x, int y) B) float sum (float x, int y, char z) (. . . )C) float sum (float x, float y) D) int sum(int x, int y, char z) (. . . )8.有一个函数原型abc(float x, float y);该函数的返回值类型为(C )A.voidB. doubleC. intD. float9.在程序中,函数声明语句正确位置是(D )A.随便任何位置B.不包含在另一函数中的任何位置。

函数与编译预处理

函数与编译预处理

一、选择题.1.在C语言中,函数的隐含存储类别是( A )A.autoB.staticC.externD.无存储类别2.以下函数值的类型是( A )fun(float x){float y;y=3*x-4;return y;}A.intB.不确定C.voidD.float3.下面程序的输出结果为( C )int x=3;main(){int i;for(i=1;i<x;i++)incre();}incre()static int x=1;x*=x+1;printf(“%d”,x);}A.3 3B.2 2C.2 6D.2 54.有如下函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是( A )A.3B.4C.5D.有语法错误5.有以下程序:void f(int x,int y){int t;if(x<y){t=x;x=y;y=t;}}main(){int a=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf(“%d,%d,%d\n”,a,b,c);}执行后输出结果是( D )A.3,4,5B.5,3,4C.5,4,3D.4,3,56.下列程序段的输出结果是( C )int x=10;int y=x++; y=10 x=11printf(“%d,%d”,(x++,y),y++);A.11,10B.11,11C.10,10D.10,117.下述程序段的输出结果是( )#include<stdio.h>long fun(int n){long s;if(n= =1||n= =2)s=2;elses=n+fun(n-1);return s;}void main(){printf(“\n%ld”,fun(4));}A.7B.8C.9D.108.以下对C语言函数的有关描述中,正确的是( A )A.C程序由一个或一个以上的函数组成B.C函数既可以嵌套定义又可以递归调用C.函数必须有返回值,否则不能使用函数D.C程序中有调用关系的所有函数必须放在同一个源程序文件中9. 若用数组名作为函数调用的实参,传递给形参的是(A)A.数组的首地址B. 数组第一个元素的值C. 数组中全部元素的值D. 数组元素的个数10.一个完整的可运行的C源程序(B )A.至少需由一个主函数和一个以上的辅函数构成B.由一个且仅由一个主函数和零个以上(含零个)的辅函数构成C.至少由一个主函数和一个以上的辅函数构成D.至少由一个且只有一个主函数或多个辅函数构成11.以下正确的函数定义形式是( A )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);12.在C语言的函数中,( C )A.必须有形参 B.形参必须是变量名C.可以有也可以没有形参D.数组名不能做形参13.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B )A.地址传递B.单项值传递C.由实参传递给形参,再由形参传回给实参D.由用户指定传递方式14.下面函数调用语句含有实参的个数为( B )func((exp1,exp2),(exp3,exp4,exp5));A.1B.2C.4D.515.若调用一个函数,且此函数中无return语句,则正确的说法是( D )A.该函数没有返回值B.返回若干个系统默认值C.能返回一个用户所希望的函数值D.返回一个不确定的值16.如果在一个函数中的复合语句中定义了一个变量,则该变量正确的说法是( A )A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量17.如果要限制一个变量只能为本文件所使用,必须通过( C )来实现A.外部变量说明B.静态内部变量C.静态外部变量D.局部变量说明18.C语言允许函数值类型默认定义,此时该函数值隐含的类型是( B )A.float型B.int型C.long型D.double型19.以下函数形式正确的是( D )A.double fun(int x,int y)B.fun(int,x,y){z=x+y;return z;} {int z;return z;}C.fun(x,y);D.double fun(int x,int y){int x,y;double z;z=x+y;return z;} {double z;z=x+y;return z;}20.以下程序的输出结果是( B )fun(int a,int b,int c){a=456;b=567;c=677;}main(){int x=10,y=20,z=30;fun(x,y,z);printf(“%d,%d,%d”,x,y,z);}A.30,20,10B.10,20,30C.456,567,677D.677,567,45621.下面程序的输出结果是(B )fun(int k){if(k>0)fun(k-1);printf(“%d”,k);}main(){int w=5;fun(w);printf(“\n”);}A.5 4 3 2 1B.0 1 2 3 4 5C.1 2 3 4 5D.5 4 3 2 1 022.以下程序的正确运算结果是( C )num(){extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf(“%d,%d\n”,x,y);}A.12,2B.不确定C.5,25D.1,1223.下面程序执行后输出结果是( D )f(int a){int b=0;static c=3;a=c++,b++;return(a);}main(){int a=2,i,k;for(i=0;i<2;i++)k=f(a++);printf(“%d\n”,k);}A.3B.0C.5D.4二、填空题。

HUST函数与程序结构_编译预处理实验

HUST函数与程序结构_编译预处理实验

函数与程序结构,编译预处理2.4 函数与程序结构实验(一) 实验目的(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。

(2)熟悉和掌握不同存储类型变量的使用。

(3)熟悉多文件编译技术。

(二) 实验内容及要求1.源程序改错下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。

要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。

改正后代码如下(1)#include<stdio.h>long sum_fac(int n){static long f=1,s=0;f*=n;s+=f;return s;}void main(void){int k,n;printf("please input n:\n");scanf("%d",&n);for(k=1;k<=n;k++)printf("k=%d\tthe sum is %ld\n",k,sum_fac(k));}代码运行结果:(2)#include<stdio.h>long double sum_fac(int n){long double s=0;int i;long double fac=1;for(i=1;i<=n;i++)fac*=i,s+=(1.0/fac);return s;}void main(void){int k,n;printf("please input n:\n");scanf("%d",&n);for(k=1;k<=n;k++)printf("k=%d\tthe sum is %lf\n",k,sum_fac(k));}运行结果如下:3.跟踪调试下面是计算fabonacci数列前n项和的源程序,现要求单步执行该程序,并观察p,i,sum,n值,即:(1)刚执行完scanf("%d",&k);语句时,p,i值是多少?(2)从fabonacci函数返回后,光条停留在哪个语句上?(3)进入fabonacci函数时,watch窗口显示的是什么?(4)当i=3时,从调用fabonacci函数到返回,n值如何变化?源程序:void main(void){int i,k;long sum=0,*p=&sum;scanf("%d",&k);for(i=1;i<=k;i++){sum+=fabonacci(i);printf("i=%d\tthe sum is %ld\n",i,*p);}}long fabonacci(int n){if(n==1 || n==2)return 1;elsereturn fabonacci(n-1)+fabonacci(n-2);}(1)(2)4.程序设计编写并上机调试运行能实现以下功能的程序。

C语言实验报告 实验六 参考答案

C语言实验报告 实验六  参考答案

实验六二维数值数组(参考答案)(1) 设计程序sy6-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。

算法分析:方阵主对角线上的元素,行下标和列下标相同;辅对角线元素,如果行下标为i,列下标就为2-i;参考答案:# include <stdio.h># include <stdlib.h># include <math.h># include <time.h>void main(){int a[3][3];int i,j,sum=0;srand( time( NULL ) );printf("矩阵:\n");for(i=0;i<3;i++) //用随机函数生成3行3列的二维数组并按矩阵格式输出{for(j=0;j<3;j++){a[i][j]=rand()%20;printf("%4d",a[i][j]);}printf("\n");}for(i=0;i<3;i++)sum=sum+a[i][i]+a[i][2-i];printf("该矩阵的正、反对角线元素之和为:%d\n",sum);}运行结果:(2) 设计程序sy6-2.c,找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于b数组中。

算法分析:按列序遍历二维数组,每列用打擂台的方法求最大数,N列则有N个最大值,分别存于b数组的对应元素中。

# include <stdio.h># include <stdlib.h># include <math.h># include <time.h># define N 4void main(){int a[N][N],b[N];int i,j;srand( time( NULL ) );printf("矩阵:\n");for(i=0;i<N;i++) //用随机函数生成N行N列的二维数组并按矩阵格式输出{for(j=0;j<N;j++){a[i][j]=rand()%20;printf("%4d",a[i][j]);}printf("\n");}for(j=0;j<N;j++) //外循环控制列下标{b[j]=a[0][j]; //假设每列的0行元素是最大数for(i=1;i<N;i++)if(b[j]<a[i][j])b[j]=a[i][j];}printf("该矩阵每列元素的最大值是:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}运行结果:(3) 设计程序sy6-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。

第6章 函数与预处理习题解答

第6章 函数与预处理习题解答

第6章函数与预处理习题解答1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。

两个整数由键盘输入。

用辗转相除法,m、n是两个正整数,r 是余数,用直到循环操作的流程图:#include<stdio.h>int gcf(int,int); //求最大公约数函数int lcm(int,int); //求最小公倍数函数void main(){int m,n;do{printf("Please input tow positive integert:");scanf("%d %d",&m,&n);}while(m<=0||n<=0);printf("The greatest command factor(%d,%d)=%d\n",m,n,gcf(m,n));printf("The lease common multiple(%d,%d)=%d\n",m,n,lcm(m,n));}int gcf(int n,int m){int r;do{r=m%n;m=n;n=r;}while(r!=0);return m;}int lcm(int m,int n){int l;l=m*n/gcf(m,n);return l;}*2.编写一个函数,由参数传一个字符串,统计此字符串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计的结果。

注:要把字符串传递给函数,只能通过指针或数组名。

本题应放在第7、8章介绍数组之后#include<stdio.h>void f(char a[]);void main(){char a[100];printf("Input a string:");gets(a);f(a);}void f(char a[]){int i=0,c=0,n=0,m=0;do{if(a[i]>='A'&& a[i]<='Z' || a[i]>='a'&& a[i]<='z')c++;else if(a[i]>='0'&& a[i]<='9')n++;elsem++;i++;}while(a[i]!='\0');printf("number=%d\n",n);printf("char=%d\n",c);printf("other=%d\n",m);}3.按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。

编译预处理习题与答案

编译预处理习题与答案

编译预处理习题与答案第九章编译预处理9.1 选择题【题9.1】以下叙述中不正确的是。

A)预处理命令⾏都必须以#号开始B)在程序中凡是以#号开始的语句⾏都是预处理命令⾏C)C程序在执⾏过程中对预处理命令⾏进⾏处理D)以下是正确的宏定义#define IBM_PC【题9.2】以下叙述中正确的是。

A)在程序的⼀⾏上可以出现多个有效的预处理命令⾏B)使⽤带参的宏时,参数的类型应与宏定义时的⼀致C)宏替换不占⽤运⾏时间,只占编译时间D)在以下定义中C R是称为“宏名”的标识符#define C R 045【题9.3】请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);}上⾯程序的运⾏结果是。

A)sum=9 B)sum=10 C)sum=12 D)sum=18【题9.4】以下程序的运⾏结果是。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i=10,j=15,k;k=10*MIN(i,j);printf(“%d\n”,k);}A)常量B)单精度数C)双精度数D)字符串【题9.6】以下程序的运⾏结果是。

#include#define FUDGE(y) 2.84+y#define PR(a) printf(“%d”,(int)(a))#define PRINT1(a) PR(a); putchar(‘\n’)main(){int x=2;PRINT1(FUDGE(5)*x);}A)11 B)12 C)13 D)15【题9.7】以下有关宏替换的叙述不正确的是。

A)宏替换不占⽤运⾏时间B)宏名⽆类型C)宏替换只是字符替换D)宏名必须⽤⼤写字母表⽰【题9.8】C语⾔的编译系统对宏命令的处理是。

A)在程序运⾏时进⾏的B)在程序连接时进⾏的C)和C程序中的其它语句同时进⾏编译的D)在对源程序中其它成份正式编译之前进⾏的【题9.9】若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执⾏以下printf语句后,输出结果是。

实验6函数与编译预处置(参考答案)

实验6函数与编译预处置(参考答案)

实验六函数与编译预处置(参考答案)[实验任务一]:程序跟踪调试实例6-1:参考答案程序跟踪调试实例6-2:参考答案程序跟踪调试实例6-3:参考答案[实验任务二]:程序填空实例6-1:参考答案程序填空实例6-2:参考答案程序填空实例6-3:参考答案[实验任务三]:编程实例6-1:参考答案(第一种方式)编程实例6-1:参考答案(第二种方式)编程实例6-1:参考答案(第三种方式)编程实例6-2:参考答案编程实例6-3:参考答案编程实例6-4:参考答案(第一种方式)编程实例6-4:参考答案(第二种方式)编程实例6-5:参考答案编程实例6-6:参考答案编程实例6-7:参考答案编程实例6-8:参考答案[实验任务四]:程序1参考答案:#include <>/* 函数功能:计算两整型数之和,若是与用户输入的答案相同,那么返回1,不然返回0 函数参数:整型变量a和b,别离代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,不然返回0 */int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否函数返回值:无*/void Print(int flag){if (flag)printf("Right!\n");elseprintf("Not correct!\n");}main() /*主函数*/{int a, b, answer;printf("Input a,b:");scanf("%d,%d", &a, &b);answer = Add(a, b);Print(answer);}程序两次测试的运行结果别离如下:①Input a,b:1,2↙1+2=3↙Right!②Input a,b:1,2↙1+2=4↙Not correct!程序2参考答案:#include <>/* 函数功能:计算两整型数之和,若是与用户输入的答案相同,那么返回1,不然返回0 函数参数:整型变量a和b,别离代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,不然返回0*/int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六函数与编译预处理(参考答案)[实验任务一]:程序跟踪调试实例6-1:error6_1.c参考答案程序跟踪调试实例6-2:error6_2.c参考答案程序跟踪调试实例6-3:error6_3.c参考答案[实验任务二]:程序填空实例6-1:blank6_1.c参考答案程序填空实例6-2:print1.c参考答案程序填空实例6-3:reverse.c参考答案[实验任务三]:编程实例6-1:primefun.c参考答案(第一种方法)编程实例6-1:primefun.c参考答案(第二种方法)编程实例6-1:primefun.c参考答案(第三种方法)编程实例6-2:printnum.c参考答案编程实例6-3:printa.c参考答案编程实例6-4:power.c参考答案(第一种方法)编程实例6-4:power.c参考答案(第二种方法)编程实例6-5:Taile.c参考答案编程实例6-6:value.c参考答案编程实例6-7:LeRangDe.c参考答案编程实例6-8:multifac.c参考答案[实验任务四]:程序1参考答案:#include <stdio.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0 */int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否函数返回值:无*/void Print(int flag){if (flag)printf("Right!\n");elseprintf("Not correct!\n");}main() /*主函数*/{int a, b, answer;printf("Input a,b:");scanf("%d,%d", &a, &b);answer = Add(a, b);Print(answer);}程序两次测试的运行结果分别如下:①Input a,b:1,2↙1+2=3↙Right!②Input a,b:1,2↙1+2=4↙Not correct!程序2参考答案:#include <stdio.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0*/int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否函数返回值:无*/void Print(int flag){if (flag)printf("Rright!\n");elseprintf("Not correct. Try again!\n");}main() /*主函数*/{int a, b, answer;printf("Input a,b:");scanf("%d,%d", &a, &b);do{answer = Add(a, b);Print(answer);}while (answer == 0);}程序运行结果如下:Input a,b:1,2↙1+2=4↙Not correct. Try again!1+2=5↙Not correct. Try again!1+2=3↙Rright!程序3参考答案:#include <stdio.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0*/int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否整型变量chance,表示同一道题已经做了几次还没有作对函数返回值:无*/void Print(int flag, int chance){if (flag)printf("Right!\n");else if (chance < 3)printf("Not correct. Try again!\n");elseprintf("Not correct. You have tried three times!\nTest over!\n"); }main() /*主函数*/{int a, b, answer, chance;printf("Input a,b:");scanf("%d,%d", &a, &b);chance = 0;do{answer = Add(a, b);chance++;Print(answer, chance);}while ((answer == 0) && (chance < 3));}程序两次测试的运行结果分别如下:①Input a,b:1,2↙1+2=4↙Not correct. Try again!1+2=5↙Not correct. Try again!1+2=2↙Not correct. You have tried three times!Test over!②Input a,b:1,2↙1+2=4↙Not correct. Try again!1+2=3↙Right!程序4参考答案:#include <stdio.h>#include <stdlib.h>#include <time.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0*/int Add(int a, int b){int answer;printf("%d+%d=", a, b);scanf("%d", &answer);if (a+b == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否函数返回值:无*/void Print(int flag){if (flag)printf("Rright!\n");elseprintf("Not correct!\n");}main()/*主函数*/{int a, b, answer, error, score, i;srand(time(NULL));error = 0;score = 0;for (i=0; i<10; i++){a = rand()%10 + 1;b = rand()%10 + 1;answer = Add(a, b);Print(answer);if (answer == 1)score = score + 10;elseerror++;}printf("score = %d, error numbers = %d\n", score, error); }程序运行结果如下:10+1=11↙Rright!5+9=14↙Rright!4+6=10↙Rright!7+2=9↙Rright!3+10=13↙Rright!1+1=2↙Rright!5+2=7↙Rright!3+7=10↙Rright!4+7=10↙Not correct!5+6=11↙Rright!score = 90, error numbers = 1程序5参考答案:#include <stdio.h>#include <stdlib.h>#include <time.h>/* 函数功能:对两整型数进行加减乘除四则运算,如果用户输入的答案与结果相同,则返回1,否则0函数参数:整型变量a和b,分别代表参加四则运算的两个操作数整型变量op,代表运算类型,当op值为1、2、3、4时,分别执行加、减、乘、整除运算函数返回值:当用户输入的答案与结果相同时,返回1,否则返回0*/int Compute(int a, int b, int op){int answer, result;switch (op){case 1:printf("%d + %d=", a, b);result = a + b;break;case 2:printf("%d - %d=", a, b);result = a - b;break;case 3:printf("%d * %d=", a, b);result = a * b;break;case 4:if (b != 0){printf("%d / %d=", a, b);result = a / b;}else{printf("Division by zero!\n");}break;default:printf("Unknown operator!\n");break;}scanf("%d", &answer);if (result == answer)return 1;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

相关文档
最新文档