《C程序设计》
满分100分
一、阅读程序,在横线上填空(每空2分,共20分。)
1. 百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main( )
{ int hb,hm,hl,n=0;//hb,hm,hl分别代表大马,中马和小马
for(hb=0;hb<=100;hb+=3 )
for(hm=0;hm<=100-hb;hm+= (1) )
{ hl=100-hb- (2) ;
if(hb/3+hm/2+2* (3) ==100)
{ n++;
printf("hb=%d,hm=%d,hl=%d\n",hb/3,hm/2,2*hl);
}
}
printf("n=%d\n",n);
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#define N 10
char str[N];
main()
{ int i,flag;
scanf("%s",str);
sort((4) ___);
for(i=0;i<N;i++)
printf("%c",str[i]);
printf("\n");
}
sort(char str[N])
{ int i,j;
char t;
for(j=1;j<N;j++)
for(i=0;(i<N-j)&&(str[i]!='\0');i++)
if(str[i]>str[i+1])
{ t=str[i];
_(5) ____;
_(6)_ ___;
}
}
3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
3 0 0 3
2 5 7 3
1 0 4 2
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(int m,int n,int arr[])
{ int i,j,sum=0;
for(i=0;i<m;i=i+m-1)
for(j=0;j<n;j++)
sum=sum+ (7) ;
for(j=0;j<n;j=j+n-1)
for(i=1; (8) ;i++)
sum=sum+arr[i*n+j];
return(sum);
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#define N 10
main()
{ void maxmin(int arr[],int *pt1,int *pt2,int n);
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=&a; p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{ int i;
*pt1=*pt2=arr[0];
for(i=1;i<n;i++)
{ if(arr[i]>*pt1) (9) ;
if(arr[i]<*pt2) (10) ;
}
}
二、简要回答下列问题(每小题8分,共40分。)
1.结构化程序设计中常用的三种程序结构是什么?各自用哪些语句来实现?
2.C语言对字符串操作的函数有哪些(举出2个以上)?
3.C语言的构造类型有哪几种?各自适合描述什么样的问题?
4.函数调用有几种方式?函数的实参和形参是怎么进行结合的?
5.do—while循环和while循环的区别是什么?
三、编程题(共40分)
1.一个班级有10名学生,每个学生的信息包括学号,姓名和成绩。编写一函数sort,实现按学生成绩降序排列,排序方法任选。在函数之前,定义出函数中要使用的数据类型。(15分)
2.编写程序打印下面的图形。利用scanf()函数由用户输入星号的行数。(10分)
*
**
***
****
*****
3.已知定义int型数组a,数组a中的元素均为三位数。编写函数jsVal(),其功能是:统计出3位数均为偶数的数组元素的个数c。
例如:int a[6]={123,246,345,608,420,987},则统计结果c=3.(15分)