资源描述
1.1 Hello world.让我们用C语言向世界问好。最早的程序基本是这个样子的:程序一:#include void main() printf(Hello world.n);程序二:#include int main() printf(Hello world.n); return 0;上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。 输入:无输出:Hello world.#includeint main() printf(Hello world.n);1.2 Welcome to Beijing.让我们来练习如何显示多行文字。 输入:无输出:就是下面的那段文字。#includevoid main()printf(Welcomen);printf(ton);printf(Beijing.n);1.3 练习最简单的printf和scanfprintf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。 输入:整型变量x的值。输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真观察-1的八进制和十六进制输出,请想想是为什么。#include int main()int x;scanf(%d,&x);printf(x=%d,x);printf(x=%o,x);printf(x=%xn,x);return 0;1.4 练习两个整数之间的运算背景:基本练习。输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出:分别输出进行+、-、*、/、*之后的运行结果。#includeint main()int x,y; scanf(%d%d,&x,&y); printf(%d+%d=%dn,x,y,x+y); printf(%d-%d=%dn,x,y,x-y); printf(%d*%d=%dn,x,y,x*y); printf(%d/%d=%dn,x,y,x/y); printf(%d%d=%dn,x,y,x%y); return 0;1.5 学习打印你的第一个图形背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:#include int main() printf(*n); printf(*n); printf(*n); printf(*n); return 0;要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。输出:指定图形。#include int main() printf( *n); printf( *n); printf( *n); printf(*n); return 0;2.1 整型数的表示范围编写一个循环程序,输入 N 值,输出 N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题4.2和第5章P82的例题5.1的内容。注意整型数的表示范围,如果当输入的 N 比较大时,例如 N 等于 20 时,输出怎么是负数了?自己想明白吧!#includevoid main()int N,i;int sum=1;N=2;scanf(%d,&N);if(N=16)for (i=1;i=17)printf(N is too big!n);2.2 求正弦函数值已知求正弦 sin(x) 的近似值的多项式公式为: sin(x) = x - x3/3! + x5/5! - x7/7!+ + (-1)n x2n+1/(2n+1)! + 编写程序,要求输入 x (单位是弧度)和,按上述公式计算 sin(x) 的近似值,要求计算的误差小于给定的。 此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。友情提示:给定的误差值越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用+键退出程序。#include #include int main() float x,eps,s,y=0,y0,t; int n,j; scanf(%f%f,&x,&eps); n=t=j=1; s=x; do y0=y; if (n%2=0) y=y-s/t; else y=y+s/t; s*=x*x; t*=(j+1)*(j+2); j+=2; n+; while(fabs(y0-y)eps);printf(%fn,sin(x);system(PAUSE); return 0;2.3 判断输入的字符的类型我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters, 小写字母时输出small letters,数字是输出figures,其他字符时输出 others。#includevoid main()char c; c = getchar ( ); if (c = 0 & c = A & c = a & c = z) printf (small lettersn); else printf (othersn);3.1 找零钱 假定有 5 角、 1 角、 5 分、 2 分和 1 分共 5 种硬币,在 给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。 例如,当要给某顾客找 7 角 2 分钱时,会给他一个 5 角, 2 个 1 角 和 1 个 2 分的硬币。试编写一个程序,输入的是要找给顾客的零 钱(以分为单位),输出的是应该找回的各种硬币数目,并保 证找回的硬币数最少。#include int main() int x1,x2,x3,x4,x5; int x; scanf(%d,&x); x1=x/50; x2=x%50/10; x3=x%50%10/5; x4=x%50%10%5/2; x5=x%50%10%5%2/1; printf(%dn,x1); printf(%dn,x2); printf(%dn,x3); printf(%dn,x4); printf(%dn,x5); return 0; 3.2 计算时钟的夹角背景:钟面上的时针和分针之间的夹角总是在 0 度 359 度之间。举例来说,在十二点的时候两针之间的夹角为 0 度,而在六点的时候夹角为 180 度,在三点的时候为 90 度。本题要解决的是计算 0:00 到 12:00之间任意一个时间的夹角。输入: 每组测试数据包含两个数字:第一个数字代表小时 ( 大于等于 0 小于 12) ,第二个数字代表分 ( 在区间 0, 59 上 ) 。 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。友情提示:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。 提示:时钟夹角计算公式|5.5m-30h|,h为时针,m为分针。求浮点型绝对值的函数为fabs,需要包含math.h头文件#include stdio.h#include math.hint main()int h,m;double angle;scanf(%d%d,&h,&m);angle=fabs(5.5*m-30*h);if(angle180)angle=360-angle;printf(At %d:%02d the angle is %.1f degrees.n,h,m,angle);3.3 照猫画猫:计算圆柱的侧面积及体积如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2rh ,体积 v= r 2 h 。其中 =3.1415926 输入 第一行输入圆柱的底面半径 r第二行输入圆柱的高 h 输出 s=,v= 要求 1. 所有变量都定义为双精度类型2. 结果精确到小数点后两位#include stdio.h #define n 3.1415926 int main() float r,h,s,v; printf; scanf(%f%f,&r,&h); s=2*n*r*h; v=n*r*r*h; printf(s=%6.2f,v=%6.2fn,s,v); 3.4 分离整数 任意从键盘上输入一个三位正整数,要求正确地分离出它的个位、十位和百位,并分别在屏幕上输出。比如输入的三位正整数 #include stdio.hint main()int x,hundreds,tens,units;printf;scanf(%d,&x);hundreds=x/100;tens=x%100/10;units=x%100%10;printf(units=%d,tens=%d,hundreds=%dn,units,tens,hundreds);3.5 鸡兔同笼已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只? 输入:头和脚的数目输出:兔子和鸡的数目(输出语句为:printf(rabbit=%d,chicken=%d,rabbit,chicken);)Sample输入:10 20输出:rabbit=0,chicken=10#include stdio.hint main()int chicken,rabbit,f,h;scanf(%d%d,&h,&f);rabbit=(f-2*h)/2;chicken=(4*h-f)/2;printf(rabbit=%d,chicken=%dn,rabbit,chicken);4.1 温度转换背景: 经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。温度转换的公式为:F(C95)32 ;C(F32)59 ;式中F-华氏温度,C-摄氏温度。输入: 第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);第二个数据是相应需要转换的温度值。 输出: 相应的转换后的温度值(保留小数点后 2 位)。#include void main() int lx; double f,c; scanf(%d,&lx); if(lx=1) scanf(%lf,&f); c=(f-32)*5/9; printf(The Centigrade is %.2fn,c); else scanf(%lf,&c); f=(c*9/5)+32; printf(The Fahrenheit is %.2fn,f); 4.2 分段函数有一分段函数,y=f(x)。当x小于6时,y=x-12;当x大于等于6且小于15时,y=3x-1;当x大于等于15时,y=5x+9.从键盘上输入一个整数x,输出对应的y值。 #include void main()int x,y;scanf(%d,&x);if(x6)y=x-12;else if(x15)y=3*x-1;elsey=5*x+9;printf(%dn,y);return 0;4.3 整数位数判断 输入一个不多于5位的正整数,要求: (1)求它是几位数;(2)逆序打印出各位数字。#include #include #define SIZE 5intmain(void) int bit_count;/位数 long int input_num;/输入数 int resultSIZE;/存放各个位的数 int i; scanf(%ld, &input_num); if (input_num 99999) printf(Invalid inputn); exit(1); for( bit_count = 0; input_num; +bit_count) resultbit_count = input_num % 10; input_num /= 10; printf(%dn,bit_count); for(i = 0; i bit_count; +i) printf(%d,resulti); printf(n); exit(0);4.4 四位数拆分输入一个四位数,判断千位、百位、十位和个位数字之和是否为偶数,如果是,输出Yes,如果不是,输出No;如果不是四位数,输出Invalid data。 #includevoid main() int x,a,b,c,d,e; scanf(%d,&x); if(x/1000=1) printf(Invalid datan); else a=x/1000; b=x%1000/100; c=x%1000%100/10; d=x%1000%100%10; e=(a+b+c+d)%2; if(e=0) printf(Yesn); else printf(Non); 4.5 磨磨你的砍柴刀:判断三角形的形状要求:输入三角型的三条边,判断三角形的形状。假设输入的三边边长均0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle.等腰三角形:isoceles triangle.不构成三角形:non-triangle.一般三角形:triangle.#includevoid main() float a,b,c; scanf(%f%f%f,&a,&b,&c); if(a+bc|b+ca|c+a。输入其他字符时原样输出。 友情提示:整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。所以输入大写英文字母时的输出要仔细考虑。#include int main() char ch; int a; ch=getchar(); if(ch=97&ch=65&ch=48&ch=57) ch=ch/10+ch; putchar(ch); else putchar(ch); printf(n); 4.7 判断某年某月的天数一年有365天,有的月份有31天,有的有30天,2月份闰年的时候是29天,非闰年的时候是28天。现在要求从键盘上输入一个年份和月份,输出其对应的天数。#include main() int year,month,days; scanf(%d %d, &year,&month); switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break; case 4: case 6: case 9: case 11:days=30;break; case 2:if(year % 4 =0) & (year % 100 !=0) |(year % 400=0) days=29; else days=28; printf(%dn,days);4.8 花多少钱买衣服周末商场促销呢,某品牌服装既可以买套装,也可以买单件。若买的不少于套,每套元;不足套的每套元,只买上衣每件元,只买裤子每条元。编写程序,输入计划购买的上衣数量 a 和裤子的数量 b ,计算并输出应该付的款 m 。#includevoid main() int a,b,y; scanf(%d%d,&a,&b); if(b=a&b50) y=90*b+(a-b)*60; if(b=50) y=80*b+(a-b)*60; if(ab&a50) y=90*a+(b-a)*45; if(a=50) y=80*a+(b-a)*45; printf(%dn,y);4.9 到邮局去寄包裹你去邮局给朋友寄礼物。发现邮局对邮寄包裹的费用是这样规定的:如果包裹长宽高任意一个尺寸超过米,或重量超过千克,不予邮寄;对可以邮寄的包裹每件收手续费 0.2 元,不同重量的邮资按下表计算: 重量(千克) 收费标准(元) 小于 . 大于等于但不超过 . 大于等于但不超过 . 编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即可),超出尺寸或重量的输出 Error” .#includevoid main() float a,b,c,m,y; scanf(%f,%f,%f,%f,&a,&b,&c,&m); if(a1|b1|c1|m30) printf(Errorn); else if(m10) y=0.80*m+0.2; else if(m20) y=0.75*m+0.2; else y=0.70*m+0.2; printf(%.2fn,y); 4.10 输出星期几的英文表示输入用数字(1-7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词Error(回车)。#includevoid main() int a; scanf(%d,&a); switch(int)(a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn);break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break; case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(Errorn); 5.1 输出一行星号编写程序在一行中输出 N 个星号。输入: N值输出: 一行中N个星号 #include int main() int n,i; scanf(%d,&n); for(i=0;in;i+) putchar(*); putchar(n); return 0;5.2 打印平行四边形 输入图形的高 n 和首字符 c ,输出如下例( n=5 ,c=A )所示的图形 . ABCDE BCDEF CDEFG DEFGH EFGHI 输入:整数n例如 5 和某个字符例如 A 输出:高为5和首字符A 的平行四边形#include void main() int n,m,i,d; char p,t; scanf(%d,%c,&n,&p); for(m=0;mn;m+) for(i=0;im;i+) printf( ); for(d=0;dn;d+) t=p+d+m; printf(%c,t); for(i=0;i0)。输出:打印相应的空心倒三角形。图样参见测试用例。#include #include int main() int h,i,j,k,m,n; scanf(%d,&h); if(h1)&(h%2!=0) for(i=1; i=(2*h-1); i+) printf(*); printf(n); for(j=1; j=(h-2); j+) for(k=1; k=j; k+) printf( ); printf(*); for(m=1; m=(2*h-3-2*j); m+) printf( ); printf(*); printf(n); for(n=1;n=(h-1);n+) printf( ); printf(*n); else printf(Invalid inputn); return 0; 选做 5.4 打印实心正方形5.1题中你已经打印了一行*号,这次在屏幕上输出一个由星号组成的 n 行 n 列的正方形。程序输入 n 值,输出如下例( n=4 )所示的高和上底均为 n 的正方形:*#include #include int main() int a=1,n,b; scanf(%d,&n); while(a=n) b=1; do printf(*); b+; while(b=n); printf(n); a+; return 0;选做 5.5 空心字符菱形输入:菱型起始字母和菱形的高度。输出:参看测试用例,打印空心的由字符组成的菱形。#include #include int main() char ch; int n,a=1,b,c; scanf(%c %d,&ch,&n); while(a=n) b=1; while(b=2) while(c=2*a-3) printf( ); c+; printf(%c,ch); ch=ch+1; printf(n); a+; a=1; ch=ch-2; while(a=n-1) b=1; while(b=a) printf( ); b+; printf(%c,ch); c=1; if(a=n-2) while(c=2*n-2*a-3) printf( ); c+; printf(%c,ch); ch=ch-1; printf(n); a+; return 0;选做 5.6 输出一个字母K吧!输入一个整数n,输出图形K。如n=4时,输出如下图形。* * * * * * * * * * * * #include #include int main() int n,i=1,j; scanf(%d,&n); while(i=n-1) j=1; printf(*); while(j=n-i) printf( ); j+; printf(*n); i+; printf(*n); i=1; while(i=n-1) j=1; printf(*); while(j=i) printf( ); j+; printf(*n); i+; return 0;选做 5.7 输出X图形输入 n 值,输出下例( n=3 )所示的图形: * * * * * * * * * 输入:整数n(例如3)输出:如上图所示X 形图形#include #include int main() int n,i=1,j,k; scanf(%d,&n); while(i=n-1) j=1; while(j=i-1) printf( ); j+; printf(*); k=1; while(k=2*n-2*i-1) printf( ); k+; printf(*); j=1; while(j=i-1) printf( ); j+; printf(n); i+; i=1; while(i=n-1) printf( ); i+; printf(*); i=1; while(i=n-1) printf( ); i+; printf(n); i=1; while(i=n-1) j=1; while(j=n-i-1) printf( ); j+; printf(*); k=1; while(k=2*i-1) printf( ); k+; printf(*); j=1; while(j=n-i-1) printf( ); j+; printf(n); i+; return 0;选做 5.8 输出图形编程,输入 n 值,输出下例( n=5 )所示的高为 n 的图形 : #include #include int main() int n,i=1,j,k,l; scanf(%d,&n); while(i=n-1) j=1; while(j=i) printf(*); j+; k=1; while(k=2*n-2*i-1) printf( ); k+; l=1; while(l=i) printf(*); l+; printf(n); i+; i=1; while(i=2*n-1) printf(*); i+; printf(n); return 0;选做 5.9 画个空心的梯形吧编程,输入 n ,输出如下例( n=5 )所示的 高和上底均为 n 的等腰空心梯形。#include #include int main() int n,i=1,j,k; scanf(%d,&n); while(i=n) j=1; while(j=n-i) printf( ); j+; printf(*); if(i=1) for(k=1; k=n-2; k+) printf(*); else if(i=n) for(k=1; k=3*n-4; k+) printf(*); else for(k=1; k=n+2*i-4; k+) printf( ); printf(*); j=1; while(j=n-i) printf( ); j+; printf(n); i+; return 0;选做 5.10 输出菱形图案输入 n ,输出如下例( n=3 )所示的菱形: * * * * * #include #include int main() int n,i,j,k; scanf(%d,&n); for(i=1; i=n; i+) for(j=1; j=n-i; j+) printf( ); for(k=1; k=2*i-1; k+) printf(*); printf(n); for(i=1; i=n-1; i+) for(j=1; j=i; j+) printf( ); for(k=1; k=2*n-2*i-1; k+) printf(*); printf(n); return 0;5.11 最大公约数输入两个正整数m和n,求它们的最大公约数和最小公倍数比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。#includevoid main() int m,n,i,j; scanf(%d%d,&m,&n); for(i=m;i=1;i-) if (n%i=0&m%i=0) printf(the greatest common divisor is %dn,i); break; for (j=m;j+) if (j%m=0&j%n=0) printf(the least common multiple is %dn,j); break; 5.12 水仙花数输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33输出语句:printf(%dn,n);#include void main()int n, i, j, k;for(n=100; n=999; n=n+1) i = n/100; / 取出n的百位数 j = (n/10)%10; / 取数n的十位数 k = n%10; / 取出n的个位数 if(n=i*i*i+j*j*j+k*k*k) printf(%dn,n);5.13 完数一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No#include#includeint main() int n,i,c,sum=0;scanf(%d,&n); for(i=1;in;i+) if(n%i=0)sum=sum+i; if(n=sum) printf(Yes,its factors are ); for(c=1; cn; c+) if(n%c=0) printf( %d,c); printf(n); elseprintf(Non); 5.14 素数输入两个正整数m和n,求出m,n区间的所有素数#include #include void main()int m,n,i,j,k; scanf(%d%d,&m,&n); for(i=m;in;i+) k=sqrt(i); for(j=2;jk) printf( %d,i); printf(n);5.15 找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入:取值范围输出:该范围内的最大素数#include int main() int a,i,j; scanf(%d,&a); for(i=a;i1;i-) for(j=2;ji;j+) if(i%j=0) break; if(j=i)printf(%dn,i);break;5.16 回文数输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No#include #include #include char *chan(int count) ;int main(int argc, char* argv) char *str; int i,n; str=chan(0); n=strlen(str); for (i = 0; i(n-1)/2; i+) if (stri!=strn-1-i) n=0; break; if (n) printf(Yesn); else printf(Non); free(str); system(pause); return 0;char *chan(int count) char a;
展开阅读全文