C语言课设1
- 格式:doc
- 大小:217.50 KB
- 文档页数:12
C语言程序设计课程标准-V1C语言程序设计课程标准重新整理一、概述1.1 课程背景C语言是一门广泛应用于系统编程、嵌入式系统开发以及科学计算等领域的高级编程语言。
C语言的学习使得学生掌握基本的程序设计方法和程序调试能力,为后续的软件开发和计算机科学学习打下坚实的基础。
1.2 课程目标本课程旨在通过讲授语法、数据类型、运算符、控制结构、函数、指针和数组等基本概念来培养学生的C语言编程技能。
讲授完毕后,学生应该能够:- 理解C语言的基本语法和编程规范- 能够使用变量、条件语句、循环语句等语法结构编写简单的程序- 能够使用函数和指针来模块化程序设计- 能够使用数组来处理数据集合的问题- 能够使用结构体和联合体来组织数据1.3 课程内容本课程的重点内容包括:- C语言概述和编程环境搭建- 基本的数据类型、变量和常量- 运算符和表达式- 控制结构:if语句、switch语句、while循环和for循环- 函数和函数调用- 数组和指针- 结构体和联合体1.4 课程评估针对C语言程序设计,考核形式将主要为实验成绩和课程期末考试成绩,其中实验成绩占20%左右,期末考试成绩占80%左右。
二、课程内容详述2.1 C语言概述和编程环境搭建- C语言的历史和应用领域- 编程环境的搭建- 第一个C程序的编写2.2 基本的数据类型、变量和常量- int、float、double等数据类型- 变量和常量的定义和使用- 数据类型转换2.3 运算符和表达式- 算术运算符、关系运算符和逻辑运算符- 运算符优先级- 表达式的求值2.4 控制结构- if语句和嵌套if语句- switch语句- while循环和do-while循环- for循环2.5 函数和函数调用- 函数的定义和调用- 函数参数和返回值- 全局变量和局部变量2.6 数组和指针- 数组的定义和使用- 指针的定义和使用- 指针算术运算和指针比较2.7 结构体和联合体- 结构体的定义和使用- 联合体的定义和使用- 结构体指针和联合体指针三、课程总结本课程的学习使得学生具备了基本的C语言编程技能,包括基本的语法、数据类型、运算符、控制结构、函数、指针和数组等概念。
《C语言程序设计》课程设计课题表一、A类1.职工信息管理系统设计2.职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:3.1、职工信息录入功能(职工信息用文件保存)--输入4.2、职工信息浏览功能--输出5.3、职工信息查询功能--算法6.查询方式:按学历查询、按职工号查询、条件组合查询7.职工信息删除、修改功能(可选项)8.图书信息管理系统设计9.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
10.试设计一图书信息管理系统,使之能提供以下功能:11.1、图书信息录入功能(图书信息用文件保存)--输入12.2、图书信息浏览功能--输出13.3、图书信息查询功能--算法14.查询方式:按书名查询、按作者名查询、条件组合查询15.图书信息的删除与修改(可选项)16.图书管理系统设计17.图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等18.功能描述:19.1、新进图书基本信息的输入。
20.2、图书基本信息的查询。
21.3、对撤消图书信息的删除。
22.4、为借书人办理注册。
23.5、办理借书手续。
24.6、办理还书手续25.要求:使用文件方式存储数据。
26.实验设备管理系统设计27.实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
28.主要功能:29.1、能够完成对设备的录入和修改30.2、对设备进行分类统计31.3、设备的破损耗费和遗损处理32.4、设备的查询33.要求:使用文件方式存储数据。
34.学生信息管理系统设计35.学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一学生信息管理系统,使之能提供以下功能:36.1、系统以菜单方式工作37.2、学生信息录入功能(学生信息用文件保存)--输入38.3、学生信息浏览功能--输出39.4、学生信息查询功能--按学号查询、按姓名查询、40.5、学生信息的删除与修改(可选项)41.要求:使用文件方式存储数据。
《C语⾔课程设计与游戏开发实践课程》1-3章总结⽬录:⼀、知识点归纳第⼆章知识点第三章⽣命游戏思考题⼆、代码实践2.1飞机⼤战 2.2反弹⼩球 2.3flappying bird 3.1⽣命游戏⼀、知识点归纳1//第⼀章2 system("cls"); // 清屏函数34 Sleep(50); // 等待若⼲毫秒56if(kbhit()) // 判断是否有输⼊7 {8 input = getch(); // 不必输⼊回车9 }1//第⼆章23//飞机游戏4//解决画⾯闪烁严重5 #include <windows.h>6void gotoxy(int x,int y) //光标移动到(x,y)位置7 {8 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);9 COORD pos;10 pos.X = x;11 pos.Y = y;12 SetConsoleCursorPosition(handle,pos);13 }1415void show() // 显⽰画⾯16 {17 gotoxy(0,0); // 光标移动到原点位置,以下重画清屏18 }19202122//解决光标闪烁严重23void HideCursor() // ⽤于隐藏光标24 {25 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第⼆个值为0表⽰隐藏光标26 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);27 }2829void startup() // 数据初始化30 {31 HideCursor(); // 隐藏光标32 }3334//增加esc键游戏暂停35if(input==27)3637 system("pause");383940//2.2反弹球411//开头加,因为kbhit()报4996错422#pragma warning(disable:4996);3 #include <cwindow.h>需要改成#include <windows.h>判断接触障碍物43if ( (ball_y>=left) && (ball_y<=right) ) // 被挡板挡住44未接触45if ((bird_x >= bar1_xDown) && (bird_x <= bar1_xTop)) //⼩鸟通过障碍4647⽣成⼀个范围内的随机数48 block_y = rand()%width; // 产⽣范围内的新的⽅块49502.3 flappy bird5152障碍物循环出现53if (bar1_y <= 0) // 再新⽣成⼀个障碍物55 bar1_y = width;//从最右边移动56int temp = rand() % int(high * 0.8);//画⾯内随机⼀个缝隙57 bar1_xDown = temp - high / 10;//缝隙点上下留high/1058 bar1_xTop = temp + high / 10;59 }1第三章233.1⽣命游戏⼜称细胞⾃动机、康威⽣命游戏4规则:以格⼦内是否存活,与周围8个格⼦有关,3个⽣为⽣,2个为⽣死不明,1个为死5简单的就上下左右加⼀遍判断6 NeibourNumber = cells[i-1][j-1] + cells[i-1][j] + cells[i-1][j+1]+ cells[i][j-1] + cells[i][j+1] + cells[i+1][j-1] + cells[i+1][j] + cells[i+1][j+1];思考题:(⽐较有趣)尝试修改规则,⽐如初始化不同的数据,或者3,2的时候都增加;增加另⼀个物种,⾷⾁动物、⾷草动物,互相抑制;增加不同地形,⽐如某块区域有⽔源,⽣命更容易⽣存;交互投⾷,按+加速、按-减速;模拟⽣态进化、还有模拟⼤⽓污染、谣⾔传播等等。
一、需求分析所做题号为1,包含6个小题,分别如下:1、字符类型统计器:编写程序,在终端用键盘输入字符串,以CTRL+Z 组合表示输入完毕,统计输入的字符串中空格符、制表符、换行符的个数,并显示统计结果。
2、舍罕王的失算:相传国际象棋是古印度舍罕王的宰相达依尔发明的。
舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。
这位聪明的宰相指着8*8共64格的象棋棋盘说:“陛下,请您赏给我一些麦子吧。
就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。
”舍罕王让人扛来一袋麦子,他要兑现他的许诺。
请问,国王共要多少麦子赏赐他的宰相?3、汉诺塔:一块板上有三根针:A 、B 、C 。
A 针上套有64个大小不等的圆盘,大的在下,小的在上,如下图所示。
要把这64个圆盘从A 针移动到C 针上,每次只能移动一个圆盘,移动可以借助B 针进行。
但在任何时候,任何针的圆盘都必须保持大盘在下,小盘在上。
求移动的步骤。
4、用递推化梯形法求定积分:⎰=10sin dx xxI 的值。
5、算法设计题:输入一个字符串并将它输出,以ctrl+z 组合键表示输入完毕,要求将输入的字符串中多于一个的连续空格符合并为1个。
6、一个有序的字母序列:a ,b ,d ,f ,h ,j ,l ,p ,t ;编写一个程序,要求从终端输入一个字幕,将该字母插入这个序列中使得字母序列依然保持有序,然后输出新的字母序列。
注意:如果输入的字母在原序列中存在,就将该字母插入到已存在字母的后面。
二、总体设计1、因为计算机存储的都是ASCII 码,查表可知空格符、制表符、换行符的ASCII 码值分别为32、9、10。
要判断是否输入完毕,所以也需要知道CTRL+Z 输入的字符在计算机中对应什么,查询可知CTRL+Z 输入的字符在计算机中对应EOF 结束标志。
(经过操作输入CTRL+Z 无法结束,所以改为输入为1时结束)流程图如下:2、达依尔要求:第一个格子1粒麦子,第二个格子2粒麦子,第三个格子4粒麦子,……以后每一小格都比前一个小格的麦粒数增加一倍,直到64个小格子为止。
可知:第i 个格子的麦粒数为1-i 2(i=1,2,...,64),所以总数为:∑=641i 1-2i可以用for 循环做。
(在c 语言中有两种方法计算1-i 2,直接调用pow 函数或者采用for 循环)3、因为要大盘在上,小盘在下。
所以这样移动:(1)现将第1~63个盘子移到B针上,保证大盘在下小盘在上。
(2)再将最下面的盘子移动到C针上。
(3)将B针上的63个盘子移到C针上。
关键在于第(1)步和第(3)步,由于每次只能移动一个圆盘,所以在移动过程中必须要借助另外一根针,即第(1)步将第1~63个盘子借助C针移到B 针上;第(3)步将B针上的63个盘子借助A针移到C针上。
这又是两个新的汉诺塔问题。
将上第1~63个盘子借助C针移到B针上:(1)将A针第1~62个盘子借助B针移到C针上,保证大盘在下小盘在上。
(2)再将最下面的(第63个)盘子移动到B针上。
(3)将C针上的62个盘子借助A针移到B针上。
将B针上的63个盘子借助A针移到C针上:(1)将B针第1~62个盘子借助C针移到A针上,保证大盘在下小盘在上。
(2)再将最下面的(第63个)盘子移动到C针上。
(3)将A针上的62个盘子借助B针移到C针上。
这明显是一个递归问题。
4、梯形法计算⎰=10sin dx xxI : 定步长:若有)(dx dy x f =,则用梯形法有))1()((2hy y k 1k +++=+k f k f 流程图:5、本题要求输入的字符串中多于一个的空格符合并为一个,因此可以在输入每个字符时判断它是否为空格符。
若是,则接下来的空格符不输出输出。
流程图:6、注意数组的大小,因为要插入一个字母。
将输入的字母和原序列的字母按顺序比较ascii码值大小。
确定好位置后,将该位置后的字母按顺序后移一个单位,然后插入该字母。
流程图:三、详细设计1、程序及注释#include<stdio.h>#include<string.h>main(){char c;//定义字符变量int Space=0, Tab=0, Enter=0;//定义整型变量printf("Please input a string:\n");//在运行窗口显示“Please input a string :(请输入一段字符串)”scanf("%c", &c);//输入一个字符while(c!=’1’) //当输入字符不为ctrl+z时,运行while里面的语句{if (c==32) Space++;//当输入的字符的ASCII码等于32(即空格键的ASCII码值)时,Space加一else if (c==9) Tab++; //当输入的字符的ASCII码等于9(即制表键的ASCII码值)时,Tab加一else if (c==10) Enter++; //当输入的字符的ASCII码等于10(即回车键的ASCII码值)时,Enter加一scanf("%c", &c);//输入一个字符}printf("the number of Space:%d\n", Space); //输出显示这串字符串的空格键个数printf("the number of Tab:%d\n", Tab); //输出显示这串字符串的制表键个数printf("the number of Enter:%d\n", Enter);//输出显示这串字符串的回车键个数system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}2、程序及注释①采用pow函数计算2的i次方。
#include<stdio.h>#include<math.h>void main(){double sum=0;//定义双精度变量int i;//定义整型变量for(i=0;i<64;i++)//进行64次循环sum=sum+pow(2,i);//累加求和printf("the number of qrain is: %lf\n", sum);//显示结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}②采用for循环方式计算2的i次方。
#include<stdio.h>#include<math.h>void main(){double x,sum=0;//定义双精度变量int i,n;//定义整型变量for (n = 0; n <64; n++)//进行64次循环计算sum{x = 1;for (i = 0; i<n; i++)//进行循环计算2的i次方x = 2 * x;//循环结束后x=2的i次方sum = sum + x;//循环结束后sum为最后结果}printf("the number of qrain is: %lf\n", sum);//显示结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}3、#include<stdio.h>move(int n,char x,char y,char z)//定义调用函数move(){if(n==1)printf("move disk from position %c to %c\n",x,z);else{move(n-1,x,z,y);//调用move()函数printf("move disk from position %c to %c\n",x,z);move(n-1,y,x,z);//调用move()函数}}int main(void){int n;//定义整型变量printf("input diskes number:\n");scanf("%d",&n);//从键盘上输入n的值printf("the step to moving %d diskes:\n",n);move(n,'A','B','C');//调用move()函数system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}4、程序及注释#include<stdio.h>#include<math.h>double func(double x)//定义调用函数func(),计算sin(x)/x的值{if(x!=0)return sin(x)/x;elsereturn 1;}int main(void){double i,y,h,n;//定义双精度变量y=0;scanf("%lf/n", &h);//输入步长值n=1/h;for(i=0;i<n;i++){y=y+0.5*h*(func(i*h)+func((i+1)*h));//梯形法计算}printf("the h is:%lf\n",h);//显示步长printf("the result of integration is :%.10lf\n",y);//显示求和结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}5、程序及注释#include<stdio.h>#include<string.h>main(){char c,lastc='c';//定义字符变量,给lastc初值为“c”printf("Please input a string:\n");scanf("%c",&c);//输入一个字符while(c!=EOF)//当输入ctrl+z时结束循环{if(c!=32){putchar(c);//输出字符lastc=c;//将输入的字符值给lastcscanf("%c" ,&c);//输入一个字符}else{if(lastc!=32) putchar(c);//当lastc的ascii码值不为32(即输入空格键)时,输出字符lastc=c;//将输入的字符值给lastcscanf("%c" ,&c); //输入一个字符}}system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}6、程序及注释#include<stdio.h>#include<string.h>main(){char c;//定义字符变量char str[10]={'a','b','d','f','h','j','l','p','t'};int i,j,k;//定义整型变量printf("please input a alpha\n");scanf("%c" ,&c);//输入一个字符if((c<'A')||(c>'z')) return(0);if((c>'Z')&&(c<'a')) return(0);if((c>'A')&&(c<'Z')) c=c+32;//当输入的字符为大写字母时,转换为小写字母for(i=0;i<8;i++){if((c>=str[i])&&(c<str[i+1]))k=i+1;}if(c>=str[8])k=9;for(j=8;j>=k;j--)str[j+1]=str[j];str[k]=c;printf("the result is:\n") ;printf("%s",str) ;system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}四、程序运行结果测试与分析1、结果:分析:由于当我使用EOF作为结束符时,当我在窗口输入ctrl+Z时并不能结束,当我把结束符改为数字1就可以了,所以我用数字1作为结束符。