1、Exercises Chapter 1 to 6,made by Mei pinghua Dec 8th,2008,Chapter 1,1.5 请参照本章例题,编写一个C程序,输出以下信息:* * * * * * * * * * * * * * * * * * * * Very good!* * * * * * * * * * * * * * * * * * * *#include main()printf(“* * * * * * * * * * * * *n“);printf(“ very good n“);printf(“* * * * * * * * * * * * *n“);,Cha
2、pter 3,3.7 要将“China”译成密码,规律:用原来的字母后面第4个字母代替原来的字母。如用“E”来代替“A”,结果为G,l,m,r,c。#include main( ) char c1=C,c2=h, c3=i,c4=n,c5=a;c1+=4; c2+=4; c3+=4; c4+=4; c5+=4;printf(“密码是:%c%c%c%c%cn“,c1,c2,c3,c4,c5); ,3.9 求下面算数表达式的值,(),(1)设x=2.5,a=7,y=4.7x+a%3*(int)(x+y)%2/4,(类型 ),* / %,+ -,7,1,*,7,%2,1,2.5+,2.5,/4,0,
3、/ %,+,5.0,3,2,/2,2.5,%,1,+,3.5,(2) 设a=2, b=3, x=3.5, y=2.5(float)(a+b)/2+(int)x%(int)y,(类型 ),( ),3.10 写出下面程序的运行结果,#include main( ) int i, j, m, n;i=8;j=10;m=+i; n=j+;printf(“%d,%d,%d,%d“, i, j, m, n);,i=i+1; /*i为9*/ m=i; /*m为9*/,n=j; /*n为10*/ j=j+1; /*j为11*/,运行结果,9,11,9,10,3.12 设a=12,求下列赋值表达式的值,(1)
4、a+=a,a=a+a,a=24,(2) a=2,a=a 2,a=10,(3) a=2+3,a=a(2+3),a=60,(4) a/=a+a,a=a/(a+a),a=0,(5) a%=(n%=2),n=n%2 n=1 a=a%n a=0,(6) a+=a= a=a,a= aa a=144 a= aa a=0 a= a+a a=0,4.8 已知圆的半径r,圆柱的高h,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。,#define PI 3.1415 main() float r,h,l,s,sq,vq,vz;printf(“请输入半径和圆柱高:n“);scanf(“%f%f“, ,#inclu
5、de ,4.9 输入一个华氏温度,要求输出摄氏温度,#include main( ) float c,f;printf(“please enter the temperature:“);scanf(“%f“, ,4.10 编程,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。,#include main( ) char c1,c2;c1 = getchar();putchar(c1);putchar(n);c2 = getchar();putchar(c2);putchar(n);printf(“%c,%cn“,c1,c2); ,(1
6、)变量c1和c2应定义为字符型或整型?或二者皆可?答:二者皆可 (2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?答:用printf,利用%d (3)整型变量与字符型变量是否在任何情况下可互相代替?答:否。一个字符只有一个字节,而整型数据一般都多于一个字节;当为一个字节时,等价,Chapter 5,(1) a+bc & b=c,1,0,&,0,(2) a | b+c & b-c,1,(3) !(ab) & !c | 1,1,(4) !(x=a) & (y=b) &0,0,(5) !(a+b)+c-1 & b+c/2,1,1,5.3 求逻辑表达式的值
7、。设a=3,b=4,c=5,5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数,#include main() int a,b,c,max;printf(“please input three integer numbers:n“);scanf(“%d%d%d“, ,5.5 有一个函数,y=x,x=10。写一段程序,输入x,输出y值。,#include main() int x,y;printf(“please input x:n“);scanf(“%d“, ,5.6 给出一百分制成绩,要求输出成绩等级 A(90以上)、B(8089)、C(7079)、D(6069)和E(60以下)。,
8、#include main( ) int score, t; char grade;printf(“please input the score:“); scanf(“%d“, ,如果没有break语句呢?从某一入口进入后将顺序执行其后的语句,5.7 给一个不多于5位的正整数,要求(1)求出他是几位数(2)分别输出每一位数字(3)按逆序输出各位数字,#include main() int a,b,c,d,e; long x;printf(“please input a num(long5):n“); scanf(“%ld“, ,5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,
9、-2)、(2,-2),圆半径为1。圆塔的高度为10m。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零),#include main() int h=10;float x,y,x0=2,y0=2,d1,d2,d3,d4;printf(“input the x and y:“);scanf(“%f%f“, ,if(d11 | d21 | d31 | d41) h=10;,Chapter 6,6.3 求S = a+aa+aaa+aaa 之值,其中a是一个数字,例如S=2+22+222+222,#include main() int a, n, i;long t, sum=0;printf(“请
10、输入a 和 n:n“);scanf(“%d%d“, ,用t i 表示第i 个数,则 t1 = at2 = t1 * 10 + at i = t i-1* 10 + a,6.5 求,#include main() float k, s, s1=0, s2=0, s3=0;for(k=1;k=100;k+)s1=s1+k;for(k=1;k=50;k+)s2=s2+k*k;for(k=1;k=10;k+)s3=s3+1/k; /*注意s3, k, s的类型*/s=s1+s2+s3;printf(“结果是%fn“,sum); ,6.6 输出所有的“水仙花数”,即一个3位数,其各位数字立方和等于该数本
11、身,#include main() int a, b, c, n;printf(“水仙花数是:n“);for(n=100;n1000;n+) a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(“%dn“,n); ,(1) 整数n 是3位数(2)a,b, c 分别代表n的百位、十位、个位上的数字,则 n=a*a*a+b*b*b+c*c*c,6.7 编程找出1000以内的所有完数(即一个数恰好等于它的因子之和),#include main() int i, j, n, s;for(j=1;j=1000;j+) n=0; s=0;for(i
12、=1;i=j/2;i+) if(j%i)=0) s=s+i; n+;if(s=j) printf(“%d its factors are “, j);for(i=1;i=j/2;i+)if(j%i=0) printf(“%d“,i); if(n!=1) printf(“,“); n-; printf(“n“); ,关于void main()和main(),在 C 和 C+ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。C 和 C+ 标准中规定 ,main 函数的返回值应该定义为 int 类型。 main 函数的返回值类型必须是 int ,这样返回值才能传递给
13、程序的调用者(如操作系统),Some tips,If语句嵌套使用时,需要特别注意的是else和if的配对问题。C语法规定else总是与它前面的同意语法层次中最接近的尚未配对的if配对Switch语句结构中,default语句一般不省略。如果与case不匹配,也没有发现default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行break语句终止本层循环或跳出switch语句,不能用于循环语句和switch语句之外的任何地方;continue结束本次循环,跳过循环体中continue语句下面的尚未执行的语句,它只用于循环体中,例题,求两个正整数的最小公倍数解法一:
14、用dowhile循环#include main() int m,n,result;printf(“input two integers:”);scanf(“%d%d”, ,解法2:用for循环实现,#include main() int m,n,result;printf(“input two integers:”);scanf(“%d%d”, ,例:编程,实现不同进制数之间的转换。读入形如“xxxb”的字符串xxx是a进制的数字串,代表一个a进制的整数,将此整数转换成b进制的整数并输出相应的数字串。,分析,由题意可得,程序应完成下列工作: 读入a进制的数字串到数组digits:跳过字符;读入
15、字符b并转换成相应的整数值;将digits中的a进制数字串转换成10进制整数c;将c转换成b进制整数并将此整数转换成相应的数字串;输出转换后的数字串;,先将a转换成十进制整数,再将十进制整数转换成b进制,# include # define MAXLEN 16main() int inform,outform,c,i,next;char digitsMAXLEN ,a,b,ch;next=0;While( (ch=getchar() ) =0 )digitsnext+=ch;a=getchar();if(a=2)inform=a - 0;elseinform=10;getchar();,b=getchar();outform=(b=2)? (b -0) : 10;for(c=i=0;i0);for(i=next -1;i=0;i- -)printf(“%c”,digitsi); ,Thank you!,