tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> 计算机软件及应用 >>

c语言程序设计实践


北方民族大学课程设 计
课程名称: 高 级 语 言 程 序 设 计

院(部)名 称: 组长姓名学号 同组人员姓名 指导教师姓名: 设 计 时 间:

信息与计算科学学院

1、编写一个求四则运算的运算器
#include<stdio.h> int main(void) { int a,b; char ch; scanf("%d",&a); while(ch=getchar(),ch!='=') { scanf("%d",&b); if(ch=='+') { printf("=%d",a+b); a=a+b; } else if(ch=='-') { printf("=%d",a-b); a=a-b; } else if(ch=='*') { printf("=%d",a*b); a=a*b; } else if(ch=='/') { printf("=%f",a/b); a=a/b; } //ch=getchar(); } return 0; }

图 1.程序运行结果

2

2、验证哥德巴赫猜想:任何一个大于6的偶数可以表示为两个素数之和。要求, 每个偶数只要找到一组素数和就可以。将6-1000之间的所有偶数都表示程两个素数 之和,每行输出5组显示。
/*哥德巴赫猜想*/ #include<stdio.h> int prime(int n); int main(void) { int a,b,k; for(k=6;k<=100;k++){ for(a=2;a<=k;a++){ b=k-a; if(prime(a)&&prime(b)){ printf("%d=%d+%d\n",k,a,b); if(k%5==0) printf("\n"); break; } } } return 0; } int prime(int n) { int i; for(i=2;i<=n/2;i++) if(n%i==0)break; return (i>n/2); } /*若n能被某个i整除,则n不是素数,提前结束循环*/ /*将结果返回某个大于n/2的i*/ /*定义判断素数的函数*/ /*求组数*/ /*调用函数,判断a,b是否为素数*/ /*函数声明*/

3

图(2)-1程序运行结果显示

图(2)-2程序运行结果显示

4

3、编写程序,输入一个正整数n( 1<n<=10),再输入n个数,将最小的与第一 个交换,最大值与最后一个交换,然后输出n个数。
#include<stdio.h> int main(void) { int i,index1,index2,n,m,temp1,temp2,k,p; int a[10]; printf("Enter n:"); scanf("%d",&n); printf("Enter %d integers:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(m=0;m<n;m++){ /*将最小的数与第一个数交换*/ index1=0; for(i=1;i<n;i++) if(a[i]<a[0]) index1=i; temp1=a[index1]; a[index1]=a[0]; a[0]=temp1; } for(k=0;k<n-1;k++){ /*将最大数与最后一个数交换*/ index2=n-1; for(i=0;i<n-1;i++) if(a[i]>a[n-1]) index2=i; temp2=a[index2]; a[index2]=a[n-1]; a[n-1]=temp2; } for(i=0;i<n;i++){ printf("%d",a[i]); printf("\n"); } return 0; } /*输出n个数组元素*/ /*提示输入n个数*/ /*将输入数依次赋给数组a的n个元素a[0]~a[n-1]*/ /*定义一个数组a,它有10个整型元素*/ /*提示输入n*/

5

图(3)程序运行结果显示

1 12 11 10

1、建立 n 阶螺旋方阵,并输出,方阵如下图, : 2 3 4 13 14 5 16 15 6 9 8 7

#include <stdio.h> #define MIN(x,y) (x>y) ? (y) : (x) fun ( int a11, int i, int j, int n) { int min, a22; if( i==j && i<=1 ) return(a11); else if( i==j && i<=(n+1)/2) return( fun(a11,i-1,i-1,n)+4*(n-2*i+3)); else if( i==1 && j!=1) return( a11+j-1 ); else if( i!=1 && j==n) return( a11+n+i-2 ); else if( i!=1 && j==1 ) return ( a11+4*n-3-i ); else if( i==n && j!=1 ) return ( a11+3*n-2-j ); else { if(i>=(n+1)/2 && j>=(n+1)/2) min = MIN(n-i+1,n-j+1); else if(i<(n+1)/2 && j>=(n+1)/2) min = MIN(i,n-j+1); else if(i>=(n+1)/2 && j<(n+1)/2) min = MIN(n-i+1,j); else min = MIN(i,j); a22 = fun(a11,min,min,n); return(fun(a22, i-min+1, j-min+1, n-2*(min-1))); } } main()

6

{ int a11=1, i, j, n; printf("Enter n="); scanf("%d", &n); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) printf("%4d", fun(a11,i,j,n) ); printf("\n"); } }

图(1)程序运行结果

2、用递归法实现一个正整数的逆序输出。
#include <stdio.h> void shiftnumber(int x) { //int temp,i; if(x/10==0) printf("%3d",x); else { printf("%3d",x%10); x/=10; shiftnumber( x); }

7

} int main() { int x; printf("input a integer number :"); scanf("%d",&x); if(x>0) shiftnumber(x); return 0; }

图(2)程序运行结果

3、输入一个长整形数,从高位开始逐位分割并输出。如输入 123456,逐位输 出 1,2,3,4,5,6.
#include <stdio.h> void main() { long a; int b[50],n,i; scanf("%ld",&a); i=0; while(a>9)

8

{ b[i]=a%10; a/=10; i++; } b[i]=a; for(;i>=0;i--) { printf("%d",b[i]); if(i!=0) printf(","); } printf("\n"); }

图(3)程序运行结果

1.建立 n 阶蛇形方阵并输出,方阵如下图
1 3 2 5 6 8 7 13

9

4 9 12 14 10 11 15 16 #include <iostream> using namespace std; int main() { int **array; int i, j, k, n, x = 1, y = -1, flag = 0; cin >> n; array = new int*[n]; for(i = 0; i < n; i++) array[i] = new int[n]; for(i = 0, j = 0, k = 0; i < n * n; i++) { if(j < 0) { j = 0; flag = 1; x = 1; y = -1; } else if(j >= n) { if(k < 0) k = 1; else k += 2; j = n - 1; y = 1; x = -1; } if(k < 0) { k = 0; x = -1; y = 1; } else if(k >= n) { if(flag) j++; else j += 2; k = n - 1; x = 1; y = -1; } array[j][k] = i + 1; j += x; //选择行缩进方式 k += y; //选择列缩进方式 flag = 0; } for(j = 0; j < n; j++)

10

{ for(k = 0; k < n; k++) cout << array[j][k] << '\t'; cout << endl; } return 0; }

图(1)程序运行结果

2. 编写函数,采用递归方法将任一整数转换为二进制形式
#include<stdio.h> void f(int n) { if(n) f(n/2); else return; printf("%d",n%2); } int main() { int n; while(1) { scanf("%d",&n);

11

if(n<0) break; if(n==0) printf("0"); f(n); printf("\n"); } return 0; }

图(2)程序运行结果 3.输出 5 之内的数字金字塔。
#include<stdio.h> int main(void) { void pyramid(int n); pyramid(5); return 0; } void pyramid(int n) { int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=i;j++){ printf("%d",i); printf(" ");} putchar('\n');

12

} }

图(3)程序运行结果

1、输出100-2000之间的所有素数,每行输出8个。要求调用求素数函数。
/*使用函数求100--2000之间的所有素数*/ #include<stdio.h> #include<math.h> int main(void) { int count, m; int prime(int m); count=0; for(m=100;m<=2000;m++){ if(prime(m)!=0){ printf("%8d",m); count++; if(count%10==0)printf("\n"); /*调用prime(m)判断m是否为素数*/ /*输出m,m占8列宽*/ /*累加已经输出的素数个数*/ /*如果count是10的倍数,换行*/ /*函数声明*/ /*count记录素数的个数,用于控制输出格式*/ /*调用求平方根函数,需要包含数学库*/

13

} } printf("\n"); return 0; } /*函数调用,判断是否为素数,如果是,返回1(“真”) ,否则返回0(“假”)*/ int prime(int m) { int i; double n; if(m==1) return 0; n=sqrt(m); for(i=2;i<=n;i++) if(m%i==0){ return 0; } return 1; } /*m是素数,返回1*/ /*如果m不是素数*/ /*返回0*/ /*1不是素数,返回0*/

14

图(1)-1 程序运行结果显示

图(1)-2程序运行结果显示

15

2、求解汉诺塔问题
#include <stdio.h> void hanoi(int n,char a,char b,char c) { if(n==1) printf("%c--> %c \n",a,b); else{ hanoi(n-1,a,b,c); printf("%c-->%c\n",a,b); hanoi(n-1,c,a,b); } } int main(void) { int n; printf("input the number of disk:"); scanf("%d",&n); printf("the steps for %d disk are:\n",n); hanoi(n,'a','b','c'); return 0; }

图 2 程序运行结果
3、打印出以下图案:

* *** ***** ******* ***** ***

16

*
#include<stdio.h> int main(void) { int i ,j ,k ; for (i=0;i<=3;i++){ for (j=0;j<=2-i;j++) printf(" "); for (k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("\n"); } return 0; }

图 3 程序运行结果

17

图书信息管理系统
实验要求: 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格 等. 试设计一图书信息管理系统,使之能提供以下功能: 1)系统以菜单方式工作 2)图书信息录入功能(图书信息用文件保存)--输入 3)图书信息浏览功能--输出 4)查询和排序功能:(至少一种查询方式)--算法 5)按书名查询 6)按作者名查询 7)图书信息的删除与修改(可选项) 设计目的: 为了方便读者和管理员更好的对图书的查询和管理图书,我组欲设计一程序 ----图书管理信息系统。 此系统功能分别面向读者和管理员两部分,其中学生可以进行借阅,归还和查 询书籍等操作;管理员可以完成书籍和学生的增加,删除和修改。 ? 能够管理图书信息和读者信息; ? 能够进行各类图书的信息查询; ? 能够进行各种借书管理,包括图书的编号及图书名称; ? 给管理人员提供各种图书的查询增删和修改功能。

总体设计: (设计流程图)此设计分为两大部分,如下图所示

18

图书信 息管理 系统

读者类

图书类

读者信 息读出

读者维 护

借书

还书

图书信 息读出

图书维 护

读者编 号、姓 名

所借图 书

显示、 新增、 更改

删除、 查找

图书编 号,是 否在架

获取姓 名及删 除标记

显示、 新增、 更改

查找、 删除

源程序清单和执行结果:
#include <iostream> //格式化输入输出函数 #include <iomanip> //I/O 流控制头文件,类似于格式化输出 #include <string> //字符串输入输出函数 #include <fstream> //与文件流相关的操作函数,主要是针对文件的,功能与文件操作函 数相似 using namespace std; //标准序名字空间 const int Maxr=100; //最多的读者 const int Maxb=100; //最多的图书 const int Maxbor=5; //每位读者最多借五本书 class Reader{//读者类,实现对读者的信息的描述 private: int tag; //删除标记 1:已删 0:未删 int no; //读者编号 char name[10]; //读者姓名 int borbook[Maxbor]; //所借图书 public: Reader(){ ; } char *getname(){ //获取姓名 return name; }

19

int gettag(){ //获取删除标记 return tag; } int getno(){ //获取读者编号 return no; } void setname(char na[]) { //设置姓名 strcpy(name,na); } void delbook() { //设置删除标记 1:已删 0:未删 tag=1; } void addreader(int n,char *na) { //增加读者 tag=0; no=n; strcpy(name,na); for(int i=0;i<Maxbor;i++) borbook[i]=0; } void borrowbook(int bookid){ //借书操作 for(int i=0;i<Maxbor;i++) { if (borbook[i]==0) { borbook[i]=bookid; return; } } } int retbook(int bookid) { //还书操作 for(int i=0;i<Maxbor;i++){ if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } void disp(){ //读出读者信息 cout << setw(5) << no <<setw(10) << name<<"借书编号:["; for(int i=0;i<Maxbor;i++) if(borbook[i]!=0) cout << borbook[i] << "|"; cout << "]"<<endl; } }; class RDatabase{ //读者类库,实现建立读者的个人资料 private: int top; //读者记录指针 Reader read[Maxr]; //读者记录 public: RDatabase(){ //构造函数,将 reader.txt 读到 read[]中 Reader s; top=-1;

20

fstream file("reader.txt",ios::in); //打开一个输入文件 while (1) { file.read((char *)&s,sizeof(s)); if (!file)break; top++; read[top]=s; } file.close(); //关闭 reader.txt } void clear(){ //删除所有读者信息 top=-1; } int addreader(int n,char *na){ //添加读者时先查找是否存在 Reader *p=query(n); if (p==NULL) { top++; read[top].addreader(n,na); return 1; } return 0; } Reader *query(int readerid){ //按编号查找 for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) { return &read[i]; } return NULL; } void disp(){ //输出所有读者信息 for (int i=0;i<=top;i++) read[i].disp(); } void readerdata(); //读者库维护 ~RDatabase(){ //析构函数,将 read[]写到 reader.txt 文件中 fstream file("reader.txt",ios::out); //打开一个输出文件 for (int i=0;i<=top;i++) if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i])); file.close(); } }; void RDatabase::readerdata() { char choice; char rname[20]; int readerid; Reader *r; while (choice!='0') { cout <<"\n\n\t\t\t 读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找 \n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl; //显示一个菜单 。 cin >> choice; switch (choice) { case '1':

21

cout << "输入读者编号:"; cin >> readerid; cout << "输入读者姓名:"; cin >> rname; addreader (readerid,rname); break; case '2': cout << "输入读者编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout << " 该读者不存在 "<<endl; break; } cout << "输入新的姓名:"; cin >> rname; r->setname(rname); break; case '3': cout << " 输入读者编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<" 该读者不存在" << endl; break; } r->delbook(); break; case '4': cout << "读入读者编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<"该读者不存在"<< endl; break; } r->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请从新输入:"; break; } } } class Book{ //图书类,实现对图书的描述,图书的编号,书名,借出,还入等 private: int tag; //删除标记 1:已删 0:未删 int no; //图书编号

22

char name[20]; //书名 int onshelf; //是否在架 1:在架 2:已借 public: Book(){} char *getname() { return name; } //获取姓名 int getno(){ return no; } //获取图书编号 int gettag(){ return tag; } //获取删除标记 void setname(char na[]){ //设置书名 strcpy(name,na); } void delbook(){ tag=1;} //删除图书 void addbook(int n,char *na){ //增加图书 tag=0; no=n; strcpy(name,na); onshelf=1; } int borrowbook() { //借书操作 if (onshelf==1) { onshelf=0; return 1; } return 0; } void retbook() { //还书操作 onshelf=1; } void disp() { //输出图书 cout << setw(6) << no << setw(18) << name << setw(10) <<(onshelf==1? "在架":"已借") <<endl; } }; class BDatabase { //图书库类,实现对图书的维护,查找,删除等 private: int top; //图书记录指针 Book book[Maxb]; //图书记录 public: BDatabase() { //构造函数,将 book.txt 读到 book[]中 Book b; top=-1; fstream file("book.txt",ios::in); while (1) { file.read((char *)&b,sizeof(b)); if (!file) break; top++; book[top]=b; } file.close(); } void clear(){ //全删 top=-1;

23

} int addbook(int n,char *na) { //增加图书 Book *p=query(n); if (NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } Book *query(int bookid){ //查找图书 for (int i=0;i<=top;i++) if (book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } void bookdata(); //图书库维护 void disp() { for (int i=0;i<=top;i++) if (book[i].gettag()==0) book[i].disp(); } ~BDatabase(){ //析构函数,将 book[]写到 book.txt 文件中 fstream file("book.txt",ios::out); for (int i=0;i<=top;i++) if (book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; void BDatabase::bookdata() { char choice; char bname[40]; int bookid; Book *b; while (choice!='0') { cout <<"\n\n\n\t\t\t 图 书 维 护 "<<endl<<endl; cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl; //输出并显示一个菜单 cin >> choice; switch (choice) { case '1': cout << "输入图书编号:"<<endl; cin >> bookid; cout << "输入图书书名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "输入图书编号:"<<endl; cin >> bookid;

24

b=query(bookid); if (b==NULL) { cout << " 该图书不存在 "<<endl; break; } cout << "输入新的书名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b==NULL) { cout <<" 该图书不存在" << endl; break; } b->delbook(); break; case '4': cout << " 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b==NULL) { cout <<" 该图书不存在"<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请从新输入:"; } } } //主函数,实现界面的菜单输出 int main() { //main() 函数的实现,程序的主界面的引导 char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n"; cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl; //输出并显示一个菜单 cin >> choice; //输入一个选择数字

25

switch (choice) { case '1': cout <<" 借书 读者编号:"; cin >>readerid; //从键盘输入读者编号 cout <<" 图书编号:"; cin >>bookid; r=ReaderDB.query(readerid); //按编号查找 if (NULL==r) { cout <<" 不存在该读者,不能借书"<< endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<" 不存在该图书,不能借书"<< endl; break; } if (b->borrowbook()==0) { cout << " 该图书已借出,不能借书"<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<"还书\n 读者编号:"; cin >>readerid; cout << " 图书编号:"; cin >>bookid; r=ReaderDB.query(readerid); if (r==NULL) { cout <<" 不存在该读者,不能还书" << endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<" 不存在该图书,不能还书" <<endl; break; } b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<"输入错误,请从新输入:"; } } return 0; } //其中 main 函数是 int 型的。

26

调试与测试结果:
程序运行结果如图下图所示

图(3)--1 运行时的主要界面,选择不同的数显示不同的菜单

27

图(3)--2 选择 1 是程序运行提示

图(3)--3 选择 2 是程序运行提示

28

图(3)--4 选择 3 时程序进入图书维护界面

图(3)--5 选择 0 时,程序退出图书维护界面,并提示重新输入

29

图(3)--6 选择 4 时,程序进入读者维护界面

图(3)--7 最后一次输入 0 时,程序运行结束

30

从最后在加上你们组对程序的分析,就好了
本组成员的能力有限,加上其他方面的因素,设计的程序也不是很完善,妄老 师给予指导。

31


推荐相关:

《C语言程序设计实践》课程报告

C语言程序设计实践》课程报告_工学_高等教育_教育专区。C语言复习资料 北方民族大学 课课 程 程名 称: 报程序设计实践 软件工程(2)班 李思良 20152170 王晓...


对于C语言程序设计实践教学的总结与反思

对于C 语言程序设计实践教学的总结与反思 《C 语言程序设计》实践,作为一门计算机基础课程的实践,它不仅有利于提高学生的 编程能力、思维能力,培养学生的实际动手...


c语言程序设计实践

c语言程序设计实践_计算机软件及应用_IT/计算机_专业资料。北方民族大学课程设 计课程名称: 高级语言程序设计 院(部)名称: 组长姓名学号 同组人员姓名 指导教师...


C语言课程设计实践报告

北京理工大学珠海学院 C 语言程序设计实践报告 2014—2015 学年第 1 学期 学 院: 计算机学院 软件工程 5 班 130202051006 专业班级: 学号: 学生姓名: 陈洪阳 ...


C语言程序设计实践实验题目

C语言程序设计实践实验题目_院校资料_高等教育_教育专区。C语言程序设计实践绥化学院程序设计实践实验报告范例 参考 实验题目:循环结构程序设计 实验目的: 1.熟悉 VC...


《C语言程序设计实践教程》答案-完整版

C语言程序设计实践教程》答案-完整版_理学_高等教育_教育专区。高等教育出版社 王建国 邹显春主编 4.2 练习题一、选择题 1. D 2.B 3.A 4.B 和 D 5.C...


C语言程序设计实训

C 语言程序设计实训要求 一、题目 1、学生成绩管理系统 学生成绩管理系统现有...课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会, 有利于...


C语言程序设计实践

C语言程序设计实践_计算机软件及应用_IT/计算机_专业资料。主要开发一个小游戏C 语言程序设计实践一、设计背景人类已经无法阻止计算机的飞速发展了!随着社会和科技的进...


C语言程序设计实践报告

C语言程序设计实践报告_计算机软件及应用_IT/计算机_专业资料。C 语言程序设计报告 题 目: 学生成绩管理系统 张大伟 刘伟荣 信息科学与工程学院 电气信息类 1008 ...


“C语言程序设计实践”任务书(正式版)

14 1 “C 语言程序设计实践”任务书一、指导老师安排电气信息类 1119 班:唐朝晖、李志民 电气信息类 1124 班:叶华文、李志民 电气信息类 1127 班:袁艳、李志...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com