C语言基础及数据类型

C语言简介

1.编程语言发展历程: 机器语言-> 汇编语言(ASM) ->高级语言(C、C++、Java、ObjectC)->脚本语言 <HTML

JavaScript、ShellScript、PHP、JSP、ASP、Python、Perl)
2. C语言历史: Dennis M.Ritchie为保证UNIX操作系统在不同平台上方便移植而发明了C语言, C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语。

3.C语言标准: K&R C、 ANSI C/C89/C90、C94、C95、C99、C11标准
4.C语言特性: 高效性、可移植性 缺点:语言只是工具,程序员对自身代码负责<指针、越界>。

程序入门:

                         #include <stdio.h> // 单行注释:包含系统的头文件
                         int add(int a, int b); // 函数声明
                         int main(void)
                        { // 花括号、程序体、代码块
                              int a = 500; // 定义变量初始化
                              int b; // 定义变量,那这时的值是多少?
                              b = 20; // 变量赋值
                             printf("Total: %d\n", add(a, b)); //函数调用
                        }
                        /* 返回 a+b 的值 */
                        int add(int a, int b)
                        {
                           return a+b;

                       }

关键字:

signed:有符号类型

unsigned: 无符号类型

char:字符类型,占一个字节

short:短整型,占2个字节

 int:整型,占四个字节

 double :变量以带符号的 IEEE 64 位(8 个字节)双精度浮点数形式存储

 float:浮点类型的单精度值具有 4 个字节
void :无类型

 enum:枚举类型

 union :联合类型

struct :结构体类型

volatilevolatile 影响编译器编译的结果,指出,volatile变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错

1>告诉compiler不能做任何优化

比如要往某一地址送两指令: 
int *ip =...; //设备地址 
*ip = 1; //第一个指令 
*ip = 2; //第二个指令 
以上程序compiler可能做优化而成: 
int *ip = ...; 
*ip = 2; 
结果第一个指令丢失。如果用volatile, compiler就不允许做任何的优化,从而保证程序的原意: 
volatile int *ip = ...; 
*ip = 1; 
*ip = 2; 
即使你要compiler做优化,它也不会把两次付值语句间化为一。它只能做其它的优化。

2>用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能重复使用放在cache或寄存器中的备份。

例如:

volatile char a;

a=0;

while(!a){

//do some things;

}

doother();

如果没有 volatiledoother()不会被执行


auto变量:函数中的局部变量,如不专门声明static,一般都是动态地分配存储空间

static声明变量:用static声明的静态局部变量,在函数调用结束后不消失,反而保留当前的数据,在下一次该函数调用时,该变量现有的值就是上一次函数调用结束时的值。一般用static声明一个变量的作用有二:(1)对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在。(2)对全部变量用static声明,则该变量的作用域只限于本文件模块,即被声明的文件中。

 const类型变量:

int i;const int *p;

int *const p=&i;

const int *const p=&i

1. const int *p——const用来修饰int *, *p的内容不可变, 比如你定义了const int *p=5; 那么你再对p的内容赋值就是不合法的:*p=6; // no!  

2. int *const p=&i;——const用来修饰 p, 指针p的地址不可变, int i=0; int j; int *const p=&i; p=&j; // no! i=1; // ok! 

3.const int *const p=&i——限制了指针指向的内容和指向的地址

 register变量:一般变量的值都是存储在内存中,(当程序需要用到哪一个变量的值,由控制器发出指令将内存中该变量的值送到运算器,完了如果需要存数,再从运算器将数据送到内存中存放。)所以就引出一个问题,如果我们进行一段频繁的运算,则存储变量的值肯定要花费不少时间,所以C语言允许将局部变量的值存放在寄存器中,这样需要时就直接搬用,不必再进行过内存。提高运算速度。

extern声明外部变量:外部变量(即全局变量)是在函数的外部定义的。作用域为从变量的定义处开始,到本程序文件的结尾。可以在一个文件内声明外部变量

 restrict:关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。

 sizeof :C语言中判断数据类型或者表达式长度符;不是一个函数字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。

语法格式 sizeof 有三种语法形式

1) 用于数据类型

sizeof( type_name ); // sizeof( 类型 );

2) 用于变量

sizeof ( object ); // sizeof( 对象 );

sizeof object; // sizeof 对象;

 typedef计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异,它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
if else :条件判断

if(number > 6)
if(number < 12)
printf("You're close!\n");
else
printf("Sorry, you lose a turn!\n");

for:循环语句

for(i=0; i<LIMIT; i++)

{

   do_something;

}

 while :循环语句,还有一个等同的语句do while

while(condition1)
{
while(condition2)
{
while(condition3)
{
do1;
continue; //break? // goto ?
do2;
}
do 3;
}
}

 switch case:

switch(表达式)
{ case 常量表达式1:语句1;

....

case 常量表达式2:语句2;

default:语句; 
}

1.default就是如果没有符合的case就执行它,default并不是必须的.

2.case后的语句可以不用大括号. case 后面必须是常量表达式constant expressions, 错误表示如: case x .

3.switch语句的判断条件可以接受int,byte,char,short, enum不能接受其他类型.

4.一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,利用这一特性可以让好几个case执行统一语句.

 goto:  goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
inlineinline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。

 C99关键字_Bool(true false)    _Complex _Imageubary
编程题:福利彩票双色球6+1
福利彩票双色球的6+1的意思就是6个红球(范围为1~33),一个蓝球(范围为1~16)。双色球
中奖规则:
一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1
个蓝色球号码相同,即中奖;
五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1
个蓝色球号码相同,即中奖;
六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。程序如下:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(int argc, char** argv)
{
int red, blue;
int r[6], b[1];
int p=0,q=0;  
int x=0, y=0;  
int i, j;                                                                                                             srand((unsigned)time(NULL));
   printf("你的彩票号码是:  红球:\n");
for (i = 0; i < 6; i++)
{
scanf("%d", &r[i]);
}
printf("蓝球:");
for (j = 0; j < 1;j++)
{
scanf("%d", &b[j]);
}

printf("\n红球:");
while (p < 6)
{
red = rand() % 33 + 1;
printf("%4d", red);
if (red == r[i])
{
x++;
}
p++;
}
      printf("\n蓝球:");
while (q < 1)
{
blue = rand() % 16 + 1;
printf("%d", blue);
if (blue == b[j])
{
y++;
}
q++;
}

if (x == 6 && y == 1)
printf("中了一等奖!");
else if(x == 6)
printf("中了二等奖!");
else if(x == 5 && y == 1)
printf("中了三等奖!");
else if((x == 5 && y == 0) || (x == 4 && y == 1))
printf("中了四等奖!");
else if((x == 4 && y == 0) || (x == 3 && y == 1))
printf("中了五等奖!");
else if(y == 1)
printf("中了六等奖!");
else
printf("遗憾!!!");
        return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值