热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言程序设计概论ppt,c语言与c语言程序设计

本文目录一览:1、c语言程序课程设计2.1【问题描述】设停车场是一个可停放n辆汽车的狭长

本文目录一览:


  • 1、c语言程序课程设计2.1【问题描述】 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。


  • 2、学习C语言需要掌握哪些基本知识?


  • 3、c语言程序设计课程用PPT讲课属于哪种教学模式

c语言程序课程设计2.1【问题描述】 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

#include stdio.h

#include stdlib.h

#include malloc.h

#define ERROR 0

#define OK 1

#define TRUE 1

#define FALSE 0

typedef int SElemType;

typedef int Status;

typedef int CarStack;

typedef int LinkQueue;

typedef int InputData;

// definition of array based stack

#define STACK_INIT_SIZE 100 //Initial size for memory allocation

#define STACKINCREMENT 10 //incremental size

typedef struct{

SElemType *base; //base pointer

SElemType *top; //top pointer

CarStack *garage;

CarStack *Temp;

LinkQueue *road;

InputData *inputdata

int stacksize; //current size

}SqStack;

status PopStack(CarStack *garage, CarStack *Temp, LinkQueue *road, InputData *inputdata)//车出库

{

CarNode *Car = (CarNode *)malloc(sizeof(CarNode));

if (!Car)

{

cout "内存分配失败!" endl;

exit(0);

}

Car-num = inputdata-num;

Car-leave = inputdata-t;

int i = garage-top;

while (i)

{

if (garage-stack[i -1 ]-num != Car-num)

{

garage-top--;//进临时车站

Temp-stack[Temp-top] = garage-stack[garage-top];

Temp-top++;

i--;//没有找到,继续循环查找

if (i == 0)

{

cout "没有该车牌的车!" endl;

}

}

else//获得车辆信息,并回归临时车栈的车辆

{

Car-reach = garage-stack[i -1 ]-reach;

Print(Car);//打印车辆收费单

garage-top--;

while (Temp-top0)//回归临时车站的车辆

{

Temp-top--;

garage-stack[garage-top] = Temp-stack[Temp-top];

garage-top++;

}

if (road-head != road-rear)//从便道出来一辆车到停车场

{

garage-stack[garage-top] = road-head-next;

cout endl;

cout "车场有空位,便道第一辆车可以进入!" endl;

garage-top++;

road-head = road-head-next;

}

i = 0;//已经找到,退出循环

}

}

}

void InfoStack(CarStack *garage)//车库车辆信息

{

if (garage-top ==0 )

cout "车库里没有车!" endl;

else

{

cout " _________________________ " endl;

cout "| |" endl;

cout "| 车 库 |" endl;

cout "|位置 车辆号码 到达时间|" endl;

for (int i = 0; igarage-top; i++)

{

cout "| " i +1 " " garage-stack[i]-num " " garage-stack[i]-reach " |" endl;

}

cout "|_________________________|" endl;

}

}

void InfoQueue(LinkQueue *road)//便道车辆信息

{

CarNode *p;

p = road-head-next;

int i = 0;

if (road-head == road-rear)

cout "便道里没有车!" endl;

else

{

cout " __________________ " endl;

cout "| |" endl;

cout "| 便道 |" endl;

cout "| 位置 车辆号码 |" endl;

while (p != NULL)

{

cout "| " ++i " " p-num " |" endl;

p = p-next;

}

cout "|__________________|" endl;

}

free(p);

}

void Print(CarNode *Car)//打印出站车辆信息

{

int rh, lh;

float t;

rh = Car-reach;

lh = Car-leave;

t = (lh - rh) * 60 *0.01 ;

cout " ---------------------------------------------------- " endl;

cout "| 车辆的号码 进库时间 离开时间 车费(元) |" endl;

cout "| " Car-num " " rh " " lh " " t " |" endl;

cout "|____________________________________________________|" endl;

}

void Input(InputData *inputdata)

{

int maxsize;

cout "请输入停车场容量 Maxsize (最多为5) : ";

do

{

cin maxsize;

if (!(maxsize5 maxsize0))

{

cout "输入有误,请重新输入停车场容量:";

}

} while (!(maxsize5 maxsize0));

int i = 0, j =0 , k =1 ;

char c;

int n;

CarStack garage, Temp;

LinkQueue road;

CarNode car;

InitStack(garage, maxsize);

InitStack(Temp, maxsize);

InitQueue(road);

while (k)

{

i = 0;

while (!i)

{

cout " ____________________________________________________________" endl;

cout "| |" endl;

cout "| 欢迎光临停车场,本停车场每分钟收费元 |" endl;

cout "| |" endl;

cout "| 请输入车库命令,格式如下(命令,车牌号,入库时间) |" endl;

cout "| |" endl;

cout "| A(a)-入库 D(d)-离开 P(p)-查看停车场车辆 P(p)-查看过道车辆 |" endl;

cout "|____________________________________________________________|" endl;

cin (inputdata-command) (inputdata-num) (inputdata-t);

c = inputdata-command;

n = inputdata-num;

if (c != 'A'c != 'a'c != 'D'c != 'd'c != 'W'c != 'w'c != 'P'c != 'p'c != 'E'c != 'e')

{

cout "命令不正确,请重新输入!" endl;

i =0 ;

}

else

i = 1;

// if(SearchInGarage(garage,n,maxsize)SearchInRoad(road,n))

// {

// i =0 ;

// cout"命令不正确,请重新输入!"endl;

// }

}

switch (c)

{

case 'A':

case 'a':

GetCarNode(garage, road, inputdata, maxsize);//获取车辆信息

break;

case 'D':

case 'd':

PopStack(garage, Temp, road, inputdata);//车出库

break;

case 'P':

case 'p'://查询停车场的信息

InfoStack(garage);//车库车辆信息

break;

case 'W':

case 'w'://查询侯车场的信息

InfoQueue(road);//便道车辆信息

break;

case 'E':

case 'e':

k =0 ;

break;

default:

break;

}

}

cout endl;

cin.clear();

}

bool SearchInGarage(CarStack garage, int n, int maxsize)//a表示要查找的车牌号,如果在停车场里面,就返回true

{

bool tag = false;

for (int i =0 ; imaxsize || (i != garage.top); i++)

{

if (n == garage.stack[i]-num)

{

tag = true;

break;

}

}

return tag;

}

bool SearchInRoad(LinkQueue road, int n)//a表示要查找的车牌号,如果在通道里面,就返回true

{

bool tag = false;

StackNode *p;

p = (StackNode *)malloc(sizeof(StackNode));

if (road.head != road.rear)//如果队列非空

{

p = road.head;

while (p != road.rear)

{

++p;

if (p-num == n)

tag = true;

}//退出此while循环时p指向最后一个元素

}

free(p);

return tag;

}

学习C语言需要掌握哪些基本知识?

(这是别人回答我的问题,感觉很有帮助你可以了解了解)如何学好c语言 \x0d\x0a 教了多年《C程序设计》课程,大多学生觉的这门课程难学。其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,克服心理上畏难、不轻言放弃,是完全可以学好的。 \x0d\x0a 《C程序设计》的内容很丰富,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好? \x0d\x0a 学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。 \x0d\x0a 那么,我们如何学好《C程序设计》呢? \x0d\x0a一.学好C语言的运算符和运算顺序 \x0d\x0a 这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。 \x0d\x0a 先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。下面我们通过几个例子来说明: \x0d\x0a(1) 5*8/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算5 *8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表达式的最终结果为10%10 = 0; \x0d\x0a(2)a = 3;b = 5;c =++ a* b ;d =a + +* b; \x0d\x0a 对于c=++a*b来说,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为4*5=20而不是3*5=15了;而对于d=a++*b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20; \x0d\x0a(3)(a = 3,b = 5,b+ = a,c = b* 5) \x0d\x0a 例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。 \x0d\x0a(4)a=5;b=6;c=ab?a:b; \x0d\x0a 例中的ab?a:b是一个三目运算,它的功能是先做关系运算ab部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if?else?语句的简单应用。 \x0d\x0a二.学好C语言的四种程序结构 \x0d\x0a(1)顺序结构 \x0d\x0a 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。 \x0d\x0a例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。 \x0d\x0a(2) 分支结构 \x0d\x0a 顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。 \x0d\x0a学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。 \x0d\x0a①if(条件) \x0d\x0a{ \x0d\x0a分支体 \x0d\x0a} \x0d\x0a这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x=0时,其绝对值不变,而x=0时,方程有两个实根,否则(b^2-4ac=0) \x0d\x0a{x1=(-b+sqrt(d))/2a; \x0d\x0ax1=(-b-sqrt(d))/2a; \x0d\x0aprintf(“x1=%8.4f,x2=%8.4f\n”,x1,x2); \x0d\x0a} \x0d\x0aelse \x0d\x0a{r=-b/(2*a); \x0d\x0ai =sqrt(-d)/(2*a); \x0d\x0aprintf(“x1=%8.4f+%8.4fi\n”r, i); \x0d\x0aprintf(“x2=%8.4f-%8.4fi\n”r,i) \x0d\x0a} \x0d\x0a③嵌套分支语句:其语句格式为: \x0d\x0aif(条件1) {分支1}; \x0d\x0aelse if(条件2) {分支2} \x0d\x0aelse if(条件3) {分支3} \x0d\x0a?? \x0d\x0aelse if(条件n) {分支n} \x0d\x0aelse {分支n+1} \x0d\x0a嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。 \x0d\x0a④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if?else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支??的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。 \x0d\x0a(3)循环结构: \x0d\x0a 循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do _while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do?while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。 \x0d\x0a在学完这三个循环后,应明确它们的异同点:用while和do?while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do?while循环是先执行循环体后判断表达式,也就是说do?while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。 \x0d\x0a 顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。 \x0d\x0a(4)模块化程序结构 \x0d\x0a C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因些,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。 \x0d\x0a三.掌握一些简单的算法 \x0d\x0a 编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a[i]与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,代码如下: \x0d\x0afor(i=1;ia[j] \x0d\x0a{temp=a[i]; \x0d\x0aa[i]=a[j]; \x0d\x0aa[j]=temp; \x0d\x0a} \x0d\x0a结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学。

c语言程序设计课程用PPT讲课属于哪种教学模式

如果不是通过网络上课的,就算多媒体教学模式。当然了,肯定不是板书模式(老师在黑板上书写);通过网络上课是网络教学模式


推荐阅读
  • 那你就是学的c语言,跟我学c语言
    本文目录一览:1、如何学习C语言?2、新手如何 ... [详细]
  • JAVA流程控制结构在java中有三种流程控制结构:顺序结构,选择结构,循环结构顺序结构:顺序结构,是指程序从 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文小编为大家详细介绍“Java中的逻辑结构模式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的逻辑结构模式有哪些”文章能帮 ... [详细]
  • switch分支结构一、程序运行流程的分类1、顺序结构:根据程序顺序依次执行。2、分支结构:根据判断决定程序的执行顺序。3、循环结构。分支结构三要素&# ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Java编程实现邻接矩阵表示稠密图的方法及实现类介绍
    本文介绍了Java编程如何实现邻接矩阵表示稠密图的方法,通过一个名为AMWGraph.java的类来构造邻接矩阵表示的图,并提供了插入结点、插入边、获取邻接结点等功能。通过使用二维数组来表示结点之间的关系,并通过元素的值来表示权值的大小,实现了稠密图的表示和操作。对于对稠密图的表示和操作感兴趣的读者可以参考本文。 ... [详细]
  • 学生总结内容回复1147div指令,内存寻址,数组用dup设置内存空间重复的值,根据指令,分析操作数的 ... [详细]
  • 六、流程控制语句
    选择结构if只有条件判断结果为真时才执行相应的操作循环结构for、whileuntil反复执行相同操作时,使用循环结构分支结构case根据变量值的匹配结果执行相 ... [详细]
  • 分支结构程序设计练习
    任务1:从键盘输入三个整数,按从小到大排序输出。实现思路:定义三个整形变量x,y,z,分别存放从键盘输入的整数。比较x和y的值,如果xy,则x和y的值交换;比较x和z的值, ... [详细]
author-avatar
诺vs诺197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有