选择题
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;
}