第一题:
在做这道题时,遇到一个问题,要求输出其总分和平均分,但是助教老师告诉我,这个需要用到指针或者位运算。。。。。然后我发现我想复杂了,只需要在自定义函数中输出一个总数就行了,平均数在主函数中计算
//应为作业太长了有100多行代码,所以仅列出直接相关的部分,下同 case 1:printf("总分为%d,平均分为%d",first(i),first(i)/10);break;
就像上边,但是遇到了第二个问题:在运行中会不断的出现“请输入十名学生的成绩:”的情况,原因是在上面的代码中,我引用了两次first函数,所以这个函数被引用了两次,助教老师交给我一个办法
int first(int i) { int grade[10]; static int sum=0; if(0==sum){ printf("请输入十名学生的成绩:"); for(i=0;i<=9;i++) { scanf("%d",&grade[i]); sum=sum+grade[i]; } } return sum; }
就像上面代码中大红字,static变量一旦初始化后就不会再被初始化,那么if(0==sum)这个判断中的代码就只会被执行一次;但是这样,这个函数就变成一次性了,后面这个函数中的内容就不能用了,所以说是一次性的。
第二题
首先第一点就是赋值运算‘=’它的意思是将右边的值赋给左边,a=b及将b的值赋给a,而‘==’得意思是两边相等a==b为a等于b,这一点通常会在条件语句中使用错误。
第五题
这道题更多的是逻辑,我已开始的想法是是从数组a,b的第0个数开始,如果相等就再和b的下一个数比较,这样无法确保将b数组中a没有的元素找出来。。。。,于是助教老师给了我一个想法,从a中拿出一个元素与b中的元素一一比较,如果都不一样,就打印出这个数,如果相同就将b中这个元素删除,然后再从a中拿出一个,依次进行。至于删除可以这样比如想要删除a【3】,那么就将a【4】放到a【3】,a【5】放到a【4】,然后实际的数组长度-1。
还有一些其他的问题,函数结束的标志是}而不是return,return的含义是抛出一个值,但他有一个特点,及一旦执行到一个return语句,那么后边的语句都不再执行,主函数的返回值理论上是没有意义的,因为main不能被其他函数调用,但实际上返回0表示的是告诉系统,这个程序被正确执行了。
//删除b中的这个元素 { do { z=q; a[z]=a[z+1]; z=z+1; } while(z==m); x=a[p+1];
感受:
我觉得在学习的深入中,逻辑越来越重要,没有一个正确的逻辑,不可能编写出一个好的程序,必须要在动手写代码之前明确你的开始与目的,并条理清晰的在心中罗列出每一步要干什么,否则只会越来越晕,直到一个语句也写不出来
以下为代码
#include<stdio.h> int first(int i); int secend(int i); int third(int i); int forth(int i); int forth(int i); int main() { int n,i,m; do { printf("实验八\n"); printf("******第一题******\n"); printf("******第二题******\n"); printf("******第三题******\n"); printf("******第四题******\n"); printf("******第五题******\n"); printf("输入0则退出\n"); printf("请输入题号:"); scanf("%d",&n); switch(n) { case 1:printf("总分为%d,平均分为%d",first(i),first(i)/10);break; case 2:m=secend(i); if(m==0) printf("Not Found"); else printf("是第%d个数",m); break; case 3:printf("是第%d个数",third(i));break; case 4:m=forth(i); case 5:m=forth(i); case 0:return 0;break; } }while(n==0); return 0; } int first(int i) { int grade[10]; static int sum=0; if(0==sum){ printf("请输入十名学生的成绩:"); for(i=0;i<=9;i++) { scanf("%d",&grade[i]); sum=sum+grade[i]; } } return sum; } int secend(int i) { int sum[5],n,m=0; printf("请输入五个整数:"); for(i=0;i<=4;i++) scanf("%d",&sum[i]); printf("请输入一个数字:"); scanf("%d",&n); for(i=0;i<=4;i++) { if(n==sum[i]) { m=i; break; } } return m; } int third(int i) { int n,m=0,b; int a[10]; printf("请输入数组的大小:"); scanf("%d",&n); printf("请输入%d个数字",n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) { if(m<=a[i]) m=a[i]; b=i; } printf("最大值为%d",m); return b; } int forth(int i) { int n,m,x,y,z,p=0,q=0; int a[10]; int b[10]; //第一个数组的赋值 printf("请输入第一个数组的大小:"); scanf("%d",&n); printf("请输入%d个数字",n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } //第二个数组的赋值 printf("请输入数组的大小:"); scanf("%d",&m); printf("请输入%d个数字",m); for(i=0;i<n;i++) { scanf("%d",&b[i]); } while(p<n||q<m) { x=a[p],y=b[q];//从a中取一个数,从b中取一个数 //两个元素不相同 if(x!=y) printf("%d\n",x); //两个元素不相同 else //删除b中的这个元素 { do { z=q; a[z]=a[z+1]; z=z+1; } while(z==m); x=a[p+1]; } } for(i=0;i<n;i++) printf("%d",b[i]); return 0; }