指针实验实验报告

指针实验实验报告
指针实验实验报告

C语言程序设计实验报告

专业:计算机科学与技术班级:计算机科学与技术创新实验班日期:2011-12-29 成绩:实验组别:第次实验:指导教师:

学生姓名:学号:同组人姓名:

实验名称:指针实验

一、实验目的

(1)熟练掌握指针的说明、赋值、使用。

(2)掌握用指针引用数组的元素,熟悉指向数组的指针的使用。

(3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。

(4)掌握带有参数的main函数的用法。

二、实验内容及要求

1.源程序改错

下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误要求在计算机上对这个源程序进行调试修改,是之能够正确执行。

源程序:

#include

int main(void)

{

float * p;

scanf("%f",p);

printf("%f\n",*p);

return 0;

}

2.源程序修改替换

(1)下面源程序的功能是,通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。

源程序:

#include

#include

int main(void)

{

____________________________

char a[80],b[80],c[160],*result=c;

int choice,i;

do

{

printf("\t\t1 copy string.\n");

printf("\t\t2 connect string.\n");

printf("\t\t3 exit.\n");

printf("\t\tinput a number(1-3)please! \n");

scanf("%d",&choice);

}

while(choice<1||choice>5);

switch (choice)

{

case 1:

p=strcpy;

break;

case 2:

p=strcat;

break;

case 3:

goto down;

}

getchar();

printf("input the first string please! \n");

i=0;

_______________________

printf("input the second string please!\n");

i=0;

_______________________

result=____(a,b);

printf("the result is %s\n",result);

down:

;

return 0;

}

(2)请上机运行第(1)题程序使之能按下面要求输出结果(注:(输入)表示该行数据是键盘数据):

1.copy string。

2.Connect string。

3.Exit。

Input a number(1-3)please!

2(输入)

Input the first string please!

The more you learn,(输入)

Input the second string please!

The more you get.(输入)

The result is the more you learn,the more you get.

3.跟踪调试程序

请按下面的要求对所给源程序进行操作,并回答问题和排除错误。

(1)单步执行源程序。进入strcpy时,watches窗口中s为何值?返回main时,watches窗口中s为何值?

(2)排除源程序中的错误,使程序输出结果为:there is a boat on the lake.

源程序:

#include

char * strcpy(char*,char*);

int main(void)

{

char a[20],b[60]="there is a boat on the lack.";

printf("%s\n",strcpy(a,b));

return 0;

}

char *strcpy(char*s,char*t)

{

while(*s++=*t++)

;

return (s);

}

4.程序设计

编写并上机调试运行能实现以下功能的程序或函数:

(1)已知一个长整形变量占四个字符,其中每个字节又分高四位和低四位。试编写一个程序,从该长整形变量的高字节开始,依次取出每个字节的高四位和低四位并以数字字符的形式进行显示。

(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。试编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函数中输出压缩空格后的各行,空行不予输出。

(3)编写一个程序,输入n个整数,排序后输出。排序的原则由命令行可选参数-d决定,并且有参数-d时按递减顺序,否则按递增顺序排序。要求将排序算法定义成函数,利用指向函数的指针是该函数实现递增或递减排序。

(4)设每个班有n个学生,每个学生所修的M门课程的成绩,并且都存放到相应的数组中,试编写以下函数:

①计算每个学生各门课程平均成绩

②计算全班每门课程的平均成绩

③分别统计低于全班各门课程平均成绩的人数

④分别统计全班各门课程不及格的人数和90分以上(包含90)的人数。

在调用函数中输出结果(要求都用指针操作,不得用下标)

5.选做题

(1)编写并上机调试运行能实现以下功能的程序:

设有N位整数和M位小数(N=20,M=10)的两个数据a,b。编程计算a+b并输出结果。如:

12345678912345678912.1234567891+98765432109876543210.0123456789

(2)编写一个使用复杂声明的“char *(*p[2])(const char*,const char *);”的程序。

提示:p中元素可为strcmp,strstr等函数名。

三、实验步骤及结果

1.源程序改错

错误:悬挂指针,指针未初始化

改后程序:

#include

int main(void)

{

float *p,a;

p=&a;

scanf("%f",p);

printf("%f\n",*p);

return 0;

}

2.源程序完善、修改、替换

#include

#include

int main(void)

{

char *(*p)(char *a,char *b);

char a[80],b[80],c[160],*result=c;

int choice,i;

do

{

printf("\t\t1 copy string.\n");

printf("\t\t2 connect string.\n");

printf("\t\t3 exit.\n");

printf("\t\tinput a number(1-3)please!\n");

scanf("%d",&choice);

}

while(choice<1||choice>5);

switch(choice)

{

case 1:

p=strcpy;

break;

case 2:

p=strcat;

break;

case 3:

goto down;

}

getchar();

printf("input the first string please!\n");

i=0;

while((a[i]=getchar())!='\n')

i++;

a[i]='\0';

printf("input the second string please!\n");

i=0;

while((b[i]=getchar())!='\n')

i++;

b[i]='\0';

result=(*p)(a,b);

printf("the result is %s\n",result);

down:

;

return 0;

}

3.跟踪调试程序

#include

char * strcpy(char*,char*); int main(void)

{

char a[20],b[60]="there is a boat on the lack.";

printf("%s\n",strcpy(a,b));

return 0;

}

char *strcpy(char*s,char*t)

{

char *m;

m=s;

while(*s++=*t++)

;

return (m);

}

4.程序设计

(1)

#include

#include

#define MAX 32

int main()

{

long int n;

int i;

char s[MAX];

printf("please input a number:\n");

scanf("%ld",&n);

if(n>=-2147483647&&n<=2147483647) ;

else

{

printf("wrong:the number is too large");

return -1;

}

if(n>=0)

{

for(i=0;n!=0;i++)

{

s[i]=n%2+'0';

n/=2;

}

for(;i<=MAX-1;i++)

s[i]='0';

}

else

{

n=-(n+1);

for(i=0;n!=0;i++)

{

s[i]=n%2+'0';

n/=2;

}

for(;i<=MAX-2;i++)

s[i]='0';

for(i=0;i

if(s[i]=='1')

s[i]='0';

else if(s[i]=='0')

s[i]='1';

s[i]='1';

}

for(i=31;i>=28;i--)

putchar(s[i]);

putchar('\t');

for(i=27;i>=24;i--)

putchar(s[i]);

putchar('\t');

for(i=23;i>=20;i--)

putchar(s[i]);

putchar('\t');

for(i=19;i>=16;i--)

putchar(s[i]);

putchar('\t');

for(i=15;i>=12;i--)

putchar(s[i]);

putchar('\t');

for(i=11;i>=8;i--)

putchar(s[i]);

putchar('\t');

for(i=7;i>=4;i--)

putchar(s[i]);

putchar('\t');

for(i=3;i>=0;i--)

putchar(s[i]);

putchar('\t');

return 0;

}

(2)

#include

#include

#include

#define N 3

void output(char*s);

int main(void)

{

int i;

char *s[N];

printf("please input your massage:\n");

for(i=0;i

{

s[i]=malloc(80);

gets(s[i]);

}

printf("your massage has been changed into;\n");

for(i=0;i

{

output(s[i]);

printf("%s\n",s[i]);

}

return 0;

}

void output(char*s)

{

int i,j;

for(i=0,j=0;s[i]!='\0';i++,j++)

{

if(isspace(s[i]))

{

for(;isspace(s[i]);i++)

;

s[j++]=' ';

s[j]=s[i];

}

else

s[j]=s[i];

}

s[j]=s[i];

}

(3)

#include

#define MAX 5

void swap(int v[],int i,int j);

void qsort(int v[],int left,int right);

int main(int argc,char *argv[])

{

int i=0,s[MAX];

if(--argc>0&&(*++argv)[0]=='-')

{

if((*argv)[1]=='d')

{

while(i

scanf("%d",&s[i++]);

qsort(s,0,MAX-1);

for(i=MAX-1;i>=0;i--)

printf("%d\t",s[i]);

}

else

printf("wrong:\n");

}

else

{

while(i

scanf("%d",&s[i++]);

qsort(s,0,MAX-1);

for(i=0;i

printf("%d\t",s[i]);

}

return 0;

}

void qsort(int v[],int left,int right) {

int i,last;

void swap(int v[],int i,int j);

if(left>right)

return;

swap(v,left,(left+right)/2);

last=left;

for(i=left+1;i<=right;i++)

if(v[i]

swap(v,++last,i);

swap(v,left,last);

qsort(v,left,last-1);

qsort(v,last+1,right);

}

void swap(int v[],int i,int j)

{

int temp;

temp=v[i];

v[i]=v[j];

v[j]=temp;

}

(4)

#include

#define N 5

#define M 3

struct course

{

char *s;

int d[N];

} sm[M];

void saverage(struct course *sm);

void caverage(struct course *sm);

void summary_below(struct course *sm);

void summary_both(struct course *sm);

int main(void)

{

int i;

printf("Please input the names of the %d courses.\n",M);

for(i=0;i

if(gets((sm+i)->s=malloc(10))==NULL)

printf("ERROR");

for(i=0;i

{

int k;

printf("Please input the grades of %d students of the %s subject\n",N,(sm+i)->s);

for(k=0;k

scanf("%d",(sm+i)->d+k);

}

saverage(sm);

caverage(sm);

summary_below(sm);

summary_both(sm);

return 0;

}

void saverage(struct course *sm)

{

double sum=0,av;

int i,k;

for(i=0;i

{

printf("This is the %d student's average grade\t",i+1);

for(k=0;k

{

sum+=*((sm+k)->d+i);

}

av=sum/M;

printf("%lf\n",av);

sum=0;

}

}

void caverage(struct course *sm)

{

double sum=0,av;

int i,k;

for(i=0;i

{

printf("This is the average grade of %s\t",(sm+i)->s);

for(k=0;k

{

sum+=*((sm+i)->d+k);

}

av=sum/N;

printf("%lf\n",av);

sum=0;

}

}

void summary_below(struct course *sm)

{

double sum=0,av;

int i,k;

for(i=0;i

{

for(k=0;k

{

sum+=*((sm+i)->d+k);

}

av=sum/N;

printf("In %s the number of below-average student is\t",(sm+i)->s);

for(sum=0,k=0;k

if(*((sm+i)->d+k)

sum++;

printf("%d\n",(int)sum);

sum=0;

}

}

void summary_both(struct course *sm)

{

int i,k;

int fsum=0,esum=0;

for(i=0;i

{

printf("The course is %s\t",(*(sm+i)).s);

for(k=0;k

{

if(*((sm+i)->d+k)<60)

fsum++;

if(*((sm+i)->d+k)>90)

esum++;

}

printf("the failed is %d,while the above 90 is %d\n",fsum,esum);

fsum=0,esum=0;

}

}

5.选做题

(1)

#include

int main(void)

{

int i,t=0;

char a[]="12345678912345678912.1234567891";

char b[]="98765432109876543210.0123456789";

int s[32];

s[0]=0;

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

s[i]=0;

for(i=30;i>=0;i--)

{

if(a[i]=='.')

i--;

int m,n,k;

m=a[i]-'0'+t;

n=b[i]-'0';

k=m+n;

if(k>=10)

{

t=k/10;

s[i+1]=k%10;

}

else

{

s[i+1]=k%10;

t=0;

}

k=0;

}

s[0]=t;

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

{

if(i==21)

printf(".");

else

printf("%d",s[i]);

}

return 0;

}

(2)

#include

#include

#include

int main(void)

{

int n;

char *(*p[2])(const char*,const char*);

char *a;char *b;char *c;

printf("please input string one:\n");

a=malloc(20);

gets(a);

printf("please input string two:\n");

b=malloc(20);

gets(b);

printf("please input a number:\n0 to choose the strcpy\n1 to choose the strcat\n");

scanf("%d",&n);

p[0]=strcpy;

p[1]=strcat;

if(n>2||n<0)

{

printf("wrong");

return -1;

}

else

c=(*p[n])(a,b);

printf("now the string is:\n%s\n",c);

return 0;

}

四、实验体会

知道了指向数组的指针的用法,明白了指向函数的指针的用途

C语言实验报告《指针》.doc

C语言实验报告《指针》 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验五指针 一、实验目的 1、掌握指针的概念、会定义和使用指针变量 2、掌握指向数组的指针变量 3、掌握字符串指针的使用 二、实验内容2、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(习题10.6)#include #include long fun(char *p) { 填写程序 } void main() { char s[6]; long n; printf( enter a string:n gets(s); n=fun(s); printf( %ldn ,n); }

一、三、实验步骤与过程 四、程序调试记录 C语言实验报告《综合实验》 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验六综合实验 一、实验目的 1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。 2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。 3、掌握C程序的运行、调试方法等。 二、实验内容 编写一个学生信息排序程序。要求:

1、程序运行时可输入n个学生的信息和成绩(n预先定义)。 2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。 3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。 1、使用函数方法定义各个模块。 三、实验步骤与过程 物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板 四、程序调试记录

数据库实验报告

合肥工业大学实验报告一 课程名称:数据库系统原理及应用学号: 20095382 姓名:魏泽民 专业班级:电子商务09-1班 指导教师:马华伟 二零一一年十月

一、实验目的: (1)熟练掌握数据更新语句,灵活地操作插入数据、修改数据和删除数据; (2)熟练掌握关系数据库中的完整性概念的应用; (3)了解数据录入的方法和过程。 (4)掌握单表查询的基本方法; (5)掌握连接查询的基本方法; (6)熟练掌握以下练习,并进行以下各类查询: ①选择表中的若干列、查询全部列、查询经过计算的值; ②选择表中的若干元组,即消除取值重复的行与查询满足指定条件的元组(包 括:比较大小、确定范围、确定集合、字符匹配、涉及空值和多种条件查询); ③对查询结果排序; ④使用集函数; ⑤对查询结果分组 (7)熟练掌握以下练习,并进行下列各类连接查询: ①等值与非等值连接查询; ②自身连接; ③外连接; ④复合条件连接; (8)掌握嵌套查询的基本方法; (9)掌握集合查询的基本方法; (10)熟练掌握查询视图操作 (11)熟练掌握更新视图操作 (12)熟练关系的完整性概念,领会视图的用途 (13)练习以下各类查询: ①带有IN谓词的子查询; ②带有比较运算符的子查询; ③带有ANY或ALL谓词的子查询; ④带有EXISTS谓词的子查询; ⑤视图查询与更新操作; 二、实验要求: (1)为了便于程序正确性测试,需要对自己建立起来的数据表录入一些模拟数据(模拟数据是指符合数据格式要求的假数据),然后按照教材中结构化查询语言SQL章节例题和习题自己组织SQL语句:

(2)设计的SQL程序应该涵盖数据更新操作的全部内容不,包括插入、修改、删除; (3)综合运用SQL语句实现数据插入、修改、删除等操作的综合运用能力。 (4)按照SQL语言编程要求,实现各类查询和检索操作; (5)利用后台的SQL平台环境,编程验证数据库的控制保护功能。 (6)将查询视图命令等价改写为对数据表的查询操作命令,利用SQL编程设计完成并进行效率分析。 三、实验内容: (1)根据以下给定的数据表信息分别对student, course, score, teacher, teching 表进行数据插入和修改,以完成给定的数据录入,同时要求输入班级同学名录模拟客观真实情况,给student、score表添加30条以上记录,以便以后查询应用方便。 Student表:

c语言实验报告6 指针

实验6 指针1.实验目的和要求 (1)掌握指针的概念、指针变量定义格式和引用。 (2)掌握指针的运算方法。 (3)掌握数组的指针和指向数组的指针变量。 (4)掌握指针与函数的关系。 (5)能正确使用字符串的指针和指向字符串的指针变量。(6)了解指向函数的指针。 (7)了解指向指针变量的指针。 2.实验内容:实验指导书中的实验九。 3.实验步骤 9.1 调试程序,找出程序的错误。 改正后的程序代码(贴图): 运行结果(帖图): 9.2 运行程序:

运行结果:; 9.3 修改程序错误,并运行。 改正后程序代码: 运行结果(帖图): 9.4. 程序填空:

运行结果(请帖图):9.5. 程序填空:

程序填空: #include main() { int a[5][5]={0},*p[5],i,j; for(i=0; i<5; i++) p[i]= &a[i][0] ; for(i=0; i<5; i++) { *(p[i]+ i )=1; *(p[i]+5- (i+1) )=1; } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%2d", p[i][j]); Printf("\n") ; } } 运行结果(请帖图):

9.6 编程(选作) #include main() { int *p,a[20],i,k,m,n; p=a; printf("请输入人数n:"); scanf("%d",&n); for(i=0;i

数据库实验报告(6)-6100410179-孟红波

数据库系统实验报告 ----(6)-创建和执行存储过程学生姓名:孟红波学号:6100410179 专业班级:计算机(卓越)101班实验类型:■验证□综合□设计□创新实验日期:2012-12-3 实验成绩: 一、实验目的 1、掌握存储过程的创建 2、掌握存储过程的执行 3、掌握存储过程的删除 二、实验内容 1、创建一个存储过程proc_hub,用来查看“hub”商品的所有订货情况,包括订单号,订 货客户的姓名及订货数量等 2、执行存储过程proc_ hub 3、创建一个带参数的存储过程proc_ goods,参数为商品名称,通过该存储过程可查看任 何指定商品订单信息 4、带参数执行该存储过程proc_ goods 5、删除所有新建的存储过程 三、实验环境 1、个人计算机或局域网。 2、Win7操作系统。 3、SQL Server 2008数据库管理系统。 四、实验步骤及实验结果 1、利用企业管理器或查询分析器或查询分析器创建proc_ hub存储过程 create procedure proc_hub as begin select goods.goodsname as商品名称,orderid as订单编号,customername as客户名称,quantity as订单数量 from customer,goods,order1 where customer.customerid=order1.customerid and order1.goodsid=goods.goodsid and goods.goodsname='hub' end

2、使用EXECUTE语句执行存储过程并观察结果 3、利用企业管理器或查询分析器创建proc_goods存储过程 create procedure proc_goods(@goodsname varchar(20)) as begin select@goodsname as商品名,orderid as订单编号,customername as客户名称,quantity as 订单数量 from customer,goods,order1 where customer.customerid=order1.customerid and order1.goodsid=goods.goodsid and goodsname=@goodsname end 4、使用EXECUTE语句带参数执行该参数执行该存储过程并观察结果

C语言指针实验报告

C语言程序设计实验报告 1实验目的 (1)掌握指针的概念,会定义和使用指针变量; (2)能正确使用变量的指针和指向变量的指针变量; (3)能正确使用数组的指针和指向数组的指针变量; (4)能正确使用字符串的指针和指向字符串的指针变量; 2实验内容 将一个任意整数插入到已排序的整形数组中,插入后,数组中的数仍然保持有序;要求: (1)整形数组直接由赋值的方式初始化,要插入的整数有scanf()函数数入;(2)算法实现过程采用指针进行处理; (3)输入原始数据以及插入整数后的数据,并加以说明;

3算法描述流程图

4源程序 #include main() { int a[100],m,i,*p,n,w; printf("请输入要输入的数组的元素个数:\n"); scanf("%d",&n); printf("请输入已排好序的数组:\n"); for(i=0;i=w;i--) { a[i+1]=a[i]; } a[i+1]=m; for(i=0;i<=n;i++) { printf("%-4d",a[i]); } printf("\n"); } 5测试数据 “1,3,5,7,9,11,13,15,17,19······10” 6运行结果 7出现问题及解决方法 在编写过程中,

for(i=n-1;a[i]>=w;i--) { a[i+1]=a[i]; } a[i+1]=m; 这一步没有注意a[i++]=m和a[i+1]=m中i++和i+1不同,a[i++]=m是先将的值赋给a[i],然后在执行自增;而在实验过程中忽略了这一点,造成了不必要的麻烦; 8实验心得 通过这次指针实验掌握了指针的概念,会定义和使用指针变量,并且能利用指针来简单化一些问题,给以后的编程带来了很大的便利;

大数据库实验6触发器实验报告材料

淮海工学院计算机工程学院实验报告书 课程名:《数据库原理及应用》 题目:存储过程和触发器 班级:软件132 学号: 2013122907 姓名:孙莹莹 评语: 成绩:指导教师: 批阅时间:年月日

一.目的与要求 1.掌握存储过程的创建方法; 2.掌握存储过程的执行、修改和删除等操作; 3.掌握触发器的创建方法; 4.掌握触发器的使用、修改和删除等相关内容 二.实验内容 基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能: 1.创建一个为worker表添加职工记录的存储过程Addworker; 2.创建一个存储过程Delworker删除worker表中指定职工号的记录。 3.显示存储过程Delworker; 4.删除存储过程Addworker和Delworker. 三.实验步骤 1 . (1)建立存储过程 USE factory GO CREATE PROCEDURE Addworker @no int=NULL, @name char(10)=NULL, @sex char(2)=NULL, @birthday datetime=NULL, @na char(2)=NULL, @wtime datetime=NULL, @depno int=NULL AS IF @no IS NULL OR @name IS NULL OR @sex IS NULL OR @birthday IS NULL OR @depno IS NULL BEGIN PRINT '请重新输入该职工信息!' PRINT '你必须提供职工号、姓名、性别、出生日期、部门号' RETURN END BEGIN TRANSACTION INSERT INTO worker VALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno) IF @@error<>0 BEGIN ROLLBACK TRAN RETURN END

C语言指针实验报告

C语言程序设计实验报告 1实验目得 (1)掌握指针得概念,会定义与使用指针变量; (2)能正确使用变量得指针与指向变量得指针变量; (3)能正确使用数组得指针与指向数组得指针变量; (4)能正确使用字符串得指针与指向字符串得指针变量; 2实验内容 将一个任意整数插入到已排序得整形数组中,插入后,数组中得数仍然保持有序; 要求: (1)整形数组直接由赋值得方式初始化,要插入得整数有scanf()函数数入; (2)算法实现过程采用指针进行处理; (3)输入原始数据以及插入整数后得数据,并加以说明;

3算法描述流程图

4源程序 #include main() { int a[100],m,i,*p,n,w; printf("请输入要输入得数组得元素个数:\n"); scanf("%d",&n); printf("请输入已排好序得数组:\n"); for(i=0;i=w;i--) { a[i+1]=a[i]; } a[i+1]=m; for(i=0;i<=n;i++) { printf("%-4d",a[i]); } printf("\n"); } 5测试数据 “1,3,5,7,9,11,13,15,17,19······10” 6运行结果 7出现问题及解决方法 在编写过程中,

for(i=n-1;a[i]>=w;i--) { a[i+1]=a[i]; } a[i+1]=m; 这一步没有注意a[i++]=m与a[i+1]=m中i++与i+1不同,a[i++]=m就是先将得值赋给a[i],然后在执行自增;而在实验过程中忽略了这一点,造成了不必要得麻烦; 8实验心得 通过这次指针实验掌握了指针得概念,会定义与使用指针变量,并且能利用指针来简单化一些问题,给以后得编程带来了很大得便利;

数据库实验报告六_存储过程

HUNAN UNIVERSITY 数据库 实验报告 学生姓名 学生学号 专业班级 指导老师 2017 年5月24日

SELECT COUNT(*)INTO more90 FROM sc WHERE cno = countcno AND grade >= 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values('x<60', less60); insert into sumScore values('60<=x<70', b60a70); insert into sumScore values('70<=x<80', b70a80); insert into sumScore values('80<=x<90', b80a90); insert into sumScore values('x>=90', more90); END$$ call sumScore(); /*调用上述存储过程*/ 首先创建存储过程,然后再调用存储过程。结果如下: (上述结果图截自Navicat软件) 可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。 2、统计任意一门课的平均成绩。 代码如下: DELIMITER $$ CREATE PROCEDURE `scoreAvg`() BEGIN declare curname char(40) default null; /*临时存放课程名*/ declare curcno char(4) default null; /*临时存放课程号*/ declare curavg float; /*临时存放平均成绩*/ declare mycursor cursor for /*定义游标*/ select cno, cname from course;

SQL数据库实验报告 实验二

实验2 SQL Server数据库的管理 1.实验目的 (1)了解SQL Server 数据库的逻辑结构和物理结构的特点。 (2)掌握使用SQL Server管理平台对数据库进行管理的方法。 (3)掌握使用Transact-SQL语句对数据库进行管理的方法。 2.实验内容及步骤 (1)在SQL Server管理平台中创建数据库。 ①运行SQL Server管理平台,在管理平台的对象资源管理器中展开服务器。 ②右击“数据库”项,在快捷菜单中选择“新建数据库”菜单项。在新建数据库对话框的数据库名称文本框中输入学生管理数据库名studentsdb,单击“确定”按钮。 (2)选择studentsdb数据库,在其快捷菜单中选择“属性”菜单项,查看“常规”、“文件”、“文件组”、“选项”、“权限”和“扩展属性”等页面。 (3)打开studentsdb数据库的“属性”对话框,在“文件”选项卡中的数据库文件列表中修改studentsdb数据文件的“分配的空间”大小为2MB。指定“最大文件大小”为5MB。修改studentsdb数据库的日志文件的大小在每次填满时自动递增5%。 (4)单击“新建查询”打开查询设计器窗口,在查询设计器窗口中使用Transact-SQL 语句CREATE DA TABASE创建studb数据库。然后通过系统存储过程sp_helpdb查看系统中的数据库信息。 (5)在查询设计器中使用Transact-SQL语句ALTER DATABASE修改studb数据库的设置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增大小为1MB。 (6)在查询设计器中为studb数据库增加一个日志文件,命名为studb_Log2,大小为5MB,最大文件大小为10MB。 (7)使用SQL Server管理平台将studb数据库的名称更改为student_db。 (8)使用Transact-SQL语句DROP DATABASE删除student_db数据库。 3.实验思考 (1)数据库中的日志文件是否属于某个文件组? (2)数据库中的主数据文件一定属于主文件组吗? (3)数据文件和日志文件可以在同一个文件组吗?为什么? (4)删除了数据库,其数据文件和日志文件是否已经删除?是否任何人都可以删除数据库? (5)能够删除系统数据库吗?

数据库实验报告 (6)

一实验题目 1.存储过程的定义和使用 2.触发器的创建与使用 二实验目的 1.掌握存储过程的定义、执行和调用方法。 2.掌握触发器的创建与使用。 三实验内容 1.存储过程的定义和使用 (1)创建存储过程查找姓李的学生的选修课成绩信息。 (2)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。 (3)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。 (4)创建存储过程,统计某个同学的平均分并返回统计结果。(带输入和输出参数的存储过程) (5)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程) (6)创建存储过程,统计选修课程最多的学生的基本信息。(存储过程的嵌套) 2.触发器的创建与使用 (1)定义一个BEFORE行级触发器credit_TRIGER,当为C表插入新的课程信息时,若学分大于5 分,自动修改为5分。 (2)定义一个AFTER行级触发器,当SC表的成绩发生变动时,就自动在成绩变化表sc_log中增 加一条新的纪录,该新纪录包括:操作者名称、操作日期、操作类型。 (3)建立一个DELETE触发器,针对于SC表,每次只能删除一条信息。 (4)建立一个UPDATE的触发器,不允许用户更改学生学号,若更改学号,给出提示信息:学号 不允许更改。 (5)执行相应的SQL语句,触发上述定义的触发器。 (6)删除触发器credit_TRIGER。 四实验步骤 1.存储过程的定义和使用 存储过程格式: CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] 创建存储过程查找姓李的学生的选修课成绩信息。 (1)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。 SC表基本情况如图表1所示:

C语言程序设计—指针—实验报告

实验报告 专业软件工程班级X 班学号_ _ 姓名 实验日期:201X年X月X日报告退发(订正、重做) 课程C程序设计实验实验名称指针 一、实验目的 二、实验环境(描述实验的软件、硬件环境) ①软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器; ②硬件环境:PC机一台 三、实验内容、步骤和结果分析 题目一:输入3个整数,按由小到大的顺序输出 要求: 使用指针方法实现; #include void function(int *a, int *b) { int temp; if (*a<*b) { temp = *a; *a = *b; *b = temp; } } int main() { int a, b, c; int *p1, *p2, *p3; p1 = &a; p2 = &b; p3 = &c; scanf("%d%d%d", &a, &b, &c); function(p1, p2); function(p1, p3); function(p2, p3); printf("%d %d %d\n", *p3, *p2, *p1); return 0;

题目二:将长度为10的整型数组arr中的元素按照从小到大排列并输出 要求: 使用指针方法实现; #include int main() { struct METRIC { float m; float cm; } m1, m2; struct BRITISH{ float foot; float inches; } b1, b2; printf("Enter the info of m1(米,厘米):"); scanf("%f%f", &m1.m, &m1.cm); printf("Enter the info of m2(米,厘米):"); scanf("%f%f", &m2.m, &m2.cm); printf("\nEnter the info of m2(英尺,英寸):"); scanf("%f%f", &b1.foot, &b1.inches); printf("Enter the info of m2(英尺,英寸):"); scanf("%f%f", &b2.foot, &b2.inches); printf("\nSum of m1 and m2 is:%.2f(厘米)\n", (m1.m + m2.m) * 100 + m1.cm + m2.cm); printf("Sum of b1 and b2 is:%.2f(厘米)\n\n", (b1.inches + b2.inches)*30.48 + (b1.foot + b2.foot)*2.54); return 0;

数据库实验报告4-5

实验4《存储过程》 实验学时: 4 每组人数: 1 实验类型: 2 (1:基础性2:综合性3:设计性4:研究性) 实验要求: 1 (1:必修2:选修3:其它) 实验类别: 3 (1:基础2:专业基础3:专业4:其它) 一、实验目的 理解存储过程的概念、建立和调用方法。进一步熟悉SQL语句对数据库进行完整性控制的方法。 二、实验内容 1、建立一个新的销售数据库,包含五张表,每张表至少需要10条记录。(1)/*员工人事表employee */

(2)/*客户表customer */ (3)/*销售主表sales */ (4)/*销货明细表sale_item */

(5)/*产品名称表product */ (1)为每张表建立主键约束。 (2)通过拖放操作加入外键。 (3)在表employee加入CHECK约束:输入的员工编号必须以E开头的5位数编号,性别只能为M/F。 (4)为销售主表sales中的发票编号字段建立UNIQUE约束。 3、利用存储过程,给employee表添加一条业务部门员工的信息。 4、利用存储过程从employee、sales、customer表的连接中返回所有业务员的姓名、客户姓名、销售金额。 5、利用存储过程查找“刘德华”的员工编号、订单编号、销售金额。 6、利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额。 7、利用存储过程计算出订单编号为10003的订单的销售金额。 三、实验要求: 1.熟悉SQL SERVER 工作环境; 2.建立销售数据库

3.复习有关约束与存储过程的SQL语言命令。 4.备份数据库,作为实验5 的操作数据库。 四、实验步骤 1.创建销售数据库,并建表、修改,要求将自己的信息包含其中; 2、利用存储过程,给employee表添加一条业务部门员工的信息。 3、利用存储过程从employee、sales、customer表的连接中返回所有业务员的姓名、客户姓名、销售金额。 4、利用存储过程查找“刘德华”的员工编号、订单编号、销售金额。 5、利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金。 五、实验结果 1、建立一个新的销售数据库,包含五张表,每张表至少需要10条记录。(1)/*员工人事表employee */

c语言指针实验报告

C语言实习报告 题目:指针及其应用 系别: 专业: 姓名: 学号: 日期:

一实验名称:指针及其应用 二实验目的: (1)掌握变量的指针及其基本用法。 (2)掌握一维数组的指针及其基本用法。 (3)掌握指针变量作为函数的参数时,参数的传递过程及其用法。 三实验内容: (1)运行以下程序,并从中了解变量的指针和指针变量的概念。 (2)运行以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题: 1.程序的功能是什么? 2.在开始进入循环体之前,p指向谁? 3.循环每增加一次,p的值(地址)增加多少?它指向谁? 4.退出循环后,p指向谁? 5.你是否初步掌握了通过指针变量引用数组元素的方法? (3)先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。

(4)编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成: ①输入10个数; ②调用此函数进行重排; ③输出重排后的结果。 四分析与讨论: (1)指针的定义方法,指针和变量的关系。 定义方法: 数据类型 *指针变量名; 如定义一个指向int型变量的指针—— int *p;

则我们可以继续写如下代码—— int a = 4; p = &a; printf("%d", *p); 在这里,我们定义了一个变量a,我们把它理解为内存空间连续的4个字节(int型占用4字节),则这4个字节的空间保存着一个数4。&是取地址符号,即把变量a的地址(即这4个字节的首地址)赋给指针p (记住指针p的类型和变量a的类型要保持一致,否则的话,要进行类型转换)。这样子,指针p就保存着变量a的地址。我们如果把指针p当做内存空间里面另外一个连续的4个字节,那么这4个字节保存的数就是变量a的地址。printf("%d",*p)和printf("%d",a)的结果是一样的。这里的*是取变量符号(与&刚好作用相反,通过变量的地址找到变量),与定义时int *p的*号作用不同(定义时的*表示该变量是个 指针变量,而非是取它指向的变量)。 (2)数组和指针的关系。 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。 2.指向数组元素的指针 若有如下定义: int a[10], *pa; pa=a; 则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。 实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。 这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。 3.指针与一维数组 理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。 一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。 实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。 数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。

C语言实验六实验报告——指针

一、实验项目名称 指针 二、实验目的 1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等; 2.掌握数组与指针的关系并能够利用指针解决数组的相关问题; 3.掌握字符串与指针的关系并能够利用指针处理字符串的问题; 4.掌握指针与函数的关系并能够利用指针处理函数问题; 5.了解指向指针的指针的概念及其使用方法; 6.能够使用指针进行程序设计。 三、实验内容 有关指针的程序设计 1.编程实现:任意输入的10个数,求其平均值。 要求: (1)10个数采用scanf语句读入。 (2)利用指针实现对这10个数的访问。 (3)要求平均值的精度为小数后面2位。 2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。 要求: (1)整数数组由初始化方式输入。任意整数由scanf函数输入; (2)实现过程采用指针处理; (3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。 3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。 要求: (1)在主函数中以初始化方式输入一个字符串; (2)调用newcopy()函数; (3)在主函数中输出处理后的结果。 4.编程实现:输入三个整数,按由大到小的顺序输出。

要求: (1)通过scanf函数输入三个数据并存入三个变量中; (2)利用指针实现从大到小输出; (3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出; (4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出; (5)体会指针对不同数据处理的特点。 四、实验步骤及结果 一、 #include <> void main() { int a[10],n,sum=0; float aver;/* 定义平均数为浮点型*/ int *p=a;/*初始化*/ printf("Please input 10 numbers:\n"); for (n=0;n<10;++n) scanf("%d",&a[n]);/*输入十个数*/ for (n=0;n<10;++n) sum=sum+*(p+n);/*使用指针访问数据*/ aver=(float)sum/n; printf("Average is %.2f",aver);/*精确到小数点后两位*/ } 二、 #include <> void arr(int *a,int n);/*定义排序函数*/ void insert(int *a,int num);/*插入并排序函数*/ int n=10;/*定义数据个数,可修改*/ void main()

《数据库原理》实验报告6 SQL语言综合练习

《数据库原理》实验报告 专业: 班级: 学号: 姓名:

SQL语言综合练习 一、实验目的: SQL语言是数据库语言领域中的主流语言,对SQL语言的掌握程度直接关系到数据库学习的好坏。 本次实验通过一个SQL语言的综合练习,对前面的学习的内容进行复习,并加以巩固,希望大家对SQL语言有一个较好的掌握。 二、实验内容 1.启动数据库服务软件SQL Server 2000的查询分析器,用Create Table建表;2.用Insert Into向表中插入记录; 3.用Create Index在表上建立索引; 4.用Create View建立视图; 5.用SELECT语句进行各种查询操作。 三、实验任务 1.打开数据库SQL Server 2000的查询分析器,用Create Table建表Exam,表结构如下图所示: 字段名类型长度含义 Id(主码)varchar 17 学生编号 name varchar 10 姓名 sex varchar 2 性别 age integer 年龄 score decimal 6 总成绩 memo varchar 100 备注 2.用Insert Into语句向Exam表中添加6条记录,记录内容如下图所示: A0001 赵一男20 580.00 学习委员 B0002 钱二女19 540.00 班长

C0003 孙三男21 555.50 优秀共青团员 D0004 赵四男22 480.00 暂无相关信息 E0005 周五女20 495.50 暂无相关信息 F0006 吴六男19 435.00 暂无相关信息 3.对表Exam的Score字段建立一个名为IndexScore的升序索引。 4.查询所有姓赵的学生的基本信息。 5.建立总成绩超过500分的学生视图ViewExam,该视图有两个字段ViewExam1和ViewExam2分别对应表Exam的Name和score字段。 6. 查询总成绩超过500分的学生姓名和成绩。 四.实验结果 1. create table Exam (ID varchar(17) primary key, name varchar(10), sex varchar(2), age integer, score decimal(6), memo varchar(100) ); 2. insert into Exam values('A0001','赵一','男',20,580.00,'学习委员'); insert into Exam

数据库原理实验报告(6)(含答案)

南京晓庄学院 《数据库原理与应用》 课程实验报告 实验六分组统计查询和集合查询设计 所在院(系):数学与信息技术学院 班级: 学号: 姓名: 1.实验目的

(1)熟练掌握数据查询中分组条件表达、选择组条件的表达方法。 (2)熟练使用统计函数和分组函数。 (3)熟练各类计算和分组计算的查询操作方法。 (4)掌握集合查询的实现方法。 2.实验要求 (1)针对“TM”数据库,在SQL Server查询分析器中,用T-SQL语句实现以下查询操作: a)查询各个院系学生的总人数,并按人数进行降序排列。 b)查询各系各门课程的平均成绩。 c)查询每个院系各种职称的教师人数,输出院系、职称、人数。 d)查询数学与信息技术学院学生的平均年龄。 e)查询07294003课程的最高分和最低分。 f)查询选修人数超过30人,且课程号以07开头的课程号、课程名称和选 修人数。按选修人数降序排列。 g)查询选修了5门以上课程的学生学号。 h)查询年龄大于女同学平均年龄的男同学姓名和年龄。 i)查询SC表中最高分与最低分之差大于20分的课程号。 j)查询平均成绩大于75分的课程的课程号、课程名、平均分。 k)查询期末考试平均分排名前10%的学生,输出学号和平均分。 l)查询教师人数最多的前3个院系,输出院系和教师人数。 m)查询全校老师和学生的姓名,输出姓名和类别两列(类别中显示教师或学生),结果按类别排序。 n)用集合查询实现同时讲授过07294003和07295007两门课的老师的工号。 o)用集合查询实现教师表中职称不是教授的老师的详情。 (2)按要求完成实验报告。 3.实验步骤、结果和总结实验步骤/结果 将调试成功的T-SQL语句写在下方(标明题号)。 a)查询各个院系学生的总人数,并按人数进行降序排列。 select DEPT_ID, COUNT(*) 总人数 from dbo.Student group by DEPT_ID order by DEPT_ID desc b)查询各系各门课程的平均成绩。 select DEPT_ID, AVG(EXAM_Grade) as '平均成绩' from dbo.SC,dbo.Student

C语言实验报告

实验一进制转换一、实验要求 采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入。 二、实验目的 1、熟悉C 环境的安装、使用。 2、承上启下,复习《C 程序设计》等基础课程的知识。 3、掌握C 语言编程的方法。 三、预备知识 1、VC6.0的安装与使用。 2、C 程序设计基础知识。 四、实验内容 采用模块化程序设计完成进制转换。

五、程序框图 六、程序清单 1. 编写主函数:输入需转换的数与转换的进制 2. 编写子函数 (1)函数转换为除16进制以外的进制转换算数编程,使用while 循环实现计算进制 的转换,并输出转换后的数字; (2)函数转换为16进制,用while 函数实现16进制转换的计算并输出16进制转换后的数据; 3. 编写数组,关于16进制的一系列字符 4. 编写主函数加入do while 使函数可以循环。

七、实验步骤 #include char num[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; void fun(int n, int m) { int i=-1, a[100]; if(m!=16) { while(n) { a[i++]=n%m; n=n/m; } while(i!=-1) printf("%d",a[--i]); printf("\n");

} else { while(n) { a[++i]=num[n%16]; n/=16; } while(i!=-1) printf("%c",a[i--]); printf("\n"); } } int main() { int a, c;

指针(C语言实验报告)

仲恺农业工程学院实验报告纸 信息学院(院、系)专业班C语言程序设计课 实验目的: (1)通过实验进一步掌握指针的概念,会定义和使用指针变量。 (2)能正确使用指针数组和指向数组的指针变量。 (3)能正确使用字符指针变量。 实验内容与总结: 编程练习-要求用指针方法处理。 1、写一个函数,求字符串的长度。在main函数中输入字符串,并输出其长度。 程序如下: #include void main() { int n; char str[100],*p; printf("请输入字符串:\n"); scanf("%s",&str); p=str; for(n=0;*p!='\0';n++,p++); printf("字符串长度为:%d\n",n); } (1)程序编制要点: ①输入字符串; ②使用指针。 (2)该题目涉及的知识点和难点: ①字符串; ②定义和使用指针变量; ③for语句的使用。 2、编程判断输入的一个字符串是否是回文。所谓回文,即顺读和倒读都是一样的。如eye,level,abba 等。 程序如下:

#include #include void main() { int i=0,j; char str[100],*p1,*p2; printf("请输入字符串:\n"); scanf("%s",&str); p1=str; p2=str; while(*p2!='\0') p2++; p2--; for(j=0;*p1==*p2 && *p2!='\0';p2--,p1++) i++; j=strlen(str); if(i==j) printf("该字符串是回文!\n"); else printf("该字符串不是回文!\n"); } (1)程序编制要点: ①字符串的判断; ②使用指针。 (2)该题目涉及的知识点和难点: ①字符串; ②while语句的输入与使用; ③if语句的输入与使用; ④定义和使用字符指针变量。 程序代码和运行情况描述: 在实验1中,当程序运行时,提示使用者输入字符串;用for语句实现字符串长度的统计。 在实验2中,先定义两个字符指针;当用户输入字符串后,用while和for语句实现字符串的读取;用if语句来判断字符串是不是回文。

相关文档
最新文档