




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
需掌握的编程题一、选择结构1. 输入整数a和b,如果a2 + b2大于100,则输出a + b的值,否则输出a b的值。#include void main()int a, b;scanf(%d %d, &a, &b);if (a * a + b * b 100)printf(%dn, a + b);elseprintf(%dn, a - b);打印输出语句可以写成:printf(%d,(a * a + b * b 100?a+b:a-b);2. 输入整数n,如果n既是5又是7的整倍数,则输出yes,否则输出no。#include void main()int n;scanf(%d, &n);if (n % 5 = = 0 & n % 7 = = 0) /同时满足两个条件printf(yesn);elseprintf(non);3. 输入三个整数,要求按由小到大的顺序输出。#include void main()int a, b, c, t;scanf(%d %d %d, &a, &b, &c);if (a b)t = a;a = b;b = t; /两两比较if (a c)t = a;a = c;c = t;if (b c)t = b;b = c;c = t;printf(%d, %d, %dn, a, b, c);4. 某商场为促销实行打折销售商品,具体办法是假定购买某种商品的数量为x件,折扣如下:商品数量折扣x 5没有折扣5 x 101%折扣10 x 212%折扣21 x 304%折扣30 x6%折扣假定商品价格为p元,编程计算某顾客购买x件商品的应付金额。计算公式如下:sum = p * x * (1d)其中,sum为应付金额,d为折扣数,用if-else-if语句实现。#include void main()int x;float p, d, sum;scanf(%d, %f, &x, &p);if (x 5)d = 0.0;else if (x 10)d = 0.01;else if (x 21)d = 0.02;else if (x 30)d = 0.04;elsed = 0.06;sum = p * x * (1 - d);printf(sum = %.2fn, sum);考虑一下如果用case语句怎么实现?5. 在屏幕上显示一张如下所示的时间表:*Time*1 morning2 afternoon3 nightPlease input your choice:操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示“Good morning”,选择2时显示“Good afternoon”,选择3时显示“Good night”,对于其他的选择显示“Selection error!”,用switch语句编程实现。#include void main()int n;printf(*Time*n);printf(1 morningn);printf(2 afternoonn);printf(3 nightn);printf(Please input your choice: );scanf(%d, &n);switch (n)case 1:printf(Good morningn);break;case 2:printf(Good afternoonn);break;case 3:printf(Good nightn);break;default:printf(Selection error!n);6. 输入两个实数和一个算术运算符(,*,),根据运算符执行相应的运算并输出运算结果。#include void main()float f1, f2, result;char op;scanf(%c%f%f, &op, &f1, &f2); /先输入算符,然后再输入两个实数switch (op)case +:result = f1 + f2;break;case -:result = f1 - f2;break;case *:result = f1 * f2;break; /千万别忘记需要加上break语句case /:result = f1 / f2;break;printf(%f %c %f = %fn, f1, op, f2, result);二、循环结构【例5-11】输出100以内的素数。分析:素数是指除了能被1和它本身整除外,不能被其它任何整数整除的数。例如,17就是一个素数,除了1和17之外,它不能被216之间的任何整数整除。根据素数的这个定义,可得到判断素数的方法:把n作为被除数,把i = 2 (m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明n是素数,反之,只要有一次能除尽(余数为0),则说明n存在一个1和它本身以外的另一个因子,它不是素数。因此可以使用穷举法来解决。程序清单如下:#includevoid main() int n,i; for(n=2;n=100;n+) for(i=2;i=n) printf(t%d,n); 1121231234123451234561234567123456781234567891.编写程序,生成以下的图案。解:由图案分析知道,每行输出的数字的个数和行数相等,那么在外循环i表示行数,内循环j表示每行输出的数字,数字的具体数值就是从1到i。程序如下所示:#include void main() int i, j,lines; printf(please input lines=); scanf(%d,&lines); for (i = 1; i =lines; i+) /外循环控制行数 for(j=1;j=i;j+) /内循环打印数字 printf(%d,j); printf (n); 2.打印所有水仙花数。水仙花数指的是一个三位正整数,它的三个数字的立方和等于该数本身,例:153135333解:首先,水仙花数只能是一个三位数,即在100999之间,然后将这个三位整数的个位、十位和百位分离出来,进行判断即可。程序如下所示:#include void main( void ) int i, j, k, n; printf (result is: ); for (n = 100; n 1000; n+) i = n / 100; /分出百位,记住整数相除是整数 j = (n - i *100) / 10; /分出十位 k = n % 10; /分出个位 if (n = i*i*i + j*j*j + k*k*k) printf (%d , n); printf (n); 3. pi的近似值可用以下公式求得: 若n取值10000,则最后一项的值约为10-4,认为可达到精度要求。请编写程序求pi的近似值。解:这是一个累加和的例子,但是判断循环的条件有所不同,当每次的累加项大于10-4时,就进入循环,继续累加,否则就停止循环。程序如下:#include #include / sqrt函数需引用void main() float i=1.0,e=1.0;float s=0; while(e0.0001) /精度要求 s+=1/(i*i); i+; e=1/(i*i); /每次的累加项指的是e=1/(i*i) s=sqrt(s*6); printf(%.4fn,s); 4. 编写程序:接收两个整数num1和num2,找出这两个数之间所有奇数的和。解:本题要求用户输入两个整数,先要判断出两个数的大小,然后,在两个数之间进行循环,遇到奇数就累加。程序如下:#includevoid main() int a,b,temp,i,s=0; printf(please input 2 interge=); scanf(%d%d,&a,&b); if(ab) temp=a,a=b,b=temp;/将小数赋给a,大数赋给b for(i=a;i=b;i+) if(i%2!=0) s+=i; printf(the sum of odd between %d and %d is %dn,a,b,s);5. 编写程序计算如下和数的程序:解:本题可以使用双重循环,内层循环实现阶乘,外层循环实现累加和。程序如下:#include#define N 20void main() double a=1,b=0,i,j; /定义为double类型是考虑到结果是个很大的数 for(i=1;i=N;i+) a=1; for(j=1;j=i;j+) a=a*j; b=b+a; printf(%lfn,b);7.试输出以下图案:* 解:可以先分段考虑,将图案分做两下两个部分,上半部分每一行需要输出的空格数3、2、1、0,每一行需求输出的*的数量是1、3、5、7,下半部分类似。程序如下:#includevoid main() int a,b,c; for(a=1;a=4;a+) /外循环控制行 for(b=1;b=4-a;b+) printf( ); /输出空格 for(c=1;c=1;a-) /外循环控制行 for(b=1;b=4-a;b+) printf( ); for(c=1;c=2*a-1;c+) printf(*); printf(n); 下面为指定正三角形高度的算法程序(具有通用性)#include void main() int i,j,h; printf(输入高度- ); scanf(%d,&h); for(i=1;i=h;i+) for(j=1;j=(h-i);j+) printf( ); for(j=1;j=1;i-) for(j=1;j=(h-i);j+) printf( ); for(j=1;j=(i*2-1);j+) printf(*); printf(n); 三函数与编译预处理例6-8:利用函数完成求50以内的全部素数,并按每行5个数输出。 #include / 使用平方根函数,需要包含数学库 #includeint prime(int x) / 函数判断x是否素数,若x是素数则返回1;否则返回0 int i,r=1; for(i=2;i=sqrt(x);i+) if(x%i=0) r=0;break; return r;void output(int x,int n) / x接收了main函数中m的值,是要输出的素数 / n是输出素数的个数, 其值从main函数中n传过来 printf(%6d,x); if(n%5=0) printf(n); / 每输出10个素数产生一次换行void main() int m,n=0; for(m=2;m=50;m+) if (prime(m) /作为表达式调用prime函数,根据其函数值判断m是否素数 n+; / 若是素数,则计数1次 output(m,n); / 作为一条独立语句调用output函数 例6-11:编写交换两个变量值的函数swap()。分析:交换两个变量值需要借助于第三个变量。函数swap()并不作具体计算,只是完成一段功能,不需要返回明确结果值,因此函数类型定义为void。#includevoid swap(int x, int y);void main() int a=5, b=2; swap(a, b); / a和b是实参,将其值分别复制给形参x和y printf(a=%d,b=%d n, a, b) ; void swap(int x, int y) / x和y是形参,需要分配存储单元,所以要有类型符 int t ; t=x;x=y;y=t; printf(x=%d,y=%d n, x, y) ;1. 两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。解:设两个整数为m和n,用辗转相除法求最大公约数,最小公倍数=m*n/最大公约数。算法:求最大公约数。1)判断mn ?若mn 则互换m和n的值,使大数为被除数。2)判断(r=u%v)!=0 ?若满足 m=n ,n=r; 循环3) 最小公倍数=m*n/最大公约数。 includeint hcf(int m,int n) int t,r; if(mn) t=m,m=n,n=t; while(r=m%n)!=0) m=n,n=r; return(n);int lcd(int m,int n,int h) return(m*n/h); void main() int m,n,h,l;scanf(%d%d,&m,&n);h=hcf(m,n); printf(最大公约数=%dn,h);l=lcd(m,n,h);printf(最小公倍数=%dn,l);4. 编写函数用以求表达式x2-5x*4,x作为参数传送给函数,调用此函数求 yl22-5*2十4 ; y2(x+15)2-5*(x十15)十4 ; 若x=3 y3sin2x5*sin x十4 ; 若x=300解:1)sin(x)的x为弧度值,若求度要进行转换。 2)要将数学函数头文件math.h包括进来。程序如下:#include#includedouble fun(double x);void main() double x; printf(y1=%.3lfn, fun(2); scanf(%lf,&x); printf(y2=%.3lfn, fun(x+15); scanf(%lf,&x); printf(y3=%.3lfn, fun(sin(x*180/3.1516);double fun(double x) return(x*x+5*x+4); 7. 所谓“同构数”是指这样的数,它出现在其平方数的右边。例如:输入整数5,52=25,5是25中右侧的数,所以5是同构数。x的值由主函数从键盘读入,要求x100。100以内1,5,6,25,76这几个数是所谓的同构数解:由“同构数”的定义可得:只要求出平方数或平方数的最后一位或平方数的最后两位,然后与x进行判断即可,分别求余后即得出平方数的右边。程序如下:#includeint fun(int x) int t; t=x*x; if(t=x|t%10=x|t%100=x ) return 1; else return 0; void main() int x; printf(Enter x:); scanf(%d,&x); if(x100) printf(Data eror!);goto end; /end是标号 if(fun(x) printf(%d Yes!n,x); else printf(%d No!n,x);end:; /标号语句后是空语句10. 根据以下公式,编写pi函数求的值,且返回的值满足精度10-8。 解:先求出表达式右边的和,然后将和*2,求出。程序如下:#includedouble pi(double eps);void main() double eps=0.00000001; printf(pi=%.7lfn,pi(eps); double pi(double eps) double s=1.0,t=1.0;int n; for(n=1;teps;n+) t=n*t/(2*n+1); s+=t; return(2.0*s);和前面一个题目类似,只不过换成函数实现四、数组【例7-3】对数组中的数据进行排序。分析:排序指的是将数组中的各个元素按照数值的大小由升序(或者降序)的形式重新排列。程序清单如下:#includevoid main()int i,j,p,q,s,a10;printf(n input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);/由用户输入了10个任意的整数作为数组的10个元素for(i=0;i10;i+)p=i;q=ai; /外循环记下第i个数组元素的位置和数组元素的值for(j=i+1;j10;j+) /内循环取第i个数组元素后一个开始if(qaj) /如果后一个元素大 p=j;q=aj; /记录下大的数组元素的位置和值直到最大哪个元素if(i!=p) /如果这个最大的元素不是第i个元素s=ai;ai=ap;ap=s; /和第i个元素交换 /每次循环将最大的元素交换到ai中printf(从大到小排序完成:n);for(i=0;i10;i+)printf(%dt,ai);重点关注下面的冒泡法排序#include void main( ) int a10 ; int i,j,t; printf(input 10 numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i9;i+) for(j=0;jaj+1) t=aj ; aj=aj+1 ; aj+1=t ; printf(n the sorted numbers:) ; for(i=0;i10;i+) printf(%d, ai);【例7-9】有一个34矩阵,要求编写C语言程序秋初其中的最大值,以及其所在的行号和列号。分析:首先将数组中的第一个元素认为是最大值,然后将数组中的其他元素与之相比较,出现更大的数的时候,最大值就换成当前数据,并记住相应的行号和列号,一直比较到最后一个元素,就能够得到最大的数据和它所在的行号和列号了。程序清单如下:#includevoid main()int i,j,r=0,l=0,max,a34; /r和l记录初始行号和列号for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);max=a00;for(i=0;i3;i+)for(j=0;j4;j+)if(maxaij)max=aij;r=i;l=j; printf(最大数a%d%d%dn,r,l,max);3. 编写程序,进行字符串的截取,即从键盘上输入一个字符串str1,将此字符串中从第m个字符开始的n个字符形成另一个字符串str2。例如:str1”computer”,m2,n5,这样,str2”omput”。解:先定义两个字符型的一维数组str1,str2,再要求用户分别输入字符串1,和字符的定位m以及需要截取的字符的个数n。这时就需要判断m和n的值是否有效,然后再进行字符串的截取。程序如下:#include#includevoid main()char str110,str210;int m,n,i;printf(please input one string=);gets(str1);printf(please input the number and the length= );scanf(%d%d,&m,&n);if(mstrlen(str1) printf(the wrong number!n ); /判断m是否有效else if(m+n)strlen(str1) printf(the wrong length!n ); /判断n是否有效elsefor(i=m;i(m+n);i+)str2i-m=str1i; /str2从str20开始取str1m的值str2n=0; /给数组str2加结束标志printf(the str2=%sn,str2); 4. 编写程序,实现先向一个数组中输入20个自然数,然后从键盘上再次输入一个自然数N,查找N是否在该数组中,输出N所在的位置,如果没有找到,则输出NOT FOUND字样。解:用循环语句输入20个数据,由于这些数据没有排好序,所以可以从头扫描数组的每个元素,直到第一次找到它为止。程序如下:#includevoid main()int a20,i, n,flag=0;for(i=0;i20;i+) /循环输入20个数 printf(please input %d number=,i);scanf(%d,&ai);printf(please input then number that you want to find=);scanf(%d,&n); /输入需要查找的数for(i=0;i20;i+) /循环遍历数组 if(ai=n) /如果找到第一个这样的数,打印并退出循环printf(FOUND!tThe place is %dn,i);flag=1;break;if(flag=0)printf(NOT FOUND!n);9. 定义函数getdata()用于接收键盘输入的一组整型数据,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计中的共享经济理念试题及答案
- 垃圾合同协议书
- 村庄保洁合同协议书
- 院子继承合同协议书
- 合同书股份协议书
- 水库合同协议书
- 供货协议书合同范本
- 雇佣送货司机合同协议书
- 图书代销合同协议书
- 储蓄合同协议书
- 2024年浙江省仙居县事业单位公开招聘教师岗笔试题带答案
- 2025年地理高考复习 专题05“演变过程类”选择题答题技巧(解析版)
- 软切片安全挑战-全面剖析
- 儿童性早熟课件
- 生活垃圾合同终止协议
- 运动康复与体能训练理疗中心商业计划书
- 山东能源电力集团招聘笔试题库2025
- 医疗技术品牌的创新与传播策略
- 湖北省武汉市2025届高中毕业生四月调研考试生物试题及答案(武汉四调)
- 陪护公司管理制度规范
- 2024年天津卷高考语文真题含解析
评论
0/150
提交评论