c语言能编什么样的程序?
学C语言一学期了,感觉C语言都是在写一些很简单的东西,比如:1+2+3+...+100=?;100以内的素数;输入一串字符,将其反序...我想知道C语言能有多大的潜力,能...
学C语言一学期了,感觉C语言都是在写一些很简单的东西,比如:1+2+3+...+100=?;100以内的素数;输入一串字符,将其反序...
我想知道C语言能有多大的潜力,能编出什么样的程序,能否独立完成一个软件的开发.希望能有高人给些指点,让我在学习的路上也有动力!~ 展开
我想知道C语言能有多大的潜力,能编出什么样的程序,能否独立完成一个软件的开发.希望能有高人给些指点,让我在学习的路上也有动力!~ 展开
14个回答
推荐于2017-10-05
展开全部
这个问题有点像,学习英文有什么用?回答是,英文没有任何用途,但是用英文写的书籍、资料确实相当的有用,甚至是不可缺少的。
同样,仅仅孤立的学习c,除了能通过考试,也没有任何用,但是问题就是目前大多数的公司的项目,以及开源项目,都是用c来描述的,他们很有用。
c无所不能,仅仅懂得语法却是一无是处。
如果你精通了windows下的api,那么你可以用c开发任何的windows应用程序,当然也可以不用c,用任何一门你喜欢的语言,只要你有相应的编译器。
如果你想开发其他os的应用程序,也只要学习相应os平台的api即可。
如果你想开发一个驱动程序,你应该学习你所对应操作系统的驱动框架以及硬件的知识,最后再用c来实现,最后的实现也许用的最多的就是赋值语句,例如向地址为0x7F000000地方写一个数0x1234,至于为什么是这个地址以及为什么要写这个数,你可能研究了一周的datasheet才得出结论。
如果你的强项是算法,假如你能把一张8G的dvd能压缩成8M并且画质还可被大众接受,那么你只需要把论文发表,论文上用数学的原理把这个事情解释清楚就可以了,到时候会有无数的小弟帮你编程实现。如果你没有达到这个高度,你想要看看其他人的算法,这个算法的实现虽然说和具体语言没有任何关系,可大部分的还是c描述的,所以学了c也不吃亏。
同样,仅仅孤立的学习c,除了能通过考试,也没有任何用,但是问题就是目前大多数的公司的项目,以及开源项目,都是用c来描述的,他们很有用。
c无所不能,仅仅懂得语法却是一无是处。
如果你精通了windows下的api,那么你可以用c开发任何的windows应用程序,当然也可以不用c,用任何一门你喜欢的语言,只要你有相应的编译器。
如果你想开发其他os的应用程序,也只要学习相应os平台的api即可。
如果你想开发一个驱动程序,你应该学习你所对应操作系统的驱动框架以及硬件的知识,最后再用c来实现,最后的实现也许用的最多的就是赋值语句,例如向地址为0x7F000000地方写一个数0x1234,至于为什么是这个地址以及为什么要写这个数,你可能研究了一周的datasheet才得出结论。
如果你的强项是算法,假如你能把一张8G的dvd能压缩成8M并且画质还可被大众接受,那么你只需要把论文发表,论文上用数学的原理把这个事情解释清楚就可以了,到时候会有无数的小弟帮你编程实现。如果你没有达到这个高度,你想要看看其他人的算法,这个算法的实现虽然说和具体语言没有任何关系,可大部分的还是c描述的,所以学了c也不吃亏。
展开全部
理论上,C可以编写所有类型的程序,这得益于C的高移植性。
你之所以觉得C只能够编写一些小程序,源于你目前仅仅是初学者,只是在编写一些简单的console程序。
等到你C的基础比较扎实了,你可以尝试使用WIN32 SDK在VC环境下编写纯粹的win32程序,这个时候你就可以知道C可以做什么了。
不过老实话,在现代,C所使用的范畴都是比较底层的环境,所要求的并不仅仅是你目前所见到的“C语法”,而是硬件、接口等。
或者说,对于初学者来说,C是一个不错的入门语言,而对于高手来说,C又是在一个神秘大门后面。
你之所以觉得C只能够编写一些小程序,源于你目前仅仅是初学者,只是在编写一些简单的console程序。
等到你C的基础比较扎实了,你可以尝试使用WIN32 SDK在VC环境下编写纯粹的win32程序,这个时候你就可以知道C可以做什么了。
不过老实话,在现代,C所使用的范畴都是比较底层的环境,所要求的并不仅仅是你目前所见到的“C语法”,而是硬件、接口等。
或者说,对于初学者来说,C是一个不错的入门语言,而对于高手来说,C又是在一个神秘大门后面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以写一些没有图像层的小游戏
/* 这是彭搏同学的推箱子游戏,大家试试玩,谁有更好的Idea? */
#include"stdio.h"
#include"bios.h"
#define LEFT 75
#define RIGHT 77
#define UPPER 72
#define DOWN 80
#define ESC 27
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
{
int x,y;
};
union keyboard /*定义读取键盘码的共用体类型*/
{
unsigned int iKeyInfo;
char chKeyBit[2];
};
int fnGetKey(void) /*定义读取键盘码的函数*/
{
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
while(bioskey(1)==0); /*检测用户是否按键*/
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
}
void main()
{
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
struct Boxss Box[4]; /*定义箱子数量*/
int chMap[10][10]={ /*用二维数组定义地图*/
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
{0,1,0,0,0,0,1,1,1,0},
{0,1,0,2,0,0,1,0,1,0},
{0,1,0,1,0,0,1,0,1,0},
{0,1,1,1,0,0,1,0,1,0},
{0,1,0,0,0,0,1,0,1,0},
{0,1,1,1,1,1,1,0,1,0},
{0,1,0,1,0,0,0,0,2,0},
{0,2,0,1,1,1,1,2,0,0},
{0,0,0,0,0,0,0,0,0,0},
};
int i,j;
Box[0].x=13; /*定义箱子的坐标属性*/
Box[1].x=11;
Box[2].x=14;
Box[3].x=18;
Box[0].y=8;
Box[1].y=7;
Box[2].y=13;
Box[3].y=7;
while(1) /*反复进行求移动的坐标运算*/
{
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
{
gotoxy(10,5+i);
for(j=0;j<10;j++)
{
if(chMap[i][j]==0)
printf("#");
if(chMap[i][j]==1)
printf(" ");
if(chMap[i][j]==2)
printf("X");
}
}
j=0; /*判断是否所有箱子都在目标坐标上*/
for(i=0;i<4;i++)
if(chMap[Box[i].y-5][Box[i].x-10]==2)
j++;
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
{
clrscr();
printf("You Win!");
break;
}
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
{
gotoxy(Box[i].x,Box[i].y);
printf("0");
}
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
printf("*\b");
tx=x; /*记录本次移动前的坐标*/
ty=y;
iKey=fnGetKey();
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
x--;
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
x++;
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
y--;
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
y++; /*输入ESC退出并输出"YOU LOST"*/
if(iKey==ESC)
{
clrscr();
printf("You Lost");
break;
}
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
if(Box[i].x==x&&Box[i].y==y)
{
Box[i].x+=(x-tx);
Box[i].y+=(y-ty);
if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
{
Box[i].x-=(x-tx);
Box[i].y-=(y-ty);
x=tx;
y=ty;
}
break;
}
clrscr();
}
getch();
}
/* 这是彭搏同学的推箱子游戏,大家试试玩,谁有更好的Idea? */
#include"stdio.h"
#include"bios.h"
#define LEFT 75
#define RIGHT 77
#define UPPER 72
#define DOWN 80
#define ESC 27
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
{
int x,y;
};
union keyboard /*定义读取键盘码的共用体类型*/
{
unsigned int iKeyInfo;
char chKeyBit[2];
};
int fnGetKey(void) /*定义读取键盘码的函数*/
{
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
while(bioskey(1)==0); /*检测用户是否按键*/
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
}
void main()
{
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
struct Boxss Box[4]; /*定义箱子数量*/
int chMap[10][10]={ /*用二维数组定义地图*/
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
{0,1,0,0,0,0,1,1,1,0},
{0,1,0,2,0,0,1,0,1,0},
{0,1,0,1,0,0,1,0,1,0},
{0,1,1,1,0,0,1,0,1,0},
{0,1,0,0,0,0,1,0,1,0},
{0,1,1,1,1,1,1,0,1,0},
{0,1,0,1,0,0,0,0,2,0},
{0,2,0,1,1,1,1,2,0,0},
{0,0,0,0,0,0,0,0,0,0},
};
int i,j;
Box[0].x=13; /*定义箱子的坐标属性*/
Box[1].x=11;
Box[2].x=14;
Box[3].x=18;
Box[0].y=8;
Box[1].y=7;
Box[2].y=13;
Box[3].y=7;
while(1) /*反复进行求移动的坐标运算*/
{
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
{
gotoxy(10,5+i);
for(j=0;j<10;j++)
{
if(chMap[i][j]==0)
printf("#");
if(chMap[i][j]==1)
printf(" ");
if(chMap[i][j]==2)
printf("X");
}
}
j=0; /*判断是否所有箱子都在目标坐标上*/
for(i=0;i<4;i++)
if(chMap[Box[i].y-5][Box[i].x-10]==2)
j++;
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
{
clrscr();
printf("You Win!");
break;
}
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
{
gotoxy(Box[i].x,Box[i].y);
printf("0");
}
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
printf("*\b");
tx=x; /*记录本次移动前的坐标*/
ty=y;
iKey=fnGetKey();
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
x--;
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
x++;
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
y--;
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
y++; /*输入ESC退出并输出"YOU LOST"*/
if(iKey==ESC)
{
clrscr();
printf("You Lost");
break;
}
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
if(Box[i].x==x&&Box[i].y==y)
{
Box[i].x+=(x-tx);
Box[i].y+=(y-ty);
if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
{
Box[i].x-=(x-tx);
Box[i].y-=(y-ty);
x=tx;
y=ty;
}
break;
}
clrscr();
}
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题有点像,学习英文有什么用?回答是,英文没有任何用途,但是用英文写的书籍、资料确实相当的有用,甚至是不可缺少的。
同样,仅仅孤立的学习c,除了能通过考试,也没有任何用,但是问题就是目前大多数的公司的项目,以及开源项目,都是用c来描述的,他们很有用。
c无所不能,仅仅懂得语法却是一无是处。
如果你精通了windows下的api,那么你可以用c开发任何的windows应用程序,当然也可以不用c,用任何一门你喜欢的语言,只要你有相应的编译器。
如果你想开发其他os的应用程序,也只要学习相应os平台的api即可。
如果你想开发一个驱动程序,你应该学习你所对应操作系统的驱动框架以及硬件的知识,最后再用c来实现,最后的实现也许用的最多的就是赋值语句,例如向地址为0x7F000000地方写一个数0x1234,至于为什么是这个地址以及为什么要写这个数,你可能研究了一周的datasheet才得出结论。
如果你的强项是算法,假如你能把一张8G的dvd能压缩成8M并且画质还可被大众接受,那么你只需要把论文发表,论文上用数学的原理把这个事情解释清楚就可以了,到时候会有无数的小弟帮你编程实现。如果你没有达到这个高度,你想要看看其他人的算法,这个算法的实现虽然说和具体语言没有任何关系,可大部分的还是c描述的,所以学了c也不吃亏。
同样,仅仅孤立的学习c,除了能通过考试,也没有任何用,但是问题就是目前大多数的公司的项目,以及开源项目,都是用c来描述的,他们很有用。
c无所不能,仅仅懂得语法却是一无是处。
如果你精通了windows下的api,那么你可以用c开发任何的windows应用程序,当然也可以不用c,用任何一门你喜欢的语言,只要你有相应的编译器。
如果你想开发其他os的应用程序,也只要学习相应os平台的api即可。
如果你想开发一个驱动程序,你应该学习你所对应操作系统的驱动框架以及硬件的知识,最后再用c来实现,最后的实现也许用的最多的就是赋值语句,例如向地址为0x7F000000地方写一个数0x1234,至于为什么是这个地址以及为什么要写这个数,你可能研究了一周的datasheet才得出结论。
如果你的强项是算法,假如你能把一张8G的dvd能压缩成8M并且画质还可被大众接受,那么你只需要把论文发表,论文上用数学的原理把这个事情解释清楚就可以了,到时候会有无数的小弟帮你编程实现。如果你没有达到这个高度,你想要看看其他人的算法,这个算法的实现虽然说和具体语言没有任何关系,可大部分的还是c描述的,所以学了c也不吃亏。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每种语言都有自己的优点和缺点,C语言一样。
C语言是一种中高级语言,可以完成别的语言能做到的任何事,从实现功能上来说C语言要比java之类的高级语言强大。但是,某些时候C语言要实现一个功能肯定比某些高级语言要复杂,因为高级语言已经为你封装了很多,隐藏了技术上的一些难点,这是C的缺点。
你要完成什么样的软件,就该选什么样的语言,要是做网址什么的,C语言肯定不是好选择,要是你做系统软件,C语言就很不错了。
答案满意不?
C语言是一种中高级语言,可以完成别的语言能做到的任何事,从实现功能上来说C语言要比java之类的高级语言强大。但是,某些时候C语言要实现一个功能肯定比某些高级语言要复杂,因为高级语言已经为你封装了很多,隐藏了技术上的一些难点,这是C的缺点。
你要完成什么样的软件,就该选什么样的语言,要是做网址什么的,C语言肯定不是好选择,要是你做系统软件,C语言就很不错了。
答案满意不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询