c语言课后习题第7章函数

合集下载

chap7 函数

chap7 函数

7.2 函数的定义和返回值
1.函数的定义方法 (1)C语言函数定义的一般形式: 存储类型说明符 函数返回值类型名 函数名(类型名 形参1, 类型名 形参2,……) *函数首部*/ {说明部分 执行部分 } ① 存储类型说明符说明该函数是内部函数还是外部函数。 ② 函数返回值类型名是用来说明该函数返回值的类型,如果 没有返回值,则其类型说明符应为“void”。
• 以下程序执行后的输出结果是() fun(int x, int y) {return (x+y) ;} main() { int a=1, b=2, c=3, sum ; sum = fun((a++,b++,a+b),c++); printf(“%d\n”,sum); }
7.4 函数说明 7.4.1 函数说明的形式 在C语言中,要调用某个函数,需对该函数进 行函数说明(或称为函数原型说明)。函 数说明的一般形式为: 类型名 函数名(参数类型1,参数类型 2,…)或 类型名 函数名(参数类型1 参数名1,参数 类型2 参数名2,…)
ቤተ መጻሕፍቲ ባይዱ
7.3.2 函数调用时的语法要求 函数调用时,需要遵循以下几条语法要求: (1)调用函数时,函数名必须与所调用的函数名字完全一 致。 (2)实参的个数必须与形参一致。实参可以是表达式,在 类型上应按位置与形参一一对应匹配。如果类型不匹配, C编译程序按赋值兼容的规则进行转换,否则,程序运行 后不能得到正确的结果。 (3)C语言规定,函数必须先定义后调用(函数的返回值类 型为int或char时除外)。 (4)实参可以是 C程序中函数可以直接或间接的自己调用 自己,即递归调用。 重点提示: ※重点提示:函数调用时,必须特别注意实参和形参的类型 匹配。

C语言程序设计第四版_谭浩强7章

C语言程序设计第四版_谭浩强7章

➢函数的功能
return z; }
函数体
函数首部,不是语 句,行尾无分号
精选课件ppt
函数的返回值,类 型与首部定义一致14
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值 类型决定;省略类型时默认为int(建议 不要省略)
精选课件ppt
15
函数的调用
int main( )
{ int max(int a[ ],int n);
int x[6],i;
for(i=0;i<=5;i++)
scanf("%d",&x[i]);
printf("max=%d",max(x,6));
return 0;
}
实参为数组名
精选课件ppt
int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++)
float fac; fac=1; for(i=1;i<=n;i++)
fac=fac*i; return fac;
printf("c="); scanf("%d",&c);
}
sum=factorial(a)+factorial(b)+factorial(c);
printf("%d!+%d!+%d!=%.0f",a,b,c,sum);
函数1 函数2 函数3
函数1 函数2
精选课件ppt
34
变量作用域——局部变量和全局变量

第7章 函数

第7章  函数

第七章 函 数学习和解题要点1.函数的概念和作用函数:是具有一定功能的一个程序块;是C 语言的基本组成单位。

要求掌握函数定义方法,有关函数类型和返回值的相关知识。

要会调用函数,并能处理函数嵌套、递归调用的相关问题。

1) 函数的参数,返回数值(示意图):2.函数的定义存储类型 (返回的)数据类型 函数名(形参说明语句序列) (注:此地分不能有分号) {函数内用的变量说明序列;(临时工作单元) 可执行语句序列;(包括 return(表达式)语句) }函数的返回值一般是通过 return 语句获得的。

返回的数据类型说明一般应该和return 语句中的表达式类型一致,若不一致则以数据类型说明为准。

如函数中没有 return 语句或 return ;函数无返回值,返回一个用户很难确定的值。

说明:函数的数据类型:int char short long float double *类型。

缺省为 int 型。

不返回值为 void 型。

函数的存储类型:内部函数 本文件内有效 static外部函数 可被其他文件函数调用 extern3.函数调用:函数名(实参表)可以为独立语句:函数名(实参表); 表达式中:变量=函数名(实参表)+其他式;实参表与形参表的对应一般要做到三个一致:个数一致类型一致(在学指针时,指针变量和地址对应)次序一致实参都应该己预先说明的,并有确定的值。

一般,函数都应先定义后调用。

对函数返回值是 int 或 char 的可先调用后定义。

如果非int 或 char型的函数一定要先调用后定义,则在函数调用语句前先作一个“申明”,申明的方法是相当于把函数头部抄一遍,加一个分号:存储类型(返回的)数据类型函数名(形参表);(注:此地分号不可少) 4.函数调用的数据传递把实参数据复制给形参,形参变量内数据变化不影响实参--值调用。

main(){ int a=45,b=50;c=max(a,b);}int max(int x,int y){ .............}把实参的地址传给形参,这时形参变量应为指针变量,因此形参实参共用一个内存位置,形参值的变化也即实参值的变化--地址调用(名调用)。

习题答案(7函数)《C语言程序设计》课后习题解答

习题答案(7函数)《C语言程序设计》课后习题解答
#include <stdio.h>
void main()
{int xyz(int i);
int i;
for (i=100;i<=200;i++)
if(xyz(i))
printf("%d\n",i);
}
int xyz(int i)
{int j=0;
if(i%5==0&&i%3!=0) j=1;
return j;
}
void triangle(int n)
{int i,j;
for(i=1;i<=n;i++)
{for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
}
2.编写一个求1~n之间奇数和的函数,在main( )函数中输入n,然后调用该函数求1~n之间奇数和并输出。
#include <stdio.h>
scanf("%d",&a);
if(sushu(a)) printf("是素数");
else printf("不是素数");
}
int sushu(int a)
{ int i;int j=1;
for(i=2;i<=a-1;i++)
if(a%i==0) j=0;
return j;
}
4.在main( )函数中输入一个人的年龄和性别,女性退休年龄为55岁,男性退休年龄为60岁,编写一个函数根据年龄和性别判断一个人是工作还是退休,若工作,则输出“woking”,退休则输出“retired”。

c语言第7章函数练习题

c语言第7章函数练习题
3. 以下对 C语言函数的有关描述中,正确的是( )。 A. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可以递归调用 C. 函数必须有返回值,否则不能使用函数 D. C程序中有调用关系的所有函数必须放在同一个源程序文件中
4. C语言程序中,当函数调用时( )。 A. 实参和形参各占一个独立的存储单元 B. 实参和形参共用一个存储单元 C. 可以由用户指定是否共用存储单元 D. 计算机系统自动确定是否共用存储单元
fun(int x,int y,int z)
{ z=x*x+y*y;}
main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
A.0
B.29
30.下列程序执行后的输出结果是( )。
voidfunc1(int i);
voidfunc2(int i);
charst[]="hello,friend!";
printf("%d\n",x);
}
上面程序的输出结果是( )。
A.720
B.120
C.24
39.下面程序的输出是( )。
main()
{
intt=1;
fun(fun(t));
}
fun(inth)
{
staticinta[3]={1,2,3};
intk;
for(k=0;k<3;k++) a[k]+=a[k]-h;
B. 不同函数中,可以使用相同名字的变量
C. 形式参数是局部变量
D. 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

c语言程序设计课后习题答案第7章

c语言程序设计课后习题答案第7章

#include<stdio.h>main(){int a[10],n,sum=0,i;float ave;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+a[i];}ave=1.0*sum/n;printf("ave=%.2f\n",ave);}/*练习7-2*/#include<stdio.h>main(){int a[10],n,i;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){printf("第%d个:\n",i+1);scanf("%d",&a[i]);printf("倒序:\n");while(a[i]!=0){printf("%d",a[i]%10);a[i]=a[i]/10;}printf("\n");}}#include<stdio.h>main(){int a[5],x,i,k=0;printf("enter 5 ge zheng shu:\n");for(i=0;i<5;i++)scanf("%d",&a[i]);printf("enter x:\n");scanf("%d",&x);for(i=0;i<5;i++)if(a[i]==x){printf("xia biao wei : %d\n",i);k=1;}if(k==0)printf("Not Found\n");}/*练习7-4*/#include<stdio.h>main(){int a[10],n,i,k=0,x,max;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<=n-1;i++)if(max<a[i]){max=a[i];k=i;}printf("max=%d xia biao=%d",max,k);x=a[n-1];a[n-1]=a[k];a[k]=x;printf("\n");for(i=0;i<n;i++)printf(" %d ",a[i]);printf("\n");}/*练习7-11*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';printf("再输入一个字符:\n");str[80]=getchar();for(j=0;j<=i-1;j++)if(str[80]==str[j])count++;printf("%c字符在字符串中出现的次数为:%d\n",str[80],count);for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}/*习题七1*/#include<stdio.h>main(){int x,y,n,a[10],i,min,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);min=0;for(i=1;i<n;i++)if(a[min]>a[i])min=i;max=0;for(i=1;i<n;i++)if(a[max]<a[i])max=i;x=a[min];a[min]=a[0];a[0]=x;y=a[max];a[max]=a[n-1];a[n-1]=y;for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七2*/#include<stdio.h>main(){int x,n,a[10],i,j,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=1;i<n;i++){ max=i-1;for(j=i;j<n;j++)if(a[max]<a[j])max=j;x=a[max];a[max]=a[i-1];a[i-1]=x;}for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七4*/#include<stdio.h>main(){int m,n,a[6][6],i,j,b[6]={0};printf("输入m:\n");scanf("%d",&m);printf("输入n:\n");scanf("%d",&n);printf("输入%d和%d的矩阵:\n",m,n);for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);b[i]=b[i]+a[i][j];}}printf("shu chu:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf(" %d",a[i][j]);printf("\n");}printf("shu chu hang he :\n");for(i=0;i<m;i++)printf("%4d",b[i]);printf("\n");}/*习题7.6*/#include<stdio.h>main(){char str[80];int i,j;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("倒序输出:\n");for(j=i-1;j>=0;j--)putchar(str[j]);printf("\n");}/*新7.6*/#include<stdio.h>main(){int a[10],i,n;printf("输入整数n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("倒序输出:\n");for(i=0;i<n;i++){printf("%5d",a[n-1-i]);}printf("\n");}/*习题7.7*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出其中的大写辅音字母:\n");for(j=0;j<=i-1;j++)if(str[j]>='B'&&str[j]<='Z'&&str[j]!='E'&&str[j]!='I'&&str[j]!='O'&&str[j]!='U'){putchar(str[j]);count++;}printf("\n");printf("大写辅音字母数量为:%d\n",count);}/*习题7.8*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出相应交换后的字符串:\n");for(j=0;j<=i-1;j++)if(str[j]>='A'&&str[j]<='Z')str[j]=155-str[j];for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}上文已完。

C语言程序设计教程 第七章 课后习题参考答案

C语言程序设计教程 第七章 课后习题参考答案
printf("原数组为:\n");
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;

第七章(c语言谭版)函数

第七章(c语言谭版)函数

调用a

调用b

}
}
}
例: 用弦截法求方程的根。
x3–5x2+16x–80=0 方法如下: (1) 取两个不同点x1、x2,如果f(x1)和f(x2)符号相反, 则(x1,x2)区间内必有一个根。如果f (x1)与f (x2)同 符号,则应改变x1、x2,直到f (x1)、f (x2)异号为 止。注意x1、x2的值不应差太大,以保证(x1, x2) 区间只有一根。
float x1, x2; { int i; float x, y, y1; y1=f(x1); do { x=xpoint(x1, x2);
y=f(x);
if (y*y1>0) /*f(x)与f(x1)同符号。*/ {y1=y; x1=x;} else x2=x; } while (fabs(y)>=0.0001); return (x); }
个return.
返回值类型为函数类型。 一般return中的返
回值类型应与函数定义时的类型一致, 不一致时,
以函数定义类型为准。
5. 调用函数应对被调用函数的返回值类型作出说 明:(函数名相当于一变量,但应有所区别)
类型符 函数名( );
它不同于函数的定义(功能定义) 例: 求二实数之和 main ( ) { float add( ); float a, b, c;
hanoi(n, one, two, three)
表示n个盘子从one塔借助于two塔(空)移至three塔。 调用时塔用字符常量'A' ,' B ', ' C '表示。
§7.5 数组作为函数参数
分为两种情况: 1. 数组元素作为实参

C13第7章 函数(3)

C13第7章 函数(3)

例7-27 汉诺塔问题。
设A座上有n个盘子。 座上有n个盘子。 如果n 如果n为1时,即A座上只有一个盘子,则把它直接移到C座上 座上只有一个盘子,则把它直接移到C 否则,用下面三步完成任务: 否则,用下面三步完成任务: 第一步, 第一步,把A座上的n-1个盘子先利用C座移动到B座上。 座上的n 个盘子先利用C座移动到B座上。 第二步, 第二步,把A座上仅有的第n个盘子移动到C座上。 座上仅有的第n个盘子移动到C座上。 第三步,把B座上的n-1个盘子利用A座移动到C座上。 第三步, 座上的n 个盘子利用A座移动到C座上。
分析upstairs(4)的运行情况
upstairs(4) upstairs(3) + upstairs(2) upstairs(2) + upstairs(1)
Hale Waihona Puke 程序的输出为void main( ) { printf(“4阶楼梯有 种不同的走法 阶楼梯有%d种不同的走法 阶楼梯有 种不同的走法\n”, upstairs(4));}
例7-24
例7-25
编写一个递归函数isPalin判断字符数组中的字符串是 编写一个递归函数isPalin判断字符数组中的字符串是 isPalin 否为回文,是则返回1 不是返回0 否为回文,是则返回1,不是返回0。
例7-27
汉诺塔问题。
古代有一个梵塔,塔内有3个标示为A 古代有一个梵塔,塔内有3个标示为A、B、C的座,A座 的座, 上有5个大小不等的盘子,大的在下面,小的在上面, 上有5个大小不等的盘子,大的在下面,小的在上面,如 图7-8所示。现要求把5个盘子从A座移动到C座,每次只允 所示。现要求把5个盘子从A座移动到C 许移动一个盘子,在移动过程中可以利用B座,但是3个座 许移动一个盘子,在移动过程中可以利用B 但是3 上要始终保持大盘在下面,小盘在上面。 上要始终保持大盘在下面,小盘在上面。

(完整版)答案第七章函数..

(完整版)答案第七章函数..

第七章函数一、选择题1.以下函数声明正确的是: C 。

(02~03第一学期试题)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.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。

(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。

(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。

4.以下正确的函数形式是: D 。

(1级)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; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。

(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。

(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。

(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。

(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码

C语言第7章 函数

C语言第7章 函数

函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{

int a=12, b=24,ave;

ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……

}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;

(完整版)答案第七章函数..

(完整版)答案第七章函数..

(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。

(02~03第一学期试题)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.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。

(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。

(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。

4.以下正确的函数形式是: D 。

(1级)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; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。

(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。

(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。

(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。

(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。

计算机二级c语言第七章 函数习题

计算机二级c语言第七章 函数习题

第七章函数一、选择题1、以下关于函数的叙述中正确的是A)每个函数都可以被其它函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数2、设函数fun的定义形式为void fun(char ch,float x) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5);C)fun('65',2.8); D)fun(32,32);3、有以下程序int f1(int x,int y){return x>y?x:y;}int f2(int x,int y){return x>y?y:x;}main(){ int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g); }程序运行后的输出结果是A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,74、有以下程序#define P 3#define F(int x) { return (P*x*x);}main(){ printf("%d\n",F(3+5));}程序运行后的输出结果是A)192 B)29 C)25 D)编译出错5、若程序中定义了以下函数double myadd(double a,double B){ return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是A)double myadd(double a,B); B)double myadd(double,double);C)double myadd(double b,double A); D)double myadd(double x,double y);6、有以下程序char fun(char x ,char y){ if(x < y) return x;return y;}main(){ int a=’9’,b=’8’,c=’7’;printf("%c\n",fun(fun(a,b),fun(b,c))); }程序的执行结果是A)函数调用出错 B)8 C)9 D)77、有以下程序void f(int v,int w){ int t;t=v;v=w;w=t;}main(){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,18、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参9、有以下函数定义:void fun(int n,double x) { …… }若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A)fun(int y,double m); B) k=fun(10,12.5);C)fun(x,n); D) vold fun(n,x);10、有以下程序fun(int a,int b){ if(a>b) return(a);else return(b);}main(){ int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf("%d\n",r);}程序运行后的输出结果是A) 3 B) 6 C) 8 D) 1211、在一个C程序中A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置12、有以下程序int f1(int x,int y){ return x>y?x:y; }int f2(int x,int y){ return x>y?y:x; }main(){ int a=4,b=3,c=5,d,e,f;d=f1(a,b); d=f1(d,c);e=f2(a,b); e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,413、有如下程序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);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,514、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是A) void B) int C) float D) double15、有以下程序float fun(int x,int y){ return(x+y); }main(){ int a=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A) 编译出错 B) 9 C) 21 D) 9.016、若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无值型17、以下函数值的类型是fun(float x){ float y;y= 3*x-4;return y;}A)int B)不确定 C)void D)float18、以下所列的各函数首部中,正确的是A)void play(var :Integer,var b:Integer)B)void play(int a,b)C)void play(int a,int b)D)Sub play(a as integer,b as integer)19、以下程序的输出结果是fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf("%d",a);}A)0 B)29 C)31 D)无定值20、有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4 C) 5 D) 有语法错21、有如下程序int func(int a,int b){ return(a+b);}main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是A) 12 B) 13 C) 14 D) 1522、以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效23、有以下程序void fun (int a,int b,int c){ a=456; b=567; c=678;}main(){ int x=10, y=20,z=30;fun(x,y,z);printf("%d,%d,%d \n",z,y,x);}输出结果是A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,45624、有以下程序#include "stdio.h"int abc(int u,intv);main(){ int a=24,b=16,c;c=abc(a,b);printf("%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;}输出结果是A)6 B)7 C)8 D)925、以下说法中正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分26、请读程序:#includefunc( int a, int b){ int c;c=a+b;return c;}main(){ int x=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf("%d\n",r);}上面程序的输出结果是A)11 B)20 C)21 D)31二、填空题1、有以下程序int sub(int n) {return(n/10+n%10); }main(){ int x,y;scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);}若运行时输入:1234<回车>,程序的输出结果是。

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

习 题 77.1 已有变量定义和函数调用语句:int a=1,b=–5,c ;c=fun(a,b);fun 函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun 函数。

Fun(int x,int y){ }7.1 求两数之差绝对值#include <math.h>fun(int x,int y){ return abs(x-y); }main(){ int a=1,b=-5,c;c=fun(a,b);printf("|%d-%d|=%d\n",a,b,c);}7.2 已有变量定义和函数调用语句:int x=57;isprime(x);函数isprime( );用来判断一个整型数a 是否为素数,若是素数,函数返回1,否则返回0。

请编写isprime 函数。

isprime(int a){ }7.3 已有变量定义和函数调用语句int a ,b ;b=sum(a);函数sum()用以求∑=nk k 1,和数作为函数值返回。

若a 的值为10,经函数sum 的计算后,b 的值是55。

请编写sum 函数。

Sum(int n){ }7.3 求∑k#include <stdio.h>sum(int n){ int k,s=0;for(k=1;k<=n;k++)s=s+k;return s;}main(){ int a,b;printf("Input a: "); scanf("%d",&a);b=sum(a);printf("%c(1,%d)=%d\n",228,a,b);}7.4 一函数,输入一行字符,将此字符串中最长的单词输出。

7.4 输出最长的单词,假设只包含字母和空格,单词间以空格分隔,空格个数不限#include <string.h>void fun(char a[]){ int n,i,j,k=0,len[80],p;char c[80][80],max[80];n=strlen(a);for(i=0;i<n;i++)if(a[i]!=32) /*a[i]不为空格,说明单词开始了*/{ j=0;while(a[i]!=32) /*没有遇到下一个空格,说明单词没有结束*/{ c[k][j]=a[i]; j++; i++; } /*将单词放入字符串c[k]*/c[k][j]='\0'; /*人为加串尾标志*/k++; /*k为下一个单词存入c的行号*/}for(i=0;i<k;i++)len[i]=strlen(c[i]); /*求每行字符串的长度*/p=0;if(len[p]<len[i]) p=i;/*找最长字符串的行号*/printf("The word is : %s\n",c[p]);}main(){ char a[80];printf("Input a line string: "); gets(a);fun(a);}7.5 一函数,输入一个十六进制数,输出相应的十进制数。

7.5 十六进制数转换成十进制数#include <stdio.h>#include <ctype.h>int fun(char a[]){ int i,n=0,m;for(i=0;a[i];i++){ if(isalpha(a[i]))/*如果a[i]是字母,求出相应的十进制数*/switch(a[i]){ case 'a':case 'A': m=10; break;case 'b':case 'B': m=11; break;case 'c':case 'C': m=12; break;case 'd':case 'D': m=13; break;case 'e':case 'E': m=14; break;case 'f':case 'F': m=15; break;default: printf("Input error!\n"); exit(0);/*如果输入了不合法的字母,输出相应的信息*/ }else if(isdigit(a[i])) /*如果a[i]是数字*/m=a[i]-'0';else { printf("Input error!\n"); exit(0); }/*如果输入了不合法的字符,输出相应的信息*/ n=n*16+m; /*将十六进制数转换成十进制数*/ }return n;}main(){ char a[80]; int n;printf("input: "); scanf("%s",a);n=fun(a);printf("output: %d\n",n);}7.6 给出年、月、日,计算该日是该年的第几天。

#include <stdio.h>int fun(year,month,day){ int n=0,i;n=n+day; /*累加当月的天数*/for(i=month-1;i>0;i--) /*累加前面月份的天数*/switch(i){ case 12: n=n+31;case 11: n=n+30;case 10: n=n+31;case 9: n=n+30;case 8: n=n+31;case 7: n=n+31;case 6: n=n+30;case 5: n=n+31;case 4: n=n+30;case 3: n=n+31;case 2: if(year%4==0&&year%100!=0||year%400==0)n=n+28;else n=n+29; /*根据year判断闰年或平年,进行累加*/case 1: n=n+31;}return n; /*返回天数*/}main(){ int year,month,day;printf("Input year,month,day: "); scanf("%d%d%d",&year,&month,&day);printf("%d.%d.%d is No.%d of a year.\n",year,month,day,fun(year,month,day));}7.7 定义一个函数digit(n,k),它回送整数n的从右边开始数第k个数字的值。

例如:digit(15327,4)=5digit(289,5)=07.7 回送第k个数字#include <stdio.h>int fun(long n,int k){ int i,m ;for(i=1;i<=k;i++){ m=n%10; /*从右边分离出第i个数字*/n=n/10; /*为下一次分离作准备*/}return m; /*返回第k次分离出的数字*/}main(){ long int n; int k;printf("Input n: "); scanf("%ld",&n);printf("Input k: "); scanf("%d",&k);printf("The No.%d number is %d.\n",k,fun(n,k));}7.8 计算s。

已知s=10!+7!*8!将n!定义成函数。

#include <stdio.h>double fun(int n){ double f=1.0; int i;for(i=1;i<=n;i++)f=f*i; /*求n!*/return f; /*返回阶乘值*/}main(){ printf("10!+7!*8!=%g\n",fun(10)+fun(7)*fun(8)); }7.9 定义一个函数,使给定的二维数组(3×3)转置,即行列转换,并输出。

7.9 矩阵转置#include <stdio.h>void convert(int a[][3]){ int i,j,t;for(i=0;i<3;i++)for(j=0;j<i;j++){ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; }} /*矩阵转置*/main(){ int a[3][3],i,j;printf("Input 3*3 array: \n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]); /*读入数据*/printf("before converted, output: \n");for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");} /*输出原始数据*/convert(a); /*调用函数进行处理*/printf("after converted, output: \n");for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");} /*输出转置后的数据*/}7.10 写几个函数:①输入10个职工的性名和职工号;②按职工号由小到大的顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。

7.10 编写几个函数,分别实现输入、排序、查找#include <stdio.h>#include <string.h>#define N 10void input(char name[N][8],char no[N][8]){ int i;printf("Input %d name and No.\n",N);for(i=0;i<N;i++)scanf("%s%s",name[i],no[i]);} /*输入每个人的姓名和学号*/void sort(char name[N][8],char no[N][8]){ char t[8]; int i,j,p;for(i=0;i<N-1;i++){ p=i;for(j=p;j<N;j++)if(strcmp(name[p],name[j])>0) p=j;if(p!=i){ strcpy(t,name[p]); strcpy(name[p],name[i]); strcpy(name[i],t);strcpy(t,no[p]); strcpy(no[p],no[i]); strcpy(no[i],t);}}} /*按姓名进行从小到大的排序,姓名进行交换的时候,职工号也进行交换,以保证职工号跟着姓名走,以免打乱对应的关系*/void find(char name[N][8],char no[N][8],char No[8],char messge[8]){ int low=0,high=N-1,mid;while(low<=high){ mid=(low+high)/2;if(strcmp(No,no[mid])>0) low=mid+1; /*向下找*/else if(strcmp(No,no[mid])<0) high=mid-1; /*向上找*/else { strcpy(message,name[mid]); return; } /*找到了,就将对应的姓名存入find字符串*/}strcpy(message,"no find"); /*找不到,find字符串存入"no find"*/}main(){ char name1[N][8],no1[N][8],No1[8],message1[8]; int i;clrscr();input(name1,no1); /*调用输入函数*/printf("%d alerks are: \n",N);printf("%10s%20s\n","name","No.");for(i=0;i<N;i++)printf("%10s%20s\n",name1[i],no1[i]); /*输出每个人的姓名和职工号*/ sort(name1,no1); /*调用排序函数*/printf("after sorted: \n");printf("%10s%20s\n","name","No.");for(i=0;i<N;i++)printf("%10s%20s\n",name1[i],no1[i]); /*输出排序后的姓名和职工号*/printf("Input finded No. : "); scanf("%s",No1); /*输入要查找的职工号*/find(name1,no1,No1,message1); /*调用查找函数,将找到的姓名放入find字符串*/ if(strcmp(message1,"no find")==0)printf("No find.\n");elseprintf("The finded alerk is: %s\n",message1);/*根据find的内容输出相应的信息*/}7.11 定义一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

相关文档
最新文档