C程序设计基础上机实验指导书 下载本文

{

int i;

for(i=1;i<=4;i++)

printf(\}

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。并上机进行调试验证)

(1) 程序说明:用一个一维数组存放10个学生的成绩,写一个函数求出平均分、最高分和最低分。 #include \float max=0;min=0;

float average(float score[],int n) {

int i;

float ave,sum=score[0]; max=min= ; for(i=1;i

if(score[i]>max) max=score[i]; else if( ) min=score[i]; sum=sum+score[i]; }

ave=sum/10;

return ; }

void main() {

float ave,score[10]; int i;

for(i=0;i<10;i++)

scanf(\ ave=average( )

printf(\ }

(2) 程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数delete在字符串中查找并删除该字符,最后输出该字符串。

#include \

void delete(char p[],char ch)

35

{

int i=0,j;

while( ) {

if(p[i]==ch)

for(j=i;j< ;j++) p[i]=p[i+1]; else i++; }

void main() {

char p[80],ch; int i=0,j; scanf(\ scanf(\

delete( ); printf(\ }

3.程序设计(根据题意编写程序并上机进行调试)。

(1)程序说明:写两个函数分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。

要求:求最大公约数用递归方法实现,递归公式为(r=m%n):

?n,r=0

gcd(m,n)??

r!=0 ?gcd(n,r)

(2)程序说明:用递归函数将一个整数n转换成字符串,例如,输入568,应输出字符串?865?。n的位数不确定,可以是任意位数的整数。

(3)程序说明:编写程序对10个学生5门课的成绩进行处理,要求分别用函数实现如下几个功能:① 输入学生数据;② 求每个学生的平均分;③求每门课的平均分;④ 输出平均分最高的学生的成绩;⑤输出学生成绩表(包括每个学生的平均成绩和每门课的平均成绩)。

实验十二 指针的应用

一、实验目的

掌握指针变量的定义和引用。 二、实验内容

1.编制如下程序,并上机调试运行,最后在实验报告上写出运行结果。

(1)使用指针作函数参数,编写用于交换两个参数值的函数。调用该函

数用于对从键盘输入的两个整数进行交换。

36

(2)编写一个函数,用于对作为参数的数组中的元素求平均值,函数以

指针方式进行处理。平均值为函数的返回值。

(3)编写一个函数,用于对作为参数的数组中的元素求最大值,并将最

大值从数组中删除。函数的首部类似于下列形式: dele_max(int *,int *)

其中第一个参数为指向数组的指针,第二个参数为指向数组长度变量的指针。因此调用数组时,使用如下形式: dele_max(a,&n);

其中a为一数组名,n为存放a数组长度的变量。

2.程序分析题。分析以下程序,对分析的结果上机检验。

(1) 下列程序使用指针操作数组有各种形式,体会其用法。 #include ?stdio.h? main( ) {

int a[]={0,1,2,3,4},i,*p; for(i=0;i<=4;i++) printf(\printf(\

for(p=&a[0];p<=&a[4];p++) printf(\printf(\

for(p=&a[0],i=1;i<5;i++) printf(\printf(\

for(p=a,i=0;p+i<=a+4;p++,i++) printf(\printf(\for(p=a+4;p>=a;p--) printf(\printf(\

for(p=a+4,i=0;i<=4;i++) printf(\printf(\

for(p=a+4;p>=a;p--)

printf(\printf(\} (2).

#include \void main() {

char *s2=\ *s2++;

printf(\

37

printf(\ printf(\ }

(2) 运行以下程序,从键盘输入My Book,结果是什么? #include \char fun(char *s) {

if(*s<='Z' && *s>='A') *s+=32; return (*s); }

void main( ) {

char c[80],*p; p=c;

scanf(\ while(*p) {

*p=fun(p); putchar(*p); p++; }

printf(\} (4)

#include \void main( ) {

int *p,s[3][4],i,j,k=1; p=s[0];

for(i=0;i<3;i++) for(j=0;j<4;j++) *p++=k++; p=s[0];

for(i=0;i<3;i++) for(j=0;j<4;j++)

printf((j%4)?\ } (5)

#include \void main( ) {

int num[2][3],*p; int t,i,j,k=10; p=num[0];

38

for(i=0;i<2;i++) for(j=0;j<3;j++) { k++; *p=k;

printf(\ for(t=2;t<*p;t++) {

if(!(*p%t)) { j--; *p--; break; } } *p++; }

p=num[0];

for(i=0;i<2;i++) for(j=0;j<3;j++)

printf((j%3)?\ }

3。程序填空题

(1) 下列程序的功能是在数组中同时查找最大元素下标和最小元素下

标,分别存放在main函数的变量max和min中,请填空

#include \

void find(int *a,int n,int *max,int *min) {

int i;

*max=*min=0; for(i=1;ia[*max]) ________;

else if(a[i]

void main( ) {

int a[]={5,8,7,6,2,7,3},max,min; find(________);

printf(\}。

(2)以下程序调用invert函数按逆序重新放臵a数组中的值,a数组中的值

39