2.字符串和字符常量有什么区别?
解:字符常量是一个字符,在程序中字符是用单引号括起来的。字符串变量由0个或若干个字符组合而成,在程序中字符串是用双引号括起来的,在存储时系统自动在字符串最后面加一个结束符号’\0’。
3.求下面算数表达式的值。
(1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 结果:2.5
(2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 结果:3.5
4.写出程序运行的结果。
#include void main() {int i,j,m,n; i=8;j=10; m=++i;n=j++; printf(“%d,%d,%d,%d\\n”,i,j,m,n); } 解:运行结果为:9,11,9,10 5.输入一个华氏温度,要求输出摄氏温度。公式为C=5/9(F-32),输出要有文字说明,取2位小数。 运行结果为: 请输入一个华氏温度:78 摄氏温度为:25.56 解:#include void main() { float c,f; printf(”请输入一个华氏温度:”); scanf(“%f”,&f); c=(5.0/9.0)*(f-32); printf(“摄氏温度为:,%5.2f\n”,c); } 6.写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1)a+b>c & & b= =c 结果:0 (2)a || b+c & & b- c 结果:1 (3)!(a>b)&&!c ||1 结果:1 (4)!(x=a) &&(y=b) && 0 结果:0 (5)!(a+b)+c-1 && b+c/2 结果:1 7.有一函数 写一程序,输入x值,输出y值。 解: #include void main() { int x,y; printf("输入x:"); scanf("%d",&x); if (x<1) /*若x<1 */ { y=x; printf("x=%3d, y=x=%d\\n",x,y); } else if(x<10) /*若1≤x<10 */ { y=2*x-1; printf("x=%3d, y=2*x-1=%d\\n",x,y); } else /*若x≥10 */ { y=3*x-11; printf("x=%3d, y=3*x-11=%d\\n",x,y); } } 运行结果:①输入x:4 x= 4, y=2*x-1=7 ②输入x:-1 x=-1, y=x=-1 ③输入x:20 x= 20, y=3*x-11=49 8.输入百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。90分以上为’A’,80~分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。 解:#include void main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while(score>100||score<0) { printf("\\n输入有误,请重输"); scanf("%f",&score); } switch((int)(score/10)) { case 10: case 9:grade='A';break; case 8:grade='B';break; case 7:grade='C';break; case 6:grade='D';break; case 5: case 4: case 3: case 2: case 1: case 0:grade='E'; } printf("成绩是%5.1f,相应的等级是%c。\\n",score,grade); } ①请输入学生成绩:90.5 成绩是90.5,相应的等级是A。 ②请输入学生成绩:59 成绩是59.0,相应的等级是E。 运行结果: 9.求(即求1+2+3+4+…+20)。 解:#include void main() {float s=0,t=1; int n; for (n=1;n<=20;n++) {t=t*n; s=s+t; } printf(“1+2+3+4+…+20=%e\\n”,s); } 运行结果为:1+2+3+4+…+20=2.561327e+18 10.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘多少桃子。 解:#include void main() {int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2 ;/*第1天的桃子数是第2天桃子数加1后的2倍*/ x2= x1; day--; } printf(“total=%d\\n”,x1); } 运行结果:total=1534 11.用牛顿迭代法求方程在1.5附近的根。 #include #include void main() {float x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1; }while(fabs(x1-x0)>=1e-5); printf(“The root of equation is %5.2f\\n”,x1); } 运行结果: The root of equation is 2.00 12.求方程的根,用3个函数分别求当大于零、等于零和小于零时的根,并输出结果。从主函数输入a、b、c的值。 解:程序如下: #include #include float x1,x2,disc,p,q; void main() {void greater_than_zero(float,float); void equal_to_zero(float,float); void smaller_than_zero(float,float); float a,b,c; printf(“\ninput a,b,c:”); scanf(“%f,%f,%f”,&a,&b,&c); printf(“equation:%5.2f*x*x+%5.2f*x+%5.2f=0\\n”,a,b,c); disc=b*b-4*a*c; printf(“root:\\n”); if (disc>0) {greater_than_zero(a,b); printf(“x1=%f\\x2=%f\\n”,x1,x2); } else if (disc==0) {equal_to_zero(a,b); printf(“x1=%f\\x2=%f\\n”,x1,x2); } else {smaller_than_zero(a,b); printf(“x1=%f+%fi\x2=%f-%fi\n”,p,q,p,q); } } void greater_than_zero(float a,float b) /* 定义一个函数,用来求disc>0时方程的根 */ {x1=(-b+sqrt(disc))/(2*a); X2=(-b-sqrt(disc))/(2*a); } void equal_to_zero(float a,float b) /* 定义一个函数,用来求disc=0时方程的根 */ {x1=x2=(-b)/(2*a); } void smaller_than_zero(float a,float b) /* 定义一个函数,用来求disc<0时方程的根 */ {p=(-b)/(2*a); q=sqrt(-disc)/(2*a); } 运行结果: ①input a,b,c:2,4,1 equation:2.00*x*x+4.00*x+1.00=0 root: x1=-0.28231 x2=-1.707107 ②input a,b,c:1,2,1 equation:1.00*x*x+2.00*x+1.00=0 root: x1=-1.000000 x2=-1.000000 ③input a,b,c:2,4,3 equation:2.00*x*x+4.00*x+3.00=0 root: x1=-1.000000+0.701071i x2=-1.000000-0.701071i 13.编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 解: #include #include void main() {void inverse(char str[]); char str[100]; printf(“input string:”); scanf(“%s”,str); inverse(str); printf(“inverse string: %s\\n”,str); } void inverse(char str[]) {char t; int i,j; for (i=0,j=strlen(str);i<(strlen(str)/2);i++,j--) { t=str[i]; str[i]=str[j-1]; str[j-1]=t; } } 运行结果: input string:abcdefg inverse string:gfedcba 14.编写一个函数,连接两个字符串。 解:#include void main() {void concatenate(char string1[],char string2[],char string[]); char s1[100],s2[100],s[100]; printf(“\ninput string1:”); scanf(“%s”,s1); printf(“\ninput string2:”); scanf(“%s”,s2); concatenate(s1,s2,s); printf(“The new string is %s\\n”,s); } void concatenate(char string1[],char string2[],char string[]) {int i,j; for (i=0;string1[i]!=’\0’;i++) string[i]=string1[i]; for (j=0;string2[j]!=’\0’;j++) string[i+j]=string2[j]; string[i+j]=’\0’; } 运行结果: intput string1:country intput string2:side The new string is countryside 15.输入两个整数,求它们相除的余数。用带参的宏来实现编程序。 解:#include #define SUPPLUS(a,b)((a)%(b)) void main() {int a,b; printf(“input two integer a,b:”); scanf(“%d,%d”,&a,&b); printf(“remainder is %d\\n”, SUPPLUS(a,b)); } 运行结果: input two integer a,b:60,13 remainder is 8 16.给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可定义为LEAP_YEAR,形参为y,即定义宏的形式为 #define LEAP_YEAR (y) (读者设计的字符串) 在程序中用以下语句输出结果: If (LEAP_YEAR(year)) printf(“%d is a leap year.”,year); else printf(“%d is not a leap year.”,year); 解:#include #define LEAP_YEAR(y)((y%4==0)&&(y%100!=0)||y%400==0)) void main() {int year; printf(“\ninput year:”); scanf(“%d”,&year); if (LEAP_YEAR(year)) printf(“%d is a leap year.\n”,year); else printf(“%d is not a leap year.\n”,year); } 运行结果: ①input year:2006 2006 is not a leap year. ②input year:2000 2000 is a leap year. 17.一个C程序是由若干函数构成的,其中有且只能有一个main函数。