c语言程序设计朱鸣华pdf(《C语言程序设计现代方法》 电子文本 或者称 非扫描版)

本文目录
《C语言程序设计现代方法》 电子文本 或者称 非扫描版
首先不了解汇编语言就等于没学编程语言。得了解汇编语言,推荐王爽《汇编语言》前两章;如果想更进一步了解计算机,推荐《穿越计算机的迷雾》下本电子书,两天看完就行。这是历史性的东西。然后买本或者复印本国外的著名教材,比如《C语言程序设计现代方法》,看书的时候多写程序,思考怎么用计算机编程解决一些问题,然后具体去写一些程序。写程序的时候要思维活跃一些,不是说书上不让做的就一定不去做,越是书上不让做的,越要试一试,有着自由的精神。然后呢,如果你不满足于现状,可以去了解一些面向对象的知识,算法的知识,还有数理逻辑的一些玩意。国内C语言,做题仅仅是为了复习基本的语法知识,做一点就行,重要的是得多思考问题。
求助两个C语言的程序设计
1、编写一个程序,完成两个数的四则运算
#include 《stdio.h》
#include 《malloc.h》
#include 《math.h》
#include 《string.h》
#include 《ctype.h》
#define M 40
/*定义堆栈*/
typedef struct{
double data;
int top;
}Stack;
/*初始化堆栈*/
InitStack(Stack *s)
{
s-》top=0;
}
/*判断栈是否为空*/
int StEmpty(Stack *s)
{
if(s-》top==0)
{
return 1;
}
else
{
return 0;
}
}
/*入栈操作*/
StPush(Stack *s,double x)
{
if(s-》top==M)
{
printf("The stack is overflow!");
}
else
{
s-》top=s-》top+1;
s-》data=x;
}
}
/*出栈操作*/
double StPop(Stack *s)
{
double t;
if(!StEmpty(s))
{
t=s-》data;
s-》top=s-》top-1;
}
else
{
printf("StPop:The stack is empty!");
t=NULL;
}
return t;
}
/*获取栈顶元素*/
double StGetTop(Stack *s)
{
double t;
if(!StEmpty(s))
{
t=s-》data;
}
else
{
printf("StGeTop:The stack is empty!");
t=NULL;
}
return t;
}
/*将数字字符转换成整形*/
int ChrTransferint(char c)
{
int n;
switch(c)
{
case ’0’: n=0;break;
case ’1’: n=1;break;
case ’2’: n=2;break;
case ’3’: n=3;break;
case ’4’: n=4;break;
case ’5’: n=5;break;
case ’6’: n=6;break;
case ’7’: n=7;break;
case ’8’: n=8;break;
case ’9’: n=9;break;
}
return n;
}
/*获取两个操作符之间数字字符的个数,返回的是最后一个数字字符的位置*/
int GetNumsize(char str,int n1)
{
int n2=n1;
while(isdigit(str)==46)/*isdigit()判断是否数字字符*/
{
n2=n2+1;
}
return n2;
}
/*判断上个函数中获得的数字字符串中是否包含小数点,并返回它的位置,不包含,返回-1*/
int IsIncludepoint(char str,int n1,int n2)
{
int n3=-1;
int i;
for(i=n1;i《=n2;i++)
{
if(str==’.’)
{
n3=i;
break;
}
}
return n3;
}
/*将数字字符转换成数值*/
double Transfer(char str,int n1,int n2,int n3)
{
double data=0;
int i,ct;
if(n3《0)
{
for(i=n2;i》=n1;i--)
{
ct=ChrTransferint(str);
data=data+ct*pow(10,n2-i);/*pow(x,y)计算x的y次方的值*/
}
}
else
{
for(i=n3-1;i》=n1;i--)
{
ct=ChrTransferint(str);
data=data+ct*pow(10,n3-1-i);/*pow(x,y)计算x的y次方的值*/
}
for(i=n3+1;i《=n2;i++)
{
ct=ChrTransferint(str);
data=data+ct*pow(0.1,i-n3);/*pow(x,y)计算x的y次方的值*/
}
}
return data;
}
/*主程序*/
main()
{
char str,c;
char a;
int n,p1,p2,p3; /*n为字符串长度,p1,p2,p3分别为数字字符起始位置,结束位置,和小数点位置*/
double data; /*存放转换后的数值*/
int i=0;
Stack *so=(Stack *)malloc(sizeof(Stack)); /*存储操作符 ’(’:1,’+’:2,’-’:3, ’*’:4,’/’:5 字符’),=’不压栈*/
Stack *sd=(Stack *)malloc(sizeof(Stack)); /*存储操作数*/
InitStack(so);
InitStack(sd);
printf("Please input formula(format:(1+2)*1.2/4=):\n");
n=0;
while((a=getchar())!=’\n’)
{
str=a;
n++;
}
while(i《n)
{
char c;
c=str;
if(c==’(’)
{ /*c若是’(’直接入栈so,i++*/
StPush(so,1);
i++;
}
else if(isdigit(c))
{
p1=i; /*c若是数字字符,一并将后面的连续数字字符转换为数值并压栈到sd,并把i设为后面的*/
p2=GetNumsize(str,p1);
p3=IsIncludepoint(str,p1,p2-1); /*第一个非数字字符的位置*/
data=Transfer(str,p1,p2-1,p3);
StPush(sd,data);
i=p2;
}
else if(c==’+’)
{
StPush(so,2); /*c若是’+’直接入栈so,i++*/
i++;
}
else if(c==’-’)
{
StPush(so,3); /*c若是’-’直接入栈so,i++*/
i++;
}
else if(c==’*’)
{
if(str==’(’) /*c若是‘*’它后面的字符是否为’(’,若是直接将’*’压栈so,*/
{
StPush(so,4);
i++;
}
else
{
double t1,t2,t3; /*若不是,为数字字符,将后面的连续数字字符一并转换成数值t2,sd出栈给t1,将t3=t2*t1压栈到sd*/
t1=StPop(sd); /*操作符’*’不压栈so*/
p1=i+1;
p2=GetNumsize(str,p1);
p3=IsIncludepoint(str,p1,p2-1);
t2=Transfer(str,p1,p2-1,p3);
t3=t1*t2;
StPush(sd,t3);
i=p2;
}
}
else if(c==’/’)
{
if(str==’(’)
{
StPush(so,5);
i++;
}
else
{
double t1,t2,t3;
t1=StPop(sd); /*c是’/’同’*’*/
p1=i+1;
p2=GetNumsize(str,p1);
p3=IsIncludepoint(str,p1,p2-1);
t2=Transfer(str,p1,p2-1,p3);
t3=t1/t2;
StPush(sd,t3);
i=p2;
}
}
else if(c==’)’)
{
double t1,t2,t3;
int p;
while((p=StPop(so))!=1&&!StEmpty(so)) /*c若是’)’,出栈so,判断是’+’或’-’,出栈sd两个操作数,进行加减运算*/
{ /*直到StPop==’(’*/
t1=StPop(sd);
t2=StPop(sd);
if(p==2)
{
t3=t2+t1;
StPush(sd,t3);
}
else if(p==3)
{
t3=t2-t1;
StPush(sd,t3);
}
}
if(StGetTop(so)==4) /*然后判断so栈顶是否为’*’或者’/’*/
{
StPop(so);
t1=StPop(sd); /*为’*’出栈so,出栈 sd 获得2个操作数,进行乘法操作*/
t2=StPop(sd);
t3=t2*t1;
StPush(sd,t3);
}
else if(StGetTop(so)==5)
{
StPop(so);
t1=StPop(sd); /*为’/’出栈so,出栈 sd 获得2个操作数,进行除法操作*/
t2=StPop(sd);
t3=t2/t1;
StPush(sd,t3);
}
i++;
}
else if(c==’=’)
{
double t1,t2,t3; /*c若是’=’,这是so内只有加减号,出栈so到p ,sd到t1,t2*/
int p;
while(!StEmpty(so))
{
t1=StPop(sd);
t2=StPop(sd);
p=StPop(so);
if(p==2)
{
t3=t2+t1; /*p==’+’,加法运算,并将结果t3压栈sd*/
StPush(sd,t3);
}
else if(p==3)
{
t3=t2-t1;
StPush(sd,t3); /*p==’-’,减法运算,并将结果t3压栈sd*/
}
}
i++;
}
}
if(!StEmpty(so)||StEmpty(sd))
{
printf("Input error,Back!\n"); /*若so不为空,或者sd为空,且sd中只有一个元素,则输入的式子不对*/
}
else
{
double end;
int i; /*否则,sd中的那个数据就是最后计算结果,打印输出*/
end=StGetTop(sd);
printf("The value of this formula:\n");
for(i=0;i《n;i++)
{
printf("%c",str);
}
printf("%f\n",end);
}
}
2、编写一个程序,输入一行字符,分别统计出其中英文字母、空格、数字及其他字符的个数
#include《stdio.h》
#include《string.h》
main()
{
int i,j,k,n;
char *s;
s = (char *)malloc(100);
printf("please input a string:");
gets(s);
i=j=k=n=0;
while(*s!=’\0’)
{
if(*s == ’ ’)i++;
else if(*s》’0’&&*s《’9’)j++;
else if((*s》’a’&&*s《’z’)||(*s》’A’&&*s《’Z’))k++;
else n++;
s++;
}
printf("kong ge:\n",i,k,j,n);
}
C语言程序设计教程 第3版课后答案 朱鸣华版 大恩大德
可以看看中国铁道出版的《C语言程序设计》,可以用Visual C++ 6.0、turbo C一类的。学习语言一定要多多练习,把书上的例子不停的往电脑里敲,然后看看自己能不能用别的算法来解决这些例题,一定要举一反三,把基础融会贯通。

更多文章:
京东方array制造部干什么(苏州京东方制造一部是干啥的啊)
2026年2月22日 18:15
arguments是函数的属性吗(javascript函数的length属性和arguments的length属性区别)
2026年6月3日 16:15
论坛社区模板(DISCUZ 论坛模板怎么用DISCUZ 模板安装导入使用说明)
2025年9月1日 06:45
linux常用命令保存退出(Linux shell tail -f如何自动终止)
2025年7月23日 00:45
servlet类的三个方法(jsp servlet 中doget dopost service这三个方法的区别是什么都什么时候用)
2026年3月15日 21:15
index函数为什么从一开始(excel函数index的用法)
2025年9月25日 01:45
cancal翻译(cancel什么意思及同义词 翻译cancel的意思)
2026年4月15日 09:15
jquery是什么有什么作用(JQuery主要是做什么用的)
2025年7月18日 08:30
分两种情况定义数组(C++编程,n”: 未声明的标识符 是哪的问题)
2026年8月25日 17:30
consequence单词(consequence怎么记忆)
2025年12月6日 11:30
学好c语言对java有什么用(学习c语言对学习java有用吗)
2025年9月3日 09:45
connectionstring属性尚未初始化怎么解决sql(急,高分!!ConnectionString 属性尚未初始化)
2025年6月3日 08:30













