C语言实习报告

时间:2024.4.29

{ *t = d * sl + *t;

改错题

第1题

一、题目要求

下列给定程序中,函数fun的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。

#include <conio.h> #include <stdio.h> int fun(int m) { int i, k ;

for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++) if (i % k != 0) break ; if (k < i) return(i);}} main( ) { int n ;

printf("\nPlease enter n: " ) ; scanf("%d", &n ) ; printf("%d\n", fun(n)) ;}

sl *= 10;} s /= 10; }}

main() { long s, t;

printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t);

printf("The result is: %ld\n", t);}

二、错误分析

①语句t = 0错误

把0赋值给t所在地址,而不是t,应改为: *t=0

②语句if (d%2 == 0)错误

这里判断应为不等于。应改为: if (d%2 != 0)

第3题

一、题目要求

下列给定程序中,函数fun的功能是:

在字符串str中找出ASCII码值最大的字符, 将其放在第一个位置上;

并将该字符前的原字符向后顺序移动。

例如,调用fun函数之前给字符串输入:ABCDeFGH, 调用后字符串中的内容为:eABCDFGH。 #include <stdio.h> fun(char *p)

{ char max,*q; int i=0; max=p[i]; while(p[i]!=0) { if(max<p[i])

{ max=p[i];p=q+i; } i++;} while(q<p){ *q=*(q-1); q--;} p[0]=max;} main()

{ char str[80];

printf("Enter a string;"); gets(str);

printf("\the original string: "); puts(str); fun(str);

printf("\nthe string after moving: "); puts(str); printf("\n\n"); }

二、错误分析

①语句if (i % k != 0)错误

条件不应该是不等于,应该为: if (i % k == 0)

①语句if (k < i) 错误

条件不应该是小于,应该为: if (k = i)

第2题

一、题目要求

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

例如,当s中的数为87653142时,t中的数为7531。

#include <conio.h> #include <stdio.h> void fun (long s, long *t) { int d; long sl=1;t = 0; while ( s > 0) { d = s%10; if (d%2 == 0)

二、错误分析

①语句p=q+i;错误,

应当将ASCII码值最大的字符赋给数组q[],

1

23

程序则是将ASCII码值最大的字符覆盖了,应改为: q=p+I;

②语句q<p错误,

程序是将ASCII码值最大的字符前的原字符向后顺序移动,题目中判定反了,应改为: q>p

二、错误分析

①语句while ( r )错误,

判定的应当是数组中的元素而不是数组,应改为: while ( *r )

②语句while ( *r ){ *a = *r; a++; r++ }错误,

While( )语句中的表达式不能省略间隔符,应改为: while ( *r ){ *a = *r; a++; r++; }

第4题

一、题目要求

下列给定程序中,函数fun的功能是:

将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,

所形成的新串放在w所指的数组中。

在此处,要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为abcdabfab, t1所指子串中的内容为ab, t2所指子串中的内容为99时,

结果,在w所指的数组中的内容应为99cd99f99。

#include <conio.h> #include <stdio.h> #include <string.h>

int fun (char *s, char *t1, char *t2 , char *w) { int i; char *p , *r, *a; strcpy( w, s ); while ( *w )

{ p = w; r = t1; while ( r )

if ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' )

{ a = w; r = t2;

while ( *r ){ *a = *r; a++; r++ }

w += strlen(t2) ; } else w++;}} main()

{char s[100], t1[100], t2[100], w[100];

printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)==strlen(t2) ) { fun( s, t1, t2, w);

printf("\nThe result is : %s\n", w);}

else printf("Error : strlen(t1) != strlen(t2)\n");}

第5题

一、题目要求

下列给定程序中,函数fun的功能是:

将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。

规定输入的字符串最多只能包含5位8进制数字。 例如,若输入77777,则输出将是32767。 #include <stdio.h> int fun(char *p)

{ int n; n=*p-'o';p++; while(*p!=0)

{ 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++)

if(s[i]<'0' || s[i]>'7')

{ printf("error:%c not is ocatal digits!\n\n",s[i]); exit(0);} printf("the original string:"); puts(s); n=fun(s);

printf("\n%s is convered to integer number: %d\n\n",s,n);}

二、错误分析

①语句 n=*p-'o';错误,

n得到的值应为字符串的数字字符减去0得到的值,而不是减去字母o,应该为: n=*p-'0';

②语句n=n*7+*p-'o';错误,

第一个错误和①一样,而八进制是每位乘上8而不是7,应改为: n=n*8+*p-'0';

第6题

2

23

一、题目要求 下列给定程序中,函数fun的功能是:

下列给定程序中函数fun的功能是: 将s所指字符串中的字母转换为按字母序列的后续字母求出在字符串中最后一次出现的子字符串的地址, (但Z转换为A,z转换为a),

通过函数值返回, 其他字符不变。

在主函数中输出从此地址开始的字符串: 下列给定程序中,函数fun的功能是:

若未找到,则函数值为NULL。 将s所指字符串中的字母转换为按字母序列的后续字母例如,当字符串中的内容为abcdabfabcdx, (但Z转换为A,z转换为a),

t中的内容为ab时, 其他字符不变。

#include <stdio.h> 输出结果应是:abcdx。

#include <ctype.h> 当字符串中的内容为abcdabfabcdx,

#include <conio.h> t中的内容为abd时,

void fun(char *s) 则程序输出未找到信息:not be found!。

{ while(*s!='@')

#include <conio.h> { if(*s>='A' && *s<='Z' || *s>='a' && *s<='z') #include <stdio.h> { if(*s=='Z') *s='A';

#include <string.h> else if(*s=='z') *s='a';

else *s+=1;}(*s)++;}}

char * fun (char *s, char *t ) main()

{ char *p , *r, *a; { char s[80];

a = Null;while ( *s ) printf("\n enter a string with length<80. :\n\n");

{ p = s; r = t; gets(s);

while ( *r ) printf("\n the string: \n\n"); puts(s);

if ( r == p ) { r++; p++; } fun(s);

else printf("\nNot found !\n" );} printf("\n\n the cords: \n\n"); puts(s);}

else break; 二、错误分析

if ( *r == '\0' ) a = s; s++; } ①语句while(*s!='@')错误,

return a ;} 该语句应当判定的值针不指向输出符,应改为:main() while(*s!='\0')

{char s[100], t[100], *p; ②语句(*s)++;错误,

printf("\nPlease enter string S :"); scanf("%s", s ); 如果是这样的话,其功能是在字符串中最后一次出现的子 printf("\nPlease enter substring t :"); scanf("%s", t ); 字符串的每一个字符串加1,而不是秋地址,应改为:s++; p = fun( s, t );

if ( p ) printf("\nThe result is : %s\n", p);} 第8题

二、错误分析

①语句a = Null;错误,

空指针的值不是Null,应改为:

a = NULL;

②语句if ( r == p ) { r++; p++; }错误,

该语句主要是判定是否有相同字符串,而不是指针变量,

应改为:

if ( *r == *p ) { r++; p++; }

一、题目要求 下列给定程序中,函数fun的功能是: 将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。 例如,当s所指字符串为ABCD时, 则t所指字符串中的内容应为ABCDDCBA。 #include <conio.h> #include <stdio.h> #include <string.h>

void fun (char s, char t)

{ int i, d;

3 23 第7题 一、题目要求

d = strlen(s);

for (i = 0; i<d; i++) t[i] = s[i];

for (i = 0; i<d; i++) t[d+i] = s[d-1-i];

t[2*d-1] = '\0';} main()

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

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

printf("\nThe result is: %s\n", t);}

②语句s[j]=s[i];错误,

将非小写字母赋给数组s[ ]后,数组应指向下一地址,是直接覆盖由下一字符串所覆盖,应改为: s[j++]=s[i];

第10题

一、题目要求

下列给定程序中,函数fun的功能是: 依次取出字符串中所有数字字符, 形成新的字符串,并取代原字符串。

#include <stdio.h> #include <conio.h> void fun(char *s) { int i,j;

for(i=0,j=0;s[i]!='\0';i++) if(s[i]>='0' && s[i]<='9')

s[j]=s[i]; s[j]="\0";} main()

{ char item[80];

printf("Enter a string :"); gets(item); printf("\n\nThe string is :%s\n",item); fun(item);

printf("\n\nThe string of changing is : %s\n",item); }

二、错误分析

①语句void fun (char s, char t)错误,

在程序中未进行定义,应当先进行指针变量的定义,应改为:

void fun (char *s, char *t) ②语句t[2*d-1] = '\0';错误,

程序是将s所指字符串的正序和反序进行连接,故得到的数组长度应为原数组长度的两倍,应改为:t[2*d] = '\0';

第9题

一、题目要求

下列给定程序中,函数fun的功能是: 从字符串s中删除所有小写字母。 下列给定程序中,函数fun的功能是: 从字符串s中删除所有小写字母。 #include <stdio.h> void fun(char *s) { int i,j;

for(i=j=0;s[i]!='\0';i++) if(s[i]!='c');s[j]=s[i];

s[i]='\0';} main()

{ char s[80];

printf("enter a string: "); gets(s);

printf("the original string: "); puts(s); fun(s);

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

printf("\n\n");}

二、错误分析

①语句s[j]=s[i];错误,

判定该字符为数字字符切赋给数组s[j]后,数组应指向下一地址,是直接覆盖由下一字符串所覆盖,应改为: s[j++]=s[i];

②语句s[j]="\0";错误,

对结束输出符应当用单引号而不是用双引号,应改为: s[j]=‘\0’;

第11题

一、题目要求

下列给定程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。

例如变量a中的值原为8,b中的值原为3。程序运行后a中的值为3,b中的值为8。

#include <conio.h> #include <stdio.h> int fun(int *x,int y) { int t; t=x;x=y; 4

23

二、错误分析

①语句if(s[i]!='c')错误,

程序的功能是只要字符串不是小写字母就赋给数组s[ ],应当改为:

if((s[i]>'z'||s[i]<'a'))

return(y);} main() { int a=3, b=8;

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

printf("%d %d\n",a,b);}

#include <stdio.h>

int fun(unsigned n, int *zero) { int count=0, max=0,t; do { t=n%10; if(t=0) count++; if (max<t) max=t; n=n/10; }while(n); zero=count; return max;} main()

{ unsigned n; int zero,max; printf("\ninput n(unsigned): "); scanf("%d",&n); max=fun(n,&zero);

printf("\nthe result: max=%d zero=%d\n",max,zero);}

二、错误分析

①语句t=x;x=y错误,

未给y赋值且给x赋值也不正确,应改为: t=*x;*x=y;y=t; ②语句a=3, b=8错误

a和b的值输错了。应改为: a=8,b=3

第12题

一、题目要求

下列给定程序中,函数fun的功能是:交换主函数中两个变量的值。

例如:若变量a中的值原为8,b中的值为3,则程序运行后a中的值为3,b中的值为8。 #include <conio.h>

#include <stdio.h> int fun(int x,int y) { int t ; t = x ; x = y ; y=t;} main()

{ int a = 8, b = 3 ;

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

printf("%d %d\n", a, b) ;}

二、错误分析

①语句if(t=0)错误,

=为赋值符号,应改为: If(t==0)

②语句zero=count错误

赋值给zero的地址而不是zero。应改为: *zero=count

第14题

一、题目要求

fun的功能是:求两个形参的乘积和商数,并通过形参返回调用程序。

例:若输入 61.82 和12.65, 输出为:c=782.023000 d=4.886957。

#include <stdio.h> #include <conio.h>

void fun ( double a, b, double x,y ) { x = a * b; y = a / b;} main ( )

{ double a, b, c, d; printf ( "Enter a , b : "); scanf ( "%lf%lf", &a, &b ); fun ( a , b, &c, &d ) ;

printf (" c = %f d = %f\n ", c, d );}

二、错误分析

①语句int fun(int x,int y)错误,

应为void函数且形参错误,应改为: void fun(int *x,int *y) ②语句t = x ; x = y ; y=t错误 应赋值给地址。应改为: t = *x ; *x = *y ; *y=t;

第13题

一、题目要求

下列给定程序中,函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数值返回。

例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。

二、错误分析

①语句void fun ( double a, b, double x,y )错误,

5

23

形参必须分别说明其类型且x,y错误,应改为: void fun(double a,double b,double *x,double *y) ②语句x=a*b;y=a/b;错误

应赋值给x、y的地址。应改为: *x=a*b;*y=a/b; 下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。

例如,若输入8名学生的成绩:80.5 60 72 90.5 98 51.5 88 64,则低于平均分的学生人数为4(平均分为:75.5625)。

#include <conio.h> #include <stdio.h> #define N 20

int fun ( float *s, int n, float *aver ) { float ave, t = 0.0 ; int count = 0, k, i ; for ( k = 0 ; k < n ;) t = s[k] ; ave = t / n ;

for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ;

*aver = &ave ; return count ;} main()

{ float s[30], aver ; int m, i ;

printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ; printf ( "\nPlease enter %d mark :\n ", m ) ; for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ;

printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) ); printf( "Ave = %f\n", aver ) ;}

第15题

一、题目要求

假定整数数列中的数不重复,并存放在数组中。下列

给定程序中,函数fun的功能是:删除数列中值为x的元素。

n中存放的是数列中元素的个数。

#include <stdio.h> #define N 20 fun( int a, int n, int x) { int p=0,i; a[n]=x; while(x!=a[p]) p=p+1; if(p==n) return -1; else

{ for(i=p;i<n;i++)

a[i+1]=a[i]; return n-1; }} main()

{ int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10;

printf("The orogonal data: \n"); for(i=0;i<n;i++) printf("%5d",w[i]);

printf("\ninput x (to delete): "); scanf("%d",&x); printf("delete :%d\n",x); n=fun(w,n,x);

if(n==-1) printf("***not ne found!***\n\n"); else

{ printf("the data after deleted:\n");

for(i=0;i<n;i++) printf("%5d", w[i]); printf("\n\n"); }}

二、错误分析

①语句t = s[k] ;错误,

t应该为累加值,应改为: t=t+s[k];

②语句*aver = &ave ;错误

应将ave的值赋给ave地址的值。应改为: *aver = ave ;

第17题

一、题目要求

下列给定程序的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。

例如,若输入整数2310,则应输出:2、3、5、7、11。

#include "conio.h" #include "stdio.h" IsPrime ( int n ); { int i, m; m = 1;

for ( i = 2; i < n; i++ ) if !( n%i )

二、错误分析

①语句fun( int a, int n, int x)错误, 形参a应为数组形式,应改为: fun( int a[], int n, int x) ②语句a[i+1]=a[i];错误

应该把a[i+1]的值赋给a[i]。应改为: a[i]=a[i+1];

第16题

一、题目要求

6

23

{ m = 0; break ; } return ( m );} main( ) { int j, k;

printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", &k );

printf( "\n\nThe prime factor(s) of %d is( are ):\n", k ); for( j = 2; j <= k; j++ )

if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "%4d,", j ); printf("\n");}

以内最大的10个能被13或17整除的自然数之和。

k的值由主函数传入,若k的值为500,则函数值为4622。

#include <conio.h> #include <stdio.h> int fun( int k ) { int m=0, mc=0, j, n; while ((k >= 2) && (mc < 10)) {if ((k%13 = 0) || (k%17 = 0))

{ m = m+ k; mc++; }k--; } return m; main ( )

{ printf("%d\n", fun (500));}

二、错误分析

①语句IsPrime ( int n );错误 被调函数函数名后不加“;”,应去掉“;” ②语句if !( n%i )错误

条件语句的判断部分应在括号内,应改为:(if !( n%i ))

二、错误分析

①语句if ((k%13 = 0) || (k%17 = 0))错误

把赋值符号=不应出现在这里,应该为if ((k%13 == 0) || (k%17 == 0))

②语句return m;错误

花括号应成对出现,应改为: return m;}

第18题

一、题目要求

下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。 t=1-1/(2*2)-1/(3*3)-...-1/(m*m)

例如,若m中的值为5,则应输出:0.536389。

#include <conio.h> #include <stdio.h> double fun( int m) { double y=1.0; int i; for(i=2;i<m;i++) y-=1/(i*i); return (y);} main() { int n=5;

printf("\n the result is %lf\n",fun(n));}

第20题

一、题目要求

下列给定程序中函数fun的功能是:计算正整数num的各位上的数字之积。

例如,若输入252,则输出应该是20。若输入202,则输出应该是0。

#include <stdio.h> #include <conio.h> long fun (long num) { long k; do

{ k*=num%10 ; num\=10 ; } while(num) ; return (k) ;} main( ) { long n ;

printf("\Please enter a number:") ; scanf("%ld",&n) ; printf("\n%ld\n",fun(n)) ; }

二、错误分析

①语句for(i=2;i<m;i++)错误,

i的取值没有包括最后一项m,应改为: for(i=2;i<=m;i++) ②语句y-=1/(i*i);错误

i是int类型的数据,如果“/”的运算数是整数,结果是取整,造成运行结果出错。应改为:

y=-1.0/(i*i)

第19题

一、题目要求

下列给定程序中,函数fun的功能是:计算并输出k

二、错误分析

①语句long k错误

k没有赋值,应改为: long k=1

7

23

②语句num\=10错误

除号应为/而不为\,应改为: num/=10long k;

填空题

第1题

一、题目要求

给定程序的功能是;调用函数fun将指定源文件中的内容复制到指定的目标文件中,

复制成功时函数返回值是1,失败时返回值为0。 在复制的过程中,把复制的内容输出到终端屏幕。 主函数中源文件名放在变量sfname中, 目标文件名放在变量tfname。 #include <stdio.h>

#include <stdlib.h>

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

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);

while(!feof(___2___)) { putchar( ch );

fputc(ch,___3___); ch=fgetc(fs);} fclose(fs); fclose(ft); printf("\n\n");return 1;} main()

{ char sfname[20] ="myfile1",tfname[20]="myfile2"; FILE *myf; int i; char c; myf=fopen(sfname,"w"); printf("\nThe original data :\n"); for(i=1;

i<30;

i++){

c='A'+rand()%25;fprintf(myf,"%c",c);

printf("%c",c); }

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

if (fun(sfname, tfname)) printf("Succeed!"); else printf("Fail!");}

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

“r”。

② 对源文件进行读操作,直到读到文件结束。第2

个空白处应为: fs 。

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

第2题

一、题目要求

给定程序的功能是计算并输出下列级数的前N项之和SN,

直到SN+1大于q为止,q的值通过形参传入。 SN=2/1+3/2+4/3+...+(N+1)/N

例如,若q的值为50.O,则函数值为50.416687。 #include <stdio.h>

double fun( double q ) { int n; double s; n = 2; s = 2.0; while (s ___1___ q) { s=s+(double)(n+1)/n;

___2___ ;} printf("n=%d\n",n);

___3___ ;}

二、算法分析

本程序功能是求和

(1) 判断s与q的大小所以填<= (2) 对n累加所以为n++

(3) 由于是调用函数有形参所以要有返回值return s

第3题

一、题目要求

给定程序功能是用冒泡法对6个字符串进行排序。 #include <stdio.h>

#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++)

if(strcmp(*(pstr+i),___1___)>0) { p = *(pstr + i) ;

pstr[i] = ___2___ ; *(pstr + j) = ___3___ ;}} }}

二、算法分析

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

二、算法分析

8

23

本程序功能是实现大小顺序排列

(1) 这是比较大小的语言所以应为*(pstr+j) (2) 这是变量替换所以应为pstr[j] (3) 这也是变量替换为p

第4题

一、题目要求

给定程序的功能是删除w数组中下标为k的元素中的值。程序中,调用了getindex、arrout和arrdel三个函数,getindex用以输入所删元素的下标,函数中对输入的下标进行检查,若越界,则要求重新输入,直到正确为止。arrout用以输出数组中的数据,arrdel进行所要求的删除操作。

#include <stdio.h> #define NUM 10 arrout ( int *w, int m ) { int k;

for (k = 0; k < ___1___; k++) printf ("%d ", w[k]); printf ("\n");}

arrdel ( int *w, int n, int k ) { int i;

for ( i = k; i < n-1; i++ ) w[i] = w[i+1]; n--; return ___2___;} getindex( int n ) { int i; ___3___

{ printf("\nEnter the index [ 0<= i< %d ]: ", n ); scanf ("%d",&i );

} while( i < 0 || i > n-1 );return i;} main( )

{ int n, d, a[NUM]={21,22,23,24,25,26,27,28,29,30}; n = NUM;

printf ("Output primary data :\n"); arrout ( a, n ); d = getindex( n ); n = arrdel ( a, n, d );

printf ("Output the data after delete :\n"); arrout( a, n );}

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

又在字符串t中出现的字符形成一个新的字符串放在u中,

u中字符按原字符串中字符顺序排列,但去掉重复字符。 例如,当s="122345",t="2467"时,u中的字符串为:"24"。 #include <stdio.h>

#include <string.h>

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; i<sl; i++) { for (j=0; j<tl; j++) if (s[i] == t[j]) break; if(j<tl)

{ for (k=0; k<ul; k++) if (s[i] ___1___ u[k]) break;

if (k>=ul); u[ul++]=___2___ ;}} ___3___ = '\0';} main()

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

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

printf("The result is: %s\n", u);}

二、算法分析

本程序功能是寻找相同字符并放入另一字符数组中 (1) 判断是否含有相同函数所以为==

(2) 将s数组中的数放入u数组中所以为s[i] (3) 判断u中字符是否全部排查完所以为u[u1]

第6题

1:题目要求

给定程序的功能是从字符串s尾部开始, 按逆序把相邻的两个字符交换位置,

并依次把每个字符紧随其后重复出现一次,放在一个新串t中。

例如:当s中的字符串为:"12345"时, 则t中的字符串应为; "4455223311"。

sl = ___1___;#include <stdio.h> #include <string.h>

void fun (char *s, char *t) { int i, j, sl;

for (i=sl-1, j=0; i>=0; i-=2) { if (i-1 >= 0) t[j++] = s[i-1];

2:算法分析

本函数功能是删除w数组中下标为k的元素中的值。 (1) 限制k的范围所以为m (2) 返回n

(3) 循环结构所以为do

第5题

一、题目要求

9

23

if (i-1 >= 0) t[j++] = s[i-1]; t[j++] = s[i]; t[j++] = s[i]; }___2___;} main()

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

printf("\nPlease enter string s:"); scanf("%s", ___3___); fun(s, t); printf("The result is: %s\n", t);}

(2) 第二个应为fclose(fp) (3) 第三个应为fname

第8题

一、题目要求

给定程序的功能是:根据整型形参n,计算如下公式的值。 A1=1,A2=1/(1+A1),A3=1/(1+A2),...An=1/(1+An-1) 例如,若n=lO,则应输出:0.618056。 #include <stdio.h>

float fun ( int n )

{ float A=___1___ ; int i;

for (i=1; i<= ___2___; i++) A = 1.0/(1+A);

___3___ ;} main( ) { int n ;

printf("\nPlease enter n: ") ; scanf("%d", &n ) ;

printf("A%d=%f\n", n, fun(n) ) ;}

二、算法分析

本函数功能是按逆序把相邻的两个字符交换位置, 并依次把每个字符紧随其后重复出现一次,放在一个新串t中

(1) 将数组长度赋给s1所以为strlen(s) (2) 知道t[j]=0结束循环

(3) 将s中的数字放入存储单元中

第7题

一、 题目要求

给定程序中,函数fun的功能是:

将自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,

然后再顺序读出显示在屏幕上。

#include <math.h> #include <stdio.h> int fun(char *fname )

{ FILE *fp; int i,n; float x; if((fp=fopen(fname, "w"))==NULL) return 0; for(i=1;i<=10;i++)

fprintf(___1___,"%d %f\n",i,sqrt((double)i)); printf("\nSucceed!\n");

___2___;

printf("\nThe data in file :\n");

if((fp=fopen(___3___,"r"))==NULL) return 0;

fscanf(fp,"%d%f",&n,&x); while(!feof(fp))

{ printf("%d %f\n",n,x); fscanf(fp,"%d%f",&n,&x); } fclose(fp);return 1;} main()

{ char fname[]="myfile3.txt"; fun(fname);}

二、算法分析

本函数功能是根据整型形参n,计算如下公式的值。 A1=1,A2=1/(1+A1),A3=1/(1+A2),...An=1/(1+An-1) (1) 对A赋初值1

(2) 判断i与n的大小所以为i<=n (3) 返回函数值所以为return s

第9题

一、题目要求

给定程序的功能是分别统计字符串中大写字母和小写字母的个数。

例如,给字符串ss输入;AaaaBBbl23CCccccd, 则输出结果应为;upper=5,lower=9 #include <stdio.h>

void fun ( char *s, int *a, int *b ) { while ( *s )

{ if ( *s >= 'A' && *s <= 'Z' )

___1___ ;

if ( *s >= 'a' && *s <= 'z' )

___2___ ; s++;}} main( )

{ char s[100]; int upper = 0, lower = 0 ; printf( "\nPlease a string : " ); gets ( s ); fun ( s, & upper, &lower ); 10

23

二、算法分析

本程序完成的功能是读入1—10,十个数并将这十个数和其平方根输入到目标文件并输出到屏幕上. (1) 第一个应为fp

printf( "\n upper = %d lower = %d\n", ___3___ );} float aver = 0.0 ;

for(i = 0 ; i < m ; i++) aver += score[i] ; aver /= (float) m ; for(i = 0 ; i < m ; i++)

if(score[i] < aver) below[j++] = score[i] ; return j ;} main()

{ int i, n, below[9] ;

int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;

n = fun(score, 9, below) ;

printf( "\nBelow the average score are: " ) ; for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;

二、算法分析

本函数功能是统计大小写字母的个数

(1) 统计大写字母的个数所以为(*a)++ (2) 统计小写字母的个数所以为(*b)++ (3) 输出函数值所以为upper lower。

第10题

一、题目要求

给定程序的功能是求出1到1000之内能被7或11整除,但不能同时被7和ll整除的所有整数放在数组a中,

通过n返回这些数的个数。 #include <stdio.h>

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

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

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

{ int aa[1000], n, k ;

fun ( ___3___ ) ; for ( k = 0 ; k < n ; k++ )

if((k + 1) % 10 == 0) printf("\n") ; else printf("%5d", aa[k]) ;}

二、算法分析

本函数功能是计算平均成绩并统计低于平均成绩人数 (1) 将低于平均数的分数放入below中所以为score[i] (2) 函数调用所以为below (3) 输出below中的数

第12题

一、题目要求

给定程序的功能是求出能整除x且不是偶数的各整数,并放在数组pp中,这些除数的个数由n返回。例如,若x的值为30,则有4个数符合要求,它们是1,3,5,15。

#include <stdio.h>

void fun(int x, int pp[], int *n) { int i, j = 0 ;

for(i = 1 ; i <= x ; i +=2 ) if((x % i) == 0) pp[j++] = ___1___ ; *n = ___2___ ;} main()

{ int x, aa[1000], n, i ;

printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ;

fun(x, ___3___ ) ;

for( i = 0 ; i < n ; i++ ) printf("%d ", aa[i]) ; printf("\n") ;}

二、算法分析

本函数功能是:算法分析求出1到1000之内能被7或11整除,但不能同时被7和ll整除的所有整数放在数组a中,通过n返回这些数的个数。 (1) 将i的值赋给数组a

(2) 统计符合要求的个数所以为j (3) 调用形参所以为aa &n

第11题

一、题目要求

给定程序的功能是计算scroe中m个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。例如,当score={10,20,30,40,50,60,70,80,90},m=9时,函数返回的人数应该是4,below={10,20,30,40}。 #include <stdio.h>

#include <string.h>

int fun(int score[], int m, int below[]) { int i, j = 0 ;

二、算法分析

本函数功能是求出能整除x且不是偶数的各整数, 并放在数组pp中,这些除数的个数由n返回。 (1) 将i放入数组中

(2) 统计符合要求的个数 j

第13题

一、题目要求

11

23

己知学生的记录由学号和学习成绩构成,N名学生的数据己存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。

#include <stdio.h> #include <string.h> #define N 10 typedef struct ss

{ char num[10]; int s; } STU; fun(STU a[], STU *s) { ___1___ h; int i ; h = a[0];

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

if ( a[i].s < h.s ) ___2___ = a[i];

*s = ___3___ ;}

main()

{ STUa[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ; int i;

printf("***** The original data *****\n");

for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s); fun ( a, &m );

printf ("***** THE RESULT *****\n"); printf ("The lowest : %s , %d\n",m.num, m.s);}

if ( isupper(ch) ) return ch +'a'-___2___ ; return ___3___;} main()

{ char c1, c2;

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

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

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

printf("c1=%c c2=%c\n", c1, c2);}

二、算法分析

本函数功能是实现大小写字母的转换,和其他字符的输出 (1) 填是小写字母的条件所以为&& (2) 输出大写字母所以为”A” (3) 返回其他数值ch

第15题

一、题目要求

给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

#include <stdio.h> void fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) { aa[i] = ___1___;

m /= ___2___;}for( ; i; i-- ) printf( "%d", ___3___[ i-1 ] );} main() { int b, n;

2;算法分析

本函数功能是找出最小数并存放在数组中 (1) 定义变量 (2) 将值赋给h

(3) 再将h值赋给数组s

第14题

一、题目要求

printf( "\nPlease enter a number and a base:\n" ); 函数fun的功能是进行字母转换。

scanf( "%d %d", &n, &b ); 若形参ch中是小写英文字母,则转换成对应的大写英文

fun( n, b );} 字母,

若ch中是大写英文字母,则转换成对应的小写英文字母; 二、算法分析 若是其它字符则保持不变; 本程序功能是实现十进制与K进制之间的转换 并将转换后的结果作为函数值返回。 ( 1 ) 将求出的余数放入数组中所以为 m%k #include <stdio.h> (2) 将除数再次给m所以为k #include <ctype.h> (3) 将所得数反相输出所以为aa char fun(char ch)

{ if ((ch>='a')___1___(ch<='z')) return ch -'a' + 'A';

第16题

一、题目要求

12

23

给定程序的功能是对指定字符在字符串a中出现的次数进行统计,统计的数据存到b数组中。 其中:字符'z'出现的次数存放到b[O]中, 字符'y'出现的次数存放到b[1]中, 字符'x'出现的次数存放到b[2]中, 字符'w'出现的次数存放到b[3]中, 字符'v'出现的次数存放到b[4]中, 其它字符出现的次数存到b[5]中。

例如,当a中的字符串为:"yyzxxwly+wvp", 调用该函数后。

b中存放数据应是:1、3、2、2、1、3。 #include <stdio.h>

#include <string.h> void fun(char *a, int b[]) { int i;

for (i=0; i<6; i++) b[i] = 0; for (i=0; i< ___1___(a); i++)

if (a[i] >= 'v' ___2___ a[i] <= 'z') b[4 - (a[i] - 'v')]++; ___3___ b[5]++;} main()

{ int i, b[6]; char a[100] = "yyzxxw1y+wvp"; fun(a, b);

printf("The result is: ");

for (i=0; i<6; i++) printf("%d ", b[i]); printf("\n"); }

{ char *p = ___1___ ;

while(*p) { if(*p == 'Z') *p = ___2___ ;

else if(*p == 'z') *p = ___3___ ; else if(isalpha(*p)) *p = (*p) + 1 ; p++ ;}} main( ) { char a[N];

printf ( "Enter a string : " ); gets ( a ); printf ( "The original string is : " ); puts( a ); fun ( a );

printf ( "The string after modified : "); puts ( a ); }

2算法分析

本函数功能是把s串中所有的字母改写成该字母的下一个

字母,字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。 (1) 将指针*s的首地址给*p (2) “A” (3) “a”

第18题

一、题目要求

给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。 #include <stdio.h> #define M 5 #define N 20

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

if(i==0) *n=___2___; if(len>*n) {

___3___; k=i;}}

return(k);} main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int n,k,i;

printf("\nThe original strings are :\n");

13

23

二、算法分析

本函数功能是计算不同字母出现的次数 (1) 小于数组长度所以为strlen (2) 并列条件所以为&& (3) 条件不成立时为else

第17题

一、题目要求

给定程序的功能是把s串中所有的字母改写成该字母的下一个字母,字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。例如s串中原有的字符串为;Mn.123Zxy,则调用该函数后,s串中的内容为:N0.123Ayz。 #include <string.h>

#include <stdio.h> #include <ctype.h> #define N 81 fun ( char *s )

for(i=0;i<M;i++)puts(ss[i]); k=fun(ss,&n);

printf("\nThe length of longest string is : %d\n",n); printf("\nThe longest string is : %s\n",ss[k]); }

给定程序中,函数fun的功能是;统计形参s所指字符串

中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。 输出结果为;4。 #include <stdio.h> void fun(char *s, int *t) { int i, n; n=0;

for(i=0; ___1___ !=NULL; i++) if(s[i]>='0'&&s[i]<= ___2___ ) n++;

___3___ ;}

main()

{ char s[80]="abcdef35adgh3kjsdf7"; int t;

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

printf("\nThe result is : %d\n",t); }

二、算法分析

本函数功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。 (1)[n] (2)len (3)*n=len

第19题

一、题目要求

给定程序中,函数fun的功能是:

在形参s所指字符串中的每个数字字符之后插入一个*号。

例如,形参s所指的字符串为;def35adh3kjsdf7。 执行结果为:def3*5*adh3*kjsdf7*。 #include <stdio.h>

void fun(char *s) { int i, j, n;

for(i=0; s[i]!='\0'; i++)

if(s[i]>='0' ___1___ s[i]<='9') { n=0;

while(s[i+1+n]!= ___2___) n++;

for(j=i+n+1; j>i; j--)

s[j+1]= ___3___; s[j+1]='*';

i=i+1;}} main()

{ char s[80]="ba3a54cd23a";

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

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

二、算法分析

本函数功能是统计字符串中数字出现的次数 (1) 判断s[i]是否是空字符所以为s[i] (2) 找出0—9之间的数字所以为9

(3) 把字符串中数字出现的次数存放在t中所以第

三个空为*t=n

编程题

第1题

一、 题目要求

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

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

S=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n)

例如:若n的值为11时,函数的值为1.833333。 #include <conio.h> #include <stdio.h> #include <string.h> float fun(int n) { } main()

{int n;float s;

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

printf("the result is : %f\n",s);}

14

23

二、算法分析

本函数功能是在数字之后插入* (1) 条件与&&

(2) 判断是否等于0 (3) s[j]

第20题

一、题目要求

二、 算法分析

1、 主要数据结构

Float t;存放前i项正整数的合 Fliat s;存放s+1/t的和 2、 算法描述

① 定义i、s、t。 ② 通过赋值语句把三个变量初始化。 ③ 通过循环语句对目的函数进行运算。

float fun ( float h )

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

四、 程序测试

1、 用四舍五入法精确到小数点后两位;方法:原数乘以

100再加上0.5,然后取整,最后再除以100即可。

三、 实现代码

float fun(int n)

{ int i; float s=1.0, t=1.0; for(i=2;i<=n;i++){ t=t+i; s=s+1/t; } return s;}

第3题

一、 题目要求

请编写一个函数fun,它的功能是:

根据以下公式求∏的值(要求满足精度0.0005, 即 某项小于O.0005时停止迭代):

程序运行后,如果输入精度O.0005,则程序输出为3.14?。

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

double fun ( double eps) { } main( )

{ double x;

printf("Input eps:") ;

scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));}

四、程序调试过程中遇到的问题及方法

1、把公式改写成语句;方法:先把公式s拆成几

个简单的公式,再把这几个简单的公式改写成预计即可。

2、如何返回函数值;方法:用return.

第2题

二、题目要求

请编一个函数float fun(double h),

函数的功能是对变量h中的值保留2位小数,

并对第三位进行四舍五入(规定h中的值为正数)。 例如:若h值为8.32433,则函数返回8.32; 若h值为8.32533,则函数返回8.33。 #include <stdio.h> #include <conio.h> float fun ( float h ) {} main( )

{ float a;

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

printf ( "The result : %f\n", fun ( a ) );}

二、 算法描述

1、 主要数据局结构

Double eps;存放精确度。 Double pi;存放∏的值。 2、 算法描述

① 定义s、n、t、pi。 ② 对四个值进行初始化。 ③ 通过循环语句使精确度达到目的要求。

三、实现代码

double fun ( double eps) { double s;float n, t, pi; t=1; pi=0; n=1.0; s=1.0; while(fabs(s)>=eps){ pi+=s; t=n/(2*n+1);

s*=t; n++;}return pi*2;}

二、算法分析

1、主要数据结构

Int(h*100+0.5)/100.0;存放精确到小数点后两位的数。 2、 算法描述 ① 定义h.

② 四舍五入去小数点后两位。 ③ 输出目的值。

四、程序调试过程中遇到的问题及方法

1、判断精确的是否达到要求;方法:运用循环结构使每次计算得到的精确度与给定的精确度进行比较直到小于给定的精确度。

15

23

三、实现代码

第4题

一、 目的要求

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

求Fibonacci数列中大于t的最小的一个数,结果由函数返回。

其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=l,F(n)=F(n-1)+F(n-2) 例如:当t=1000时,函数值为1597。 #include <conio.h> #include <math.h> #include <stdio.h> int fun( int t) {}

main()

{ int n; n=1000;

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

S=1+x+x*x/2!+x*x*x/3!+...+x*x*x...*x/n!

例如,当n=10,x=O.3时,函数值为1.349859。 #include <conio.h> #include <stdio.h> #include <math.h>

double fun(double x, int n) {double s=1.0, p=1.0; int i,j,t; for(} main()

{ double a,b;

scanf("%f%f\n",&a,&b); printf("%f\n",fun(a,b));}

二、算法分析

1、主要的数据结构

Double p;存放前i项的和。 Double s;存放累加和。 2、算法描述

①定义I,j,t,并对s,p赋予初始值。 ②运用for循环进行公式计算。 ④ 给定数值a、b,输出函数值。

二、 算法分析

1、 主要数据构

int f;存放前两项的和。 int t;存放给定的值。

2、 算法描述

① ② ③ ④

把前两项的和赋值给第三项。

把赋值得到的值和给定的值进行比较。 直到赋值后的值达于给定的值循环结束。 输出最后的值。

三、 实现代码

double fun(double x, int n) { double s=1.0, p=1.0; int i,j,t; for(i=1;i<=n;i++){t=1;} for(j=1;j<=i;j++) t=t*j; p=p*x; s=s+p/t; } return s;}

三、实现代码

int fun( int t)

{ int f1=0, f2=1, f;f=f1+f2; while(f<=t)

{ f1=f2; f2=f;f=f1+f2;} return f;}

四、程序调试过程中遇到的问题及方法

1、如何把公式s改写成语句;方法:运用赋值语句的特点,令t=1;t=t*(j++);p=p*x;s=s+p/t;就能实现公式s的改写。

四、程序调试过程中遇到的问题及方法

1、如何实现依次让相邻两项相加并赋值给第三个数;方法:用赋值语句:f=f1+f2。

第6题

一、题目要求

请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。

例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。

注意:n的值要求大于2但不大于100。 #include <stdio.h> #include <math.h> double fun(int n) { }

16

23

第5题

一、目的要求

请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

main()

{int n; double sum;

printf("\n\ninput n: "); scanf("%d",&n); sum=fun(n);

printf("\n\nsum=%f\n\n",sum);} 二、算法分析

1.在函数中首先定义平均分的变量,并将其初始化置为0.

2.然后再for循环中。求得所有成绩的总分,并在总分的基础上求得平均分。 三、实现代码

.float fun ( float *a , int n ) { float ave=0.0; int i; for(i=0; i<n; i++) ave+=a[i]; return ave/n;}

二、算法分析

1、主要的数据结构

Double s;存放符合要求的素数的平方根的和。 Int j;存放除数。 2、算法描述

①定义s、j、i。

②判断i是否小于n,若是就判断I是否是素数,(若是久进行③,否则重复②)否则就输出s。

③求i的平方根,并加上s再赋值给s.返回②。

四、程序调试过程中遇到的问题及方法

1、如何就平均分;方法:先求总分,再求平均分。

第8题

一、题目要求

下列程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(int a[][N],int m),该函数的功能是: 使数组右上半三角元素中的值乘以m。 例如:若m为本2,a数组中的

1 9 7 2 18 14

a= 2 3 8 则返回主程序后a数组中的值应为 2 6 16

4 5 6 4 5 12

#include "stdio.h" #include "conio.h" #include "stdlib.h" #define N 5

int fun ( int a[][N], int m ) { } main ( )

{ int a[N][N], m, i, j;

printf("***** The array *****\n"); for ( i =0; i<N; i++ ) { for ( j =0; j<N; j++ ) { a[i][j] = rand()%20; printf( "%4d", a[i][j] ); } printf("\n");}

do m = rand()%10 ; while ( m>=3 ); printf("m = %4d\n",m);

17

23

三、实现代码

.double fun(int n) { int i,j;

double s=0.0;

for(i=3; i<=n; i++){ for(j=2;j<=i/2;j++) if(i%j==0) break; if(j>i/2) s+=sqrt(i); } return s; }

四、调试过程中遇到的问题及方法

1、 如何简单快速的判断一个数是否是素数;方法:

只要判断给定的数i是否能被2、3、4、??i/2整除,若能则说明不是素数,否则不是素数。

第7题

一、题目要求

请编写一个函数fun,它的功能是:

计算n门课程的平均分,计算结果作为函数值返回。 例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为71.80。 #include <stdio.h>

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

{ float score[30]={90.5, 72, 80, 61.5, 55}, aver; aver = fun( score, 5 );

printf( "\nAverage score is: %5.2f\n", aver);}

fun ( a ,m );

printf ("THE RESULT\n"); for ( i =0; i<N; i++ )

{ for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] ); printf("\n"); } }

1.首先,设置一个指针变量指向字符串的头位置,并使用循环,依次查找字符串的制定字符。 2.若找到指定字符,则将后面位置的第一个非指定字符移到其后的字符也依次前移。 3.最后将处理的字符串输出。 三、实现代码

int fun( char s[], int c) { char *p=s; int j=0;

while(*p){if(*p!=c) s[j++]=*p; p++;}s[j]=0;}

二、算法分析 1.列循环。

2.行小于列的行循环。 3.右上角的元素称以m。 三、实现代码

int fun ( int a[][N], int m ) { int i,j;

for(j=0; j<N;j++) for(i=0; i<=j; i++)

四、程序调试过程中遇到的问题及方法

1、如何实现二维的循环;方法:运用行小于列的行循环。

四、程序调试过程中遇到的问题及方法

1、如何依次查找字符串的制定字符;方法:把指针变量依次赋值给字符串中的下一位。

第10题

一、题目要求

请编写一个函数,用来删除字符串中的所有空格。 例如,输入asd af aa z67,则输出为asdafaaz67。 #include <conio.h> #include <stdio.h> #include <ctype.h> int fun(char *str) { } main()

{ char str[81]; int n;

printf("input a string:"); gets(str); puts(str); fun(str);

printf("***str:%s\n",str);}

第9题

一、题目要求

编写函数fun,该函数的功能是:从字符串中删除指定的字符。

同一字母的大、小写按不同字符处理。

例如:若程序执行时输入字符串为:turbo c and borland c++ ,

从键盘上输入字符n,

则输出后变为:turbo c ad borlad c++

如果输入的字符在字符串中不存在,则字符串照原样输出。

#include <conio.h> #include <stdio.h> int fun(char s[], int c) { } main()

{ static char str[]="turbo c and borland c++"; char ch;

printf(" the orig str: %s\n",str); printf("enter the char: "); scanf("%c",&ch); fun(str,ch);

printf("str[]=%s\n",str);}

二、算法分析

1.首先,设置一个指针变量指向字符串的头指针,并使用循环,依次字符串的空格。 2.若字符是空格,则将后面位置的第一个非空格字符移动到当前位置,并将其后的字符也依次前移。 三、实现代码

int fun(char *str) { int j=0;

char *p=str; while(*p) {

if(*p!=' ') str[j++]=*p; p++;} str[j]='\0';}

二、算法分析

四、程序调试过程中遇到的问题及方法

18

23

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

第11题

一、题目要求

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

统计一行字符串中单词的个数,作为函数值返回。 一行字符串在主函数中输入,规定所有单词由小写字母组成,

单词之间由若干个空格隔开,一行的开始没有空格。 #include <stdio.h> #include <string.h> #define N 80 int fun(char *s) { } main()

{ char line[N]; int num=0; printf("enter a string:\n"); gets(line);

num=fun(line);

printf("the number of word is : %d\n\n",num);}

#include <conio.h> #include <stdio.h>

unsigned fun ( unsigned w ) {int a[10], pos=0, s=0;

while(w!=0) {a[pos]=w%10;w=w/10;pos++;} for(pos-=2;pos>=0;pos--) s=s*10+a[pos]; return s;} main( )

{ unsigned x;

printf ( "Enter a unsigned integer number: "); scanf("%u",&x);

printf ( "The original data is: %u\n",x); if ( x < 10 ) printf ("Data error !");

else printf ( "The result :%u\n", fun( x ) );}

二、算法分析

1、主要数据、:

int a[10] 存储输入的无符号整数;

int pos, s; pos用于控制运算, s用于输出结果。 2、算法描述:(1):定义并赋值int a[10], pos=0, s=0; (2):执行w!=0,为真,则执行循环体{a[pos]=w%10;w=w/10;pos++;},否则执行语句(3); (3):for(pos-=2;pos>=0;pos--) s=s*10+a[pos]; (4):返回S值。

二、算法分析

1.首先。求得字符串的长度。

2.只要小于字符串的长度,就对字符进行循环判断。

3.单词统计计数器加1。 三、实现代码

int fun(char *s)

{ int start=0; int num=0;char *p=s; while(*p){

if(*p==' ') start=0; else if(start==0){

start=1; num++;} p++; } return num;}

三、实现代码

unsigned fun ( unsigned w ) {int a[10], pos=0, s=0;

while(w!=0) {a[pos]=w%10;w=w/10;pos++;} for(pos-=2;pos>=0;pos--) s=s*10+a[pos]; return s;}

四、程序调试过程中遇到的问题及方法

1、测试结果正确,用到 while和for循环,注条件的判断。

四、程序调试过程中遇到的问题及方法

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

第13题

一、 题目要求

请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777;则输出结果为:6,980*******/ #include <conio.h> #include <stdio.h>

int fun(int *s, int t, int *k) { } main( )

19

23

第12题

一.题目要求

请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。*****/

{int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; fun(a, 10, &k) ;

printf("%d, %d\n", k, a[k]) ;}

二、算法分析

1、主要数据、:int *s, int t, int *k 2、算法描述: (1):定义并赋值max=0, i=0; (2):{if(s[max]<s[i]) max=i; *k=max; i++;} (3):执行i<t,如果为真,就再执行循环体,否则执行后续语句;

2、算法描述: (1):int i=0, t,j=1; (2):执行循环体{ t=w[0]; for(j=1; j<n; j++)

w[j-1]=w[j];w[n-1]=t;i++;} (3):计算i<=p,如果为真,继续执行循环体,否则跳出循环。

三、实现代码

void fun(int *w, int p, int n) {int i=0, t,j=1; do { t=w[0];

for(j=1; j<n; j++)

w[j-1]=w[j];w[n-1]=t;i++;} while(i<=p);}

三、实现代码

int fun(int *s, int t, int *k) {int max=0, i=0; do

{if(s[max]<s[i]) max=i; *k=max; i++;} while(i<t);}

四、程序调试过程中遇到的问题及方法

1、注意do-while循环与for循环的嵌套和各数据之间的关系。

四、程序调试过程中遇到的问题及方法

测试结果正确,注意do-while循环

第14题

一.题目要求

请编写函数fun,该函数的功能是:移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3,移动后,一维数组中的内容应为:5,6,7,8,9,l0,l,2,3,4。******/ #include <stdio.h> #define N 80

void fun(int *w, int p, int n) { } main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15;

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

for(i=0;i<n;i++) printf("%3d",a[i]);

printf("\n\nenter p: ");scanf("%d",&p); fun(a,p,n);

printf("\nthe data after moving:\n"); for(i=0;i<n;i++) printf("%3d",a[i]); printf("\n\n");}

第15题

一、题目要求

请编写一个函数void fun(char *tt,int pp[]),

统计在tt字符串中"a"到"z"26个字母各自出现的次数, 并依次放在pp所指数组中。

例如,当输入字符串abcdefgabcdeabc后, 程序的输出结果应该是:

3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #include <conio.h> #include <stdio.h>

void fun(char *tt, int pp[]) {} main( )

{ char aa[1000] ; int bb[26], k, n ;

printf( "\nPlease enter a char string:" ) ; scanf("%s", aa) ; fun(aa, bb ) ;

for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ; printf( "\n" ) ;}

二、自然语言描述

(1)运用for循环结构和while循环结构进行字母的筛选并记下其个数

三、实现代码

void fun(char *tt, int pp[]) { int i;

for(i=0;i<26;i++)pp[i]=0; while(*tt){

20

23

二、算法分析

1、主要数据、:

{int a[N],用于存放一维数组; int p, int n,用于控制运算。

pp[*tt-'a']++; tt++;}} 200 500 800

300 600 900

#include <conio.h> #include <stdio.h> int fun(int array[3][3]) {} main() { int i,j;

int array[3][3]={{100,200,300},

{400,500,600}, {700,800,900}};

4:程序调试时遇到的问题及解决方法

(1) 字母输入出错,上下不对应,数组使用不灵活

第16题

一、题目要求

请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg, 则调用该函数后,串中的内容为gfedcba。 #include <string.h> #include <conio.h> #include <stdio.h> #define N 81 void fun ( char *s ) {} main( )

{ char a[N];

printf ( "Enter a string : " ); gets ( a ); printf ( "The original string is : " ); puts( a ); fun ( a ); printf("\n");

printf ( "The string after modified : "); puts ( a );}

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

printf("%7d",array[i][j]); printf("\n"); } fun(array);

printf("covered array:\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++)

printf("%7d",array[i][j]); printf("\n");}}

二、自然语言描述

(1)定义整型变量i,j,t;运用双重for循环结构进行替换行列的值

二、自然语言描述

(1)定义整形变量和字母数组运用for循环结构、测试字符长度函数和替换变量进行替换

三、实现代码

int fun(int array[3][3]) {int i,j,t; for(i=0;i<=3;i++) for(j=0;j<i;j++)

{t=array[i][j];array[i][j]=array[j][i]; array[j][i]=t;}}

三、实现代码

void fun ( char *s ) { int i,j;char ch;

for(i=0,j=strlen(s)-1;i<j;i++,j--){ ch=s[i];s[i]=s[j];s[j]=ch;}}

4:程序调试时遇到的问题及解决方法

(2) 常忘记函数结束标志‘}’ (3) 定义变量的类型弄不清楚

四、程序调试时遇到的问题及解决方法

(4) 注意双重for循环结构的使用,返回值类型应与主

函数调用类型一致

第17题

一、题目要求

编写程序实现行行列互换 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900 则程序输出: 100 400 700

第18题

一、题目要求

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

将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

例如,若二维数组中的数据为: W W W W S S S S

21

23

H H H H

则字符串中的内容应是WSHWSHWSH

#include <stdio.h> #define M 3 #define N 4

void fun(char (*s)[N], char *b)

{}

main()

{ int i, x[20], max , index, n = 10; for (i=0;i < n;i++)

{x[i] = rand()%50; printf("%4d", x[i]) ; } printf("\n");

fun( x, n , &max, &index);

printf("Max =%5d , Index =%4d\n",max, index ); }

{}

main() {char

a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; int i,j;

printf("the matrix:\n"); for(i=0;i<M;i++)

{ for(j=0;j<N;j++) printf("%3c",w[i][j]); printf("\n"); } fun(w,a);

printf("the a string:\n"); puts(a); printf("\n\n");}

二、自然语言描述

(1) 定义指针变量

(2) 利用for结构进行判断并将最大值给*max并把i

赋给*d

三、实现代码

void fun(int a[], int n , int *max, int *d ) { int i;*max=a[0];*d=0; for(i=0;i<n;i++) if(a[i]>*max) {*max=a[i];*d=i;}}

二、自然语言描述

(1)定义整型变量i,j,t并运用双重for循环结构进行列的存入

四、程序调试时遇到的问题及解决方法

(1) 注意指针变量的区别,定义时与在函数体中是不

一样的

三、实现代码

#include <stdio.h> #define M 3 #define N 4

void fun(char (*s)[N], char *b) { int i,j,k=0; for(j=0;j<N;j++) for(i=0;i<M;i++) b[k++]=s[i][j];(*n)++;}

第30题

一、题目要求

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

将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,

一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为:

w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}} #include <stdio.h>

void fun(int (*s)[10], int *b,int *n, int mm, int nn)

四、程序调试时遇到的问题及解决方法

1、学会双重for循环结构的运用

第19题

一、题目要求

请编写一个函数fun,它的功能是:

找出一维整型数组元素中最大的值和它所在的下标, 最大的值和它所在的下标通过形参传回。 数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

#include <stdlib.h> #include <stdio.h>

void fun(int a[], int n , int *max, int *d )

{} main()

{ int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j; int a[100]={0},n=0;

printf("the matrix:\n");

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

{ for(j=0;j<4;j++) printf("%3d",w[i][j]); printf("\n"); } fun(w,a,&n,3,4); printf("the A array:\n");

for(i=0;i<n;i++) printf("%3d",a[i]); 22

23

printf("\n\n");}

二、自然语言描述

(1)定义整型变量运用双重for循环结构进行一维数组与二维数组的替换

三、实现代码

#include <stdio.h>

void fun(int (*s)[10], int *b,int *n, int mm, int nn)

{ int i,j;

*n=0;

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

for(j=0;j<nn;j++)

b[(*n)++]=s[i][j];

}

四、程序调试时遇到的问题及解决方法

23 23

更多相关推荐:
汉语言文学 实习报告

实习报告一、实习目的:为了提高我们解决实际问的能力,以便于进入工作岗位后能够成为适应现代社会发展需要的高素质人才,为了巩固汉语言专业的知识,丰富实际工作经验,掌握好语文教学技能,并将所学知识贯穿于实际工作中,特…

汉语言文学专业实习报告

xxx市都安县xxx中学。xxx中学是一所处于城乡结合部的农村寄宿式学校。校园位于地苏乡,校园面积50多亩。学校一切教学设备齐全。现有26个教学班,学生总数为1896人。共有在编教师98人。但教师队伍结构不合理…

汉语言实习报告

一2月19日我在开始了实习教师的生涯两个多月的实习我受益匪浅实习内容主要是语文教学班主任工作此外还有其他的一些工作既然是实习教师语文教学自然是重点我实习的班级初一二班是一个很优秀的班级他们的语文老师也就是我的指...

汉语言文学专业实习报告 政府办公室文员

养马岛管委会实习报告系部名称:文学院专业:汉语言文学年级:20XX班级:1班姓名:***学号:_***实践单位:山东省烟台市养马岛旅游度假区管理委员会实践时间:20XX年8月29日至20XX年9月30日共25天…

汉语言文学实习报告

大学社会实践考核表实践课题汉语言文学实习报告姓名教育层次学号分校专业汉语言文学教学点指导教师日期XX大学学生社会实践考核表教学实习报告实习学校:成安县北阳小学实习时间:20##年7-8月实习班级:三年级一班实习…

汉语言文学实习报告

办公司文员/经理助理实习报告华北科技学院汉语B112谢云飞一、实习目的本次实习主要是为了拓展我们的知识面,扩大与社会的接触面,增加我们在社会竞争中的经验。学校允许我们根据自己所学的知识及兴趣爱好寻找单位实习,进…

汉语言文学专业实习报告

开放教育汉语言文学专业本科实习报告分校工作站层次本科班级汉语言文学姓名学号指导教师实习报告一教学实习20xx年3月10日4月10日我到中学进行了为期一个月的教育教学实习并担任初中八年级三班的班主任听课是实习生上...

大学毕业生汉语言文学专业毕业实习报告

毕业实践报告0910学年度第二学期20xx09考试批次学习中心涡阳奥鹏学生姓名张子鸣学号专业汉语言文学20xx年6月我的毕业实践0809级张子鸣20xx年6月至7月期间我在安徽省涡阳县第二中学校办公室文员岗位实...

汉语言专业社会实践报告

时间地点实践人实践单位XXXXX中学实践内容语文课堂教育教学实践指导教师实践目的通过亲身体验教学实践让自己更进一步了解语文教学工作在实践中增长见识锻炼自己的才干培养自己的韧性巩固学过的知识通过教育教学实践找出自...

汉语言本科实习总结(样本)

重庆广播电视大学开放教育本科汉语言文学专业社会实践实习总结试点单位重庆广播电视大学秀山分校学生姓名熊艳学生学号13教学实习教案45集中实践环节教学实习教学评价表6重庆广播电视大学社会实践教学实习考核表7

汉语言文学20xx级实习计划

文学院汉语言文学20xx级实习计划实习是本科教学的重要环节是每个学生必须完成的学习任务为了组织好教学实习工作提高实习质量现根据培养方案的规定和武汉大学本科学生教学实习管理办法结合我院实际制定本计划一实习目的实习...

汉语言文学社会实践调查实习报告

汉语言文学社会实践调查实习报告作为一个的师范生在毕业以后很大程度上要回生源地就业然而毕业就能就业吗答案是否定的纵观近几年家乡教育师资发展状况就能发现现在的就业形势相当严峻我于20xx年9月1日至10月15日在呼...

汉语言实习报告(42篇)