文档库 最新最全的文档下载
当前位置:文档库 › c语言解数独程序

c语言解数独程序

c语言解数独程序
c语言解数独程序

一.绪论

本课题的内容是解数独,数独作为一种经典的数字类游戏,具有很强的逻辑性和趣味性,效率高的解题方法对于程序算法的逻辑要求较高。而试填入法方法简单,只是操作繁琐,但适合计算机进行。我们小组采用的就是回溯法,利用栈和找出很明显的可唯一填入数使得运算更快一些,普通计算机解最难的17位数独题目一般不会超过5秒钟。组内分工大致为:程序主体一起完成,另外一人负责文件导入的部分,一人负责美化,两人负责找唯一可填入数的部分。

二.数学模型

们采用的数独解决的方法是直接填入加上回溯法,而主要使用回溯法。对整个算法来说,首先输入待求解的九宫格矩阵,空白位置用0表示。然后定义一个AlterArr二维数组,原数独的每一个小九宫格对应新数组的每一行,将已有的数字的项替换成0。接着进行直接填入部分,对原数独逐九宫格进行查找数据。这部分首先检索新数组,当为非零项时,开始对数独中对应九宫格的空缺部位进行检验,当发现某个空位行与列不冲突时,计算该位置能填入数的个数,若唯一则直接填入,不回溯,并回到开头位置重新检索以防遗漏;若否,则判断下一位置。

当直接填入完成后若仍有未填的就进入回溯部分。该部分准备工作一样,当进行到某个空位可以填入时,将此位置记录储存,用以回溯。当之后赋值错误时,可以返回原始位置,将数字清零,并对下一位置进行赋值。如此循环直至结束。

三.程序设计

确定了算法后,我们就开始程序的设计。为了整个功能的实现,我们定义了许多函数来解决不同的部分。ChangeAlter用来将新数组中已有位置的数变为零;Input函数导入题目;Count函数用来计算每一个能填数字的个数,若唯一返回0;反之返回1;CheckData函数雨来检查填入数字与每行每列数字是否重复,不重复返回0;ScanData函数用来检索新数组中需要填入的数及其位置;ScanPosition函数用来确定数据能够填入的位置;CheckEnd函数检查数独是否完成,完成就返回0。对回溯算法,还要加入Push和Pop函数来进行数字位置的储存与释放。整个程序就由这几个部分组合而成,通过if函数来对是否进行下一步做出判断。同时,回溯用来储存位置的栈我们选用了结构体数组来实现;函数间参数的传值也通过指针来实现。

整个代码大致完成目标后,我们又加入了报错部分,分别使每个if判断后出现相应错误的提示,同时也对栈溢出的情况作了标示。最后我们为整个代码添加注释,使其易懂,并进行不断的调试,完善程序。

四.撰写实现与调试

相比于上次的加密算法而言,这次我们的算法可以说是更上了一个层次,所以也变得更加复杂了。所以我们选择采取分块的方式将其写为一个个函数,然后再在main函数中调用来完成这个高端的任务。

对于实现的方法,我们选择了回溯法这一粗暴有效的方式,这是根据计算机计算能力强这一特点,通过填入并在出错时返回的方法进行循环,以达到解决题目的目的。

我们撰写这个函数的一个优点就是网上有大量的资料可以参考,甚至还有许多学语言的同好者在网上可以进行现场的答疑,所以我们在写这个程序的时候就是是根据网上现有的一些函数,因此某个函数模块在调试过程中不会出现一个太大的问题,但是我们自己改进所加的函数就不同了,在第一次项目报告后,老师根据我们所将的内容提出了我们存在的不足和需要改进的点,而我们根据这个就在原有基础上增加一次填入过程,即当填入的数唯一时,跳过回溯步骤,减少运算时间。添加了这个部分后,我们程序的运算也显得更有效率了。相

比较原来的计算时间可以说有了一个质的飞跃。

五.程序结果的展示与分析

1、如下图所示首先是解一个简单的数独:

第一次填充就解开了:

所用时间大概不到一秒。

2、换一个更难的数独:

第一次填充:

最终结果:

这次用时较长,需半分钟左右。

虽然我们的算法是回溯法,原理简单而代码繁琐,但是由多次实验结果证明对于简单的数独第一次填充就会结束,而换用其它难度较大的数独的话填充次数可能会多几次,但是时间上不会延长太多,经过多次试验后我们可以大概确认时间的范围最长约为半分钟,绝大多数数独的解决时间在十秒以内,这说明了程序的性能良好。但是,这是在数独有解的情况下,如果数独无解,程序会陷入死循环,最后自行结束,这是程序的缺陷之一。

以上实验结果的展示可以直观的说明程序的一些具体的优缺点。

六.总结与展望

第二次项目在短短的6个周内很顺利的完成了,有了第一次的磨合,这一次分工更加明确,效率更高,只用了一半的时间就完成了程序的大部分。为了项目,每个人都学会了数独,一次次在草稿纸上涂改的方案,最终成为代码呈现在眼前,虽然经常熬夜到很晚,但看看最终的成果,这一切也都是值得的。通过第二个任务的学习我们又学到了很多东西,包括对讲过知识的熟练应用和对未讲过知识的探索。这次基本上实现了我们的预想,而且因为早早完成了任务,所以有时间去做一些原计划之外的部分,也使得我们小组在数独小组中独树一帜,这得益于每个小组成员的努力。我们都对C语言的基本知识都做到了了然于胸,打好了基础,准备好了应对下学期的C++的新的挑战。

c语言编程 题目及答案

**********************************考试形式:上机考试(60分钟) 考试题型说明:10个单选题+2个编程题 下面是编程题目的复习题型,期末考试的编程题型及难易程度与此相近,请大家认真复习,强化练习,打下坚实基础,顺利通过考试。 ********************************** 1、编写一计算阶乘的函数fac,在主函数中从键盘输入一个正整数,调用阶乘函数fac计算阶乘并输出计算结果。 2、编写一个求x的y次幂的函数pw,在main函数中从键盘输入a、b的值,然后调用pw函数求a的b次幂,并输出结果。 3、写一函数max,计算三个数中最大数。在主函数中输入三个数,调用该函数求出其中最大数并输出。(要求:三个数为实数) 4、写一个函数计算两个正整数的最大公约数,在主函数中用scanf输入m, n两个正整数,调用函数后,打印函数返回值(即这两个正整数的最大公约数)。 5、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数中 调用该函数,输出200以内所有的素数。 6、请编一个自定义函数,功能:将给定的字符串中的所有字母改为小写字母。字符串在主函数中从键盘任意输入(容许包含空格) 7、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数

中输入一个整数,调用该函数,判断该数是不是素数,若是则输出“yes”, 否则输出“no” 8、将1--1000中所有21的倍数存到一个一维数组中,再按每行5个数据输出到屏幕上。 9、在屏幕上打印以下图案:(要求打印N行,N用符号常量定义为7) * ** *** **** ***** ****** ******* 10、输出所有在正整数200和300之间能被6整除、但不能被4整除的数,并统计这样的数有多少个。 11、求S=1/1+1/2+1/3+……+1/100(精确到小数点后三位)。 12、编程计算1到20的平方和,并输出结果。(要求用for循环) 13、编写一个程序从键盘任意个整数,求均值及低于均值的个数,输出到屏幕。 14、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出,要求将该程序以文件名test1.c保存到K盘根目录。 15、在main()函数中输入一个人的年龄和性别,女士55岁退休,男士60岁退休。编写一个函数根据年龄和性别判断一个人士工作还是退休,若工作,则输出“Working!”,退休则输出“Retired!” 161、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出。 17、编写一个函数求一个实数的绝对值。然后在main函数中用scanf输入 任意个实数,调用该函数求它的绝对值并输出。 18、编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后 调用该函数求1——n的偶数和并输出。 19、编写一个求1——n内的奇数和的函数,在main()函数中输入n,然后

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

C语言经典程序100题(完整版)

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。#include "stdio.h" #include "conio.h" main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } getch(); } ============================================================== 【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 #include "stdio.h" #include "conio.h" main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0. 1; bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); getch(); } ============================================================== 【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: #include "math.h" #include "stdio.h" #include "conio.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x为加上100后开方后的结果*/ y=sqrt(i+268); /*y为再加上168后开方后的结果*/

c语言编程例题及答案

实验报告三 (四学时) 2.1 实验目的 (1)掌握函数的定义和调用; (2)了解函数间的参数传送; 2.2 基础实验 【题目3-1】编写函数实现将输入的字母转换成大写字母(若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母”)。 算法分析: 1、输入:通过键盘接收一个字符; 2、条件判断:调用判别函数 3、函数功能为:蒋所输入字符进行判别处理,若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母” 4、程序结束。 【实验3-1】代码及运行结果:

【题目3-2】从键盘输入若干个同学计算机课程期末考试成绩(学生人数可由用户输入),求该课程的期末成绩的平均分并输出。 函数功能要求:实现若干(例如5名)同学的的期末成绩输入,并统计出平均分。 算法分析: 1、输入:通过键盘接收同学个数; 2、调用求平均分函数 3、输出平均成绩 4、程序结束。 【实验3-2】代码及运行结果: 【题目3-3】请用函数编写程序实现:计算3 到100 之间所有素数的平方根之和,并输出。s=148.874270。

算法分析: 1、编写函素数判别函数,确定返回标记,如果是素数返回1,否则返回0 2、编写主函数,用一重循环遍历100以内所有数据 2.1、通过素数判别函数对循环的数据进行是否为素数的判别 2.2、返回判别为真的整数,并输出 3、程序结束。 【实验3-3】代码及运行结果: #include #include int Prime(int x) { int i ; if(x<=1) return 0; for(i=2;i<=x-1;i++) { if(x%i==0) { return 0; } } return 1; } int main() { double i,sum; i=3; sum=0; while(i<=100) { if(Prime(i)) { sum=sum+sqrt(i); } else { sum=sum+0; } i++; } printf("sum=%f\n",sum); return 0; }。

C语言编程题(带答案)

1、求100之内自然数中最大的能被17整除的数。 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。 3、计算并输出200-400之间不能被3整除的整数的和。 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和 5、求100之内自然数中偶数之和。 6、输入5个数,求和并输出。要求编写求和的函数。 7、编程计算1*2*3+3*4*5+5*6*7+……+99*100*101的值。 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。 9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为5,4,3,2,1。 10、求3行3列矩阵a[3][3]={1,2,3,4,5,6,7,8,9}非对角线上元素之和。 11、编程判断输入的整数的正负性和奇偶性。如果为正数,输出z;如果为负数,输出f;如果为偶数,输出o;如果为奇数,输出j 12、计算并输出1-200之间不能被5整除的整数的和。 13、从键盘输入n和a的值,计算a+aa+aaa+……+aa……a(n个a)的值。 14、输入5个数,求它们中最大值和平均值并输出。 15、输出所有200-400之间能被3整除且个位数字为6的整数 16、编写程序,将用户输入的字符串中所有的字符a去掉,然后输出剩余的字符。 17、计算并输出200-400之间不能被7整除的整数的和。 18.计算并输出200-400之间不能被5整除的整数的和 19、从键盘输入10个数,统计非正数的个数,并计算非正数的和 20、输入一串字符,将其中的大写字母变成对应的小写字母并输出。 21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。例如,153就是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3。 22、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高? 23、输出所有0-200之间能被3整除且个位数字为6的整数。 24、输入一个正整数,输出它的阶乘。 25、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。 26、编写程序,使用循环结构输出下列图形: * * * * * * * * * * * * * * * * * * * * 27、输入一串字符,逆序输出。要求使用数组实现。 28、求1-1/2+1/3-1/4+……+1/99-1/100的值。 29、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数。 30、求两个正整数的最大公约数。 31、求100之内自然数中奇数之和。 32、输出所有200-400之间能被3整除且个位数字为7的整数。 33、编程计算1*2*3+4*5*6+……+97*98*99的值

C语言编程练习题

1.编程实现求三个数的平均值,三个数可以在定义时初始化,也可以在声明后 赋值,自行选择合适的数据类型。输出时加上恰当的信息。 2.输入一个三位正整数,然后将其转换为倒序输出,如输入248,输出842. 3.Fibonacci数列如下:1,1,2,3,5,8......,即从数列的第三项开始,每项的值是其 前两项之和,编程输出该数列的前20项。 4.编程求n!,要求从键盘输入n的值,然后计算出结果并在显示器上显示出来。 5.水仙花数是指3位数的各位数字的立方和等于这个三位数本身,试编程输出 所有的水仙花数。如153=1*1*1+5*5*5+3*3*3。 6.输入20个学生的某门课程的成绩,求出其中大于平均成绩学生的人数,并 对成绩按从高到低进行排序。 7.寻找能满足被3整除余2,被5整除余3,被7整除余4的最小整数w,要 求用do-wihle循环。 8.输入一个不大于6位的整数,将其逆序输出。例如输入123456,则输出为 654321 9.编写函数:求出一个整数各位的数字之和,例如2345各位数字之和为 2+3+4+5=14。 10.输入任意大小的3个整数,判断其中是否有两个奇数一个偶数,若是则输出 YES,不是则输出NOT。 11.百钱买百鸡问题:一百元钱买一百只鸡了,小鸡一元钱3只,母鸡三元钱一 只,公鸡5元钱一只,问可买小鸡、母鸡、公鸡各多少只。 12.编写子函数void change_data(int* a,int* b)将主调函数传来的两个整数进行交 换,并将交换结果在主函数中输出。 13..编程打印如下图形,输出行数n由键盘输入,要求使用循环实现。 ***** **** *** ** * 14输出指定行数的杨辉三角。

C语言编程题精选及答案

C语言编程题精选 C语言学习2010-11-30 15:48:25 阅读47 评论0 字号:大中小订阅 1. 有函数F(x)=(x+1)2和G(x)=2x+1,输入X值计算F(G(x))的值。 2. 任意输入三个字符,要求首先按逆序输出,然后同行原序输出。 3. 在屏幕上输出如下图案(考虑能否将输出的行数由输入的值来控制):****** ****** ****** ****** 4. 在屏幕上输出如下图案(考虑将输出的行数由输入的值来控制): * ** *** **** ***** 5. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* 6. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): **** *** ** * 7. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): ******* ***** *** * 8. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* ***** *** * 9. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制): * *** ***** ******* 10. 编程输出如下格式图形(考虑将输出的行数由输入的值来控制):

* *** ***** ******* ***** *** * 11. 编写打印如下图形的程序(考虑将输出的行数由输入的值来控制):* * * * * * * * * * * * * * * * * * * * 12. 编制程序打印如下图形(考虑将输出的行数由输入的值来控制):A BBB CCCCC DDDDDDD EEEEEEEEE FFFFFFFFFFF GGGGGGGGGGGGG 13. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 14. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 15. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 16. 编程打印图形(考虑将输出的行数由输入的值来控制): 1 1 1

C语言程序设计习题大全(附答案)

C语言基础一: 1.下列四组选项中,均不是C语言关健字的选项是( A )。 A) define B) gect C) include D) while IF char scanf go type printf case pow 2.下面四个选项中,均是合法整型常量的选项是( A )。 A)160 B)-0xcdf C) -01 D)-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x <<02>>B>>2 3.下面四个选项中,均是不合法的转义符的选项是( B )。 A) '\"' B) '\1011' C) '\011' D) '\abc' '\\' '\' '\f' '\101' 'xf' '\A' '\}' 'x1f' 4.下面不正确的字符串常量是( A )。 A)'abc' B)"12'12" C)"0" D)" " 5.以下选项中不合法的用户标识符是( A )。 A)abc.c B)file C)Main D)PRINT 6.C语言提供的合法关键字是( D )。 A) swith B) cher C) Case ).Default 7.下列标识符组中,合法的用户标识符为 A A)_0123与ssiped B)del-word与signed C)list与*jer D) keep%与wind 8.在C语言中,逻辑值"真"的表示是用( C )。 A) true B) 整型值0 C)非另整型值D) T 9若有以下定义 char s='\092'; 则该语句( B ) A)使s的值包含一个字符B)定义不合法,s的值不确定 C)使s的值包含4个字符D)使s的值包含3个字符 10设C语言中,int类型数据占2个字节,则float类型数据占(D )个字节。 A)1 B)2 C)8 D)4 11已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的值为( A )。 A)D B)68 C)不确定的值D)C 12逻辑运算符两侧运算对象的数据类型是( D )。 A) 只是0或1 B) 只能是0或非0正数 C) 只能是整型或字符型数据D) 可以是任何合法的类型数据 13TURBO C中int类型变量所占字节数是( B )。

C语言程序设计试题集及其答案

第一章基础知识 一.填空 1. 每个C 程序都必须有且仅有一个__________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、___________ 、链接、加载 和执行。 3. 软件是程序,以及________ 、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________ ”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和_________ 两大类 。 6. C 语言是由_______ 组成的。 7. C 语言的函数可分为主函数main 、标准库函数和____________ 。 8. 一个函数是由两部分组成的,即:___________ 和函数体。 9. 编译是将C语言所编写的源程序___________ 成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为。 11. 机器语言是以___________ 形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用____________ 来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以_____ 开头的代码行都先由预处理程序预处理。 13. C 程序的执行均是由执行_________ 开始。 15. 函数体即为包含在{2内的部分。它分为 __________ 和为完成功能任务由若干个C语句组成的执行部分。 16. C 语言程序中一条简单语句是以___________ 字符作为结束符的。 17. C 语言是结构化、 ________ 的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______ 程序” ,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以说,用高级语言进行程序设计,其编程效率高,方便易用,但_______ 没有低级语言高。 20. 第一个系统体现结构化程序设计思想的教学工具语言是 _______ 语言。 解答: 1. main()

简单的C语言编程题例题

1、编写程序,把560分钟换算成用小时和分钟表示,然后输出。解:其所编程序如下 #include"stdio.h" void main() {int a=560,b=60,c,d; c=a/b; d=a%b; printf("560分钟=%d小时%d分钟",c,d); } 2、编写程序,输入两个整数:1500和350,求出它们的商和余数并进行输出。 解:所编程序如下 #include"stdio.h" void main() {int a,b,c,d; printf("Input two numbers:"); scanf("%d%d",&a,&b); c=a/b; d=a%b; printf("c=%d,d=%d\n",c,d); } 3、编写程序,读入三个双精度数,求出它们的平均值并保留此平均

值小数点后一位数,对小数点后的第二位数进行四舍五入,最后输出结果。 解:所编程序如下 #include"stdio.h" void main() {double a,b,c,ave; printf("Enter three numbers:"); scanf("%lf%lf%lf",&a,&b,&c); ave=(a+b+c)/3; printf("(1)ave=%f\n",ave); ave=(int)(ave*10+0.5)/10.0; printf("(2)ave=%f\n",ave); } 4、编写程序,读入三个整数给a、b、c,然后交换它们中的数,把a 中原来的值给b,把b中原来的值给c,把c中原来的值给a,然后输出a、b、c。 解:所编程序如下 #include"stdio.h" void main() {int a,b,c,m,n,t; printf("Enter three numbers:"); scanf("%d%d%d",&a,&b,&c);

c语言编程题

【编程要求】 1、编写函数int findword(char *s,char *t,char ch[][20])。函数功能:在由若干句子组成的字符串s中搜索包含字符串t的所有单词,将这些单词存放在数组ch中,函数返回找到的单词格式。称字符串s 为“被搜索字符串”,字符串t为“搜索字符串”。 2、编写main函数。函数功能:声明数组s与t,用被搜索字符串与搜索字符串初始化这两个数组。调用函数findword对给定的测试数据进行检索,并将检索到的包含字符串t的所有单词及单词的个数保存到结果文件myf2、out中。最后将考生本人的准考证号字符串也保存到结果文件myf2、out中。【测试数据及运行结果】 被搜索字符串:No living man all things can、Graspall,loseall、 搜索字符串:all 检索结果:all,Graspall,loseall、3 【要求】 ●源程序文件名必须取为myf2、c,输出结果文件名必须取为myf2、out ●数据文件的打开、使用与关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ●源程序文件与运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ●不要复制扩展名为OBJ与EXE的文件到考试盘上。 2、编程题 【编程要求】 1、编写函数void josephu(int a[],int b[],int n,int m)实现如下模拟处理功能:a指向的数组中存储了n 个人的编号(从1开始按序编号到n)。n个人围坐成一圈,从编号为1 的人开始报数(从1到m报数),凡报到m的人出列。将每次出列的人的编号依次保存在b指向的数组中,直到最后一个人出列为止。 2、编写main函数。用给定的测试数据调用josephu函数,将经函数处理后得到的n个依次出列的人的编号保存到结果文件myf2、out中。最后将考生本人的准考证号字符串也保存到结果文件myf2、out中。 【测试数据及运行结果】 测试数据: n=10,m=3 运行结果: 3, 6, 9, 2, 7, 1, 8, 5, 10, 4 My exam number is :0112400123(考生本人准考证号) 【要求】 ●源程序文件名必须取为myf2、c,输出结果文件名必须取为myf2、out ●数据文件的打开、使用与关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ●源程序文件与运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ●不要复制扩展名为OBJ与EXE的文件到考试盘上。 3、编程题 【编程要求】 1、编写函数void squeeze(char *s1,char *s2,char *s3),其功能就是:从s1指向的字符串中删去所有在s2指向的字符串中已出现的字符,将从s1中删除的字符保存到s3指向的数组中。 2、编写main函数。用给定的测试字符串s1与s2调用squeeze函数,将处理后的s1字符串与s3字符串保存到结果文件myf2、out中。最后将考生本人的准考证号字符串也保存到结果文件myf2、out中。 【测试数据及运行结果】

C语言程序例题

经典C语言程序设计100例1-10 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15;

c语言编程例题及答案

实验报告 (四学时) 2.1实验目的 (1)掌握函数的定义和调用; (2)了解函数间的参数传送; 2.2基础实验 【题目3-1】编写函数实现将输入的字母转换成大写字母(若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母”)。 算法分析: 1、输入:通过键盘接收一个字符; 2、条件判断:调用判别函数 3、函数功能为:蒋所输入字符进行判别处理,若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母” 4、程序结束。 【实验3-1】代码及运行结果:

【题目3-2】从键盘输入若干个同学计算机课程期末考试成绩(学生人数可由用户输入),求该课程的期末成 绩的平均分并输出。 函数功能要求:实现若干(例如5名)同学的的期末成绩输入,并统计出平均分。 算法分析: 1、 输入:通过键盘接收同学个数; 2、 调用求平均分函数 3、 输出平均成绩 4、 程序结束。 float ave(int n) { t*4t- for{i=l;i <=?;?++) < scanf(w %r^grade);"捲受薩盘输入求和 s=s>grade; } average-s/n;//求平均值 【实验3-2】代码及运行结果: ttinclude<5tdic .ih> char letter(a): int maiin() char b; printf (-请输入字母:VJ ; scanF("%c 4l ,u ); letter (lb)- char letter(cliar a) C lFCa>-"a*exa<=,z*) 'IcAiT ? a-32); else if(a>='Z') printf<,,lc\m B,,a); pise printf ("请输入字母An*'); > 请输入字母: : Pi'i&ss ainy key £□ coni : JLnue n C:\c n ?u\ 青输入字母二 l I "irus 琴 Nn, key to con^linwie c : 请输入字母; 请输入字母三 Pi'ess 吕ny kev Ito continue

《C语言程序设计》题库及答案

《C语言程序设计》复习题库 1、计算下面公式的值。T=1/1!+1/2!+1/3!+……+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717 2、程序填空:用*号输出字母C的图案。 #include "stdio.h" #include "conio.h" main() { _____________ printf(" *\n"); _____________ _____________ getch(); } 3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459 4、/*下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591 #include void main() { int total=0, mc=1, k=700; int pm[10],count=0; while( (k>=2) && mc<=10 ) { if ((k%13==0) || (k%17==0)) { pm[mc] = k; mc++; } k--; } for( k=1;k<=10;k++ ) total += pm[k-1]; printf(" %d\n",total); } 5、求x = 1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。 6、计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ......(按四舍五入保留10位小数)。答案:0.6180339850 7、求[10,1600]之间能被7整除的奇数之和。答案:90965

c语言编程题

c语言编程题 文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

四、编写程序题及参考答案 导读:虽然题目基本按照教材章节顺序排列的,但是把同类题目尽量排在一起,便于读者学习掌握编程方法和思路,提高自己的编程能力。 【4.1】已知银行整存整取存款不同期限的月息利率分别为: 0.315% 期限一年 0.330% 期限二年 月息利率= 0.345% 期限三年 0.375% 期限五年 0.420% 期限八年 要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。 【4.2】输入年份year和月month,求该月有多少天。判断是否为闰年,可用如下C语言表达式:year%4==0 && year%100!=0 || year%400==0。若表达式成立(即表达式值为1),则year为闰年;否则,表达式不成

立(即值为0),year为平年。 【4.3】编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。 【4.4】输入n值,输出如图所示矩形。 【4.5】输入n值,输出如图所示平行四边形。 【4.6】输入n值,输出如图所示高为n的等腰三角形。 【4.7】输入n值,输出如图所示高为n的等腰三角形。 【4.8】输入n值,输出如图所示高和上底均为n的等腰梯形。

【4.9】输入n值,输出如图所示高和上底均为n的等腰空心梯形。【4.10】输入n值,输出如图所示边长为n的空心正六边型。【4.11】输入n值,输出如图所示图形。 【4.12】输入n值,输出如图所示图形。 【4.13】输入n值,输出如图所示图形。 【4.14】输入n值,输出如图所示图形。 【4.15】输入n值,输出如图所示图形。 【4.16】输入n值,输出如图所示图形。(例为n=6时)

C语言编程题库

在[200,900]范围内同时满足以下两个条件的十进制数:⑴其个位数字与十位数字之和除以10所得的余数是百位数字; ⑵该数是素数;问有多少个这样的数?(..14..) [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字; ⑵该数是素数; 求有多少个这样的数?(..15..) [300,800]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数;求满足上述条件的最大的三位十进制数。(.. 761..) 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如13,试求所有两位绝对素数的和。(.. 429..) 除1和它本身外,不能被其它整数整除的正整数称为素数(注:1不是素数,2是素数)。若两素数之差为2 ,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。(.. 22..) 若两个素数之差为2,则称这两个素数为双胞胎数。求出[200,1000]之内有多少对双胞胎数。(.. 20..) 两个素数之差为2,则称这两个素数为双胞胎数。求出[200,1000]之间的最大一对双胞胎数的和。(.. 1764..) 若两个自然连续数乘积减1后是素数,则称此两个自然连续数为友数对,该素数称为友素数,例:2*3-1=5,因此2与3是友数对,5是友素数,求[40,119]之间友素数对的数目。(.. 30..) 若两个自然连续数乘积减1后是素数,则称此两个自然连续数为友数对,该素数称为友素数,例:2*3-1=5,因此2与3是友数对,5是友素数,求[2,49]之间友素数对的数目. (.. 28..) 若两个连续的自然数的乘积减1后是素数,则称此两个连续自然数为友数对,该素数称为友素数。例如,由于 8*9-1=71,因此,8与9是友数对,71是友素数。求[100,200]之间的第10个友素数对所对应的友素数的值(按由小到大排列)。(.. 17291..) 若两个连续的自然数的乘积减1后是素数,则称此两个连续自然数为友数对,该素数称为友素数。例如,由于 8*9-1=71,因此,8与9是友数对,71是友素数。求[50,150]之间的友数对的数目。(.. 38..) 求[2,400]中相差为10的相邻素数对的对数。(.. 5..) 求[5,500]中相差为10的素数对(注:要求素数对的两个素数均在该范围内)的个数(即:有多少个这样的素数对)。(.. 31..) 求[100,900]之间相差为12的素数对(注:要求素数对的两个素数均在该范围内)的个数。(.. 50..) 梅森尼数是指能使2^n-1为素数的数n,求[2,21]范围内最大的梅素尼数?(.. 19..) 梅森尼数是指能使2^n-1为素数的数n,求[2,21]范围内有多少个梅森尼数?(.. 7..) 当m的值为50时,计算下列公式的值:T=1-1/2-1/3-1/4-…-1/m 要求:按四舍五入的方式精确到小数点后第四位。(.. -2.4992..) 已知: f(n)=f(n-1)+2*f(n-2)-5*f(n-3) f(0)=1 f(1)=2 f(2)=3 求f(0)+f(1)+…f(30)。(.. -750874..) 编程求取:[121,140] 之间的弦数的个数(若某正整数的平方等于另两个正整数平方之和,则称该数为弦数. 例 如:3^2+4^2=5^2, 因此5是弦数)。(.. 8..)

经典C语言编程题

选择结构 1.编程判断输入整数x的正负性和奇偶性。 2.已知银行整存整取存款不同期限的月息利率分别为: 0.63% 期限一年 0.66% 期限=年 月息利率= 0.69% 期限三年 0.75% 期限五年 0.84% 期限八年 要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。 ? 3.通过键盘输入字符,将输入的字符分为控制、数字、大写字母、小写字母和其他字符等五类。 ? ? 4.简单计算器。请编写一个程序计算表达式:datal op data2的值。其中op为运算符+、—、*、/。 ? ? 5.输入年份year和月month,求该月有多少天。判断是否为闰年,可用如下C语言表达式:year%4==0 && year%100!=0 || year%400==0。若表达式成立(即表达式值为1),则year为闰年;否则,表达式不成立(即值为0),year为平年。 ? ? 6.对输入的行、单词和字符进行计数。我们将单词的定义进行化简,认为单词是不包含空格、制表符(\t)及换行符的字符序列。例如:“a+b+c”,认为是1个单词,它由5个字符组成。又如:“xy abc”,为2个单词,6个字符。 ? ?7.从键盘输入任意的字符,按下列规则进行分类计数。 第-类'0','1','2','3','4','5','6','7','8','9' 第=类'+','-','*','/','%','=' 第三类其它字符 当输入字符'\'时先计数,然后停止接收输入,打印计数的结果。 ?8.输入10个整数,求其中正数的个数及平均值,精确到小数点后两位。 ? ?9.已知一个首项大于0的等差数列的前四项和为26,前四项的积为880,求此数列。? ?10.输入a、b、c、d四个整数,求最小值min和最大值max。

相关文档