习题7 函数

选择题

1、建立函数的目的之一是 【 正确答案: B
A 提高程序的执行效率
B 提高程序的可读性
C 减少程序的篇幅
D 减少程序文件所占内存

2、C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 【 正确答案: B
A 地址传递
B 单向值传递
C 由实参传给形参,再由形参传回给实参
D 由用户指定传递方式

3、以下正确的说法是 【 正确答案: C
A 定义函数时,形参的类型说明可以放在函数体内
B return后边的值不能为表达式
C 如果函数值的类型与返回值类型不一致,以函数值类型为准
D 如果形参与实参的类型不一致,以实参类型为准

4、以下不正确的说法是 【 正确答案: B
A 实参可以是常量、变量或表达式
B 形参可以是常量、变量或表达式
C 实参可以为任意类型
D 形参应与其对应的实参类型一致

5、以下正确的函数定义形式是 【 正确答案: 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);

判断题

1、静态变量的生存期与整个程序的运行期相同【正确答案:正确
2、在函数的定义中,若函数没有参数,则可以省略函数名后的括号【正确答案:错误】 

3、只有在函数被调用时,其形式参数才临时地占有存储空间【正确答案:正确

4、以数组名作函数参数时,数据传递的方向是“双向的”,因此我们可以说,在此情况下,函数带回的返回值可能不止一个。【正确答案:错误

5、函数即可以嵌套定义,又可以嵌套调用【正确答案:错误

6、return后面括号里的表达式的值即是此函数的值【正确答案:正确

7、按现代风格设计的C程序中,main中对函数声明的信息与定义此函数时第一行的信息完全相同【正确答案:正确

8、被main函数调用的函数只能是库函数【正确答案:错误

9、一个C语言源程序文件中,有且只能有一个主函数【正确答案:正确

10、在一个C函数中,只允许有一对花括号【正确答案:错误

11、函数同变量一样都要先定义或先声明再使用【正确答案:正确

12、C的源程序中,main函数必须位于文件的开头【正确答案:错误

13、函数内部的变量都具有局部作用域【正确答案:正确

14、C程序是由函数构成的,每一个函数完成相对独立的功能【正确答案:正确

15、函数调用时实参的值传递给形参,调用结束时形参的值也可以传给实参【正确答案:错误

编程题

1、判断一个整数是否为素数

【问题描述】:写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

【输入形式】:输入一个大于1的整数。

【输出形式】:输出该数是不是素数。

【样例输入】:

//以下为两组测试数据

9

17

【样例输出】:

//以下为两组数据对应的结果

9 is not a prime.

17 is a prime.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int sushu(int n)
{
	int i;
	for(i=2;i<=sqrt((double)n);i++)
	{
		if(n%i==0)
		{
		 return 0;
		}
	}
	return 1;
}

int main()
{
	int n,a;
	scanf("%d",&n);
	a=sushu(n);
	if(a==1)
	{
		printf("%d is a prime.\n",n);
	}
	else
	{
		printf("%d is not a prime.\n",n);
	}
	return 0;
}

2、二维整型数组转置,即行列转换

【问题描述】:写一个函数,使给定的一个3X3二维整型数组转置,即行列互换。数据输入输出均在主函数中完成。

【输入形式】:依次输入一个3X3的数组中的每个元素,中间以空格隔开。

【输出形式】:分别输出转置前及转置后的数组,输出格式为%5d。

【样例输入】:1 2 3 4 5 6 7 8 9

【样例输出】:

original array

    1    2    3

    4    5    6

    7    8    9

convert array

    1    4    7

    2    5    8

    3    6    9

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void zz(int a[3][3])
{
	int i,t;
	for(i=0;i<3;i++)
	{
		t=a[i][0];
		a[i][0]=a[0][i];
		a[0][i]=t;
	}
		t=a[1][2];
		a[1][2]=a[2][1];
		a[2][1]=t;
}

int main()
{
	int a[3][3];
	int i,j;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	printf("original array\n");
	printf("\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%5d",a[i][j]);
		}
		printf("\n");
		printf("\n");
	}
	zz(a);
	printf("convert array\n");
	printf("\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%5d",a[i][j]);
		}
		printf("\n");
		printf("\n");
	}
	return 0;
}

3、学生成绩统计

【问题描述】

输入10个学生5门课的成绩,分别用函数实现下列功能:(1)计算每个学生的平均分;(2)计算每门课的平均分;(3)找出所有50个分数中最高的分数所对应的学生和课程;(4)计算平均分方差:50个成绩各自减去所有成绩的平均分之差的平方求和再除以50。

说明:如果最高分有2位及2位以上同学,全部显示。


【输入形式】依次输入10个学生的5科成绩(成绩间用空格隔开)

【输出形式】

     输出:每一个学生的平均成绩(averstu)

           每一门课的平均成绩(avercourse),

           最高分对应的学生和课程

           平均分方差(variance):即50个成绩的平均方差。

   要求:所有输出实数保留两位小数,中间空格隔开

【样例输入】:90 81.5 67.3 95 78 50 88.8 79 90 66.5 90 90 90 70 90 80 80 77.3 99.9 22.8 12.3 33.3 56 78 90 80 80 80 80 80 70 70 70 77.7 88.5 54.8 55 55 55 55 70 70 70 70 70 0 10 20 30 40

【样例输出】:

averstu:82.36 74.86 86.00 72.00 53.92 80.00 75.24 54.96 70.00 20.00

avercourse:59.71 65.86 66.46 74.56 68.08

highest:99.90 student:4 course:4

variance:556.98

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void averstu(double a[][5])
{
	int i,j;
	double sum=0,averstu;
	printf("averstu:");
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			sum+=a[i][j];
		}
		averstu=sum/5.0;
		sum=0;
		printf("%.2f ",averstu);
	}
	printf("\n");
}

void avercourse(double a[][5])
{
	int i,j;
	double sum=0,avercourse;
	printf("avercourse:");
	for(j=0;j<5;j++)
	{
		for(i=0;i<10;i++)
		{
			sum+=a[i][j];
		}
		avercourse=sum/10.0;
		sum=0;
		printf("%.2f ",avercourse);
	}
	printf("\n");
}

void highest(double a[][5])
{
	int i,j;
	double highest=0;
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			if(highest<a[i][j])
			{
				highest=a[i][j];
			}
		}
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			if(a[i][j]==highest)
			{
				printf("highest:%.2f student:%d course:%d\n",highest,i+1,j+1);
			}
		}
	}
	printf("\n");
}

void variance(double a[][5])
{
	int i,j;
	double variance,sum=0,x=0,y=0;
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			sum+=a[i][j];
		}
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			x=a[i][j]-(sum/50.0);
			y+=pow(x,2);
		}
	}
	variance=y/50.0;
	printf("variance:%.2f\n",variance);
}

int main()
{
	double a[10][5];
	int i,j;
	for(i=0;i<10;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%lf",&a[i][j]);
		}
	}
	averstu(a);
	avercourse(a);
	highest(a);
	variance(a);
	return 0;
}

4、整数转换为字符串

【问题描述】:

用递归法将一个整数n转换成字符串。例如:输入483,应输出字符串"483".

n的位数不确定,可以是任意位数的整数。


【输入形式】:输入一个整数(也可以是负数)

【输出形式】:输出该整数对应的字符串

【样例输入】:483

【样例输出】:"483"

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void zifu(int n)
{
	int m;
	m=n/10;
	if(m!=0)
	{
		zifu(m);
	}
	printf("%d",n%10);
}

int main()
{
	int n;
	scanf("%d",&n);
	printf("\"");
	if(n<0)
	{
		putchar('-');
		n=-n;
	}
	zifu(n);
	printf("\"");
	printf("\n");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺❀氯ྀൢ躅ྀൢ❀༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值