‘壹’ 求一份c语言实训报告
1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if 和 switch)
2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
3)计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址.
4)bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.
5)一定要记住 二进制 如何划成 十进制。
概念常考到的:
1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、每个C语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句。
6、逗号运算符的级别最低。
第一章
1)合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了。
关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
2)实型数据的合法形式:
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e前e后必有数,e后必为整数。.
3)字符数据的合法形式::
'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。
4) 整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节:
考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节就可以了。
5)转义字符的考查:
在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x必须存在。
在程序中 int a = 06d, 是一个八进制的形式。
在转义字符中,’\x6d’ 才是合法的,0不能写,并且x是小写。
‘\141’ 是合法的, 0是不能写的。
‘\108’是非法的,因为不可以出现8。
6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。
7)强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
8)表达式的考查:
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这
个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。 进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
逗号表达式:优先级别最低 ;表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
9)位运算的考查:
会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1:char a = 6, b;
b = a<<2; 这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2:一定要记住,
例3:在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
10)018的数值是非法的,八进制是没有8的,逢8进1。
11)%符号两边要求是整数。不是整数就错了。
12)三种取整丢小数的情况:
1、int a =1.6;
2、(int)a;
3、
第二章
1)printf函数的格式考查:
%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。
%ld对应 long int;%lf 对应double。
2)scanf函数的格式考察:
注意该函数的第二个部分是&a这样的地址,不是a;
Scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。
3)putchar ,getchar 函数的考查:
char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。
putchar(‘y’)把字符y输出到屏幕中。
4)如何实现两个变量x ,y中数值的互换(要求背下来)
不可以把 x=y ,y=x; 要用中间变量 t=x;x=y;y=t。
5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。
第三章
特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。
1)关系表达式:
表达式的数值只能为1(表示为真),或0(表示假)
当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1;
2)逻辑表达式:
只能为1(表示为真),或0(表示假)
a) 共有&& || ! 三种逻辑运算符号。
b) !>&&>|| 优先的级别。
c) 注意短路现象。考试比较喜欢考到。
d) 要表示 x 是比0大,比10小的方法。0<x<10是不可以的(一定记住)。是先计算0<x 得到的结果为1或则0;再用0,或1与10比较得到的总是真(为1)。所以一定要用(0<x)&&(x<10)表示比0大比10小。
3)if 语句
else 是与最接近的if且没有else的相组合的。
4)条件表达式:
表达式1 ?表达式2 :表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。
考试口诀:真前假后。
5)switch语句:
a)一定要注意 有break 和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
b)switch只可以和break一起用,不可以和continue用。
第四章
1)三种循环结构:
a)for() ; while(); do- while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)
2) break 和 continue的差别
记忆方法:
break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4) while((c=getchar())!=’\n’) 和 while(c=getchar() !=’\n’)的差别
先看a = 3 != 2 和 (a=3)!=2 的区别:
(!=号的级别高于=号所以第一个先计算 3!=2)第一个a的数值是得到的1;第二个a的数值是3。
考试注意点:括号在这里的重要性。
第五章
函数:是具有一定功能的一个程序块;
1) 函数的参数,返回数值(示意图):
main()
{
int a = 5,b=6,c;
c =add(a,b);
printf(“%d”,c);
}
调用函数
a,b是实参
整个函数得到一个数值就是
Add函数的返回数值。
int add ( int x, int y)
{
int z;
z=x+y;
return z;
}
被调用函数
x,y是形式参数
函数返回数值是整型
z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。
程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。当得到了返回数值后,再顺序的往下执行
2)一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。(考试的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
3)函数声明的考查:
一定要有:函数名,函数的返回类型,函数的参数类型。
不一定要有:形参的名称。
第六章
指针变量的本质是用来放地址,而一般的变量是放数值的。
int *p 中 *p和p的差别:
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
*p++ 和 (*p)++的之间的差别:改错题目中很重要
*p++是 地址会变化。
(*p)++ 是数值会要变化。
三名主义:(考试的重点)
数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。
第七章
1一维数组的重要概念:
对a[10]这个数组的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。
对a[3][3]的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。
4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。
5、注意a和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。
二维数组做题目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
步骤一:把他们写成:第一列第二列第三列
a[0]à 1 2 3 ->第一行
a[1]à 4 5 6 —>第二行
a[2]à 7 8 9 ->第三行
步骤二:这样作题目间很简单:
*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。
*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。
一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。
数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写
int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。
二维数组中的行指针
int a[1][2];
其中a现在就是一个行指针,a+1跳一行数组元素。 搭配(*)p[2]指针
a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用
还有记住脱衣服法则:
a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3)
这个思想很重要!
‘贰’ c语言万年历实训目的 实训步骤 实训重难点
4亿元万年历已实现目的,实现步骤实现重点难点,这具体你看看在网上的一些动态啥的,都了解一下此方的新闻。
‘叁’ C语言实训项目编程一般步骤
称 计算机工程系 专业 网路安全 指导教师
学生姓名 班级
实训
时间 年 月 日---------- 年 月 日
实训项目和地点:
实训项目:C++程序的设计与应用
地点:
实训目的:
在实践过程中,使我们进一步巩固C++程序设计课程所学知识,更加深入地了解面向对象程序设计的主要技术特点以及C++语言的强大编程功能指导学生利用获取信息的手段进一步获取新知识,以解决实训过程中遇到的技术难点,从中提高自学能力;按照软件开发的基本要求引导我们完成实训课题,以便我们了解软件开发的几个重要环节;提高我们的编程技术,使程序的编写更趋于专业化,为从业打下良好的基础、培养我们分工协作的团队精神。
实训设备及器材:
1、计算机配置:Celeron cpu 2.66GHz 1G内存 计算机一台
2、操作系统平台: Windows XP
3、软件开发平台:Visual C++ 6.0
4、其它应用软件:Microsoft Access / SQL Server 、Word、Visio等
实训的步骤和内容:
设计题目:输入4个整数,要求按由大到小的顺序输出
第1步、问题描述:
输入4个整数,要求按由大到小的顺序输出。
第2步、基本思路:
利用选择法进行排序。
第3步、编写程序:
#include<stdio.h>
void main()
{
int a,b,c,d,t;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a<b)
{t=a;
a=b;
b=t;}
if(a<c)
{t=a;
a=c;
c=t;}
if(a<d)
{t=a;
a=d;
d=t;}
if(b<c)
{t=b;
b=c;
c=t;}
if(b<d)
{t=b;
b=d;
d=t;}
if(c<d)
{t=c;
c=d;
d=t;}
printf("%d,%d,%d,%d",a,b,c,d);
}
第4步、运行结果:_
输入:5,7,9,4
输出:9,7,5,4
实训结果分析及其心得体会:
通过C++实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过几天的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。
这次实训有很大的收获,让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没用,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了浓厚的兴趣和更深层的认识。
C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是 一个零散的知识,实际上所有的课程都如此,不过通过实训我也知道了自己的不足,存在的很多问题。
比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到不在身边的时候也可以完成一些简单的程序编写与错误排除。
还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,C语言还是很有意思的课程。
自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,不管以后从事什么行业,学习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。
当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!
感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的互相探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础。
‘肆’ C语言的实训项目发几个,谢谢
这个是没有代码的,只有文件,要你去真代码,不过电路图及。hex文件都有,你可以直接运行看结果,但自已要试程序的话,必须自已打上去!~
建议买一本吧!学pic单片机,这本书不错。也就七十来块,如果这点钱都舍不得,还是别要了!知识是无价的,只你你学到了东西,这本书就值了,
‘伍’ C语言实训报告!急!!!!!
1.#include<stdio.h>
void main()
{
float sum=0;//总分
float max=0;//最高分
float min=100;//最低分
int i=0;//统计输入个数
float score;
while(1)
{
printf("请输入第%d个评委的分数:",i+1);
scanf("%f",&score);
if(score==-1) break;//输入-1退出循环
else
{
if(score>max) max=score;
if(score<min) min=score;
sum+=score;
i++;
}
}
2.#include <stdio.h>
int main( )
{ int i,n=10,a[10],av=0;//英文下分号,av 初始化
for(i=0;i<n;i++) //英文下分号,n要有值
scanf("%d",&a[i]); //少了&
for(i=0;i<n;i++)
{ printf("%d",a[i]);
if((i+1)%3==0)
printf("\n");
}
for(i=0;i!=n;i++)
av+=a[i];
printf("av=%f\n",(float)av/n);
}
3.
#include <stdio.h>
#define N 5
int main(int argc, char *argv[])
{
int num[N]={0},i=0,k=0;
float score[N]={0.0};
for(i=0; i<N; i++)
scanf("%d%f",&num[i],&score[i]);
for(i=1; i<N; i++)
if(score[k]<score[i]) k=i;
for(i=0; i<N; i++)
printf("%8d",num[i]);
printf("\n");
for(i=0; i<N; i++)
printf("%8.2f",score[i]);
printf("\n");
printf("number=%d,score=%.2f\n",num[k],score[k]);
return 0;
}
4.
(1)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[8]= {34,56,45,57,69,48,79,61},i=0,j=0,k=0,t=0;
for(i=0; i<7; i++) {
k=i;
for(j=i+1; j<8; j++)
if(a[k]<a[j]) k=j;
t=a[i]; a[i]=a[k]; a[k]=t;
}
for(i=0; i<8; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
(2)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[8]= {34,56,45,57,69,48,79,61},i=0,j=0,t=0;
for(i=0; i<7; i++)
for(j=i+1; j<8; j++)
if(a[i]<a[j]) {
t=a[i]; a[i]=a[j]; a[j]=t;
}
for(i=0; i<8; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
5.#include <stdio.h>
void main()
{ int n[11],i,j,m,f;
for(i=0;i<10;i++)
scanf("%d",&n[i]);
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
{
f=n[i];
n[i]=n[i]>n[j]?n[i]:n[j];
if(n[j]>f)n[j]=f;
}
for(i=0;i<10;i++)
printf("%7d",n[i]);
printf("\nplease enter the 11th number:\n");
scanf("%d",&m);
for(i=0;i<10;i++)
if(m>n[i])
{
for(j=10;j>i;j--)
n[j]=n[j-1];
n[i]=m;
break;
}
else
if(i==9 && m<=n[9])
n[10]=m;
for(i=0;i<11;i++)
printf("%7d",n[i]);
getch();
}
6.#include <stdio.h>
int main(int argc, char *argv[])
{ int i,j,a[4][4],sum=0,p=1,max,maxi;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for (i=0;i<4;i++)
{ sum+=a[i][i];
if (i%2==0)
p*=a[i][i];
if(a[i][i]>max)
{ max=a[i][i];
maxi=i;
}
}
printf("对角线上各元素的和:%d\n",sum);
printf("对角线上行、列下标均为偶数的各元素的积:%d\n",p);
printf("对角线上其值最大的元素:%d,它在数组中的位置:第%d行第%d列\n",max,maxi,maxi);
return 0;
}
‘陆’ c语言实训
《C语言实训教程》共分为两篇。实验篇为上机实验指导,涉及顺序结构程序设计、分支结构程序设计、循环结构程序设计、函数、数组、结构体与共用体、指针、位运算、文件等部分内容的相关实验项目,每一部分的实验项目按照由浅入深、循序渐进的原则设置了三个层次。习题篇为每章的习题及参考答案。配套光盘的教学资源中提供了每个实验项目的问题解析、参考程序、在线测试等,以便于学生自学。
《C语言实训教程》通俗易懂,实验项目设置合理,符合学生对程序设计类课程知识掌握的规律,适合各类高等院校C语言程序设计课程的实验教学,同时也可以作为独立的实训教材。
‘柒’ C语言实训总结
在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试自己编写一个比较复杂的程序系统。在为期两周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这里,我作为其中的参与者,自然感触良多。
刚开始接触到C的时候,我已经学过一些有关VB的内容,这个在算法和思维上稍微有点帮助。回想本学期的学习,首先,最基本的,是C的数据格式,让我们知道整数,浮点数以及字符常量在C中的运用。然后,在学会了数据转化,以及熟练的可以对各种数据处理之后,我开始进行有关数据结构,像数组,结构体等的学习,因为有的东西从现有的知识来看都是非常简单的,还没有联系到指针等等一些复杂的概念。可是,仅仅学会这些是远远不够的,C语言中,还有很多更加经典、重要、实用的知识。
说说函数。虽说很多程序语言都有函数这一内容,但我觉得C语言的函数是最有魅力的了。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,学习C语言的“高人”都说,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。比如,大家可以作一个比较字符串的实验,用C语言中的strcmp()函数只要一句话,而自己编写的话,30句都很难实现,可想而知函数的实用和快捷。在我们C语言实训的代码中,函数更是得到了充分的应用,可以说,实训题目的复杂代码,就是用无数个函数的调用和嵌套积累出来的。
要注意的是,有的同学刚刚开始的时候,都是被一些大的程序激励的,所以当开始的时候看到繁琐的数据转化和简单的算法,都觉得很无聊,都想自己做几个自己满意的程序来看看,虽然这种想法很好,但是,我们说,没有基础,纯粹是搬照一些现成设计方法,是不足取的。要知道,程序设计讲究的是个人的思维的,假如刚开始就被一些现成的思想束缚住,以后就会觉得很无趣。
我们知道,指针其实是C语言的灵魂,许多的数据结构在我们学到这里之前都可以说是精通了。所以我们的任务就是,让数据结构在指针中运行。当然,刚刚开始接触到这些新的东西,是一件非常痛苦的事情,所以我们一定要用非常形象的思维去看待指针,不能太固化。所以,新的东西,比如结构体在指针中的表现方法,数组及多维数组在结构体中的运用,都一点一点的加了进来,同时丰满了我们对原来C的数据机构,数据表示的理解。当我们完成了这三步的学习,我们已经可以自豪的说,我们的基础都扎实了,可以进一步的学习有关算法,设计概念等等深层次的东西了。
但是,指针,结构体,这些太抽象的东西,在学习C语言的时候我们就有点“似懂非懂”,可是在眼下的C语言实训中,像这么重要的C语言知识,一定要达到能熟练掌握,实际运用的程度。在实训的大程序中,结构体在指针中的表现方法,数组及在结构体中的运用等具体的技术环节,都得到了体现,不会指针,我们的工作是没法展开的。所以,在实训期间,大家在巩固基本知识的基础上,逐块攻克实训课题,克服了困难,自信心得到了提高。
最后,谈谈我们组的程序软件。商店商品管理系统,是一个比较利于应用,解决实际问题,方便实际管理的程序。设计代码比较复杂,结构比较严谨。在程序编写的1周左右的时间里,组员们遇到了上述的困难,包括程序设计构思,甚至是指针等某些知识点的欠缺,导致的工作中出现的困难。但是,当大家一起团结协作,解决了这些困难之后,发现自己也可以编写复杂的、应用性的程序了,更发现自己对C语言这门学科的兴趣也提高了。
当然,我们编写的商店商品管理系统,还存在很多疏漏和不合理之处。比如,程序复杂冗长,如果时间充裕,我们将在不改变程序运行结果的基础上,简化程序,使每一句更加精辟,总体上更加简化。另外,在程序的外观上,我们由于时间问题,没有做更多的修饰,运行起来显得比较死板、枯燥乏味。如果增添一些色彩和其他效果,我们的程序也许会更加完美。
以上就是我的C语言实训个人总结
‘捌’ c语言实训
/*8、学生成绩管理系统
学生属性:学号,姓名,入学年月,有成绩的学期数,四门课的成绩等9个成员,
在编程中要求当执行状态输入i为输入学生记录,输入D为删除,输入s为查询(以学号为查询条件,输入p为将整个学生记录输出,使用结构数组或结构指针编程)
*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
int stu_num=0; //全局变量,已输入成绩的学生人数
struct student //结构体数组,用于储存学生的数据
{
char num[11]; //储存学号
char name[11]; //储存名字
char sex[3]; //储存性别
char date[11]; //储存入学年月
int term; //储存学期数
float score1; //储存成绩1
float score2; //储存成绩2
float score3; //储存成绩3
float score4; //储存成绩4
}student[100];
void warning() //警告函数
{
char a;
printf("您所查找的学生暂无数据,按任意键返回重新输入");
a=getch(); //储存任意键
}
void input() //输入函数
{
char a;
do
{
system("cls");
printf("(i)输入学生数据\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='i'||a=='I') //输入学生数据
{
system("cls"); //清屏函数
printf("下面输入第%d个学生的数据\n学号:",stu_num+1); //以下操作储存学生数据于结构体中
scanf("%s",&student[stu_num].num);
printf("姓名:");
scanf("%s",&student[stu_num].name);
printf("性别:");
scanf("%s",&student[stu_num].sex);
printf("入学年月:");
scanf("%s",&student[stu_num].date);
printf("学期:");
scanf("%d",&student[stu_num].term);
printf("成绩1:");
scanf("%f",&student[stu_num].score1);
printf("成绩2:");
scanf("%f",&student[stu_num].score2);
printf("成绩3:");
scanf("%f",&student[stu_num].score3);
printf("成绩4:");
scanf("%f",&student[stu_num].score4);
stu_num++;
}
if(a=='e'||a=='E') //退出输入函数
{
break; //强制结束循环以退出输入函数
}
}while(1);
}
void output() //输出函数
{
system("cls"); //清屏函数
int i,j;
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
for(i=0;i<stu_num;i++) //通过for语句逐个输出学生数据
{
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
}
printf("按任意键返回主菜单");
j=getch(); //储存任意键
}
void revise() //修改函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找修改\n(m)按名字查找修改\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出修改函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
system("cls");
printf("您要更改的学生的信息为:\n"); //输出欲修改的学生信息
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("请更新该学生的数据\n学号:"); //找到后进行数据更新
scanf("%s",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("性别:");
scanf("%s",&student[i].sex);
printf("入学年月:");
scanf("%s",&student[i].date);
printf("学期:");
scanf("%d",&student[i].term);
printf("成绩1:");
scanf("%f",&student[i].score1);
printf("成绩2:");
scanf("%f",&student[i].score2);
printf("成绩3:");
scanf("%f",&student[i].score3);
printf("成绩4:");
scanf("%f",&student[i].score4);
printf("该学生数据已修改,按任意键返回");
a=getch(); //储存任意键
}
void search() //查询函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找\n(m)按名字查找\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出查询函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意键返回主菜单");
a=getch();
}
void del() //删除函数
{
int i=0,j;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找删除\n(m)按名字查找删除\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出删除函数
{
return;
}
else
{
goto st; //为了防止选错选项
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
for(j=i;j<stu_num;j++) //通过for语句进行数据覆盖实现删除学生数据
{
student[j]=student[j+1];
}
stu_num-=1;
printf("该学生数据已删除,按任意键返回主菜单");
a=getch();
}
void menu() //目录函数
{
do
{
char a;
st: system("cls"); //清屏函数
printf("\t\t 欢迎使用学生成绩管理系统 1.22版\n\n\n\t\t\t(i)输入学生数据\n\n\t\t\t(d)删除学生数据\n\n\t\t\t(o)查看学生数据\n\n\t\t\t(s)查询学生数据\n\n\t\t\t(r)修改学生数据\n\n\t\t\t(e)退出系统\n\n\n请输入您要执行的选项:"); //主菜单
a=getch(); //获取输入选项
switch(a)
{
case 'i': //进入输入函数
case 'I':
input();
break;
case 'o': //进入输出函数
case 'O':
output();
break;
case 'r': //进入修改函数
case 'R':
revise();
break;
case 'd': //进入删除函数
case 'D':
del();
break;
case 's': //进入查找函数
case 'S':
search();
break;
case 'e': //退出程序
case 'E':
return;
default: //为了防止选错选项
goto st;
}
}while(1);
}
void main()
{
printf("组员:\n李东海 陈志锐\n凌华富 林继其\n杜德伟 钟鹏珲\n\n\n\n\t\t请稍后……"); //鸣谢栏
Sleep(7000);
menu();
}
这个是我们几个人做的期末作业,你可以拿去参考;如果windows函数不能用,就把他删除掉还有sleep这个也一起删除掉。
‘玖’ C语言实训心得
源程序:
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
#include "dos.h"
#define N 4 /*定义常数*/
typedef struct z1 /*定义数据结构*/
{
char no[12];
char name[20];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函数原型*/
STUDENT *init(); /*初始化函数*/
STUDENT *create(); /*创建链表*/
STUDENT *delete(STUDENT *h); /*删除记录*/
void print(STUDENT *h); /* 显示所有记录*/
void lookup(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *Modify(STUDENT *h); /*修改记录*/
void append(); /*追加记录*/
STUDENT *sort(STUDENT *h); /*按总分排序*/
STUDENT *index(STUDENT *h); /*按学号排序*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
printf("\n\n\n\n\n\n\n\n\n");
printf(" * * ******* * ***** ***** * * ******* \n");
printf(" * * * * * * * ** * * * \n");
printf(" * * * * ******* * * * * * *** * ******* \n" );
printf(" * * * * * * * * * * * * * \n");
printf(" * * ******* ******* ***** * *** * * * ******* \n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break; /*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:print(head);break; /*显示全部记录*/
case 3:head=delete(head);break; /*删除记录*/
case 4:lookup(head);break; /*按名字查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=Modify(head); break; /*修改记录,一般会插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加记录*/
case 11:head=index(head);break; /*按学号排序*/
case 12: exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 00. init list", /*初始化*/
" 01. Enter list", /*输入记录*/
" 02. print list ", /*显示单链表中所有记录*/
" 03. Delete a record from list", /*从表中删除记录*/
" 04. Search record on name", /*按照姓名查找记录*/
" 05. Save the file", /*将单链表中记录保存到文件中*/
" 06. Load the file", /*从文件中读入记录*/
" 07. compute the score", /*计算所有学生的总分和均分*/
" 08. Modify an information ", /*修改某学号的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加记录到文件中*/
" 11. index on nomber", /*按学号排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{printf("\n make by wenwei");<br><br> printf("\n Enter you choice(0~13):"); /*在菜单窗口外显示提示信息*/<br><br> scanf("%s",s); /*输入选择项*/<br><br> c=atoi(s); /*将输入的字符串转化为整形数*/<br><br> }while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{ clrscr();
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
clrscr();
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号并校验*/
if(info->no[0]=='@') { clrscr();break; } /*如果学号首字符为@则结束输入,清屏后返回*/
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]); /*输入成绩*/
if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
printf("bad data,repeat input\n"); /*出错提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各门课程成绩*/
}
info->sum=s; /*将总分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值为0*/
info->next=h; /*将头结点做为新输入结点的后继结点*/
h=info; /*新输入结点为新的头结点*/
clrscr();
}
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n*********************************STUDENT************************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");
while(p!=NULL) /*只要p不是尾结点,就输出记录*/
{
i++;
printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************************end**************************************\n");
getch(); /*输入任一键返回主菜单*/
clrscr(); /*清屏*/
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[12]; /*存放学号*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i<20)&&(b!='\r'))
{ b=getch(); /*无回显输入*/
if(b==8)
{ if(i>0)
{a[--i]=NULL;<br><br> putchar(8); /*退格键*/<br><br> putchar(' '); /*以空格代替*/<br><br> putchar(8);<br><br> }
else putchar(7); /*没有任何字符的退格,响铃警告*/
}
else if(b!='\r')
{ a[i++]=b; /*只要不是退格和回车就接受*/
putchar('*');
}
else
{a[i]=NULL; break; /*密码输入完了,记得加个NULL到后面*/<br><br> }
}
if(strcmp(a,pass)!=0)
{clrscr();<br><br> printf("Password is mistake Tow seconds to return!");<br><br> sleep(2);clrscr();return h;<br><br>}
else {printf("Password is OK! Welcome to come!"); sleep(3);<br><br>}
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}
else /*p不为空,显示找到的记录信息*/
{
printf("*********************************have found********************************\n");
printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");
printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[ q=p; /*保存当前结点的指针,作为下一结点的前驱*/
p=p->next; /*指针后移,新读入数据链到当前表尾*/
}
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意键返回主菜单*/
clrscr();
return h; /*返回头指针*/
}
/*成绩统计*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定义移动指针*/
float saverage[N]={0}; /*均分初值为0*/
int i;
clrscr();
for (i=0;i<N;i++)
{ int n=0,j=0; /*保存记录条数初值为0*/
long s=0; /*总分初值为0*/
p=h; /*从头指针开始*/
while(p!=NULL) /*当p不为空时处理*/
{
s+=p->score[i]; /*累加总分*/
j++; /*统计记录条数*/
p=p->next; /*指针后移*/
h; /*返回头指针 就知道这么多了,我不太懂咯~~~~心得就不来写了,自己写哈!~!~!