遗传算法的C语言程序案例

遗传算法的C语言程序案例
遗传算法的C语言程序案例

遗传算法的C语言程序案例

一、说明

1.本程序演示的是用简单遗传算法随机一个种群,然后根据所给的交叉率,变异率,世代数计算最大适应度所在的代数

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的命令;相应的输入数据和运算结果显示在其后。3.举个例子,输入初始变量后,用y= (x1*x1)+(x2*x2),其中-2.048<=x1,x2<=2.048作适应度函数求最大适应度即为函数的最大值

4.程序流程图

5.类型定义

int popsize; //种群大小

int maxgeneration; //最大世代数

double pc; //交叉率

double pm; //变异率

struct individual

{

char chrom[chromlength+1];

double value;

double fitness; //适应度

};

int generation; //世代数

int best_index;

int worst_index;

struct individual bestindividual; //最佳个体

struct individual worstindividual; //最差个体

struct individual currentbest;

struct individual population[POPSIZE];

3.函数声明

void generateinitialpopulation();

void generatenextpopulation();

void evaluatepopulation();

long decodechromosome(char *,int,int);

void calculateobjectvalue();

void calculatefitnessvalue();

void findbestandworstindividual();

void performevolution();

void selectoperator();

void crossoveroperator();

void mutationoperator();

void input();

void outputtextreport();

6.程序的各函数的简单算法说明如下:

(1).void generateinitialpopulation ()和void input ()初始化种群和遗传算法参数。

input() 函数输入种群大小,染色体长度,最大世代数,交叉率,变异率等参数。

(2)void calculateobjectvalue();计算适应度函数值。

根据给定的变量用适应度函数计算然后返回适度值。

(3)选择函数selectoperator()

在函数selectoperator()中首先用rand ()函数产生0~1间的选择算子,当适度累计值不为零时,比较各个体所占总的适应度百分比的累计和与选择算子,直到达到选择算子的值那个个

体就被选出,即适应度为fi的个体以fi/∑fk的概率继续存在;

显然,个体适应度愈高,被选中的概率愈大。但是,适应度小的个体也有可能被选中,以便增加下一代群体的多样性。

(4)染色体交叉函数crossoveroperator()

这是遗传算法中的最重要的函数之一,它是对个体两个变量所合成的染色体进行交叉,而不是变量染色体的交叉,这要搞清楚。首先用rand ()函数产生随机概率,若小于交叉概率,则进行染色体交叉,同时交叉次数加1。这时又要用rand()函数随机产生一位交叉位,把染色体的交叉位的后面部分交叉即可;若大于交叉概率,则进行简单的染色体复制即可。

(5)染色体变异函数mutation()

变异是针对染色体字符变异的,而不是对个体而言,即个体变异的概率是一样。随机产生比较概率,若小于变异概率,则1变为0,0变为1,同时变异次数加1。

(6)long decodechromosome(char *,int,int)

本函数是染色体解码函数,它将以数组形式存储的二进制数转成十进制数,然后才能用适应度函数计算。

(7)void findbestandworstindividual()本函数是求最大适应度个体的,每一代的所有个体都要和初始的最佳比较,如果大于就赋给最佳。

(8)void outputtextreport () 输出种群统计结果

输出每一代的种群的最大适应度和平均适应度,最后输出全局最大值

二、运行环境

本程序的开发工具是VC++,在VC++下运行。

源代码

#include"stdafx.h"

#include

#include

#include

/////////////The definiton of user data 定义用户数据////

#define Cmax 100 //certain maximal value

#define Cmin 0 //certain minimum value

#define LENGHT1 3

#define LENGHT2 3

//总染体长度

#define CHROMLENGTH LENGHT1+LENGHT2

const int MaxGeneration = 100;

const int PopSize = 10;

const double Pc = 0.6;

const double Pm = 0.001;

////////////// 数据结构定义///////////////////

struct Individual{

char chrom[CHROMLENGTH + 1];

double value;

double fitness;

int generation ;

int bestIndex;

int worstIndex;

Individual bestIndividual ;

Individual worstIndividual ;

// best individual by now

Individual currentBest ;

Individual population [PopSize] ;

///////////////////////

void generateInitialPopulation();

void generateNextPopulation();

void evalutePopulation();

long decomdeChromosome(char*, int, int); void calculateObjectValue();

void calculateFitnessValue();

void findBestAndWorstIndividual();

void performEvolution();

void selectionOperator();

void crossoverOperator();

void mutationOperator();

void outputTextReport();

//以上为函数以及全局变量定义部分

int main(){

generation = 0; generateInitialPopulation(); evalutePopulation();

while (generation < MaxGeneration) { generation++; generateNextPopulation(); evalutePopulation();

performEvolution();

outputTextReport();

}

system("pause");

return 0;

}

//////////////////////////////////////////////////////////////

//////产生第一代样本/////

void generateInitialPopulation() {

int i, j;

srand((unsigned)time(NULL));

for (i = 0; i < PopSize; i++) {

for (j = 0; j < CHROMLENGTH; j++) {

population[i].chrom[j] = ((rand() % 10) < 5) ? '0' : '1';

}

population[i].chrom[CHROMLENGTH] ='/0';

}

}

////////产生下一代样本//////

void generateNextPopulation() {

selectionOperator();

crossoverOperator();

mutationOperator();

}

//变异算子//

void mutationOperator() {

int i, j;

double p;

// bit mutation

for (i = 0; i < PopSize; i++) {

for (j = 0; j < CHROMLENGTH; j++) {

p = rand() % 1000 / 1000.0;

if (p < Pm) {

population[i].chrom[j] = (population[i].chrom[j] == '0') ? '1': '0'; }

}

}

}

//交叉算子///

void crossoverOperator() {

int i, j;

int index[PopSize];

int point, temp;

double p;

char ch;

for (i = 0; i < PopSize; i++) {

index[i] = i;

}

for (i = 0; i < PopSize; i++) {

point = rand() %(PopSize - i);

temp = index[i];

index[i] = index[point + i];

index[point + i] = temp;

}

for (i = 0; i < PopSize - 1; i+=2) {

p = rand() % 1000 / 1000.0;

if (p < Pc) {

point = rand()% (CHROMLENGTH - 1) + 1;

for (j = point; j < CHROMLENGTH; j++) {

ch = population[index[i]].chrom[j];

population[index[i]].chrom[j] = population[index[i + 1]].chrom[j]; population[index[i + 1]].chrom[j] = ch;

}

}

}

}

///选择算子/////////////

void selectionOperator() {

int i, index;

double p, sum = 0.0;

double cfitness[PopSize];

Individual newpopulation[PopSize];

for (i = 0; i < PopSize; i++) {

sum += population[i].fitness;

}

for (i = 0; i < PopSize; i++) {

cfitness[i] = population[i].fitness / sum;

}

// calculate cumulative fitness

for (i = 1; i < PopSize; i++) {

cfitness[i] = cfitness[i] + cfitness[i - 1];

}

for (i = 0; i < PopSize; i++) {

p = rand() % 1000 / 1000.0;

index = 0;

while (p > cfitness[index]) {

index++;

}

newpopulation[i] = population[index];

}

for (i = 0; i < PopSize; i++) {

population[i] = newpopulation[i]; /

}

}

/////依据某些公式对样本进行评价////

void evalutePopulation() {

calculateObjectValue();

calculateFitnessValue(); findBestAndWorstIndividual(); /

}

//找出到目前为止最好的个体//////

void findBestAndWorstIndividual() {

int i;

double sum = 0.0;

bestIndividual = population[0];

worstIndividual = population[0];

for (i = 0; i < PopSize; i++) {

if (population[i].fitness > bestIndividual.fitness) { bestIndividual = population[i];

bestIndex = i;

} else if (population[i].fitness < worstIndividual.fitness) { worstIndividual = population[i];

worstIndex = i;

}

sum += population[i].fitness;

}

if (generation == 0) {

currentBest = bestIndividual;

} else {

if (bestIndividual.fitness > currentBest.fitness) {

currentBest = bestIndividual;

}

}

}

//计算适应度///

void calculateFitnessValue() {

int i;

long temp1, temp2;

double x1, x2;

for (i = 0; i < PopSize; i++) {

temp1 = decomdeChromosome(population[i].chrom, 0, LENGHT1);

temp2 = decomdeChromosome(population[i].chrom, LENGHT1, LENGHT2); x1 = temp1 * temp1;

x2 = temp2 * temp2;

population[i].fitness = x1+x2; //x1平方加上x2平方

}

}

//计算目标值

//目标函数为f(x) = x1* x1 + x2*x2

void calculateObjectValue() {

int i;

long temp1, temp2;

double x1, x2;

for (i = 0; i < PopSize; i++) {

temp1 = decomdeChromosome(population[i].chrom, 0, LENGHT1);

temp2 = decomdeChromosome(population[i].chrom, LENGHT1, LENGHT2); x1 = temp1 * temp1;

x2 = temp2 * temp2;

population[i].value = x1 + x2;

}

}

//把二进制转化为十进制

long decomdeChromosome(char* string, int point, int length) {

int i;

long decimal = 0L;

char * pointer;

for(i = 0, pointer=string+point; i < length;i++,pointer++){

decimal += (*pointer - '0') << (length - 1 - i);

}

return decimal;

}

//进经同时把最坏个体用目前最好个体替代///

void performEvolution() {

if (bestIndividual.fitness > currentBest.fitness) {

currentBest = population[bestIndex];

} else {

population[worstIndex] = currentBest;

}

}

//打印当前样本信息///

void outputTextReport() {

int i;

double sum;

double average;

sum = 0.0;

for (i = 0; i < PopSize; i++) {

sum += population[i].value;

}

average = sum / PopSize;

printf("gen=%d, avg=%f, best=%f",generation, average,currentBest.value); printf(" chromosome=");

for( i = 0; i < CHROMLENGTH; i++){

printf("%c", currentBest.chrom[i]);

}

printf("/n");

}

c语言程序设计报告 图书管理系统

中国地质大学本科生课程论文封面 课程名称c语言课程设计 教师姓名樊媛媛 本科生姓名 本科生学 本科生专业 所在院系 类别: 日期: 课程设计评语

注:1、无评阅人签名成绩无效; 2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效; 3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。 目录

课程设计评语 (1) 目录 (2) 1.课程论文题目 (3) 2.程序设计思路 (3) 3.功能模块图 (4) 4.数据结构设计 (4) 5.算法设计 (4) 6.程序代码 (5) 7.程序运行结果 (11) 8.编程中遇到的困难及解决方法 (14) 9.总结心得及良好建议 (15) 10.致谢 (15) 1.课程论文题目 图书管理系统 2.程序设计思路

根据要求,图书管理系统以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保持记录以进行删除,查询,借书,还书,退出,添加等等操作;另外还有键盘式旋转菜单以实现功能选择模块。 3.功能模块图 系统功能模块图 4.数据结构设计 先写主函数main (),然后设计个功能选项,用switch选择,然后进入不同模块,进行不同选择,实现不同功能。每个图书信息设置一个结构体,将输入信息存入文件,提供查询功能,还有删除功能以及借书还书功能。每运行一功能后都返回主界面,方便再次选择,还有设置退出模块,方便退出。 5.算法设计

先定义结构体数组struct books,然后设置主界面,主界面出现6个功能选项,分 别是输入sr() 、借书js()、还书hs()、删除sc()、退出tc()、查询cx().各模块设计如下: 输入模块sr(),先调用文件eup,对其进行读取,然后增加,再对其进行保存和调用。其中结构体只输入tsmc图书名称,tsbh图书编号,dj单价,zz作者, 然后自动生成,czzt存在状态,姓名xm,学号xh,性别xb. 查询模块cx(),有选项图书编号和图书名称,然后选择,用if选择,然后用for循环查找,当输入名称与文件中的名称相同时,便显示此信息。 删除模块就是在查找功能的图书后,选择删除,将strcpy将s[i+1]的值赋给s[i]。借出模块也是在查询的基础上,若s[i]的存在状态为已借出,则显示已借出,无法再借,若未借出,则将s[i]的存在状态czzt变为已借出,然后输入姓名,学号,性别,最后显示出已借出。 还书模块就是在查询的基础上,若s[i]的存在状态为未借出,则无法归还,若借出,则将存在状态变为未借出,然后自动将姓名,学号,性别变为初始值。 退出模块使flag=1,而在main就有bool flag 且main中已令main=0.这样就实现了退出功能。 其中若输入超过选项值后,都会显示输入错误,请重新输入。若字符错误,程序就直接出现错误了。 6.程序代码 #include #include #include #include #define M 100 struct books { char tsmc[12]; int tsbh; float dj; char zz[12]; char czzt[12]; char xm[12];

C语言程序设计 键盘输入和屏幕输出(4.2.2)--4.1节和4.4节

【例4.1】从键盘输入一个大写英文字母,将其转换为小写字母后,再显示到屏幕上。程序如下: 1 2 3 4 5 6 7 8 9 10#include main() { char ch; printf("Press a key and then press Enter:"); ch = getchar(); /* 从键盘输入一个字符,按回车键结束输入,该字符被存入变量ch */ ch = ch + 32; /* 将大写英文字母转换为小写英文字母 */ putchar(ch); /* 在屏幕上显示变量ch中的字符 */ putchar('\n'); /* 输出一个回车换行控制符 */ } 程序的运行结果如下: Press a key and then press Enter: B↙ b 【例题解析】在ASCII字符表中,小写英文字母与相应的大写英文字母的ASCII码值相差32。根据这一规律,可实现大小写英文字母之间的转换。 【例4.2】从键盘输入一个大写英文字母,将其转换为小写英文字母后,将转换后的小写英文字母及其十进制的ASCII码值显示到屏幕上。 1 2 3 4 5 6 7 8 9 #include main() { char ch; printf("Press a key and then press Enter:"); ch = getchar(); ch = ch + 32; printf("%c, %d\n", ch, ch); /* 分别输出变量ch中的字符及其ASCII码值 */ } 此程序的运行结果如下: Press a key and then press Enter: B↙ b, 98 【例题解析】字符型数据既可以用字符格式输出,也可以用整型格式输出,后者是输出 其ASCII码的值。

C语言程序设计报告

河南理工大学万方科技学院 C语言课程设计报告题目简单计算器编程 姓名何美美 学号072130026 专业07通信 班级一班 指导教师董玉杰 2008年09 月05日

目录 一、设计目的 (1) 二、本组课题及本人任务 (2) 三、主体内容 (3) (1)流程图 (2)源程序 (3)上机调试 (4)实验结果 四、设计体会 (6)

设计目的 1 复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握; 2 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力; 3 培养学生在项目开发中团队合作精神、创新意识及能力 本组课题及本人任务 1 设计一个简单计算器能完成基本的加、减、乘、除计算,尽量模仿Windows计算器。系统界面不做强制要求。 2在本次设计中,由何永美、刘艳玲、贺清隆三人共同完成,由于知识掌握不牢,因此每一步都要共同商量,其中源程序由我们参考大量资料而成。 3本人负责程序调试及其他有关工作。

流程图主要内容 简单计算器

程序代码如下: /*代码文件名:E4_6.C*/ /*计算器的模拟*/ #include #include double add (double a,double b) {return a+b;} double sub (double a,double b) {return a-b;} double multi(double a,double b) {return a*b;} double divis(double a,double b) {return a/b;} Void main() { double x,y; int select; printf("input two numbers:"); scanf("%lf,%lf",&x,&y); printf("1------add\n"); printf("2------sub\n"); printf("3------multi\n");

大一c语言程序报告

《C语言程序设计》实验报告 专业:应用化学班级:1702 学号:201713280206学生姓名蒋振桢实验日期:成绩:指导老师: 实验单元一程序基本结构设计 一、实验题目 实验一熟悉VC++环境 二、实验目的 1. 熟悉C程序编辑环境,掌握主要菜单项的作用。 2. 熟悉编写一个C程序的上机过程(编辑、编译、链接和运行)。 3. 熟悉C程序的基本输入输出语句 三、实验内容 1. 书本第一章的例一程序。 2. 由键盘输入两个整数,求得它们的和并输出至屏幕。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2.软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: #include int main() { printf(“I am a student .\n”) ; return 0 ; } 运行结果为: { int a,b,sum; scanf("%d%d",&a,&b); sum=a+b; printf("sum is %d\n",sum); return 0; } 运行结果为:

六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进行简单总结)

《C语言程序设计》实验报告 实验日期:2015.03.19 成绩:指导老师: 实验单元一程序基本结构设计 一、实验题目 实验二顺序结构程序设计 二、实验目的 (1)掌握C语言数据类型以及变量的声明。 (2)掌握C语言的赋值运算符、赋值表达式、赋值语句。 (3)掌握C语言的整型和字符型的混合运算。 (4)掌握C语言的输入、输出函数的使用格式。 三、实验内容 1.有人用温度计测量出华氏温度,现输入华氏温度f,请编写程序把它转换为摄氏温度c。 已知华氏温度和摄氏温度有如下关系:c=5/9(f-32)。 2.输入长方形的长和宽,编程求该长方形的周长和面积。(要求周长和面积保留两位小数) 3.将字符串“China”译成密码,译码规则是:用字母表顺序中原来字母后面的第5个字 母替代原来的字母。请编写程序实现译码并输出。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2.软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: #include int main() { float c,f; printf("请输入一个华氏温度:"); scanf("%f",&f); c=5.0/9.0*(f-32); printf("摄氏温度为:%5.2f\n",c); return 0; } 运行结果为:

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

C语言程序简单例子讲解学习

实验二参考答案 1.输入两个整型数字,输出他们的和。 #include main() { int a, b, sum; scanf(“%d%d ”, &a, &b); sum=a+b; printf(“a+b=%d ”, sum); } 2.输入两个实型数,输出他们的和与乘积。 #include main() { float a, b, sum, product; scanf(“%f%f ”, &a, &b); sum=a+b; product=a*b; printf(“a+b=%5.2f, a*b =%5.2f ”, sum, product); } 3.求方程02=++c bx ax 的根(设042≥-ac b )(其中a ,b ,c 的值由键盘输入)。 #include #include main() { float a, b, c, dt, x1, x2; scanf(“%f%f%f ”, &a, &b, &c); dt=sqrt(b*b-4*a*c); x1=(-b+dt)/(2*a); x2=(-b-dt)/(2*a); printf(“x1=%5.2f, x2 =%5.2f ”, x1, x2); }

4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?(h和f的值由键盘输入,输出鸡和兔的头数) #include main() { int h, f, x,y; scanf(“%d%d”, &h, &f); x=2*h-f/2; y=f/2-h; printf(“x=%d, y =%d”, x, y); }

大学大一C语言程序设计期末考试试卷和答案

四川师范大学计算机科学学院 2012~2013学年度第二学期期末考试 C 语言程序设计试卷 试卷A 答卷说明: 1、 本试卷共6页,答题纸3页,4个大题,35个小题,满分100 分,120分钟完卷。 2、 闭卷考试,所有的答案都必须写在答题纸上,判卷以答题纸上 答案为准。 3、 本试卷适用于2011级1、2、3班。 一、 单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的 序号填在题干的括号内。每小题1分,共20分) 1、 在C 语言中,下列标识符中合法的是( ) A). -int B). in1_3 C). A_B!D D). const 2、 不属于C 语言基本数据类型的是( ) A). int B). union C). char D). unsigned 3、 下面是对宏定义的描述。不正确的是( ) A). 宏不存在类型问题,宏名无类型,它的参数也无类型 B). 宏替换不占用运行时间 C). 宏替换只是字符串的简单替代 D). 宏替换时先检查类型,类型一致时才可以替换 4、 C 语言中,″\\xfds ″在内存中占用的字节数是( ) __________________学院__________级___________班 姓名_______________ 学号_______________ ………………………………(密)………………………………(封)………………………………(线)……………………………… 密 封 线 内 答 题 无 效

A).3 B).4C).5D).6 5、设int x;则执行printf(″%x\n″,~x^x);的结果是() A). ffffffff B). ff C).0D). 1 6、对于while语句,错误的说法是() A).用条件控制循环体的执行次数B).循环体至少要执行一次 C).循环体有可能一次也不执行D).循环体中可以包含若干条语句 7、执行下列语句后输出的结果是() int a=8,b=7,c=6; if(ac){a=c;c=b;} printf("%d,%d,%d\n",a,b,c); A).6,7,7B).6,7,8C).8,7,6D).8,7,8 8、设int a=9,b=20;则printf(″%d,%d\n″,a--,--b);的输出结果是() A).9,19B).9,20C).10,19D).10,20 9、设static char x[ ]=″12345″,y[ ]={′1′,′2′,′3′,′4′,′5′,′\0′};那么() A).x数组的长度等于y数组的长度B).x数组的长度大于y数组的长度 C).x数组的长度少于y数组的长度D).x数组与y数组的存储区域相同 10、设int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是() for(i=0;i<3;i++) printf(″%d″,x[i][2-i]); A).147B).159C).357D).369 11、执行完下列语句后,n的值是() int n; for (n=0 ; n<100 ; n=2*n+1); A).125B).126 C).127D).128 12、有以下语句:int a=6;a+=a-=a*a;printf(“%d”,a);输出结果() A).–132 B).–60 C). -24 D). 0 13、为了连接两个字符串s1与s2,应当使用() A). strcat( s1,s2 ) B). strcpy( s1, s2 ) C). strlen( s1, s2 ) D). strcmp( s1, s2 ) 14、设int a,*p;则语句p=&a;中的运算符“&”的含义是() A).位与运算B).逻辑与运算C).取指针内容D).取变量地址 15、下面输出的结果为() i nt a=13, b=64; printf(“%d\n”, !a || (b>>3) );

51单片机驱动1602液晶显示器c程序

51单片机驱动1602液晶显示器c程序 /*程序效果:单片机控制液晶显示器1602 显示字母数字,用户自行更改io 程序原创安全:51hei*/#includereg52.h //头文件#define uchar unsigned char //宏定义#define uint unsigned intuchar code table[]=“51HEI XING XING “ ; //显示的字母uchar code table1[]=“51HEI MCUXUE YUAU” ;sbit lcdrs=P1; //寄存器选择引脚sbit lcdwr=P1;//读写引脚sbit lcde=P1 ; //片选引脚void delay(uchar x) //延时子函数{uchar i,j;for(i=x;i0;i--) for(j=110;j0;j--);}void write_com(uchar com) //写指令子函数{ //根据1602 液晶 显示器协议编写P2=com; lcdrs=0;lcdwr=0;delay(5);lcde=0; delay(5);lcde=1; }void write_dat(uchar dat) //写数据子函数{P2=dat; lcdrs=1;lcdwr=0;delay(5);lcde=0;delay(5);lcde=1;}void init() //初始化子函数{write_com(0x01); //清屏write_com(0x3f); //功能设置write_com(0x0d); //显示控制write_com(0x06); //输入方式设置}void main(){ uchar i; //定义局部变量init();write_com(0x80+0x02+0x10); //指针的位置for(i=0;i15;i++) //显示{ write_dat(table[i]); delay(50); // 延时,用于调节速度不匹配}write_com(0x80+0x40+0x10); for(i=0;i16;i++){ write_dat(table1[i]); delay(50);} for(i=0;i16;i++){ write_com(0x18); delay(50);} while(1);}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

c语言程序案例(DOC)

上机注意: 1、请大家在VC6.0中建立工程,编写代码,编译(compile),链接(build),运行(execute program)后,输入题目中的例子输入,在输出与题目中的例子输出一致后再提交到编程网格上。 2、建立VC6.0工程(project)时,请建立Win32 Console Application。 3、下面是练习2中的两个习题讲解 /* * 练习2、习题(4-1) 计算邮资 * 习题讲解 */ #include int main() { double weight; char exp; double d; /* * scanf里面的数字/字符变量(例如下面的weight),要用& * %c 是字符型变量的输入输出格式 */ /* * 如果输入之间有其他内容(例如空格,逗号等),scanf的输入格式(即双引号中的内容)要与之匹配 * 例如,本题的输入为“1 y”,之间有空格,scanf的输入格式应该写成"%lf %c" * 例如“练习2、习题(4-2) 点和正方形的关系”中的输入为“0.5,0.5”,之间有逗号,scanf 的输入格式应该写成"%lf,%lf" */ scanf("%lf %c", &weight, &exp); if(weight <= 1) d = 0.8; else d = (weight-1)*0.5 + 0.8; /* * if语句里的条件,如果是判断是不是相等,应该用两个等号 * 字符常量(例如下面的字符y)要用单引号 */ if(exp == 'y') d = d+2; /* * printf里面的变量(例如下面的d)不要用& * %lf是双精度浮点数的输入输出格式,.1 表示小数点后保留一位(保留两位用.2) */ printf("%.1lf\n", d);

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

c语言程序设计》课程设计报告

《C语言程序设计》课程设计报告 (2013—2014学年第3学期) 题目:C语言课程设计 专业:软件工程 班级:软件工程技术2班 姓名学号:1 林燕萍 指导教师:吴芸 成绩: 计算机科学与技术系 2014年6月23日

目录 一、课程设计的目的与要求 (1) 二、方案实现与调试 (3) 掷骰子游戏 (5) 射击游戏 (7) 计算存款本息之和 (8) 肇事逃逸 (10) 礼炮 (12) 汽车加油 (14) 大优惠 (16) 金币 (19) 三、课程设计分析与总结 (23) 附录程序清单 (25) 一、课程设计的目的与要求(含设计指标) C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了基知识,如概念,方法和语法规则之外更重要的是进行实训,以提高学习者的动手和编程能力,从应试课程转变为实践工具。这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;

2.让学生扎实掌握C程序设计语言的相关知识; 3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 编写程序要求遵循如下基本要求: ①模块化程序设计 ②锯齿型书写格式 ③必须上机调试通过 二、方案实现与调试 掷骰子游戏 2.1.1题目内容的描述 1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。 4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 2.1.2输入数据类型、格式和内容限制和输出数据的说明 数据类型:整型;内容限制:随机数的产生;输入数据结果:胜利的一方 2.1.3主要模块的算法描述 本算法的思路过程:首先要随机产生随机数,然后进行算法输出数值,执行条件判断输入结果,最后比较结果,判断胜利的一方。

简单C语言程序的例子

例子: #include main () { tips(); /*caller*/ printf(“\n Success is about banging on after others have let go”); } tips() /*caller*/ { printf (“\n When you reach the end of the rope tie a knot & hang on”,)0; } [上述程序的输出结果如下: When you reach the end of the ropt tie a knot & hang on. Success is about hanging on after others have let go.] #include main() { int a,fact; printf(“\nEnter any number”); scanf(“%d”,&a); fact=rec(a); printf(“Factorial value is%d”,fact); } rec(x); int x; { int f; if(x==1) return(1); else f=x*rec(x-1); return(f); } [其显示的结果为:Factorial value is 2.] 比较两个数较大的那个: #include main()

{ int a,b,max; scanf (“%d%d”,&a,&b); if (a>b) max=a; else max=b; printf (“%d”,max); } 输出a+b的值: #include void main() { int a,b,x; scanf (“%d%d”,&a,&b); x=a+b; printf (“%d”,x); } 输出a,b中最大的一位数: #include int max(int x,int y) { int z; if (x>y) z=x; else z=y; return(z); } void main() { int a,b,c; scanf (“%d%d”,&a,&b); c=max(a,b); printf (“%d\n”,c); } 输出Hello: #include int main() { printf (“Hello!”);

大一数据结构c语言课程设计

XI`AN TECHNOLOGICAL UNIVERSITY 课程设计报告

题目:学生成绩管理系统 思路:先建立一个链表然后以链表为基础进行各种操作,设计学生成绩管理系统,通过主页显示,根据自己需求按主页中所显示步骤输入,删除,查找,插入,修改,统计学生信息。 算法:核心算法为链表的生成,插入,查找,排序算法。 函数模块介绍: void xuanze();//选择功能 void shuchu(struct student*h);//输出 void tianjia(struct student*h);//添加 void shanchu(struct student*h);//删除 void chaxun(struct student*h);//查询 void genggai(struct student*h); //更改主 void gxuehao(struct student*p);//改学号 void gname(struct student*p);//改姓名 void ggaoshu(struct student*p);//改高数成绩 void gyingyu(struct student*p);//改英语成绩

void tongji(); //统计主 void max_average(struct student*h);//统计平均分最高 void max_gaoshu(struct student*h);//统计高数最高 void max_yingyu(struct student*h);//统计英语最高 void max_c(struct student*h);//统计c语言最高 void bujige_average(struct student*h);//统计平均分不及格学生信息void bujige_gaoshu(struct student*h);//统计高数不及格学生信息void bujige_yingyu(struct student*h);//统计英语不及格学生信息void bujige_c(struct student*h);//同意c语言不及格学生信息 struct student*creat(int n);//创建链表 void order_two(struct student*p,struct student*q);//调换位置void order(struct student*h);//排序 源程序 #include"stdio.h" #include"string.h" #include"conio.h" #include #define N 30 #define M 3 typedef struct student { char number[10]; char name[20]; float score[M]; float aver; float total; }STU; STU stu[N]; int n; void inputscore(void); void savescore(void); void avergescore(void); void total(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void); void modify(void); void delscore(void); void savescore(void); void menu(void);

LED旋转显示屏C语言程序

#include #include #define uchar unsigned char #define uint unsigned int sbit e=P3^2; sbit k=P1^0; uint p; uchar code tab[]; void delay(uchar n); void main() { uchar a,b,s; while(1) { if(k==0) { delay(5); if(k==0) { while(!k); for(s=0;s<=192;s++) { a=tab[p]; a=_cror_(a,1); b=tab[p+1]; b=_cror_(b,1); SBUF=a; while(!TI);TI=0; SBUF=b; while(!TI);TI=0; e=0;e=1; delay(5);

} p=0; } } } } void delay(uchar n) { uchar i,j; for(i=0;i

c语言程序设计报告4

课程设计报告 课程名称C语言程序设计 课题名称运动会分数统计系统 专业机械设计及其自动化 班级1185班 学号201113090526 姓名谭信 指导教师王颖 2012年6月22日

湖南工程学院 课程设计任务书 课程名称C语言程序设计 课题运动会分数统计系统 专业班级机械设计1185 学生姓名谭信 学号201113090526 指导老师王颖 审批王颖 任务书下达日期2012年6月1日 任务完成日期2012年6月22日

现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。而C 语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。就现有知识水平、经验来看,对我来说,本程序的算法设计上已经是最精简的了。C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。

绪论 (1) 第一章需求分析 1.1程序的功能及要求 (5) 1.2系统的性能要求 (5) 1.3测试数据 (6) 第二章概要设计 2.1结构体 (6) 2.2主程序(main) (6) 2.3模块的功能 (6) 2.4程序模块机之间的调用关系 (7) 第三章详细设计 3.1宏定义 (8) 3.2数据类型定义 (8) 3.3函数之间的调用关系图 (8) 3.4算法设计 (9) 第四章调试分析 4.1不足之处 (10) 4.2错误规范 (10) 4.3算法的时空分析 (10) 4.4存在的问题 (10) 第五章测试结果 (11) 第六章用户使用手册 6.1运行环境 (12) 6.2用户界面 (12) 6.3操作过程 (13) 第七章参考文献 (14) 第八章设计体会 (15) 第九章附录 (17) 课程设计评分表 (29)

大一C语言上机实验报告

C语言程序设计实验报告姓名: 班级: 学号: 实验内容: 编写一个程序,从键盘输入任意一个五位数,把这个数值分解为单个数字,然后打印出每一个数字(每个数字之间用三个空格分开)。例如用户输入了42339,屏幕输出结果为: 4 2 3 3 9 【提示】巧妙使用/ 和% 两种运算符。 源代码: #include void main() { long int num,a,b,c,d,e; scanf("%ld",&num); a=num/10000; b=num%10000/1000; c=num%1000/100; d=num%100/10; e=num%10; printf("%ld %ld %ld %ld %ld\n",a,b,c,d,e); }

运行结果: 实验内容: 已知三角形三边a,b,c,计算三角形的面积。 注:三角形面积公式为area=[s(s-a)(s-b)(s-c)]的1/2次幂 S=1/2*(a+b+c) 源代码: #include #include void main() { double area,s,a,b,c;

scanf("%lf%lf%lf",&a,&b,&c); s=(a+b+c)/2; if(a>0 && b>0 && c>0) { area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%lf\n",area); } else printf("输入错误,三角形边长不能为负数或0\n"); } 运行结果:

实验内容: 输入圆的半径,计算出圆的周长和面积源代码: #include #include void main() { double r,z,area,pi=3.14159; scanf("%lf",&r); if(r>0)

C语言图形编程(一、字符屏幕).

C 语言图形编程 (一、字符屏幕函数相应的头文件为 conio.h 一、屏幕操作函数 1. clrscr(清除字符窗口函数 2. window(字符窗口函数 3. gotoxy(光标定位函数 4. clreol( 清除光标行尾字符函数 5. insline( 插入空行函数 6. delline( 删除一行函数 7. gettext( 拷进文字函数 8. puttext( 拷出文字函数 9. movetext( 移动文字函数 二、字符属性函数 10. textmode( 文本模式函数 11. highvideo(高亮度函数 12. lowvideo( 低亮度函数 13. normvideo(void; 14. textcolor( 文本颜色函数 15. textattr( 文本属性函数

16.textbackground( 文本背景函数 三、屏显状态函数 17. wherex( 光标处 x 坐标函数 18. wherey( 光标处 y 坐标函数 19. gettextinfo( 获取文本窗口信息函数 在 Borland C++里面提供了字符屏幕和图形函数。字符屏幕的核心是窗口(Window, 它是屏幕的活动部分, 字符输出或显示在活动窗口中进行。窗口在缺省时, 就是整个屏幕。窗口可以根据需要指定其大小。同样,对图形函数的操作,也提供了 (Viewport。也就是说图形函数的操作都是在视口上进行。图形视口与字符窗口具有相同的特性, 用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。 窗口是在字符屏幕下的概念, 只有字符才能在窗口中显示出来, 这时用户可以访问的最小单位为一个字符。视口是在图形屏幕状态下的概念, 文本与图形都可以在视口上显示, 用户可访问的最小单位是一个像素 (像素这一术语最初用来指显示器上最小的、单独的发光点单元。然而现在,其含义拓宽为指图形显示器上的最小可访问点。 字符和图形状态下, 屏幕上的位置都是由它们的行与列所决定的。有一点须指出:字符状态左上角坐标为 (1,1,但图形左上角坐标为 (0,0。 了解字符屏幕和图形函数与窗口和视口的关系是很重要的。例如,字符屏幕光标位置函数 gotoxy(将光标移到窗口的 x,y 位置上,这未必是相对于整个屏幕。下面介绍常用的几 1 类字符屏幕函数的功能用途、操作方法及其例行程序。

相关文档
最新文档