vlambda博客
学习文章列表

更好的理解Python--C语言程序设计入门




C语言是不支持中文的(Python支持)




运算器和控制器是机算机的核心部件,这两部分合称中央处理单元,简称CPU。

更好的理解Python--C语言程序设计入门


编译:借助一个程序,(就像一个翻译),把你的程序翻译成计算机真正能懂得语言---机械语言---写的程序,然后,这个机器语言写的程序就可以执行----(此过程能够确保运算性能)



解释:借助一个程序,那个程序能试图理解你的程序,然后按照你的要求执行(解释型没有编译过程,而是通过解释器对程序作出解释,然后直接运行)


(程序语言在两者区分方便并非非白即黑,很多编程语言两者皆可)



(python解释器在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生一组Python的字节码,然后将解释的结果交给Python虚拟机,由虚拟机按照顺序一条一条地执行字节码,从而实现对Python程序的执行动作)


更好的理解Python--C语言程序设计入门

C语言--- 指针 是C语言的灵魂(不懂,慢慢补充)
历史:
C语言是从B语言发展过来的,B语言是从BCPL发展而来的,BCPL是从FORTRAN发展而来(可追溯到上世纪五十年代)
BCPL和B语言都支持 指针间接方式 ,所以C语言也支持
C语言还受到PL/l的影响,还和PDP-11的机器语言有很大的关系

更好的理解Python--C语言程序设计入门


1973年3月,第三版Unix出现了C语言的编译器

1973年11月,第四版的Unix(system Four)发布的这个版本完全用C语言写的
面向对象的程序设计语言,
1983年贝尔实验室推出了C++,
C的发展与版本-标准
1989年ANSI发布了一个标准-----ANSI C
1990年ISO接受了ANSI的标准----C89
C的标准在1995年和1999年两次更新----C95和C99
(最新的版本是2011年的C11)
目前大部分教材和资料仍然以C99为标准

更好的理解Python--C语言程序设计入门

第一个C程序:
为什么main前面没有int  or  void(无值类型)
因为:void和int标明不同的主函数返回值,如果没有的话则默认返回int整型
return 0是必须的,因为只有return 0才会终止有返回型程序
#include <stdio.h>
int main(){ /* 我的第一个 C 程序,此符号是C语言中的注释符号,上面不是注释 */ printf("Hello, World! \n");
return 0;}
注释:
有用的--让程序做事情的程序语句都要在句尾加上分号:分号必须使用 英文符号
所有C语言都需要包含main()函数,代码从main()函数开始执行(类似于定义函数def)
/*...*/ 或者使用// 用于表示说明
printf() 内部字符串(用Python相同)用于格式化输出到屏幕,pritf()函数在“stdio.h”头文件中声明stdio.h是一个头文件(标准输入输出头文件)
C语言扩展名为.h的头文件
预处理命令:
#include是一个预处理命令,用来引入头文件。将尖括号<>或yin

当编译器遇到printf()函数时,如果没有找到stdio.h头文件,会发生编译错误
return 0;   语句用于表示退出程序

程序框架:(这几行必须写的(学函数之前)),

#include <stdio.h>
int main(){ return 0; }

做一个简单的计算:

# include <stdio.h>int main(){ printf("%d",12+34);
return 0; } 输出:46


prinntf("%d\n",23+43);
 %d说明后面有一个整数要输出在这个位置上
printf("23+43=%d",23+43);
输出: 23+43=66
四则运算皆可: (和Python相同,类似上面)


更好的理解Python--C语言程序设计入门



注意: C语言报错很可能是在上一步末尾未加英文冒号,报错可能并不在具体的位置,注释英文(此处特别强调)
调用scanf函数,接受键盘上输入的数并存入变量x中。
printf("sine of%If%If is %If is %If\n",x,s);
%If为格式化字符,表示按双精度浮点数处理,它是格式串中两次现,对应了x和s两个变量,其余字符为字符串字符则照原样输出在屏幕上

C源程序  的结构特点:
    一个C语言源程序可以由一个或多个源文件组成
    每个源文件可有一个或三个函数组成
一个源程序不论由多个文件组成,都有一个且只能有一个main函数,即主函数
 分隔符:
    有分隔符和空格两种,逗号主要用在类型说明和函数参数表中,分隔各个变量,空格多用于语句各单词之间,作间隔符。
# include <stdio.h>int main(){ int price = 0;
printf("请输入金额(元):");
  scanf("%d", &price);   //此处表示输入
int change = 100-price;
printf("找您%d元",change);
return 0; }
程序 = 算法(灵魂)+数据结构
算法: 对操作的描述,描述特定问题求解步骤(不能直接执行,必须依靠计算语言和数据结构)
数据结构: 计算机存储,组织数据的方式(骨架和肌肉)

一般,对程序而言: 算法与数据结构时统一的关系

确定性: 算法必须无歧义
有穷性: 在合理的时间或有穷的步骤内结束
有效性: 也叫可行性,算法的每一步骤切实可行
输入: 有零个或多个输入
输出: 有一个或多个输出


标识符规则: (和Python大致相同)
标识符由字母,数字,下划线组成,并且字符串不能是数字
不能把C语言的关键字作为用户标识符
标识符对大小写敏感,如sum。 Sum。 SUM,含义不同

C语言的关键字: 有特殊用途无需定义的特殊表示符。 共32个

更好的理解Python--C语言程序设计入门


简单的计算运算:

#include<stdio.h>int main() /*求两个数之和*/ { int a,b,sum; /*定义3个整型变量*/  a=234; b=432; sum=a+b; printf("sum is %d\n",sum); /*类似于Python的.format()*/  return 0; }



认识流程图:


流程图表示算法,

更好的理解Python--C语言程序设计入门

流程图的符号:

更好的理解Python--C语言程序设计入门


用流程图解决问题:



更好的理解Python--C语言程序设计入门



NS图:省去了流程先,使用特定意义的图形和简要的文字说明构成另一种形式的流程图:

更好的理解Python--C语言程序设计入门



用N-S图表示C语言开发步骤



实战练习:(切记Python语言和C语言的区别)

#include<stdio.h>int main(){ int i,j,n; printf("输入三角形的层数:"); scanf("%d",&n); //&n取位符n(变量),将输入的值赋值给n,scanf输入函数类型与Python的input()函数  for(i=1;i<=n;i++) //for循环, i++自增,当大循环执行一次,小循环执行多次  { for(j=1;j<=n-i;j++) printf("+"); for(j=1;j<=2*i-3;j++) printf("*"); printf("\n"); //不隶属于上面一个循环  }  scanf("%d,&n");  return 0;}

空心三角形:尝试,视图理解一下(运行一下,还是很好理解的)

# include<stdio.h>int main(){ int i,j,n; printf("输入三角形的层数:"); scanf("%d",&n); for (i=1;i<=n;i++ ) { if (i==1) { for(j=1;j<=n-i;j++) printf(" "); printf("*\n"); }

else if(i==n) { for(j=1;j<=i-1;j++) printf("* "); printf("*\n"); } else { for(j=1;j<=n-i;j++)printf(" "); printf("*"); for(j=1;j<=2*i-3;j++)printf(" "); printf("*"); printf("\n"); } } return 0;

你喜欢我吗?

#include <windows.h> //引用窗口消息对话框 #include <stdio.h>int main (){ int ret; //定义变量
do //做什么直到什么。。。。 { ret = MessageBox(NULL, "你喜欢我吗?", "你好!", MB_YESNO | MB_ICONINFORMATION); }//MessageBox 消息框, while (IDNO == ret); //直到的条件 printf("看来你确实很喜欢我\n"); printf("\n"); return 0;}

三角形测试


#include <stdio.h>
int main() { int i; char s[]="J!Mpwf!Zpv\1"; // []代表数组 ,char代表字符型, for(i = 0;putchar(s[i]-1);i++) printf("\n");
return 0; }

游戏练习1;

#include <stdlib.h> #include <stdio.h> #include <time.h> 
int main() { int goal; int x,j,k,flag=0; long i; printf("=========这是一个猜数字的游戏=========\n\n");
printf("===你必须在10次之内猜中数字才能获胜===\n\n");
printf("==========猜数字期间会有提示==========\n\n");
printf("============数字在500以内哦===========\n\n");

srand( (unsigned)time( NULL ) ); goal=rand()%500;
for(j=1;j<=10;j++) { printf("这是第%d次,你准备猜:",j); scanf("%d",&x); for(k=0;k<3;k++) { printf(". ");
} if(goal==x) { flag=1; break; } else if(goal<x) printf("你猜的数偏大\n"); else if(goal>x) printf("你猜的数偏小\n"); }
if(flag==1)printf("========猜对了!!你真厉害!!========\n"); if(flag==0)printf("======很遗憾,下次继续努力吧....======\n");
return 0;}


游戏练习2:

#include <stdlib.h> #include <stdio.h> #include <time.h> 
int main() { int qian,bai,shi,ge; int guess,guessqian,guessbai,guessshi,guessge; int guessweizhi=0,guessshuzi=0; int count,n; int goal; int RandArray[9]={1,2,3,4,5,6,7,8,9};
srand((unsigned)time(NULL));
count=1; n=rand()%9; ge=RandArray[n]; RandArray[n]=RandArray[8]; n=rand()%8; shi=RandArray[n]; RandArray[n]=RandArray[7]; n=rand()%7; bai=RandArray[n]; RandArray[n]=RandArray[6]; n=rand()%6; qian=RandArray[n]; printf("-----这是一个猜数字的游戏,你需要准确的猜出每一位才能获胜-----\n\n"); printf("---------当你猜的数字正确但位置不正确时会有相应的提示---------\n\n"); printf("-------------数 据 不 会 重 复 , 也 不 会 包 含 0 ------------\n\n"); printf("--------------------放 弃 游 戏 请 输 入 0--------------------\n\n"); printf("--------------- \003 祝 \003 你 \003 玩 \003 的 \003 开 \003 心 \003 --------------\n");
while(1) { printf("这是第%d次,你准备猜:",count); loop:scanf("%d",&guess); if(guess==0) break; else if(guess>9999||guess<1234){ printf("数据有误请重新输入"); goto loop; } guessqian=guess/1000; guessbai=guess/100%10; guessshi=guess/10%10; guessge=guess%10; guessweizhi=0,guessshuzi=0; if(guessqian==guessbai||guessqian==guessshi||guessqian==guessge||guessbai==guessshi||guessbai==guessge||guessshi==guessge){ printf("不得输入重复数据,请重新输入\n"); goto loop; } if(guessqian==qian) guessweizhi++; if(guessbai==bai) guessweizhi++; if(guessshi==shi) guessweizhi++; if(guessge==ge) guessweizhi++; if(guessweizhi==4) break;
if(guessqian==bai||guessqian==shi||guessqian==ge) guessshuzi++; if(guessbai==qian||guessbai==shi||guessbai==ge) guessshuzi++; if(guessshi==qian||guessshi==bai||guessshi==ge) guessshuzi++; if(guessge==qian||guessge==bai||guessge==shi) guessshuzi++;
printf("你猜中了%d个数据及位置,你猜中了%d个数据但位置不对\n",guessweizhi,guessshuzi);
count++; }
if(guessweizhi==4) printf("你真棒!!!\n"); else printf("下次在努力吧!\n");
return 0;
}