有没有C语言大神帮我看个程序???解释下,实在是看不懂!!!

作者&投稿:莫苇 (若有异议请与网页底部的电邮联系)
有没有C语言的大神帮我看看,我看不懂这个程序~



//基本如此

#include
#include
void main()
{
FILE *fp; //定义文件指针变量
int ch; //定义int型字符变量,用于存储从文件读取的一个字符
//以写方式打开文件d:ext.txt
if(!(fp=fopen("d:\ext.txt","w"))){//这句判断打开失败
printf("error"); //输出错误信息
exit(1); //退出程序,并返回退出代码
}
ch=getchar(); //从屏幕获得用户输入的一个字符
//循环判断,直到用户不再输入,退出循环,终止条件ctrl+Z
while(ch!=EOF){
fput(ch, fp); //将用户输入的字符,写入d:ext.txt文件中
ch = getchar(); //继续获得用户输入
}
fclose(fp); //关闭文件指针
return;
}

方法1:利用全局变量
  
  分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。
  实例1:编写函数求3个数中的最大值与最小值。
  方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:
  #include "stdio.h"
  #include "conio.h"
  int max,min;/*定义两个全局变量用于保存函数返回值*/
  void max_min(int a,int b,int c) /*定义求最大最小值的函数*/
  {max=min=a; /*初始化最大最小值*/
   if(max   if(max   if(min>b)min=b;
  if(min>c)min=c;
  }
  main()
  {int x,y,z;
  printf(" 请输入3个整数:\n");
  scanf("%d,%d,%d",&x,&y,&z);
  max_min(x,y,z) ;/*调用求最大值与最小值的函数*/
  printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/
  getch();
  }
  调试结果如下:
  请输入3个整数:
  5,-6,2
  三个数中的最大值为:5;最小值为:-6
  注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用。
  
  3方法2:传递数组指针
  
  分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。
  实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
  方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:
  #include "stdio.h"
  #include "conio.h"
  void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/
  {int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
  int *temp;/*用于交换位置*/
  *temp=*ptr;
  for(i=0;i  {
  if(*ptr<*(ptr+i))/*最大值与第一个元素进行交换*/
  {
  k=i;
  *temp=*ptr;
  *ptr=*(ptr+k);
  *(ptr+k)=*temp ;
  }
  if(*(ptr+n-1)>*(ptr+i))/*最小值与最后一个元素进行交换*/
  {
  j=i;
  *temp =*(ptr+n-1);
  *(ptr+n-1)=*(ptr+j);
  *(ptr+j)= *temp ;}
  }
  }
  /*调用最大最小值函数*/
  main()
  {
  int A[6],i;
  for(i=0;i<6;i++)
   scanf("%d",&A[i]);
  max_min(A,6);
  printf("max=%d, min=%d\n \n",A[0],A[5]);
  getch();
  }
  调试结果如下:
  请输入6个整形数,以空格隔开:
  5 8 9 32 -6 4
  max=32,min=-6
注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法。
  
  4方法3:传递结构体指针
  
  分析:结构体作为教学中的一个难点,教材对它介绍的内容并不多,应用的实例更是少之又少,所以学生对于结构体普遍掌握情况不理想。其实,编写返回多个值的C语言函数,也可以考虑采用结构体的方式去实现。通过方法2,我们知道如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值,下面以实例演示该方法的应用。
  实例3:编写一个用户自定义函数,允许用户录入学生的基本信息(包括学号、姓名、所属班级、总评成绩),并返回这些基本信息给主调函数。
  

  方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值。参考代码如下:
  #include "stdio.h"
  #include "conio.h"
  struct inf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/
   char xh[12];
   char name[20];
   char class[15];
   int chj;
  };
  main(void)
  {
  struct inf a1; /*定义学生结构体类型变量*/
  void xxxx(struct inf *ptr);
  printf("请输入学号,姓名,班别,总评成绩,以空格隔开:\n") ;
  xxxx(&a1);/*调用函数,以学生结构体类型变量地址作为实参*/
  printf("学号:%s,姓名: %s,班别:%s,总评成绩:%d",a1.xh, a1.name,a1.class,a1.chj);
  getch();
  }
  void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/
  {
   char xh1[12],name1[20],class1[15];
   int chj1;
  scanf("%s%s%s%d",xh1,name1,class1,&chj1);
   strcpy(ptr->xh,xh1);
  strcpy(ptr->name,name1);
  strcpy(ptr->class,class1);
  ptr->chj=chj1;
   }
  调试结果如下:
  请输入学号,姓名,班别,总评成绩,以空格隔开:
  200102LiLi200185
  学号:200102,姓名: LiLi,班别:2001,总评成绩:85
  注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。
  
  5结束语
  


无经验学习C语言,有哪些大神级的建议可以分享?
C语言本身就是十分基础的编程语言,没有经验也应该从C语言开始学习。如果真的感觉C语言很难,那么也可以从VB开始学习,但是VB实用度不高,所以最好还是从C语言开始学习。C语言的入门书籍很简单,学完C就可以学C+然后就是JAVA之类。

c语言学习有问题求大神赐教
三个字送给你:多实践!编程这种事多半是靠实践,然后自己领悟,书本不过是领你进门,修行还是靠自己。

C语言问题,哪位大神知道?
Value cannot be null,很明显的提示呀,参数name的值不能为空null,给它赋一个不为空的值就行了。拓展:1、NULL,即Null,在C(C++)语言中它是一个无类型指针,并且值通常定义为0。NULL,空字符(也空终止符或空字节,缩写NUL),是一个控制字符与零值。 它存在于许多字符集中,包括ISO \/ IEC ...

C语言问题求大神指教
应该是这样才对:include<stdio.h> void fun(char *a,char *b){while(*a=='*')a++; \/\/跳过开头的一串‘*’while(*b=*a){b++;a++;} \/\/它等价于while((*b=*a)!='\\0'){b++;a++;} ,即复制余下的串到b中 } int main(){char s[]="***a*b***",t[80];fun(...

求C语言大神,本人大一,女,性格好,在宁波读书。C语言大神,我想和你做...
您好:在学校学习c语言的时候,我建议这么做。首先,你要有一本好书,至于什么是好书,我的理解是,能让人看懂的一本书就是好书。你可以去买谭浩强的那本书。然后,因为你是第一次接触,所以不知道怎么下手,所以建议看点视频,在这里推荐小甲鱼的视频。最后就是多上机调试代码,遇到疑问,就直接用程序...

...选择一种运算,输出结果,界面如下图有没有大神会帮帮我!
include<stdio.h> void input(int numA,int numB){ int choose,result;printf("---请选择一种运算---\\n");printf("1.加法\\n");printf("2.减法\\n");printf("3.城法\\n");printf("4.取整\\n\\n");printf("我选择:");scanf("%d",&choose);printf("\\n\\n");if(choose<1||choose...

我很久没复习c语言了,求求大神用c语言帮帮我编写下这个小程序。O(∩...
8%*1.8=x*(1-0.018+0.018*1.8)=x*(1+0.018*0.8)=1.0144*xreturn 1.0144*x;}int main(int argv,char *argc[]){int x;double t=1.8\/100*0.8;for(x=36000;x<=1000000;x++)printf("%7d:\\t%g\\n",x,f(x));return 0;}执行起来时间有点长,请耐心等待……

求C语言大神来编个程序呀。。。
设白皮有x块,则黑皮有(32-x)块,每块白皮是六边形,共6x条边,因每块白皮有三条边和黑皮连在一起,故黑皮共有3x条边,可得方程3x=5(32-x);所以:include"stdio.h"main(){ int x; for(x=1;x<32;x++) if(3*x==5*(32-x)) printf("黑皮块有%d块,白皮块有%d块...

急求C语言数据结构大神的帮助啊!!!
include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <conio.h>#define N 10struct stack {void *data;int top;};struct Calculator {struct stack *number;struct stack *op;};struct stack *newStack(int n, int size) {struct stack *s;s = (struct ...

c语言大神求教
因为for循环要从3循环到6共4次。第一次name+" ",第二次me+" ",第三次me+" ",第四次e+" "。所以最后结果是name ame me e 。从值的效果看没有区别。但逗号表达式是“一条”语句,所以用不着用{}括起来——一条语句只有一个值即x++的值;而(*x)++;x++;是...

长岛县15321284905: C语言,有没有大神来帮我读一下这个程序? -
闵卢奥九: 输入1个字符串str1对这个字符串的每个字符进行判断,如果小于0或者大于9,也就是说如果这个字符不是数字,就把它存到str2里面给str2的最后字符后免加上结尾输出str2

长岛县15321284905: 求C语言大神帮忙看看程序 -
闵卢奥九: 12345678910111213141516171819202122232425262728293031323334353637383940 #include<stdio.h>#include<string.h>#define N 10 intmain()//main尽量写成int main() { charname[N][15],m[15]; inti,j,k; printf("请输入姓名大写拼音,且...

长岛县15321284905: 高手们,帮我看看这个c语言程序 -
闵卢奥九: #include<stdio.h> main() { int a[]={2,4,6,8,10},y=1,x,*p; // 把a赋值为a[0]=2;a[1]=4;a[2]=6;a[3]=8;a[4]=10; 把Y赋值为1 声明一个X 和一个指向int的指针p p=&a[1]; //把p指向a[1] 注意 楼上的答案是错的 a[1]是数组的第二个!第一个是a[0] for(x=0;x<3;x++) y+=*(p+x); //循环x分别为0,1,2, 每次y+上a[1+x] printf("%d\n",y); //打印 }

长岛县15321284905: 求C语言大神帮我看看怎么写 -
闵卢奥九: 楼上回答太简单了,此程序存在很多问题,if中没有;,这是肯定的.然后就是,第一个if里面分好建议改成“||“,还有就是第一个if条件如果满足,那就不能再继续执行后面的语句了,所以应在第一个if中加入returu语句强制结束程序,第二个if条件我想应该是判断锐角,锐角要三角都必须小于90度,所以应把分好改成&&,,第三个if没啥问题,接下来的直角判断建议也用if来判断,if(a=90||b=90||=90),如果还有问题,请加微65去 77 掉92 076

长岛县15321284905: 求c语言大神帮我分析下下面这个程序
闵卢奥九: 应该对你有帮助的!这个函数遇到输入$才能打印一个$出来,否则就会继续调用自己,还是要判断$,所以直到出现美元符号,函数才能结束.c=getchar()这个函数每次只能取一个字符.也就是说你虽然输入了ABC$DEF这么多,如果只有一个c=getchar()的话,c里面只能存第一个字符,就是A.你自己画一画,没调用一次fun()就有一个字符被取走,直到美元符号.再把之前的用printf()就打印出来了结果就是$CBA

长岛县15321284905: 请大神帮忙看一个C语言程序,是实现提取一个字符串中所有数字的,有几行看不懂 -
闵卢奥九: 提取个数字写这么复杂!digit=*(pstr+i-1)-48; // pstr是字符串的指针, +i-1表示这个指针向右移到i-1个字符,*是表示取这个字符,也就是一个char类型的值,char类型实际上是一个byte变量,其取值范围是0-255.也就是说在这个字符串中取(pstr+i-1)处的一个字符,这个字符的ASCII编码值-48 就是digit的值.后面的问题太基础了,你自己去看看c++ primrary

长岛县15321284905: C语言不会读程序怎么办,有没有什么软件可以帮助读程序啊 各位大神求救 -
闵卢奥九: 没有软件可以帮你 不过用赫斌老师的话说如果不会读程序,用以下方法解决:1:看流程2:看每个语句的功能3:试数 对于一些小算法的程序大部分人都没办法自己解决,对于解决不了的的程序就先去看答案,这个要花很大精力,也是学习的重...

长岛县15321284905: 求高手帮我分析一个C语言程序
闵卢奥九: #include <stdio.h>void main(){ int year,month,totalday,week,w,i,j; int monthday[12]={0,31,59,90,120,151,181,212,243,273,304,334};//平年每月起始 int monthdayLeap[12]={0,31,60,91,121,152,182,213,244,274,305,335};//润年每月起始 int t[]={31...

长岛县15321284905: 求C语言大神帮我看看我的程序哪里有问题呀 程序是用来输出斐波纳契数列的前N项的,代码: #incl -
闵卢奥九: while (i这一句代码在n>1时直接造成死循环,代码根本执行不下去了.还有代码的意图是输出前n项,但是你的代码中目前就只有一个空循环,没有看到循环输出的代码.

长岛县15321284905: 帮我看一下C语言写的程序 -
闵卢奥九: 别用c,用python吧,用curl或者自带的api直接抓取网页,解析出来html然后判断html里的内容就行,建议使用多线程,或者携程来做

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网