《计算机基础与程序设计》实验
实验一 顺序结构
【实验目的】
1. 熟悉计算机的操作,了解Windows环境。
2. 熟悉C程序设计编程环境Turbo C 2.0,掌握调试C程序的过程,包括编辑、编译、连接和运行,调试教材上的例题, 为学习复杂C程序的编写和调试打好基础。
3. 掌握C语言程序设计的基本框架,设计简单的顺序结构程序,并上机调试。
4. 掌握基本输入, 输出函数的使用。
5. 掌握C程序的查错方法, 找出并改正C程序中的语法错误和逻辑错误。
【上机步骤】
1. 我的电脑 --> C:盘 --> TC文件夹 --> TC.EXE文件
( 或 “桌面” 上双击 ”TC” 图标 )
2. 输入程序 (编辑): File --> New
3.运行程序: Run --> Run ( Ctrl键 + F9键 )
4.查看结果: Run --> User screen ( Alt 键 + F5键 )
5.存盘: File --> Write To : e: \ 文件名.c
6.把所编的程序存入e盘根目录中(e:\ ), 并分别取名为:
1-1.C、 1-2.C、 1-3.C、 1-4.C
【实验内容】
1-1 填空
输入三个整数a,b,c, 把b的值给a, 把c的值给b,把a的值给c, 交换后输出a,b,c的值。
例如 a=10, b=20, c=30, 交换后a=20, b=30, c=10.
main()
{ int a, b, c,
(1) ;
printf (“Enter a, b, c: ” );
scanf (“%d%d%d”,
(2) );
(3) ;
a=b;
b=c;
(4) ;
printf (“a=%d, b=%d, c=%d\n ”, a, b, c );
}
1-2 写一程序,从键盘输入二个整数,然后输出这二个数的和、差、积、商。
1-3 从键盘输入一个四位整数,把该整数颠到过来输出。
例如 1234 变为 4321。
1-4 有一个并联电路如图,r1=30Ω, r2=60Ω, r3=45Ω, u=120V, 求电流i.
(保留二位小数,四舍五入)
【参考程序】
[1-1]
(1) t
(2) &a, &b, &c
(3) t=a
(4) c=t
[1-2]
#include “stdio.h”
void main()
{ int a, b;
scanf(“%d%d”, &a, &b );
printf(“%d+%d=%d\n”, a, b, a+b);
printf(“%d-%d=%d\n”, a, b, a-b);
printf(“%d*%d=%d\n”, a, b, a*b);
printf(“%d/%d=%.2f\n”, a, b, 1.0*a/b);
}
[1-3]
#include “stdio.h”
void main()
{ int x, a, b, c, d;
scanf(“%d”, &x );
a=x/1000;
b=x/100%10;
c=x/10%10;
d=x%10;
printf(“%d%d%d%d”, d, c, b, a);
}
[1-4]
#include “stdio.h”
void main()
{ float r, r1=30, r2=60, r3=45, u=120, i;
r=1.0/(1.0/r1+1.0/r2+1.0/r3);
i=u/r;
printf(“%.2f”, i );
}
实验二 选择结构和循环结构
【实验目的】
1. 掌握分支结构的程序结构设计方法,用if 语句实现选择结构, 用switch语句实现多
分支选择结构, 并上机调试。
2. 掌握选择结构的嵌套。
3. 掌握for、while和do-while循环结构的程序结构设计方法,并上机调试。
4. 掌握循环的嵌套结构及continue、break语句的合理运用。
【实验内容】
2-1 有一函数
输入x的值,输出相应的y值。
2-2 编写程序,当输入字符‘A’时,输出“America”; 当输入字符‘B’时,输出“Britain”; 输入
字符‘C’时,输出“China”; 输入其他字符时,输出“France”.
(要求用switch语句实现)
2-3 填空:
用 π/4 =1-1/3+1/5-1/7+…..近似公式求π的近似值,直到最后一项的绝对值小于10
-6为止。
#include “math.h”
void main()
{ int s=1;
float n=1, t=1, pi=
(1) ;
while (fabs(t)>=1e-6 )
{ pi=pi+
(2) ;
n=n+2;
s=s
(3) ;
t=s/n;
}
pi=pi*4;
printf (“pi=%f\n”, pi );
}
2-4 打印出所有的“水仙花数”,所谓“水仙花数”时指一个三位数,其各位数字立方和等于该 数本身。
例如 153 是“水仙花数”,因为153=1
3+5
3+3
3.
2-5 百钱买百鸡问题。
公鸡5元一只,母鸡3元一只,小鸡1元三只;100元买100只鸡,且需要包含
公鸡、母鸡、小鸡,求有哪几种方案?
【参考程序】
[2-1]
#include “stdio.h”
void main()
{ int x, y;
scanf(“%d”, &x);
if(x>0) y=1;
else if(x==0) y=0;
else y=-1;
printf(“%d”, y);
}
[2-2]
#include “stdio.h”
void main()
{ char ch;
ch=getchar();
switch(ch)
{ case ‘A’: printf(“America”);
case ‘B’: printf(“Britain”);
case ‘C’: printf(“China”);
default : printf(“France”);
}
}
[2-3]
(1) 0
(2) t
(3) *(-1)
[2-4]
#include “stdio.h”
#include “math.h”
void main()
{ int i, a, b, c;
for(i=100; i<1000; i++)
{ a=i/100;
b=i/10%10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c) printf(“%d\n”,i);
}
}
[2-5]
#include “stdio.h”
void main()
{ int chick,cock,hen;
for (cock=1;cock<=20;cock++)
for (hen=1;hen<=33;hen++)
{ chick = 100 - cock - hen ;
if (cock*5+hen*3+chick*1.0/3.0 == 100)
printf(“公鸡=%d 母鸡=%d 小鸡=%d\n",cock,hen,chick );
}
}
实验三 数组和函数
【实验目的】
1. 掌握一维、二维数组的定义、初始化和引用。
2. 编写一维、二维数组应用程序,并上机调试。
3. 掌握函数的定义方法、函数的类型和返回值。
4. 掌握函数形参与实参的参数传递关系。
5. 编写二个以上函数的应用程序,并上机调试。
【实验内容】
3-1 任意输入10个数,计算:
(1)正数的个数和正数的和;
(2)负数的个数和负数的和;
(3)零的个数。
3-2 对一个任意的4行4列的二维整型数组,编程实现:
(1)每一列的最大值;
(2)每一行的最小值;
(3)所有元素的最大值、最小值以及它们的行下标和列下标。
3-3 填空
对输入的一个数,调用prime函数判断其是否是素数:是,则打印“yes”;不是,则打印“no”.
void main()
{ int x;
scanf (“%d”,
(1) );
if (prime(x))
(2) ;
else
(3) ;
}
prime (int a)
{ int i=2, y=1, e=a/2;
while ((i<=e)
(4) )
if (a%
(5) ==0 ) y=0;
else i++;
(6) ;
}
3-4 编写函数fun(int x ), 求x的各位数字之和。
在main()中,求出100-10000之间有多少个整数,它们的各位数字之和等于5。
3-5 编写函数fact (n), 计算n!.
在main()中,计算并输出p=n! / (n-r)! 的值。(n>r).
【参考程序】
[3-1]
#include “stdio.h”
void main()
{ int i, a[10], z=0, sum_z=0, f=0, sum_f=0, l=0;
for(i=0; i<10; i++)
{ scanf(“%d”, &a[i]);
if(a[i]>0)
{ sum_z+=a[i];
z++;
}
else if(a[i]<0)
{ sum_f+=a[i];
f++;
}
else
l++;
}
printf(“sum_z=%d, number_z=%d\n”, sum_z, z);
printf(“sum_f=%d, number_f=%d\n”, sum_f, f);
printf(“number_l=%d\n”, l);
}
[3-2]
#include “stdio.h”
void main()
{ int a[4][4], i, j, max, min, maxz, minz, rowz_max, colz_max, rowz_min, colz_min;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
scanf(“%d”, &a[i][j]);
for(j=0; j<4; j++)
{ max=a[0][j];
for(i=1; i<4; i++)
if(a[i][j]>max) max=a[i][j];
printf(“col %d: max=%d\n”, j, max);
}
for(i=0; i<4; i++)
{ min=a[i][0];
for(j=1; j<4; j++)
if(a[i][j]<min) min=a[i][j];
printf(“row %d: min=%d\n”, i, min);
}
maxz=minz=a[0][0];
rowz_max=colz_max=0;
rowz_min=colz_min=0;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
{ if(a[i][j]>maxz)
{ maxz=a[i][j];
rowz_max=i;
colz_max=j;
}
if(a[i][j]<minz)
{ minz=a[i][j];
rowz_min=i;
colz_min=j;
}
}
printf(“maxz:a[%d][%d]=%d\n”, rowz_max, colz_max, maxz);
printf(“minz:a[%d][%d]=%d\n”, rowz_min, colz_min, minz);
}
[3-3]
(1) &x
(2) printf(“yes!”)
(3) printf(“no!”)
(4) && y==1
(5) i
(6) return y;
[3-4]
#include “stdio.h”
int fun(int x)
{ int sum=0,r;
while(x>0)
{ r=x%10;
sum=sum+r;
x=x/10;
}
return sum;
}
void main()
{ int i;
for(i=100;i<=10000;i++)
if(fun(i)==5) printf(“%d\n”,i);
}
[3-5]
#include “stdio.h”
long fact(int n)
{ int i;
long y=1;
for(i=1;i<=n;i++)
y=y*i;
return y;
}
void main()
{ int n,r;
float p;
scanf(“%d%d”,&n,&r);
p=fact(n)/fact(n-r);
printf(“%f”,p);
}
实验四 指针和结构体
【实验目的】
1. 掌握指针、指针变量的概念,熟练使用指向变量、数组、字符串的指针。
2. 掌握指针类型数据在程序设计中的应用方法。
3. 掌握结构体类型的定义方法以及结构体变量的定义和引用。
4. 掌握结构体数组的引用。
5. 掌握结构体类型数据在程序设计中的应用方法。
6. 仿照例题设计出相应程序,并上机调试运行得到正确结果。
【实验内容】
4-1 填空:
以下函数完成两个字符串的连接。
void str (char *str1, char *str2)
{ int i=0, j;
while (str1[i++]!=’\0’) ;
i--;
for (j=0; str2[j]!=
(1) ; j++)
str1[i+j]=
(2) ;
str1[i+j]=
(3) ;
}
4-2 有一个字符串,包含n个字符。写一函数将此字符串中从第m个字符开始的全部字符复制成另一个字符串。
4-3 在主函数中输入10个整数,用另一个函数将10个整数按逆序存放,然后在主函数中输出结果。
4-4 现有一职工情况简表,数据项有:编号、姓名、年龄、工作单位。要求用单向链表实现下列功能。
(1)建立职工情况简表(要求输入3个职工的情况)。
(2)输出职工情况简表。
(3)任给一个职工编号,查找该职工的情况。如果存在,输出该职工的简况,否则,输出信息“找不到”。
请分别用3个函数实现,并用主函数调用。
【参考程序】
[4-1]
(1) ‘\0’
(2) str2[j]
(3) ‘\0’
[4-2]
#include “stdio.h”
void fun(char *s, int m, char *t)
{ int i, j=0;
for(i=m; *(s+i)!=’\0’; i++, j++)
*(t+j)=*(s+i);
*(t+j)=’\0’;
}
void main()
{ char s[80], t[80], m, n;
int i;
scanf(“%d%d”, &n, &m);
for(i=0; i<n; i++)
scanf(“%c”, &s[i]);
s[i]=’\0’;
fun(s,m,t);
puts(t);
}
[4-3]
#include “stdio.h”
void fun(int *s)
{ int i,j,t;
for(i=0,j=9;i<5;i++,j--)
{ t=*(s+i);
*(s+i)=*(s+j);
*(s+j)=t;
}
}
void main()
{ int i,s[10];
for(i=0;i<10;i++)
scanf(“%d”,&s[i]);
fun(s);
for(i=0;i<10;i++)
printf(“%4d”,s[i]);
}
[4-4]
1. 建立职工情况简表
#define LEN sizeof(struct zg) /* sizeof() 求字节数运算符 */
struct zg
{ long num;
char name[10];
int nl;
char dw[20];
struct zg *next;
};
int n; /* 结点的个数 */
struct student *creat ( )
{ struct zg *head; /* 结构体类型 */
struct zg *p1,*p2; /*p1 指向新结点, p2 指向最后一个结点*/
n=0;
p1=p2=(struct zg *)malloc(LEN); /* 分配一个结点的空间 */
scanf (“%ld,%s,%d,%s”, &p1->num, p1->name,&p1->nl,p1->dw);
/* 输入第一个结点的值 */
head=NULL; /* 空链表 */
while(p1->num!=0) /* 若编号=0,则建表结束 */
{ n=n+1; /*结点数*/
if (n==1)
head=p1; /* 第一个结点 */
else
p2->next=p1; /* 链入下一个结点 */
p2=p1;
p1=(struct zg *) malloc(LEN); /* 分配一个新结点的空间 */
scanf (“%ld,%s,%d,%s”, &p1->num, p1->name,&p1->nl,p1->dw);
/* 输入这个结点的值 */
}
p2->next=NULL;
return(head); /* 返回链表的起始地址 */
}
2. 输出职工情况简表
void print( struct zg *head ) /* 输入链表的首地址 */
{ struct zg *p;
printf("\n现在,存在 %d 个记录是: \n",n);
p=head; /* p 指向第一个结点 */
if (head != NULL) /* 不是空链 */
do
{ printf ("“%ld,%s,%d,%s”, p->num, p->name,p->nl,p->dw);
/* 输出结点的内容 */
p=p->next; /* p 指向下一个结点 */
} while (p!=NULL); /* p 为空指针时,循环结束 */
}
3. 查找职工的情况
void find( struct zg *head ) /* 输入链表的首地址 */
{ struct zg *p;
printf("\n现在,存在 %d 个记录是: \n",n);
p=head; /* p 指向第一个结点 */
printf("输入查找的职工编号: ");
scanf(“%ld”,&cz_num);
if (head != NULL) /* 不是空链 */
do
{ if(p->num==cz_num)
{ printf ("“%ld,%s,%d,%s”, p->num, p->name,p->nl,p->dw);
/* 输出结点的内容 */
break;
}
else
p=p->next; /* p 指向下一个结点 */
} while (p!=NULL); /* p 为空指针时,循环结束 */
if (p==NULL) printf(“找不到!”);
}
4. 主函数
#include “stdio.h”
void main()
{ struct zg *head;
head=creat(); /* 建立链表 */
print(head); /* 输出全部结点 */
find(head); /* 查找 */
}
实验五 编译预处理和文件
【实验目的】
1. 掌握编译预处理命令的作用和应用方法。
2. 掌握文件类型指针(FILE类型)的定义。
3. 掌握文件操作函数:fopen()、fclose()、fscanf()、fprintf()、fgets()、fputs()。
4. 编写应用文件系统的程序,实现从文件中输入数据,向文件输出结果,熟练地上机调试运行。
【实验内容】
5-1定义一个带参数的宏,使两个参数的值互换,并编写程序任意输入两个数,进行宏调用,输出互换结果。
5-2定义一个宏,它给出三个参数中的最大值,并写一个程序来调用该宏定义。
5-3 建立数据文件“c.dat”,内容为:80,90,72,64,59,92。
5-4 求数据文件“c.dat”中的最大值、最小值和平均值,并存入文件“jg.dat”.
【参考程序】
[5-1]
#include “stdio.h”
#define SWAP(a,b) t=a;a=b;b=t;
void main()
{ int a,b,t;
scanf(“%d%d”,&a,&b);
SWAP(a,b);
printf(“%d %d\n”,a,b) ;
}
[5-2]
#include “stdio.h”
#define MAX(a,b,c) a>(d=b>c?b:c)?a:d
void main()
{ int a,b,c,d;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d”, MAX(a,b,c));
}
[5-3]
#include “stdio.h”
void main()
{ FILE *fp;
int x,i,n;
fp=fopen(“c.dat”, “w”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{ scanf(“%d”, &x);
fprintf(fp, “%d”, x);
}
fclose(fp);
}
[5-4]
#include “stdio.h”
void main()
{ FILE *fp1, *fp2:
int i=1,x,max,min,sum=0;
float aver;
fp=fopen(“c.dat”,”r”);
fp=fopen(“jg.dat”,”w”);
fscanf(fp1,“%d”,&x);
max=min=x;
while(x!=EOF)
{ sum=sum+x;
If(x>max) max=x;
else if(x<min) min=x;
fscanf(fp,“%d”,&x);
i++;
}
aver=1.0*sum/i;
fprintf(fp2, “max=%d, min=%d, aver=%f”, max, min,aver);
}
本资料doc文件下载: