谁能帮我分析一下C语言的这个程序
p,t,s被声明为指针,n,max,min被声明为整型变量。 scanf("%d",&n); while(n!=0) { t=(struct node*)malloc(sizeof(struct node)); t->data=n; t->next=p; p=t; scanf("%d",&n); }这段程序段负责输入一串正整数,以0结束,并存储在链表中。 t=(struct node*)malloc(sizeof(struct node));为t申请一个动态存储空间。 t->data存储输入的值,p存储“下一个 ”指针值,也即“下一个”输入值的存储地址。注意这里实际上是从后往前存储的(最先输入的数在链表末端,所以0实际上在链表头),p=t确保输入的数既在逻辑上相邻,也在物理上相邻。if(p==NULL) return; max=p->data; min=p->data; s=p->next; while(s!=0) { if(s->data>max) max = s->data; else if(s->datadata; s=s->next; } 这段程序段负责用指针s遍历链表,并用 s->data 保存遍历过程中遇到的最大最小值,将最大值赋给max,最小值赋给min,最后输出的就是输入的数中最大值与最小值的差。
#include
int prime(int n)//函数功能判断是否素数
{int i;
for(i=2;i<n;i++)
if(n%i==0) return 0;
return 1;
}
void main()
{
int m,j;
scanf("%d",&m);//键入
for(j=2;j<m;j++)//循环判断
if(m%j==0 && prime(j))//检索条件 即是这个数的因子 又要是素数
printf("%4d
",j);
}
你的代码有点错误,两个for(i=0;i<4;i++);后面不应该有分号,如果有分号,那么for循环就没有进去,也就是没有给数组赋值。当然会出现内存错误。
你把两个for语句后面的分号去点就行了
# include<stdio.h>
int main ()
{
int a[4];
int i;
for(i=0;i<4;i++)
a[i]=i;
for(i=0;i<4;i++)
printf("%d ",a[i]);
}
返回值,举个例子:就是编的每一个程序都可以看成一个函数,就是有输入,有输出,这个输出就是返回值的一种。格式是return +结果
C语言中的函数有两种形式:1)有返回值,2)无返回值。有返回值的函数会把执行的结果(也就是你写这个函数的目的)返回到主函数中。没有返回值的函数主要是为了完成某种任务(其实这是废话,函数的功能就是为了完成某种任务。)而一般没有任何值返回到主函数中(也可以通过在无返回值的函数中操作全局变量来改变主函数中的变量的值)。函数声明的方式是:
Type FunctionName(type argument1,type argument2....type argumentn)
{
//函数体
}
type 可以为任意的C语言中的数据类型。也可以为VOID(即无返回值)。
其次,main函数的前面可以为int也可以为void.因为main函数也是函数(废话)。当这个函数执行完毕之后会返回给系统一个值,0表示正确(常)执行。如果你写void的话,编译调试的时候,编译器会自动像系统返回一个值。
第三,在写C++程序的时候一般写:
int main()
{
....
....
return 0;
}
-------------------------------------------------------------------------------
改后的代码:
#include<stdio.h>
int main ()
{
int a[4];
int i;
//给整型数组赋值
for(i=0;i<4;i++) //我把这里的“;”去掉了
a[i]=i;
//输出数组的值
for(i=0;i<4;i++) //我把这里的“;”去掉了
printf("%d ",a[i]);
//加了返回值
return 0;
}
---------------------------------------------------------------------------
运行结果:
0 1 2 3
-----------------------------------------------------------------------------
对你疑问的解答:
1.
问:我在计算机上执行的结果为 4 但是书上的结果是0 1 2 3 不过我的点那在执行的时候 出现了xxx内存不能为writen 可能计算机出问题了?
答:由于“for(i=0;i<4;i++); ”后有";",于是系统认为你的循环体为空,这条语句的作用就只是让i的值改为4,接着执行“a[i]=i;”,让a[4]=4;而不是像你想象的那样"for(i=0;i<4;i++) a[i]=i; "这个循环
2.
问:第二个for语句有什么用吗?
答:有用,其作用是输出数组的值,通俗的说作用就是让使用这程序的人知道数组的值;你想下,如果没这语句,这个程序运行起来就是个哑巴,什么也不说了;还有就是,你的这第二个for语句犯了和第一个for语句同样的错误,我帮你改了
3.
问:返回值又是什么东西呢?
答:在main()中可以不写返回值,系统会帮你写;你要想了解返回值的作用的话,我写一个函数告诉你:
//输入:a,b
//功能:进行加法运算
//输出:c
int add(int a, int b)
{
int c;
c=a+b;
return c;
}
如果没有“return c;”这句话,这个加法函数将不返回两个数相加的结果。
4.
问:我刚学 什么都不懂 以前接触的 main前面既没有int有没有viod啊
答:在main()函数前没有int或void这个功能只被少数编译器支持,虽然你没写出来,这类编译器还是会帮你写的;我的建议就是在前面加上int,这被所有的C编译器支持
----------------------------------------------------------------------------------------
补充:
如果你还是不大明白,请加我的百度为好友,我再给你讲
int main的int表示返回值:操作系统调用程序运行,在程序运行结束后会返回给操作系统一个结果,就是这个返回值。
若没有返回值的话,根据编译器的不同可能会返回一个0值或随机数。与此同时,编译器往往会产生一个警告。
第二个for循环的作用是循环输出数组中的数据。
补充:
返回值是调用一个函数后函数的执行结果,在C语言中一般将其存放在AX(或EAX)寄存器中返回。比如函数:
double add(double a, double b){
return a+b;}
会将a和b的值相加,然后返回给调用它的语句,如:
double m=5;n=6;
double x=add(m,n);
则程序在运行时,会将函数add的返回值赋值给x。
你前面学的mian没有int
是缺省的 对于函数来说 前面如果没有类型的话 那么缺省就是int
还有你2个for喜欢后面就加了;号是错的。。
你这样就只是给a[4]赋值但是 数组下标只是a[0]-a[3]所以你这个非法的
但是标准C好像定义可以给数组后面的一个赋值 但是不能引用他
就想你这样a[4]=4 是可以的 但是printf("%d",a[i])就是错的了
改为
for (i=0;i<4;i++)
{
a[i]=i+1;
}
for(i=0;i<4;i++)
{
printf("%d ",a[i]);
}
就不会出错了
main也是个函数 有int 代表有必须有返回值 就是末尾的包含return语句
这个返回值是返回个系统的
如果不想返回值就这样写 main() 末尾也不用加return
你运行后输出4 是因为你在 for 语句后面加上啦分号
for 后面是不能加分号的 否则将会当作一条独立的语句啦
应该去掉分号 想下面这样
for(i=0;i<4;i++)
a[i]=i;
for(i=0;i<4;i++)
就会输出 0 1 2 3 啦
第二条 for语句是 循环输出数组的每个元素
for(i=0;i<4;i++)
printf("%d ",a[i]);
能帮我看一下这道题用c语言怎么写吗?
\/\/ 定义存储班上所有同学姓名的数组 char* students[] = { "john","peter","jack","lucy","tom","jenny","bill","wang","leo","mike"};\/\/ 获取班上所有“wang”姓的同学的姓名 char** get_wang_students(char** students, int num_students, int* num_wang_students) { \/\/ 定义一...
谁能给我详细分析一下这个C语言程序??
\\t 制表符 一般输出占用 到 第最小的8*i(整数)个 字符处。\\b 退格符 。 c4 、 c5 为对应字符的ASCII码值 (似乎是八进制表示的...)。分别为 A 、 N 。printf函数参数里 , 在 "" 内的部分 ,%c表示字符型 ,d表示整形...详见课本 。(可以在网上下谭浩强的C语言教程)输出一个 ...
...在什么情况下用到他们 为什么会用呢 请高手们帮助一下吧_百度...
题目中两个回车换行,为了保证即和上边一行换,有防止下一个printf忘记加换行符,导致打印在一行。就像温度计量体温,其前后都要甩一下一样。当然,这是多余的。比如:如果i=1 area=2 printf(" l=%f",l)printf("area=%f\\n",area)结果:1 2.00000 希望对楼主有帮助~~...
请帮我完善的讲解一下C语言中原码,反码,补码之间的关系。正数的,负数...
分析如下:对于机器数为正数,则[X]原=[X]补 对于机器数为负数,则有[X]原=[[X]补]补 现给定的为负数,故有:[X]补=11100110 [[X]补]反=10011001+1 [[X]补]补=10011010=[X]原+1 [[X]补]补=10011010=[X]原 总结一下,原码(为负时,正时都不变)全部取反...
计算机C语言有什么用啊??
用处:C语言是一种计算机程序设计语言。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。特征:1、C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是...
C语言是一种什么语言?
印度的程序设计课程采用“事件驱动式”教学,我认为在中国的c语言程序设计教学中应该采用“项目驱动式”教学。“项目驱动式”教学就是以项目为目的,以c语言理论教学为过程,最终能用c语言设计项目,实现项目的要求。“项目驱动式”教学的关键在于培养学生“如何做什么”和“可以干什么”。一个项目就是一个工程,在“...
帮看一下这个C语言程序的分析,,,谢啦,,
include<stdio.h>main(){ static char a[]="Program",*ptr; \/\/定义一个字符数组(长度为8),初始化为'P','r','o','g','r','a','m','\\0',另外顶一个字符指针ptr for(ptr=a;ptr
一个C语言程序求分析
分析一:这个程序的输入是变量"_",因为标准C中是允许下划线开头的变量的,仅有下划线也满足变量命名的要求;分析二:双下划线"__"这里不能理解为变量,我猜测"__TIME__"是C语言中的一个宏定义,是一个整体;分析三:断句。仔细从“乱码”中能一眼看出两个关键字"main"和"putchar"。main函数里面...
...给我解释一下 c语言中 这个语句的意思;为什么可以这样写,我一直没想...
以你的第一个for循环为例 for (i = t; i > 0; i--)执行一个for循环,一般会有一个循环变量,有循环终止与否的判断 1) i =t, 在进入for循环前,执行一次,对循环变量进行初始化,初始值为5 2)i>0,循环进行的条件,就是只要循环变量大于0,就一直执行 3)执行完循环体之后,就来这里...
C语言一道简单的代码,麻烦帮我解析一下,我表示看不懂。。。
if(x<y) 由于10<20,所以 跳到if(!ok1) 这里ok1=5 表示非0 ,所以 !ok=0,所以程序接着执行else后面的 if(ok2) 因为ok2=0;所以接着执行a=-1 整个流程是:if (x<y)->if(!ok1)->else->if(ok2)->a=-1
锺很舒坦: 结果为T=333 在整个程序中,变量X的值是没有变化的, 当K=1 ,FOR 循环执行完后 T=33 , 所以此时T的值已经改变,由于指令语句 T=X ;在FOR循环的外层,所以当执行FOR循环时,此指令语句不会被执行,然后FOR 循环语句执行当K=2时,变量T的累乘.当K条件不满足时,程序跳出循环,程序执行结束.
宁波市18684997918: 【急急急】求高手解释下C语言的一个程序~~~?
锺很舒坦: int i,n; //定义整型变量 char ch; //定义字符型变量 scanf("%d",&n); //接受整型变量并赋值给n printf("十六进制:%x\n",n);//将n转换为十六进制并输出 printf("八进制:%o\n",n); //将n转换为八进制并输出 printf("二进制:")...
宁波市18684997918: 求c语言大神帮我分析下下面这个程序?
锺很舒坦: 应该对你有帮助的!这个函数遇到输入$才能打印一个$出来,否则就会继续调用自己,还是要判断$,所以直到出现美元符号,函数才能结束.c=getchar()这个函数每次只能取一个字符.也就是说你虽然输入了ABC$DEF这么多,如果只有一个c=getchar()的话,c里面只能存第一个字符,就是A.你自己画一画,没调用一次fun()就有一个字符被取走,直到美元符号.再把之前的用printf()就打印出来了结果就是$CBA
宁波市18684997918: 帮看一下这个C语言程序的分析,,,谢啦,, - ?
锺很舒坦: #include<stdio.h> main() {static char a[]="Program",*ptr; //定义一个字符数组(长度为8),初始化为'P','r','o','g','r','a','m','\0',另外顶一个字符指针ptr for(ptr=a;ptr<a+7;ptr+=2) //指针从字符数组首地址开始,每次步长为2,在数组范围内读取数组元素 putchar (*ptr); //输出Ptr指向的数组元素 }实际运行结果为输出 Porm
宁波市18684997918: 帮我解释一下这个C语言程序? - ?
锺很舒坦: #include <stdio.h> --头文件 extern void sort(int *srcarray,int number); --声明外部函数 int main(void) --主函数 { int i=0; int num=0; int *arr1=NULL; int *arr2; while(num <= 0) 输入要排序的数据的个数 { printf("please enter the number of elements:\n...
宁波市18684997918: 谁能帮我解读这个C程序??
锺很舒坦: main() main主函数 { int g,f,sum=0; 定义g,f,sum为整形,其中sum等于0 scanf("%d",&f); 输入f,f为十进制数值 for(g=1;g<=f;g++) 定义g为1 如果g<=f则执行sum=sum+g;不然则跳出. 然后g自加1循环 { sum=sum+g; sum等于sum加上g,sum和g在前面你已经定义了 } printf("%d\n",sum); 打印sum的值,十进制显示,并且光标跳到下一行 }
宁波市18684997918: 求高手帮我分析一个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...
宁波市18684997918: 帮忙分析这个C语言程序(写下步骤!)?
锺很舒坦: #include <stdio.h> void main() { int n; float sum = 0, flag; printf("input your number:"); scanf("%d", &n); if(n%2 == 0) //判断n的奇偶性 while(n) //如果是偶数,当n不为0的时候执行下面程序,每循环一次n少2 { flag = n; sum = 1/flag + sum; n = n - ...
宁波市18684997918: 谁帮我解释一下这个c程序,谢谢! - ?
锺很舒坦: char p[20],*q=p; 首先定义了一个数组P[20],一个char型指针, 然后将数组P[20]的首地址赋给指针q.scanf(“%s %s”,p,q);//向P[20]和指针所指...
宁波市18684997918: C语言程序谁来分析下 - ?
锺很舒坦: 问题是那个&i, 这个是输入i的地址来着 应该就是scanf("%ld",i);