您的当前位置:首页计算机上机实习报告

计算机上机实习报告

来源:乌哈旅游
 班级: 自本一班 学号: 201028004 姓名: 徐艳

第1题

一、题目要求

/***********found*********/ while(i<3 || *p) { b[k]=*p; k++;p++;i++; } if(*p)

/************found**********/ 函数fun的功能是:用递归算法计算斐波拉契级数数列中第n项的值。从第l项起,斐波拉契级数序列为1、1、2、3、5、8、13、21、„;例如:当给n输入7,该项的斐波拉契级数值为13。 #include long fun(int g)

/*************found************/ { switch(g);

{ case 0:return 0;

/***********found*************/ case 1;case 2: return 1; }

return (fun(g-1)+fun(g-2)); }

main()

{ long fib; int n;

printf(\"input n: \"); scanf(\"%d\ printf(\"n=%d\\n\

fib=fun(n); printf(\"fib=%d\\n\\n\}

二、错误分析

语句swich(g);错误,swich(表达式)后不应该带有“;”,应该为:swich(g)

语句case 1;case 2: return 1;错误,case语句常量后应该是“:”,应该为:case:case:return 1;

第2题

一、题目要求

下列给定程序中,函数fun的功能是:将字符串p中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABC DEF GHI JK。 #include void fun(char *p,char *b) { int i,k=0; while(*p)

/**********found********/ { i=1;

{ b[k]=' '; } }

b[k]='\\0'; } main()

{ char a[80],b[80];

printf(\"enter a string \"); gets(a);

printf(\"the original string: \"); puts(a); fun(a,b);

printf(\"\\nthe string after insert space: \"); puts(b); printf(\"\\n\\n\"); }

二、错误分析

①题目中p是指针型变量作函数参数,因此给b[k]赋值时出现错误。应改为b[k]=*p;

②题目要求赋值3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k再加1。应改为b[k]=\" \";k++

第3题

一、题目要求

下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。 #include #include #define MAXLINE 20 fun ( char *pstr[6]) { int i, j ; char *p ;

for (i = 0 ; i < 5 ; i++ ) { for (j = i + 1; j < 6; j++) { /**************found**************/

if(strcmp(*(pstr + i), (pstr + j)) > 0)

1 班级: 自本一班 学号: 201028004 姓名: 徐艳

{ p = *(pstr + i) ;

/**************found**************/ *(pstr + i) = pstr + j ; *(pstr + j) = p ; } } } }

main( ) { int i ;

char *pstr[6], str[6][MAXLINE] ; clrscr( ) ;

for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;

printf( \"\\nEnter 6 string(1 string at each line): \\n\" ) ;

for(i = 0 ; i < 6 ; i++) scanf(\"%s\ fun(pstr) ;

printf(\"The strings after sorting:\\n\") ;

for(i = 0 ; i < 6 ; i++) printf(\"%s\\n\}

二、错误分析

①根据for语句的格式,各表达式之间应用\";\"割开,应该为for (j = i + 1; j < 6; j++)

②根据用指针表示数组元素的方法,*(pstr+I)表示pstr所指向数组的第I个元素,同理*(pstr+j)表示pstr所指向数组的第j个元素。所以应该为)*(pstr + i) = *(pstr + j) ;

第4题

一、题目要求

下列给定程序中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 #include #include long fun (long num)

/************found************/ { long k; do

{ k*=num%10;

/************found************/ num\\=10; } while(num); return (k);

}

main( ) { long n ; clrscr() ;

printf(\"\\Please enter a number:\");

scanf(\"%ld\

printf(\"\\n%ld\\n\}

二、错误分析

①k用来存放各位数字的积,初始值应为1,应该为long k=1;

②除号应用\"/\"来表示,所以应改为num/=10;

第5题

一、题目要求

下列给定程序中,fun函数的功能是:求出以下分数序列的前n项之和。和值通过函数值返回main()函数。

21,32,53,85,138,2113,... 例如,若n=5,则应输出8.391667。 #include #include

/**************found**************/ fun(n) int n ;

{ int a=2,b=1 ,c,k ; double s=0.0 ;

for(k =1;k<=n;k++ ) { s=s+1.0*a/b ;

/**************found**************/ c=a; a+=b;b+=c; }

return(s) ; }

main( )

{ int n = 5 ; clrscr( ) ;

printf( \"\\nThe value of function

is: %lf\\n\}

二、错误分析

①由语句\"return(s)\"和变量s定义为double数据类型可知,该函数定义时其类型标识符为double类型。所以应该为

2 班级: 自本一班 学号: 201028004 姓名: 徐艳

double fun(int n)

②注意数据类型double的书写格式。所以应该为s=s+(double)a/b;

if(a/***********found***********/ { t=a;b=a;a=t;} r=a%b;

while(r!=0)

{ a=b;b=r;r=a%b;}

/*********found*************/ return(a); 第6题

一、题目要求

下列给定程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3。程序运行后a中的值为3,b中的值为8。 #include #include int fun(int *x,int y) { int t;

/**********found********/ t=x;x=y;

/************found************/ return(y); }

main()

{ int a=3, b=8; clrscr();

printf(\"%d %d\\n\ b=fun(&a,b);

printf(\"%d %d\\n\}

二、错误分析

①变量t作为中间变量,然后进行数据交换,因参数x是指针变量,交换时应使用*x,所以应该为t=*x;*x=y; ②确定返回值,根据代码b=fun(8a,b)可以知道返回值将赋给变量b,而b中应存放交换前**中的值,所以函数应返回变量t,所以应该为return(t);

第7题

一、题目要求

下列给定程序中,函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给numl和num2分别输入49和2l,则输出的最大公约数为7;若给numl和num2分别输入27和81,则输出的最大公约数为27。

#include int fun(int a, int b) { int r,t;

}

main()

{ int num1,num2,a;

printf(\"input num1 num2: \"); scanf(\"%d%d\

printf(\"num1=%d num2=%d\\n\\n\ a=fun(num1,num2);

printf(\"the maximun common divisor is %d\\n\\n\}

二、错误分析

①将a、b的值互换,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b,所以应该为t=a; a=b; b=t;

②当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b,所以应该为return(b);

第8题

一、题目要求

下列给定程序中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。 #include #include

void fun (long s, long *t) { int d; long sl=1;

/************found************/ t = 0;

while ( s > 0) { d = s%10;

/************found************/ if (d%2 == 0)

{ *t = d * sl + *t;

sl *= 10;

3 班级: 自本一班 学号: 201028004 姓名: 徐艳

}

s /= 10; }} main()

{ long s, t; clrscr();

printf(\"\\nPlease enter s:\"); scanf(\"%ld\ if(s[i]<'0'||s[i]>'7') { printf(\"error:%c not is ocatal digits!\\n\\n\

printf(\"the original string:\"); puts(s); n=fun(s); printf(\"\\n%s is convered to integer number: %d\\n\\n\ fun(s, &t);

printf(\"The result is: %ld\\n\}

二、错误分析

①变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t=0;

②变量d表示数s各个位上的数,此处的if条件应为判断d是否为奇数,所以此处应为if (d%2 != 0)

第9题

一、题目要求

下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位8进制数字。例如,若输入77777,则输出将是32767。 #include int fun(char *p) { int n;

/*******found*********/ n=*p-'o'; p++;

while(*p!=0)

/********found********/ { n=n*7+*p-'o'; p++; }

return n; } main()

{ char s[6]; int i; int n;

printf(\"enter a string(ocatal digits):\"); gets(s);

if(strlen(s)>5){

printf(\"error: string too longer!\\n\\n\"); exit(0);} for(i=0;s[i];i++)

}

二、错误分析

①\"0\"和\"1\"是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'的ASCII码,就得到对应的数字。题中给出的是\"o\",不是\"0\",所以此处为n= *P-'0';

②要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数,所以此处为n=n*8+*P-'0';

第10题

一、题目要求

下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 #include #include int fun( int k ) { int m=0,mc=0,j,n;

while((k >=2) && (mc<10)) { /************found************/ if((k%13=0) || (k%17 =0)) { m = m+ k; mc++; } k--; }

return m;

/************found************/ _____ main ( )

{ printf(\"%d\\n\

二、错误分析

①if((k%13=0) || (k%17 =0))目的是判断K能否整除13或17而“=”是赋值号应该改为:if((k%13==0) || (k%17==0)) ②“_____”应该改为“}”

填空题

4 班级: 自本一班 学号: 201028004 姓名: 徐艳

第1题

一、 题目要求

函数fun的功能是:把形参a所指数组中的最小值放

在元素a[0]中,接着把形参a所指数组中的最大值放在a[1]中,再把a所指数组中的次小值放在a[2]中,把a所指数组中的次大值放在a[3];其余依此类推。例如:若a所指数组中的数据最初排列为:9、l、4、2、3、6、 printf(\"\\n\"); }

二、算法分析

本程序完成的功能是找出指定数组中的最小值和最大值依次放入a[0]、a[1]中,再依次找出剩余数中的最小和最大值放入数组,从而得到一个新数组。

①for循环语句循环体中对max和min赋值,第一个空白处应为:“_a[i]_”。

5、8、7,则按规则移动后,数据排列为1、9、2、8、3、7、4、6、5,形参n中存放a所指数组中数据的个数。 #include #define N 9

void fun(int a[], int n)

{ int i,j, max, min, px, pn, t; for (i=0; i/**********found**********/ max = min = ___1___; px = pn = i;

for (j=i+1; j{ max = a[j]; px = j; } /**********found**********/ if (min>___3___)

{ min = a[j]; pn = j; } }

if (pn != i)

{ t = a[i]; a[i] = min; a[pn] = t; if (px == i) px =pn; }

if (px != i+1)

{ t = a[i+1]; a[i+1] = max; a[px] = t; } } }

main()

{ int b[N]={9,1,4,2,3,6,5,8,7}, i; printf(\"\\nThe original data :\\n\");

for (i=0; iprintf(\"\\nThe data after moving :\\n\"); for (i=0; i②通过一次for循环,找到数组中的最大值,第二个空白处应为:“_a[j]_”。

③通过一次for循环,找到数组中的最小值,第三个空白处应为:“_a[j]_”。

第2题

一、题目要求

函数fun的功能是进行数字字符转换。若形参ch中是数字字符‘0’~‘9’,则‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,„„, ‘9’转换成‘0’;若是其它字符则保持不变;并将转换后的结果作为函数值返回。

#include

/**********found**********/ ___1___ fun(char ch) {

/**********found**********/ if (ch>='0' && ___2___) /**********found**********/

return '9'- (ch-___3___); return ch ; }

main()

{ char c1, c2;

printf(\"\\nThe result :\\n\"); c1='2'; c2 = fun(c1);

printf(\"c1=%c c2=%c\\n\ c1='8'; c2 = fun(c1);

printf(\"c1=%c c2=%c\\n\ c1='a'; c2 = fun(c1);

printf(\"c1=%c c2=%c\\n\}

二、算法分析

本程序完成的功能是进行数字字符转换。

①对函数fun()的定义,函数名前是返回值的数据类型,

5 班级: 自本一班 学号: 201028004 姓名: 徐艳

第一个空白处应为:“_char_”。

②判断ch是否是数字字符,第二个空白处应为:“_ch<=‘9’_”。

③进行数字字符的转换,第三个空白处应为:“_‘0’_”。

}

二、算法分析

本函数的功能是求一字符串数组中长度最长的字符

串所在的行下标,并作为函数值返回。

第3题

一、题目要求

给定程序中,函数fun的功能是:求ss所指字符串

数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长 #include #define M 5 #define N 20

int fun(char (*ss)[N], int *n) { int i, k=0, len= N; /**********found**********/ for(i=0; i<___1___; i++) { len=strlen(ss[i]); if(i==0) *n=len;

/**********found**********/ if(len ___2___ *n) { *n=len; k=i; } }

/**********found**********/ return(___3___); }

main() {char

ss[M][N]={\"shanghai\ing\ int n,k,i;

printf(\"\\nThe original strings are :\\n\"); for(i=0;ik=fun(ss,&n);

printf(\"\\nThe length of shortest string is : %d\\n\ printf(\"\\nThe shortest string is : %s\\n\

①ss所指字符串数组中共有M个字符串,所以第一个空白处为:“_M_”。

②求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,这里将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此第二处空白为:“_<_”。

③将最短字符串的行下标作为函数值返回,变量k储存行下标的值,所以第三处空白为:“_k_”。

第4题

一、题目要求

给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 #include void fun(char *s)

{ int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\\0'; i++) if(s[i]>='0' && s[i]<='9') {

/**********found**********/ t2[j]=s[i]; ___1___; }

else t1[k++]=s[i]; t2[j]=0; t1[k]=0;

/**********found**********/ for(i=0; ifor(i=0; i<___3___; i++) s[k+i]=t2[i]; }

main()

{ char s[80]=\"ba3a54j7sd567sdffs\";

printf(\"\\nThe original string is : %s\\n\ fun(s);

printf(\"\\nThe result is : %s\\n\}

6 班级: 自本一班 学号: 201028004 姓名: 徐艳

二、算法分析

本程序的功能是将一数组中所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。 ①根据函数fun中的内容可知,数组t1存储了s中的非数字字符,数组t2存储了s中的数字字符,为了存储下一个数字字符,下标j要进行加1操作,所以第一个空白处应为:“_i++_”。

②将s串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,所以第二个空白处应为:“_s[i]=t1[i]_”。

③最后要将数字字符加到s串之后,并且i要小于数字的个数j,所以第四处空白应为: “_j_”。

第5题

一、题目要求

给定程序的功能是将既在字符串s中出现、又在字符

串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,但去掉重复字符。 例如,当s=“122345”,t=“2467”时,u中的字符串为:“24”。 #include #include

void fun (char *s, char *t, char *u) { int i, j, sl, tl, k, ul=0;

sl = strlen(s); tl = strlen(t); for (i=0; iif (s[i] == t[j]) break; if(j{ for (k=0; kif (s[i] ___1___ u[k]) break; if (k>=ul)

/************found************/ u[ul++]=___2___ ; } }

/************found************/ ___3___ = '\\0'; }

main()

{ char s[100], t[100], u[100];

printf(\"\\nPlease enter string s:\"); scanf(\"%s\

printf(\"\\nPlease enter string t:\"); scanf(\"%s\ fun(s, t, u);

printf(\"The result is: %s\\n\}

二、算法分析

程序的功能是将既在字符串s中出现、又在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,但去掉重复字符。

①重复字符时结束本次循环,去掉重复字符。第一个空白处应为:“_==_”。

②既在字符串s中出现、又在字符串t中出现的字符s[i]赋给u[ul++]第二个空白处应为:“_s[i]_”。

③为u[]添加字符串结束标志。第三个空白处应为:“_u[ul]_”。

第6题

一、题目要求

给定程序中,函数fun的功能是;统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结呆为;4。 #include

void fun(char *s, int *t) { int i, n; n=0;

/**********found**********/

for(i=0; ___1___ !=NULL; i++) /**********found**********/

if(s[i]>='0'&&s[i]<= ___2___ ) n++; /**********found**********/ ___3___ ; }

main()

{ char s[80]=\"abcdef35adgh3kjsdf7\";

int t;

printf(\"\\nThe original string is : %s\\n\ fun(s,&t);

printf(\"\\nThe result is : %d\\n\}

二、算法分析

统计某一形参所指的字符串中数字字符出现的次数。

①通过for循环语句,来判断是否到字符串结尾,变量i

7 班级: 自本一班 学号: 201028004 姓名: 徐艳

用来存放字符串数组下标,则第一个空白处应为: “_s[i]_”。

②根据题目要求此处为判断数字字符,所以第二个空白处应为: “_‘9’_”。

③将数字字符个数存入变量t中,所以第三个空白处应为: 数返回值。

①进行奇偶数的判定,可以通过if条件语句来判断数组元素是否是奇数,如果元素不能被2整除,则为奇数,所以第一个空白处应为: “_if (a[i]%2==1)_”。 ②将为奇数的元素重新存放到数组的前面,同时下标增1, “_*t=n_”。

第7题

一、题目要求

函数fun的功能是;把形参a所指数组中的奇数按原

顺序依次存放到a[O]、a[1]、a[2]、„„中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。

#include #define N 9

int fun(int a[], int n) { int i,j; j = 0;

for (i=0; i/**********found**********/ if (a[i]%2==___1___) {

/**********found**********/ a[j] = a[i]; ___2___; }

/**********found**********/ return ___3___; }

main()

{ int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf(\"\\nThe original data :\\n\");

for (i=0; iprintf(\"\\nThe number of odd : %d \\n\ printf(\"\\nThe odd number :\\n\");

for (i=0; i二、算法分析

本题考查:if语句条件表达式;自增/自减运算符;函

所以第二个空白处应为: “_‘9’_”。 ③函数返回值需要返回数组中奇数的个数,因此返回变量j, 所以第二个空白处应为: “_j_”。

第8题

一、题目要求

函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。 #include

void fun(int a[], int n) { int i,t;

/**********found**********/ for (i=0; i<___1___; i++) {

t=a[i];

/**********found**********/ a[i] = a[n-1-___2___]; /**********found**********/ ___3___ = t; } }

main()

{ int b[9]={1,2,3,4,5,6,7,8,9}, i; printf(\"\\nThe original data :\\n\"); for (i=0; i<9; i++)

printf(\"%4d \ printf(\"\\n\"); fun(b, 9);

printf(\"\\nThe data after invert :\\n\"); for (i=0; i<9; i++)

printf(\"%4d \ printf(\"\\n\"); }

二、算法分析

本题主要考查for循环语句以及变量交换算法。

①逆置数组元素中的值,将a[0]与a[n-1]对换位置,依此

8 班级: 自本一班 学号: 201028004 姓名: 徐艳

类推,那么需要对换n/2次,所以第一个空白处应为: “_n/2_”。

②将a[0]与a[n-1]对换位置,a[1]与a[n-2]对换位置,依次类推,则a[i]=a[n-1-i], 所以第一个空白处应为: c='A'+rand()%25;fprintf(myf,\"%c\

fclose(myf);printf(\"\\n\\n\");

if (fun(sfname, tfname)) printf(\"Succeed!\"); else printf(\"Fail!\"); “_i_”。

③普通的调换位置程序,显然填入a[n-i-1], 所以第一个空白处应为: “_a[n-1-i]_”。

第9题

一、题目要求

给定程序的功能是;调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值是1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。 #include #include

int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/

if((fs=fopen(source, ___1___))==NULL) return 0;

if((ft=fopen(target, \"w\"))==NULL) return 0;

printf(\"\\nThe data in file :\\n\"); ch=fgetc(fs);

/**********found**********/ while(!feof(___2___)) { putchar( ch );

/**********found**********/ fputc(ch,___3___); ch=fgetc(fs); }

fclose(fs); fclose(ft); printf(\"\\n\\n\"); return 1; }

main()

{ char sfname[20] =\"myfile1\ FILE *myf; int i; char c; myf=fopen(sfname,\"w\");

printf(\"\\nThe original data :\\n\"); for(i=1; i<30; i++){

}

二、算法分析

本程序完成的功能是读取源文件内容,将读出的数据写入目标文件中。

①源文件应该以读方式打开。第1个空白处应为: “_r_”。

②对源文件进行读操作,直到读到文件结束。第2个空白处应为:“_fs_”。

③调用fputc函数,将一个字符写入目标文件。第3的空白处应为:“_ft_”。

第10题

一、题目要求

给定程序的功能是:从键盘输入若干行文件(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。

#include #include #include

void WriteText(FILE *); void ReadText(FILE *); main()

{ FILE *fp;

if((fp=fopen(\"myfile4.txt\ { printf(\" open fail!!\\n\"); exit(0); } WriteText(fp); fclose(fp);

if((fp=fopen(\"myfile4.txt\ { printf(\" open fail!!\\n\"); exit(0); } ReadText(fp); fclose(fp); }

/**********found**********/ void WriteText(FILE ___1___) { char str[81];

printf(\"\\nEnter string with -1 to end :\\n\"); gets(str);

9 班级: 自本一班 学号: 201028004 姓名: 徐艳

while(strcmp(str,\"-1\")!=0) { /**********found**********/

fputs(___2___,fw); fputs(\"\\n\ gets(str); } }

void ReadText(FILE *fr) { char str[81];

printf(\"\\nRead file and output to screen :\\n\"); fgets(str,81,fr); while( !feof(fr) ) {

/**********found**********/ printf(\"%s\ fgets(str,81,fr); } }

二、算法分析

程序的功能是:从键盘输入若干行文件(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上 ①󰀀 义一个文件指针fw第一个空白处应为:“_*fw_”。 ②将str[81]字符串输入到fw所指文件中 第二个空白处应为:“_str_”。

③将字符串输出第三个空白处应为:“_str_”。

编程题

第1题

一、题目要求

某学生的记录由学号、8门课程成绩和平均分组成,

学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。例如,若学生的成绩是85.5,76,69.5,85,9l,72,64.5,87.5,则他的平均分应当是78.875。 #include #define N 8 typedef struct { char num[10]; double s[N]; double ave; }STREC; void fun()

{ } main()

{STRECs={\"GA005\ int i; fun(&s);

printf(\"the %s's student data:\\n\ for(i=0;iprintf(\"%4.1f\\n\ printf(\"\\nave=%7.3f\\n\} }

二、算法分析

1. 主要数据结构

char num[10];用于存放学号

double s[N];用于存放8门课程成绩

2. 算法描述

①遍历s[]数组,计算总分。 ②计算平均分。

③遍历s.s[]数组,输出学生的学号、8门课程成绩和平均分。

三、实现代码

void fun(STREC *a)

{double ave=0.0; int i;

for(i=0;i(a*).ave=(a*).ave+(a*).s[i]; (a*).ave/=N; }

四、程序测试

程序测试结果正确,需要注意的是需要定义一个指针类型的形参STREC*a。

第2题

一、题目要求

请编写函数fun,它的功能是:求出l到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。 #include #include

void fun (int *a, int *n) { } main()

{int aa[1000],n,k;

10 班级: 自本一班 学号: 201028004 姓名: 徐艳

clrscr(); fun(aa,&n);

for(k=0;kif((k+1)%10==0) printf(\"\\n\"); else printf(\"%5d\}

二、算法分析

1. 主要数据结构

int aa[1000];用于盛放1-1000之间的整数

int *n;用于盛放符合要求的数字个数并作为返回值返回

2. 算法描述

①遍历数组aa[1000],找出符合要求的数值。

②将符合要求的数值放入新数组a[]中,将数字个数放入*n中,并返回。

③输出新数组和数值个数。

三、实现代码

{int i,j=0;

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

if((i%7==0||i%11==0)&&i%77!=0) a[j++]=i; *n=j; }

四、程序测试

程序测试结果正确,需要注意的是充分理解\"逻辑与\"和\"逻辑或\"的区别。

第3题

一、题目要求

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用c语言提供的字符串函数。例如,若字符串中的内容为料:****A*BC*DEF*******,删除后,字符串中的内容则应当是ABCDEFG。 #include #include void fun(char *a) { } main()

{ char s[81];

printf(\"enter a string:\\n\"); gets(s); fun(s);

printf(\"the string after deleted:\\n\"); puts(s); }

二、算法分析

1. 主要数据结构

char s[81];用于盛放一个字符串

2. 算法描述

①遍历数组a[i]。

②将不是‘*’的字符放入新数组中,并在新数组结尾加上字符串结束标识′\\0′。

三、实现代码

void fun( char *a ) {int i,j=0;

for(i=0;a[i]!='/0';i++) if(a[i]!='*') a[j++]=a[i]; a[j]='/0'; }

四、程序测试

程序测试结果正确,需要注意的是要删除字符串中所有*号需要用循环语句遍历字符串,用判断语句判断字符是否为*号,由此可以决定该程序应使用循环判断结构。

第4题

一、题目要求

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat), 即把p2所指的字符串连接到pl所指的字符串后。例如,分别输入下面两个字符串:

FirstString— SecondString

则程序输出: FirstString--SecondString #include #include

void fun(char p1[], char p2[]) {} main()

{ char s1[80], s2[40] ; clrscr() ;

printf(\"Enter s1 and s2:\\n\") ; scanf(\"%s%s\ printf(\"s1=%s\\n\ printf(\"s2=%s\\n\

printf(\"Invoke fun(s1,s2):\\n\") ; fun(s1, s2) ;

printf(\"After invoking:\\n\") ;

11 班级: 自本一班 学号: 201028004 姓名: 徐艳

printf(\"%s\\n\ }

二、算法分析

1. 主要数据结构

char s1[80], s2[40] ;分别用来盛放两个字符串

2. 算法描述

①输入两个字符串数组。

②求出第1个字符串的长度,即将i指到第1个字符串的末尾。

③将第2个字符串的字符连到第1个字符串的末尾,并最后在第1个字符串的结尾加上字符串结束标识′\\0′。

三、实现代码

void fun(char p1[], char p2[]) {

int i,j;

for(i=0;p1[i]!='\\0';i++) ; for(j=0;p2[j]!='\\0';j++) p1[i++]=p2[j]; p1[i]='\\0'; }

四、程序测试

程序测试结果正确,需要注意的是不使用字符串函数实现字符串连接操作。通过for循环语句来完成,不要忘了最后需要加上字符串结束标识'\\0'。

第5题

一、题目要求

编写函数fun,函数的功能是:

根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

S=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n) 例如:若n的值为11时,函数的值为1.833333。 #include #include #include float fun(int n) { } main()

{int n;float s;

printf(\"\\nplease enter N:\"); scanf(\"%d\ s=fun(n);

printf(\"the result is : %f\\n\}

二、算法分析

1. 主要数据结构

i 为循环次数,循环至n结束 z 为分母

2. 算法描述

① 借助循环结构按规律求每项分母z ② 进行累加s=s+1.0/z ③ 函数返回值为s

三、实现代码

float fun(int n) {float s=0; int z,i,j; z=0;

for(i=1;i<=n;i++) {z=z+i; s+=1.0/z;} return s; }

四、程序测试

程序测试结果正确,需要注意的是函数返回的表达式的类型应该与函数类型一致。

第6题

一、题目要求

请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。

#include #include float fun ( float h ) {} main( ) { float a;

printf (\"Enter a: \"); scanf ( \"%f\ printf ( \"The original data is : \" ); printf ( \"%f \\n\\n\

printf ( \"The result : %f\\n\ }

二、算法分析 1.主要数据结构

h存放从键盘输入值

2.算法描述

12 班级: 自本一班 学号: 201028004 姓名: 徐艳

① 对输入的值乘以100再加上0.5后进行强制转换为整数以实现“四舍五入”

② 转换完之后的值除以100.0再回到之前的大小

三、实现代码

float fun ( float h )

{ return (int)(h*100+0.5)/100.0;}

四、程序测试

程序测试结果正确。

第7题

一、题目要求

请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当n:10,x=O.3时,函数值为1.349859。S=1+x+x*x/2!+x*x*x/3!+...+x*x*...*x/n! #include #include #include

double fun(double x, int n) { }

main()

{printf(\"%f\\n\

二、算法分析 1、主要数据结构

double x;存放所输入的x的值 int n;存放所输入的n的值

2、算法描述

①利用求得s中各项的值; ②遍历for循环求得s的值; ③返回s的值。

三、实现代码

double fun(double x, int n) {int i;

double s,t; s=1,t=1;

for(i=1;i<=n;i++) {t*=(x/i); s+=t;} return s; }

四、程序测试

程序测试结果正确,注意t和s的类型。

第8题

一、题目要求

请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。

#include #include #define M 3 #define N 4

void fun ( int tt[M][N], int pp[N] ) {}

main( )

{ int t [ M ][ N ]={{22,45, 56,30}, {19,33, 45,38}, {20,22, 66,40}}; int p [ N ], i, j, k;

printf ( \"The original data is : \\n\" ); for( i=0; iprintf ( \"%6d\ printf(\"\\n\"); }

fun ( t, p );

printf( \"\\nThe result is:\\n\" );

for ( k = 0; k < N; k++ ) printf ( \" %4d \p[ k ] );

printf(\"\\n\"); }

二、算法分析 1.主要数据结构

int t[M][N]存放M*N个元素

int p[N] 存放t[M][N]二维数组每列中最小元

2.算法描述

①依此输出t[M][N]中的元素

②求出t[M][N]二维数组每列中最小元素,并依次放入p[N]所指一维数组中。 ③输出p[N]中的值

三、实现代码

void fun ( int tt[M][N], int pp[N] ) { int i,j,max; for(j=0;jfor(i=0;i13 班级: 自本一班 学号: 201028004 姓名: 徐艳

max=maxpp[j]=max; } }

四、程序测试

程序测试结果正确,需要注意的是函数返回的表达式的类型应该与函数类型一致 第9题

一、题目要求

编写fun(int *a, int n, int *odd, int *even),其功能是分别求出数组中所有奇数之和所有偶数之和。形参n给出数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依此为:1,9,2,3,11,6。则指针odd返回奇数之和24;指针even返回偶数之和8。

#include #include #define N 20

fun ( int *a, int n, int *odd, int *even ) {}

main( )

{ int a[N]={1,9,2,3,11,6}, i, n=6, odd, even; printf ( \"The original data is : \\n\" ); for ( i = 0; i < n; i ++ ) printf ( \"%5d\*(a+i) );

printf(\"\\n\\n\");

fun ( a, n, &odd, &even );

printf ( \"The sum of odd numbers: %d\\n\odd );

printf ( \"The sum of even numbers: %d\\n\even ); }

二、算法分析 1.主要数据结构

int a[N]存放N数值

2.算法描述

①依次输出a[N]中的值。

②分别计算a[N]中奇数的和及偶数的和并分别放在odd和even中。

③输出odd和even的数值

三、实现代码

fun ( int *a, int n, int *odd, int *even )

{ int i;*odd=0;*even=0; for(i=0;iif(a[i]%2)*odd=*odd+a[i]; else*even=*even+a[i]; }

四、程序测试

程序测试结果正确,需要注意的是函数返回的表达式的类型应该与函数类型一致。

第10题

一、题目要求

请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。

#include #define N 80

int fun(int a[], int n) { } main() {int

a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;

printf(\"the original data:\\n\");

for(i=0;iprintf(\"\\n\\nthe data after deleted:\\n\"); for(i=0;i二、算法分析 1.主要数据结构

int a[N] 存放一维数组中所有的数。 int n 记录输入数据的总个数。

2.算法描述

① 定义p指针指向数组a的首地址。 ② 遍历数组a相同数据删。

③ 返回累加值n是删除后数组中数据的个数。

三、实现代码

int fun(int a[], int n) {int i, t, j=0, *p=a;

14 班级: 自本一班 学号: 201028004 姓名: 徐艳

t=p[0];

for(i=0;ia[j++]=t; t=p[i]; }

if(i>=n) a[j]=t; return ++j; }

四.程序测试

程序测试结果正确,需要注意的是函数返回的表达式的类型应该与函数类型一致。

15

因篇幅问题不能全部显示,请点此查看更多更全内容