第一篇:期末C语言课程总结报告
《期末C语言课程总结报告》
报告人情况:
班级:自控1102姓名:赵铎学号:2011010807理论课老师姓名:李文杰实验课老师姓名:张红霞
学习到了以下内容:1、2、3、4、5、6、7、8、9、掌握C语言中,基本的输入输出函数的使用方法。掌握printf中转义字符’t’,’n’的用法。掌握赋值语句的用法。掌握算术表达式、赋值表达式的计算。掌握数学函数的使用。掌握关系运算及其表达式。掌握逻辑运算及其表达式。掌握条件运算符。掌握if语句。
10、掌握switch语句。
11、掌握for,while语句的使用方法。
12、掌握直到型循环do-while的用法。
13、掌握break,continue的用法。
14、掌握函数的分类。
15、掌握自定义函数的方法。
16、掌握自定义函数的调用用法。
17、掌握函数参数的传递。
18、掌握全局变量,局部变量,静态变量的使用。
19、掌握数组的定义。
20、掌握数组的引用,使用方法。
21、掌握字符串的储存与操作。
22、掌握字符串作为特殊的一维数组。
23、更加娴熟使用数组解决问题。
24、掌握二维数组的使用方法。
25、更加熟悉字符串解决问题的方法。
26、增强了数组中排列顺序的逻辑关系。
27、掌握指针的概念。
28、掌握指针定义,赋值,引用的方法。
29、掌握指针访问一维数组的方法。
30、掌握指针作为参数的使用。
31、掌握指向数组的指针作为函数参数。
掌握了以下:
1、掌握C语言中,基本的输入输出函数的使用方法。
2、掌握printf中转义字符’t’,’n’的用法。
3、掌握赋值语句的用法。
4、掌握算术表达式、赋值表达式的计算。
5、掌握数学函数的使用。
6、掌握关系运算及其表达式。
7、掌握逻辑运算及其表达式。
8、掌握条件运算符。
9、掌握if语句。
10、掌握switch语句。
11、掌握for,while语句的使用方法。
12、掌握直到型循环do-while的用法。
13、掌握指针的概念。
14、掌握指针定义,赋值,引用的方法。
15、掌握指针访问一维数组的方法。
自己的经验
学习C语言绝不是听懂就可以的,而是必须自己动手去实践,从自己的实践中找到不足和缺点,及时发现和改正能使自己记得更加牢固,使以后编写程序更加流畅和严谨!
对老师的意见
老师讲课很清晰,很容易懂,让我更好地理解了C语言这门课程,帮助我在今后的工作学习中打好了基础,也更好地理解了计算机的程序的来源,能自己设计出自己想的程序,能使自己以后更好地生活!
第二篇:期末C语言课程总结报告
《期末C语言课程总结报告》
报告人情况:
班级: 姓名: 学号:
理论课老师姓名: 实验课老师姓名:
以下写的内容要求如下:通过程序设计课的学习,本人所学到的有关程序设计的知识回顾,学习了哪些算法,认为已经掌握的算法(不需要看书就能编)和完全没掌握的算法;在学习程序设计语言的过程中自己的经验和教训;对老师讲课和指导过程中教学态度和教学方法的看法和意见(要实事求是,意见决不会作为分数高低的依据,分别对理论课老师和实验课老师评价),对老师在今后教学的建议;对下一届同学学习本课程的建议等等。此报告在平时成绩考核时作为主要参考。
C语言课成绩评定办法:实验(实验报告20%+实验表现5%)25%+(平时作业及表现10%+总结报告5%)15%+期末考试60%
第三篇:C语言期末总结
结构体
例10.4 指向结构体数组的指针的应用
#include
printf(″No.Name
sex
agen″);
for(p=stu;p<stu+3;p++)
printf(″%5d %-20s %2c %4dn″,p->num,p->name,p->sex,p->age);
} 运行结果:
No.Name
sex
age
10101
LiLin
M
1010Zhang Fun M
10104
WangMing F
例10.5 有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求在main函数中赋予值,在另一函数print中将它们输出。今用结构体变量作函数参数。#include
char name[20];
float score[3];};
#include
char name[20];
float score[3];};
void main(){ void print(struct student);
struct student stu;
stu.num=12345;
strcpy(stu.name,″LiLin″);
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;
print(stu);} void print(struct student stu){ printf(FORMAT,stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);
printf(″n″);} 运行结果: 12345 Li Li 67.500000 89.000000 78.599998 例10.6 将上题改用指向结构体变量的指针作参数。#include
char name[20];
float score[3];}stu={12345, ″LiLi″,67.5,89,78.6};void main(){ void print(struct student *);
print(&stu);}
void print(struct student *p){ printf(FORMAT,p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf(″\n″); } 运行结果: 12345 Li Li 67.500000 89.000000 78.599998 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程总成绩、平均分数)。 10.1:# include
struct student
{ char num[6];
char name[8];
int score[3];
float avr;
}stu[10];
main()
{ int i,j,max=0,maxi=0,sum=0;
float average=0;
for(i=0;i<10;i++)
{ scanf(“%s%s”,stu[i].num,stu[i].name);
for(j=0;j<3;j++)
scanf(“%d”,&stu[i].score[j]);
}
for(i=0;i<10;i++)
{ sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max){ max=sum;maxi=i;}
}
average/=10;
printf(“average=%6.2fn”,average);
printf(“The highest is:%s,%s,%d,%f”,stu[maxi].num,stu[maxi].name,max,stu[maxi].avr); }
指针
例9.4 输入a、b、c3个整数,按大小顺序输出。#include
{void exchange(int *q1,int *q2,int *q3);int a,b,c,*p1,*p2,*p3;
scanf(″%d,%d,%d″,&a, &b, &c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf(″%d,%d,%d\n″,a,b,c);
}
void exchange(int *q1,int *q2,int *q3){ void swap(int *pt1,int *pt2);
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
void swap(int *pt1,int *pt2)
{int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
score 3
}
运行情况如下:
9,0,10↙ 10,9,0
例9.10:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。#include
{ void average(float *p,int n);
void search(float(*p)[4],int n);
float score[3][4]={{65,67,70,60},average(*score,12); /*求12个分数的平均分*/
search(score,2);
/*求序号为2的学生的成绩*/ }
void average(float *p,int n){ float*p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf(″average=%5.2f\n″,aver); }
void search(float(*p)[4],int n)
/ * p是指向具有4个元素的一维数组的指针 */ {int i;
printf(″the score of No.%d are:n″,n);
for(i=0;i<4;i++)
printf(″%5.2f″,*(*(p+n)+i));}
程序运行结果如下: average=82.25
The score of No.2 are:
90.00 99.00 100.00 98.00
例9.11: 在上题基础上,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
#include
{void search(float(*p)[4],int n);
float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
{80,87,90,81},{90,99,100,98}};
search(score,3);
}
void search(float(*p)[4],int n){int i,j,flag;
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)flag=1;
if(flag==1)
{ printf(“No.%d fails,his scores are: \n”,j+1);
for(i=0;i<4;i++)
printf(″%5.1f″,*(*(p+j)+i));
printf(″\n″);
}
}
}
程序运行结果如下:
No.1 fails, his scores are:
65.0
57.0
70.0
60.0 No.2 fails, his scores are:
58.0 87.0 90.0 81.0 例9.17:求a和b中的最大者。#include
{int max(int,int);int a,b,c;
scanf(″%d,%d″,&a,&b);
c=max(a,b);printf(″a=%d,b=%d,max=%dn″,a,b,c);
}
int max(int x,int y){ int z;
if(x>y)z=x;
else
z=y;
return(z);
}
例9.18:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
#include
{float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float *search(float(*pointer)[4],int n);
float*p;
int i,m;
printf(″enter the number of student:″);
scanf(″%d″,&m);
printf(″The scores of No.%d are:n″,m); p=search(score,m);
for(i=0;i<4;i++)printf(″%5.2ft″,*(p+i));
}
float *search(float(*pointer)[4],int n){ float *pt;
pt=*(pointer+n);
return(pt);
}
运行情况如下:
enter the number of student:1↙ The scores of No.1 are:
56.00
89.00
67.00
88.00 例9.19: 对上例中的学生,找出其中有不及格课程的学生及其学生号。#include
{ float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float search(float(*pointer)[4]);
float*p;
int i,j;
for(i=0;i<3;i++)
{p=search(score+i);
if(p==*(score+i))
{ printf(″No.%d scores:″,i);
for(j=0;j<4;j++)
printf(″%5.2f″,*(p+j));
printf(″n″);}
}
}
float *search(float(*pointer)[4]){ int i;
float *pt;
pt=*(pointer+1);
for(i=0;i<4;i++)
if(*(*pointer+i)<60)pt=*pointer;
return(pt);
} 运行情况如下:
No.1 scores:56.00 89.00 67.00 88.00
No.2 scores:34.00 78.00 90.00 66.00
例9.20:将若干字符串按字母顺序(由小到大)输出。#include
{void sort(char *name[ ],int n);
void print(char *name[ ],int n);
char *name[ ]={“Follow me”,“BASIC”,“Great Wall″,”FORTRAN“,”Computer design“};int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[ ],int n){char *temp;
int i,j,k;
for(i=0;i<n-1;i++){k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)k=j;
if(k!=i)
{ temp=name[i];
name[i]=name[k];
name[k]=temp;}
}
}
void print(char *name[ ],int n){ int i;
for(i=0;i<n;i++)
printf(″%sn″,name[i]);
} 运行结果为: BASIC Computer design FORTRAN Follow me Great Wall 作业:(提交上机报告)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。# include
{ void input(int number[10]);
void max_min_value(int array[10]);
void output(int array[10]);
int number[10];input(number);max_min_value(number);output(number);
} void input(int number[10])
{ int i;
for(i=0;i<=9;i++)
scanf(“%d”,&number[i]);} void max_min_value(int array[10])
{ int *max,*min,*p,*array_end;
array_end=array+10;
max=min=array;
for(p=array+1;p if(*p>*max)max=p; else if(*p<*min)min=p; *p=array[0];array[0]=*min;*min=*p; *p=array[9];array[9]=*max;*max=*p; } void output(int array[10]) { int *p; for(p=array;p<=array+9;p++) printf(“%4d”,*p); } 数组和函数的组合 例8.12 有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。#include /*全局变量*/ void main() {float average(float array[ ],int n); float ave,score[10]; int i; for(i=0;i<10;i++) scanf(″%f″,&score[i]); ave= average(score,10); printf(″max=%6.2f\nmin=%6.2f\n average=%6.2f\n″,Max,Min,ave); } float average(float array[ ],int n) /*定义函数,形参为数组*/ { int i; float aver,sum=array[0]; Max=Min=array[0]; for(i=1;i<n;i++) {if(array[i]>Max)Max=array[i]; else if(array[i] sum=sum+array[i]; } aver=sum/n; return(aver); } 例8.18 有一个含若干字符的字符串,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。file1.c(文件1)#include { extern void enter_string(char str[]); extern void detele_string(char str[],char ch); extern void print_string(char str[]); char c; char str[80];enter_string(str); scanf(”%c“,&c); detele_string(str,c); print_string(str); } file2.c(文件2)#include gets(str);} file3.c(文件3) void delete_string(char str[],char ch){ int i,j; for(i=j=0;str[i]!=' ';i++) if(str[i]!=ch) str[j++]=str[i]; str[i]=' ';} file4.c(文件4)#include printf(”%sn",str);} 运行情况如下: abcdefgc↙ (输入str) c↙ (输入要删去的字符)abdefg (输出已删去指定字符的字符串) 8.1:判断m是否是素数。(用函数实现)#include { int f(int m); int m,n; scanf(“%d”,&m); n=f(m); if(n)printf(“%d is a prime numbern”,m); else printf(“%d is not a prime numbern”,m); } int f(int m) { int i,k,p; k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1)p=1; else p=0; return p; } 8.2:用起泡法对10个数排序。(用函数实现) #include { void sort(int array[],int n); int a[10],i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); sort(a,10); for(i=0;i<10;i++) printf(“%4d”,a[i]);} void sort(int array[],int n) { int i,j,t; for(i=0;i for(j=0;j<9-i;j++) if(a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} } 8.3:用选择法对10个数排序。(用函数实现)#include { void sort(int array[],int n); int a[10],i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); sort(a,10); for(i=0;i<10;i++) printf(“%4d”,a[i]);} void sort(int array[],int n) { int i,j,k,t; for(i=0;i { k=i; for(j=i+1;j if(array[j] t=array[k];array[k]=array[i];array[i]=t; } } 谁能出线 电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。 1.#include 求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制) 1.#include 9.i=i+1;10.} 11.cnt=0; 12.for(i=0;i 14.j=2; 15.while(a[i]%j!=0)16.{ 17.j++;18.} 19.if(j==a[i])20.{ 21.printf(“%4d”,j);22.cnt=cnt+1;23.} 24.25.}printf(“n”);26.printf(“%d”,cnt);27.printf(“n”);28.return 0;29.} 1.#include 4.int a[10],i,j,n;5.for(i=0;i<10;i++)6.{ 7.scanf(“%d”,&a[i]);8.} 9.for(j=0;j<10;j++)10.{ 11.12.for(i=0;i<9;i++)13.{ 14.if(a[i+1] 16.n=a[i+1];17.a[i+1]=a[i];18.a[i]=n;19.} 20.} 21.} 22.23.for(i=0;i<10;i++)24.{ 25.printf(“ %d”,a[i]); 冒泡法排序26.} 27.printf(“n”);28.return 0;29.} 插入法排序 1.#include 1.#include 7.do 8.{ 9.a[i]=n%10;10.n=n/10;11.i++;12.k++; 13.}while(n!=0); 14.for(j=0;j 16.for(i=0;i 18.if(a[i+1]>a[i])19.{ 20.m=a[i+1];21.a[i+1]=a[i];22.a[i]=m;23.} 24.} 25.} 26.for(i=0;i 28.printf(“%d”,a[i]);29.} 30.printf(“n”);31.return 0;32.} 数组逆序输出 1.#include 4.int a[10],i,j,t;5.for(i=0;i<10;i++)6.{ 7.scanf(“%d”,&a[i]);8.} 9.i=0;10.j=9; 11.while(i 13.t=a[i];14.a[i]=a[j];15.a[j]=t;16.i++;17.j--;18.} 19.for(i=0;i<10;i++)20.{ 21.printf(“%d ”,a[i]);22.} 23.printf(“n”);24.return 0;25.} 求最大值 1.#include 程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。例如: 数组中的值为 假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d) 1.#include 4.int a[4][4],i,j,n;5.for(i=0;i<4;i++)6.{ 7.for(j=0;j<4;j++)8.{ 9.scanf(“%d”,&a[i][j]);10.} 11.} 12.scanf(“%d”,&n);13.for(i=0;i<4;i++)14.{ 15.for(j=0;j<=i;j++)16.{ 17.a[i][j]=n*(a[i][j]);18.} 19.} 20.for(i=0;i<4;i++)21.{ 22.for(j=0;j<4;j++)23.{ 24.printf(“%4d”,a[i][j]);25.} 26.printf(“n”);27.} 28.return 0;29.} 在屏幕上显示杨辉三角形 1.#include 6.int a[N][M],i,j,n;7.scanf(“%d”,&n);8.for(i=0;i 10.j=i; 11.a[i][0]=1;12.a[i][j]=1;13.} 14.for(i=2;i 1.#include 28.printf(“ %d”,a[i][j]); 29.} printf(“n”);30.} 31.return 0;32.} 给数组中的元素按顺序编号 对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10)则输出为:(4,1,3,7,1,4,6,8,9,10) 1.#include 4.int a[10],b[10],i,j,t;5.for(i=0;i<10;i++)6.{ 7.scanf(“%d”,&a[i]);8.} 9.for(i=0;i<10;i++)10.{ 11.b[i]=a[i];12.} 13.for(i=0;i<9;i++)14.{ 15.for(j=i+1;j<10;j++)16.{ 17.if(a[i]>a[j])18.{ 19.t=a[i];20.a[i]=a[j];21.a[j]=t;22.} 23.} 24.} 25.for(j=0;j<10;j++)26.{ 27.for(i=0;i<10;i++)28.{ 29.if(b[j]==a[i])30.{ 31.printf(“%3d”,i+1);brea k; 32.} 33.} 34.}printf(“n”);35.return 0;36.} 字符转换 描述 提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。输入 一个以回车符为结束标志的字符串(少于80个字符)。输出 把字符串中的所有数字字符(‘0’...‘9’)转换为一个整数并输出。 1.#include 11.{ 12.printf(“%c”,a[j]);13.} 14.} 15.printf(“n”);16.return 0;17.} 合并字符串 输入: 两个已经排好顺序(升序)的字符串 输出: 一个合并在一起的有序(升序)的字符串 要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。 1.#include 7.char a[N],b[M];8.int i,j,t,n;9.gets(a);10.gets(b);11.strcat(a,b);12.n=strlen(a); 13.for(i=0;i 15.for(j=i+1;j 17.if(a[i]>=a[j])18.{ 19.t=a[i];20.a[i]=a[j];21.a[j]=t;22.} 23.} 24.} 25.puts(a);26.return 0;27.} 删除重复字符 1.#include 4.char a[100],b[100];5.int i,j,n=0;6.gets(a);7.b[0]=a[0]; 8.for(i=0;a[i]!=' ';i++)9.{ 10.j=0;11.for(j=0;j<=n;j++)12.{ 13.if(a[i]==b[j])14.{ 15.break;16.} 17.} 18.if(a[i]!=b[j])19.{ 20.n++;21.b[n]=a[i];22.} 23.} 24.b[n+1]=' ';25.puts(b);26.return 0;27.} 删除字符串中指定字符 1.#include 在指定位置插入字符串 1.#include 5.char a[20],b[5],ch,c[10];6.int i,j,k,n; 7.gets(a);gets(b);8.scanf(“%c”,&ch);9.n=strlen(b); 10.for(i=0;a[i]!=' ';i++)11.{ 12.if(ch==a[i])break;13.} 14.k=0; 15.for(j=i;a[j]!=' ';j++)16.{ 17.c[k]=a[j];18.k++;19.} 20.c[k]=' '; 21.for(j=0;j 23.printf(“%c”,a[j]);24.} 25.printf(“%s”,b);26.printf(“%sn”,c);27.return 0;28.} 数的合并 1.int fun(int a,int b)2.{ 3.int c; 4.c=a/10*10+a%10*1000+b/10+b%10*100 ; 5.return c;6.} 7.int main()8.{ 9.int a,b,c; 10.scanf(“%d%d”,&a,&b);11.c=fun(a,b); 12.printf(“c=%dn”,c);13.return 0;14.} 素数的判断 1.int fun(int a)2.{ 3.int i;4.for(i=2;i 请编写函数fun,它的功能是计算下列级数和,值由函数值返回。 例如,当n=10,x=0.3时,函数值为1.349859。请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。 1.#include 10.S=S+z/m;11.} 12.return S;13.} 14.int main()15.{ 16.double x;17.int n; 18.scanf(“%lf%d”,&x,&n);19.printf(“%lfn”,fun(x,n));20.return 0;21.} 求大于m且紧靠m的k个素数 1.int fun(int m,int n,int zz[1000])2.{ 3.int i,j,cnt=0,k=0;4.for(i=m+1;i<1000;i++)5.{ 6.for(j=2;j 8.if(i%j==0)9.break;10.} 11.if(j==m+1)12.{ 13.cnt++;14.zz[k]=i;15.k++; 16.if(cnt==n)17.{ 18.return zz[m];19.} 20.} 21.} 22.} 23.int main()24.{ 25.int m,n,zz[1000];26.scanf(“%d%d”,&m,&n);27.fun(m,n,zz); 28.for(m=0;m 29.printf(“%6d”,zz[m]);30.printf(“n”);31.return 0;32.} 删除指定字符 请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。1.#include 求整数 n 到 m 区间的累加和,其中n<=m。输入: 区间的起始点n 区间的终止点m 输出: 累加和 1.int fun(int a,int b)2.{ 3.int h;4.h=a;5.if(a==b)6.{ 7.h=a;8.} 9.else if(a 11.h=b+fun(a,b-1);12.} 13.14.return h;15.} 16.int main()17.{ 18.int m,n,s; 19.scanf(“%d%d”,&n,&m);20.s=fun(n,m); 21.printf(“%dn”,s);22.return 0;23.} 求最大公约数——递归 请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 1.#include 4.if((m<=n)&&(n%m==0))5.{ 6.return m;7.} 8.else if(n 10.return GCD(m,n);11.} 12.else 13.{ 14.return GCD(m,n%m);15.} 16.} 17.int main()18.{ 19.int a,b; 20.scanf(“%d%d”,&a,&b);21.printf(“%dn”,GCD(a,b));22.return 0;23.} 求数列的第N项 已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即: f(n)= 1 当 n = 1 或 2 时, f(n)= f(n-1)-f(n-2)当n是偶数时, f(n)= f(n-1)+ f(n-2)当n是奇数时,编写一个递归函数,求数列的第N项。 1.#include 14.} 15.else 16.{ 17.return m=f(n-1)+f(n-2); 18.} 19.} 20.} 21.int main()22.{ 23.int n;24.scanf(“%d”,&n);25.printf(“%dn”,f(n));26.return 0;27.} 偶数分解 编写程序,输入若干个大于2的正整数,如果是偶数,则将其分解为两个素数并输出;如果输入的奇 数,则输出“××× is odd number!” ;输入为0时程序结束。只有1和它本身这两个因数的自然数叫做素数,0和1既不是素数也不是和数。实现分解的过程用函数实现。输入:整数序列,0 输出:偶数1 = 素数A + 素数B(当输入是偶数时)奇数1 is odd number!(当输入是奇数时)1.#include 4.int i; 5.for(i=2;i 7.if(n%i==0)8.return 0;9.} 10.if(i==n)11.{ 12.return 1;13.} 14.} 15.void fun(int n)16.{ 17.int i; 18.for(i=2;i 20.if(s(n)==1)21.{ 22.printf(“%d is odd number! n”,n);23.} 24.else if((s(i)==1)&&(s(n-i)= =1)) 25.{ 26.printf(“%d=%d+%dn”,n,i,n -i);break;27.} 28.} 29.} 30.int main()31.{ 32.int n;33.do 34.{ 35.scanf(“%d”,&n);36.fun(n);37.}while(n!=0);38.return 0;39.} 浮点数四舍五入 1.#include 6.} int main()7.{ double a;8.scanf(“%lf”, &a);9.printf(“%lfn”, fun(a));10.return 0;11.} 长整型截短 1.#include 21.return 0;22.} 长整型截短 编写一个函数fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 1.#include 2.int fun(int n) 3.{ 4.int a,i=0,b=0;5.do 6.{ 7.a=n%10;8.n=n/10;9.if(a%2==0)10.{ 11.b=b+a*pow(10,i);12.i++;13.} 14.}while(n!=0);15.return b;16.} 17.int main()18.{ int n; 19.scanf(“%ld”,&n); 20.printf(“The result is: %ldn”,fun(n)); 21.return 0;22.} 公式求解 1.double fun(int n)2.{ 3.int i; 4.double a=1,s=1;5.for(i=1;i<=n;i++)6.{ 7.a=a/i;8.s=s+a;9.} 10.return s;11.} 12.int main()13.{ int n;14.double s;15.16.scanf(“%d”,&n);17.s=fun(n);18.printf(“s=%fn”,s);19.return 0;20.} 数的合并 请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。 1.int fun(int a,int b,int *p)2.{ 3.*p=a/10*10+a%10*1000+b%10*100+b/10;4.return p;5.} 6.int main()7.{ 8.int a,b,c;9.scanf(“%d%d”,&a,&b);10.fun(a,b,&c);11.printf(“%dn”,c);12.return 0;13} 数组中奇偶数 请编一个函数 fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。 例如:数组中的值依次为: 1,8,2,3,11,6 ;则利用指针 odd 返回奇数之和 15 ;利用指针 even 返回偶数之和 16。 void fun(int x[],int y,int *odd,int *even) { int i; *odd=0; *even=0; for(i=0;i if(x[i]%2!=0) { *odd=*odd+x[i]; } else { *even=*even+x[i]; } } } int main() { int a[N],i,n,odd,even; scanf(“%d”,&n); for(i=0;i printf(“The sum of even numbers:%dn”,even); return 0; } #include #define N 20 浮点数四舍五入 请编一个函数 void fun(double a,double *h),函数的功能是对变量 h 中的值保留 2 位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。 例如: h 值为 8.32433,则函数返回 8.32 ; h 值为 8.32533,则函数返回 8.33。 #include void fun(double a,double *h) { *h=(floor)(a*100+0.5)/100; } int main() { double a,h; scanf(“%lf”,&a); fun(a,&h); printf(“The result:%lfn”,h); return 0; } 字符移动 请编一个函数void fun(char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。 例如:原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。 void fun(char *s) { int i=0,j,k; char ch,a[N]; do { a[i++]=*(s++); }while(*s!=' '); ch=a[0]; for(j=0;j a[j]=a[j+1]; } a[i-1]=ch; a[i]=' '; for(k=i-1;k>=0;k--) { *(--s)=a[k]; } } int main() { char a[N]; gets(a); fun(a); printf(“%sn”,a); return 0; } 生成新数 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。 例如,输入一个数:27638496,新的数:为739。 #include int a[10],b[10]; int i=0,j=0,k; do { a[i++]=*p%10; *p=*p/10; }while(*p!=0); for(k=0;k if(a[k]%2!=0) { b[j++]=a[k]; } } for(k=0;k *p=*p+b[k]*pow(10,k); } } int main() { int n=-1; while(n>99999999||n<0) { scanf(“%d”,&n);} fun(&n); printf(“%dn”,n); return 0; } 字符串转换成整数 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数。例如,若输入字符串“-1234”,则函数把它转换为整数值-123 4 #include int fun(char *p) { char a[10]; int q=0,i=0,j=0; do { a[j++]=*(p++); }while(*p!=' '); if(a[0]=='-') { for(i=1;i q=q+(a[i]-'0')*pow(10,j-1-i); } q=-1*q; } else { for(i=0;i q=q+(a[i]-'0')*pow(10,j-1-i); } } return q; } int main()/* 主函数 */ { char s[10]; int n; gets(s); n = fun(s); printf(“%dn”,n); return 0; } 二维数组按列优先存放 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H HHH 则字符串中的内容应是: WSHWSHWSHWSH。 void fun(char w[M][N],char *q) { int j,i; for(j=0;j for(i=0;i *(q++)=w[i][j]; } } *q=' '; } int main() { char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; fun(w,a); puts(a); return 0; } #include #define M 3 #define N 4 删除字符串中指定的星号 假定输入的字符串中只包含字母和 * 号。请编写函数 fun,它的功能是:除了尾部的 * 号之外 , 将字符串中其它 * 号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数 void fun(char *p,char *t) { char a[30],b[30],ch; int i=0,j,k=0; do { a[i++]=*(p++); }while(*p!=' '); a[i]=' '; for(j=0;;j++) { if(a[j]!='*') { b[k++]=a[j]; if(a[j]==*t)break; } } for(j=k;j b[j]=*(++t); } for(k=j;k>=0;k--) { *(p--)=b[k]; } } int main() { char s[81],*t; gets(s); t=s; while(*t)t++; t--; while(*t=='*')t--; fun(s , t); puts(s); return 0; } 统计数字字符 请编写函数 fun,它的功能是: 统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t void fun(char *p,int *q) { int i=0; for(;*p!=' ';p++) { if((*p>='0')&&(*p<='9')) { i++; } } *q=i; } int main() { char s[80]; int t; gets(s); fun(s,&t); printf(“%dn”,t); return 0; } 将两个串按要求形成一个新串 给定程序的函数 fun 的功能是:逐个比较 p、q 所指两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。 void fun(char *p,char *q,char *c) { int i,j; for(i=0;*(p+i)!=' '&&*(q+i)!=' ';i++) { if(*(p+i)>=*(q+i)) { *(c+i)=*(p+i); } else { *(c+i)=*(q+i); } } j=i; if(*(p+j)!=' ') { for(j=i;*(p+j)!=' ';j++) { *(c+j)=*(p+j); } } else { for(j=i;*(q+j)!=' ';j++) { *(c+j)=*(q+j); } } *(c+j)=' '; } int main() { char a[10], b[10], c[80]; gets(a);gets(b); fun(a,b,c); puts(c); return 0; } #include #include 统计子串的个数 请编写函数 fun,它的功能是: 统计 substr 所指子字符串在 str 所指字符串中出现的次数。 void fun(char *p,char *q,int *c) { int i,j,cnt; *c=0; for(;*p!=' ';p++) { cnt=1; if(*p==*q) { for(j=0;*(q+j)!=' ';j++) { if(*(p+j)!=*(q+j)) { cnt=0; break; } } } else cnt=0; if(cnt) { (*c)++; } } } int main() { char str[80],substr[80]; int count; gets(str); gets(substr); fun(str,substr,&count); printf(“%dn”,count); return 0; } 函数 fun 的功能是: 将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除 , 串中剩余字符所形成的一个新串放在 t 所指的数组中。 void fun(char *p,char *q) { int i; for(i=0;*(p+i)!=' ';i++) { if(i%2==1&&*(p+i)%2==1) { *(q++)=*(p+i); } } *(q++)=' '; } int main() { char s[100], t[100]; scanf(“%s”, s); fun(s, t); printf(“%sn”, t); return 0; } 求非偶数的除数 请编写函数 fun,它的功能是:求出能整除形参 x 且不是偶数的各整数 , 并按从小到大的顺序放在 pp 所指的数组中 , 这些除数的个数通过形参 n 返回。 void fun(int x,int *p,int *q) { int i; *q=0; for(i=1;i<=x;i=i+2) { if(x%i==0) { *(p++)=i;(*q)++; } } } int main() { int x, aa[1000], n, i; scanf(“%d”, &x); fun(x, aa, &n); for(i = 0;i < n;i++) printf(“ %d”, aa[i]); printf(“n”); return 0; } 求最大值及其下标 请编写函数 fun,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中 void fun(int *p,int n,int *q) { int i,max; max=0; for(i=0;i if(*(p+i)>max) { max=*(p+i); *q=i; } } } void main() { int a[10], k ,i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); fun(a, 10, &k); printf(“%d,%dn”, k, a[k]); } 结构体填空 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数modify的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 #include typedef struct { int num; char name[9]; float score[3]; } STU; void show(STU tt) { int i; printf(“%d %s : ”,tt.num,tt.name); for(i=0;i<3;i++) printf(“%5.1f”,tt.score[i]); printf(“n”); } void modify(STU *ss,float a) { int i; for(i=0;i<3;i++) ss->score[i]*=a; } int main() { STU std= { 1,“Zhanghua”,76.5,78.0,82.0 }; float a; scanf(“%f”,&a); modify(&std,a); show(std); return 0; } 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是对形参 b 所指结构体变量中的数据进行修改 , 最后在主函数中输出修改后的数据。 #include #include struct student { long sno; char name[10]; float score[3]; }; void fun(struct student *b) { b->sno= 10004; strcpy(b->name, “LiJie”); } int main() { struct student t={10002,“ZhangQi”, {93, 85, 87}}; int i; fun(&t); printf(“No: %ld Name: %snScores:”,t.sno, t.name); for(i=0;i<3;i++)printf(“%6.2f”, t.score[i]); printf(“n”); return 0; } 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。 #include #include struct student { long sno; char name[10]; float score[3]; }; void fun(struct student a[], int n) { struct student t; int i, j; for(i=0;i for(j=i+1;j if(strcmp(a[i].name,a[j].name)> 0) { t = a[i];a[i] = a[j];a[j] = t;} } int main() { struct student s[4]={{10001,“ZhangSan”, {95, 80, 88}},{10002,“LiSi”, {85, 70, 78}}, {10003,“CaoKai”, {75, 60, 88}},{10004,“FangFang”, {90, 82, 87}}}; int i, j; fun(s, 4); printf(“The data after sorting :n”); for(j=0;j<4;j++) { printf(“nNo: %ld Name: %-8s Scores:”,s[j].sno, s[j].name); for(i=0;i<3;i++) printf(“%6.2f”, s[j].score[i]); } printf(“n”); return 0; } 《C语言程序设计》课程设计 一.课程性质 C程序课程设计是《C程序设计》课程的实践环节,其目的是为学生提供了一个既动手又动脑,独立实践的机会,学生将课本上的理论知识和实际有机的结合起来,锻炼学生分析、解决较复杂问题的能力,提高学生独立编写大编程的能力。 二、基本要求 1、课程设计可采取每人或2人一题,可任选题目进行设计。每组成员分工合作完成一个课程设计时,每个人的任务不同; 2、要求利用结构化程序设计方法以及C的编程思想来完成系统的设计; 3、模块化程序设计:要求在设计的过程中,按功能定义函数,进行模块化设计,各个功能模块用函数的形式来实现; 3、学生所选课题必须上机通过,并获得满意的结果; 4、程序书写风格:锯齿型书写格式。 三、课程设计报告的要求 1、需求分析 描述问题。简述课题要解决的问题是什么,有什么要求和限制条件。 2、总体设计(程序设计组成框图、流程图) 3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)) 4、源程序清单和结果:源程序要加注释。结果要包括测试数据和运行结果。 5、设计心得 四、考核标准: 成绩按五分制评定:优、良、中、及格和不及格 评价标准 课程设计成绩评定的依据有设计文档资料(40%)、具体实现设计方案的程序(25%)、验收(25%)课程设计考勤登记表(10%)。 优(90分以上):必须要有一定的创意,有自己独特的算法。按要求完成课题的全部功能,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,其中有总体设计思想的论述,有正确的流程图,程序完全实现设计方案,设计方案先进,软件可靠性好; 良(80-89分):完成课题规定的功能,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;有完全实现设计方案的软件,设计方案较先进,无明显错误; 中(70-79分):完成课题规定的功能,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确,但有少于失误; 及格:完成课题规定的大部分功能,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确,个别功能没有实现,但错误不多; 不及格:完全复制别人的文档资料,没有完成课题规定的功能,没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案严重错误。 五、参考设计题目 1.小学生数学CAI系统 设计内容: 该系统为小学数学辅助教学系统,利用该系统可以锻炼小学生的数学运算能力。它包括+、-、×、÷四则运算。 设计要求: 1)系统菜单可以选择包含的运算符(+、-或×、÷)、数值的位数(1位,2位、3位)。 2)单击“开始”,系统自动随机地出10道题。 3)每出一题,小学生输入答案后,第一次答对,系统给出信息“完全正确,你非常聪明!加10分”,总分+10分,显示下一题;若答错了,系统给出信息“你答错了,继续努力!”,继续显示该题目,若第2次答对了,系统给出信息“答对了,你很棒!加8分”,总分+8分,显示下一题;若答错了,系统给出信息“你答错了,继续努力!”,继续显示该题目,若第3次答对了,系统给出信息“答对了,祝贺你!加6分”,总分+6分,显示下一题;若答错了,系统给出信息“非常遗憾你又答错了,请继续做下一题。本题的正确答案为„„”,继续显示下一题; 当答完所有的题给出总分 2.英语字典 设计内容: 设计一个简单的英语字典,输入英语单词,显示中文含义,设计要求: 1)自行设计一单词库; 2)词库的编辑功能(添加、修改、删除题库中的单词) 3)具有查询的功能(“英汉”和“汉英”两种方式) 3.学生学籍管理系统 可对学生学籍进行注册,修改,删除,查找,统计等操作。 功能要求: (1)系统以菜单方式工作。 (2)登记学生的学号,姓名,班级和籍贯信息 (3)修改已知学号的学生信息; (4)删除已知学号的学生信息; (5)查找已知学号的学生信息; (6)查找并统计某个籍贯的学生信息及总数。 4.其它难度相近的自选题目。 附:课程实习报告封面 广东海洋大学职业教育学院 《C语言程序设计》课程实习报告 题目:英语字典班级:应电111 学号:201136626133姓名:邱洪文成绩: 指导教师: 日期:年月日第四篇:c语言期末复习
第五篇:C语言课程实习2012