C语言

本文介绍数据库设计的六个阶段,并重点讨论了逻辑结构设计中的E-R图向关系模式的转换过程。通过实例展示了如何从概念设计过渡到具体的数据库表结构。

数据库设计通常分为6个:
1需求分析:分析用户的需求,包括数据、功能和性能需求;
2概念结构设计:主要采用E-R模型进行设计,包括画E-R图;
3逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;
4数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;
5数据库的实施:包括编程、测试和试运行;
6数据库运行与维护:系统的运行与数据库的日常维护。
主要讨论其中的第3个阶段,即逻辑设计。通过一个实际的案例说明在逻辑设计中E-R图向关系模式的转换。

#include <stdio.h>

int main() {
   int a[10]={1,6,5,7,5,9,7};
    int *p;
    p=a;
    int x;

for(int i=0;i<5;i++)
{
    static int j=0;  //相当于在局部进行全局变量的定义与使用,这样在进行每次调用函数的数值的时才能够保证计数器j的数值进行一直的累加上升
     printf("a[i]=%d",*(a+i));
    //为什么不能够像下面的指针一样使用a++是因为,在C语言中a是数组的首地址,是一个固定的常量,因此无法使a++,这时数组与指针使用时的主要的区别
    //scanf("%d",a+i);   //scanf中最后的数据输入格式就是按照地址的形式进行输入的。
    printf("*p=%d\n",*p);
    p[i];   //当指针指向一个数组时,p[i]相当于a[i]是因为,编译系统进行编译的过程中,对下表的处理是按照指针的方式进行处理的
    *p++;  //计算方式解释,由于*和++的计算优先级相同,结合方向为自右向左因此等价于*(p++),先引用p的值实现*p运算,然后在进行使p自增1//*P++和P++带来的效果是一样的,注意计算机编译的原理,计算机编译时数组也是按照指针的形式进行运算的。
    x=*p;
    printf("x=%d\n",x);
}
    printf("%d\n",*p);   //这时*p也即是*p[0],与数组的定义与引用完全一样,没有什么地方是不同的

    return 0;
}
优先级和结合性
C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

运算符的种类C语言的运算符可分为以下几类:
1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.关系运算符
用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符
用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符
这是一个三目运算符,用于条件求值(?:)。
7.逗号运算符
用于把若干表达式组合成一个表达式(,)。
8.指针运算符
用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符
有括号(),下标[],成员(→,.)等几种。
for(int i=0;i<5;i++)
{
    static int j=0;  //相当于在局部进行全局变量的定义与使用,这样在进行每次调用函数的数值的时才能够保证计数器j的数值进行一直的累加上升
     printf("a[i]=%d",*(a+i));
    //为什么不能够像下面的指针一样使用a++是因为,在C语言中a是数组的首地址,是一个固定的常量,因此无法使a++,这时数组与指针使用时的主要的区别
    //scanf("%d",a+i);   //scanf中最后的数据输入格式就是按照地址的形式进行输入的。
    printf("*p=%d\n",*p);
    p[i];   //当指针指向一个数组时,p[i]相当于a[i]是因为,编译系统进行编译的过程中,对下表的处理是按照指针的方式进行处理的
    *p++;  //计算方式解释,由于*和++的计算优先级相同,结合方向为自右向左因此等价于*(p++),先引用p的值实现*p运算,然后在进行使p自增1//*P++和P++带来的效果是一样的,注意计算机编译的原理,计算机编译时数组也是按照指针的形式进行运算的。
    x=*p;
    printf("x=%d\n",x);
}
    printf("%d\n",*p);   //这时*p也即是*p[0],与数组的定义与引用完全一样,没有什么地方是不同的

    return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andrewbytecoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值