练习题:
注:标有(课堂)字样的为课上练习,其他为课下练习
基础题(50题)
1、(课堂)编写程序,输出“XXX欢迎来到动物园!”(XXX是自己的名字)。
1 //1、(课堂)编写程序,输出“XXX欢迎来到动物园!”(XXX是自己的名字)。 2 3 #include<stdio.h> 4 #define N 20 5 int main(){ 6 char ch[N]={0}; 7 //while(gets(ch)!=NULL){ 8 //puts(姓名); 9 gets(ch); 10 puts(ch); 11 puts("欢迎来到动物园"); 12 13 14 //} 15 16 return 0; 17 }
1 //1、(课堂)编写程序,输出“XXX欢迎来到动物园!”(XXX是自己的名字)。 2 3 #include<stdio.h> 4 #define N 20 5 int main(){ 6 char ch[N]={0}; 7 scanf("%s",ch); 8 printf("%s欢迎来到动物园",ch); 9 10 11 //} 12 13 return 0; 14 }
2、(课堂)打印用*组成的字母C
//2、(课堂)打印用*组成的字母C #include<stdio.h> int main(){ printf(" *** "); printf(" * * "); printf("* "); printf("* "); printf("* "); printf(" * * "); printf(" *** "); return 0; }
3、交换杯子里的液体。使用不同的整数代表液体,变量代表杯子。
(课堂)方法1:中间变量法
(课堂)方法2:三步异或法
方法3:加和分减法
#if 0 交换杯子里的液体。使用不同的整数代表液体,变量代表杯子。 (课堂)方法1:中间变量法 (课堂)方法2:三步异或法 #endif #include<stdio.h> void fun1(int *i,int *j){ int temp; temp=*i; *i=*j; *j=temp; } void fun2(int *i,int *j){ *i^=*j; *j^=*i; *i^=*j; } int main(){ int i=3,j=9; printf("i=%d,j=%d ",i,j); fun1(&i,&j); printf("i=%d,j=%d ",i,j); fun2(&i,&j); printf("i=%d,j=%d ",i,j); return 0; }
4、(课堂)使用宏定义PI来定义3.1415926,计算圆的面积。
//4、(课堂)使用宏定义PI来定义3.1415926,计算圆的面积。 #include<stdio.h> #define PI 3.1415926 int main(){ int length,perimiter; scanf("%d",&length); perimiter=length*2*PI; printf("周长:%d",perimiter); }
5、(课堂)租船问题。
写程序计算游客需要付的租船的费用。租船每小时30元。游客输入租船时间,计算出租船费用。租船费用=时间*每小时钱数+押金。
要求押金与每小时钱数使用宏定义。
1 #if 0 2 5、(课堂)租船问题。 3 写程序计算游客需要付的租船的费用。租船每小时30元。游客输入租船时间,计算出租船费用。租船费用=时间*每小时钱数+押金。 4 要求押金与每小时钱数使用宏定义。 5 #endif 6 #include<stdio.h> 7 #define unit 30 8 #define deposite 100 9 10 11 int main(){ 12 int time,total; 13 printf("请输入时间"); 14 scanf("%d",&time); 15 total=time*unit+deposite; 16 printf("总价:%d",total); 17 return 0; 18 }
6、(课堂)求以下数字的原码、反码、补码。(可以使用计算器)
15(10进制)
0xE3A4(16进制)
一、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同 二、负整数的符号位固定为1,由原码变为补码时,规则如下: 1、原码符号位1不变,整数的每一位二进制数位求反,得到反码 2、反码符号位1不变,反码数值位最低位加1,得到补码
7、输入一个整数(0~255),输出这个整数代表的ASCII码字符。
#if 0 7、输入一个整数(0~255),输出这个整数代表的ASCII码字符。
解题思路:
以%c形式输入以%d形式输出
以%d形式输入以%c形式输出
#endif #include<stdio.h> int main(){ char ch; while(1){ scanf("%d",&ch); printf("%c ",ch); } return 0; }
7_1、输入整数代表的ASCII码字符,输出这个一个整数(0~255)。
1 #if 0 2 7_1、输入整数代表的ASCII码字符,输出这个一个整数(0~255)。
解题思路:
以%c形式输入以%d形式输出
以%d形式输入以%c形式输出
3 #endif 4 #include<stdio.h> 5 6 int main(){ 7 char ch; 8 while(1){ 9 scanf("%c",&ch); 10 getchar(); 11 printf("%d ",ch); 12 } 13 14 return 0; 15 }
8、输入一个字符,判断这个字符是0~9之间的数字,还是大写字母,还是小写字母。若都不是输出错误信息。
1 #if 0 2 8、输入一个字符,判断这个字符是0~9之间的数字,还是大写字母,还是小写字母。若都不是输出错误信息。
解题思路:
多分支条件判断:
3 #endif 4 5 #include<stdio.h> 6 7 int main(){ 8 char ch; 9 scanf("%c",&ch); 10 if(ch>='a'&&ch<='z'){ 11 printf("%d是小写字母",ch); 12 }else if(ch>='A'&&ch<='Z'){ 13 printf("%d是大写字母",ch); 14 }else if(ch>='1'&&ch<='9'){ 15 printf("%d是数字",ch); 16 }else{ 17 printf("%d是特殊字符",ch); 18 } 19 20 return 0; 21 }
9、计算输入时间的下一秒。例如输入12 15 32,输出12:15:33;输入21 59 59,输出22:00:00。若输入非法时间(如输入小时是25、输入分钟/秒是61等情况)则报错。
1 #if 0 2 9、计算输入时间的下一秒。例如输入12 15 32,输出12:15:33;输入21 59 59,输出22:00:00。 3 若输入非法时间(如输入小时是25、输入分钟/秒是61等情况)则报错。
解题思路:
一。多分支判断输入数据是否合法:
二。数据转换规则:
秒加一
如果秒加一大于59
则秒归零,分加一,此时如果分大于59
则分归零,时加一,此时如果时大于23
则时归零
错误分析:
一。数据转换不是多分支判断;
4 #endif 5 6 #include<stdio.h> 7 void print(int time){ 8 printf("%d:错误数值",time); 9 } 10 11 int main(){ 12 int hour,minute,second; 13 scanf("%d %d %d",&hour,&minute,&second); 14 15 16 //判断数据是否合法 17 if(0>hour||hour>23){ 18 print(hour); 19 return 0; 20 }else if(0>minute||minute>59){ 21 print(minute); 22 return 0; 23 }else if(0>second||second>59){ 24 print(second); 25 return 0; 26 } 27 28 29 if((++second)>59){ 30 second=0; 31 if((++minute)>59){ 32 minute=0; 33 if((++hour)>23){ 34 hour=0; 35 } 36 } 37 } 38 printf("%d,%d,%d",hour,minute,second); 39 return 0; 40 }
10、(课堂)练习:从键盘输入5个学生的成绩(整数),要求输出总成绩(整数)和平均成绩(小数)
1 //10、(课堂)练习:从键盘输入5个学生的成绩(整数),要求输出总成绩(整数)和平均成绩(小数) 2 #include<stdio.h> 3 4 int main(){ 5 6 int stu1,stu2,stu3,stu4,stu5; 7 int sum; 8 float ave; 9 scanf("%d %d %d %d %d",&stu1,&stu2,&stu3,&stu4,&stu5); 10 sum=stu1+stu2+stu3+stu4+stu5; 11 ave=(float)sum/5; 12 printf("sum=%d,ave=%f",sum,ave); 13 return 0; 14 }
11、(课堂)读以下程序,猜想输出的结果,再执行程序检验自己的猜想
#include <stdio.h>
int main(void)
{
double y;
float a = 2.0;
int b =6,c=3;
y = a*b/c-1.5+'A';
printf("%f
",y);
return 0;
}
12、(课堂)读以下程序,猜想输出的结果,再执行程序检验自己的猜想
#include <stdio.h>
int main()
{
int i = 8,j = 10,k = 12;
int m,n,p;
m = ++i;
n = j--;
p = (++m)*(n++)+(--k);
printf("i=%d,j=%d,k=%d
",i,j,k);
printf("m=%d,n=%d,p=%d
",m,n,p);
return 0;
}
13、(课堂)设
int a=3,b=4,c=5,d;
分别求出下列表达式的d的值(即判断此表达式真假)
333应该加括号
1)d = a+b>c && b==c
2)d = a || b+c && b-c
3)d = !(a>b) && !c || 1
4)d = !(x=a)&&(y=b)&&0(x和y均为int型,求出x和y的值)
5)d = !(a+b)+c-1 && b+c/2
14、(课堂)输入3个整数,从小到大输出
1
#if 0
14、(课堂)输入3个整数,从小到大输出
解题思路:
将所有的项遍历,两两对比所有项。
#endif
2 #include<stdio.h> 3 void jiao(int *a,int *b){ 4 (*a)^=(*b); 5 (*b)^=(*a); 6 (*a)^=(*b); 7 } 8 9 int main(){ 10 int a,b,c; 11 scanf("%d %d %d",&a,&b,&c); 12 if(a>b){ 13 jiao(&a,&b); 14 } 15 if(a>c){ 16 jiao(&a,&c); 17 } 18 if(b>c){ 19 jiao(&b,&c); 20 } 21 printf("%d %d %d",a,b,c); 22 return 0; 23 }
15、(课堂)输入3个正整数作为3条线段的长度,判断这3条线段能否构成三角形。构成三角形的条件是:任意两边之和大于第三边
1
#if 0
15、(课堂)输入3个正整数作为3条线段的长度,判断这3条线段能否构成三角形。
构成三角形的条件是:任意两边之和大于第三边
解题思路:
对三边长度进行排序
找到三边中较短的两边,此两边之和大于第三边则可构成第三遍
#endif
2 #include<stdio.h> 3 void jiao(int *a,int *b){ 4 (*a)^=(*b); 5 (*b)^=(*a); 6 (*a)^=(*b); 7 } 8 9 int main(){ 10 int a,b,c; 11 scanf("%d %d %d",&a,&b,&c); 12 if(a>b){ 13 jiao(&a,&b); 14 } 15 if(a>c){ 16 jiao(&a,&c); 17 } 18 if(b>c){ 19 jiao(&b,&c); 20 } 21 //printf("%d %d %d",a,b,c); 22 if((a+b)>c){ 23 printf("%d %d %d 可以构成三角形",a,b,c); 24 }else{ 25 printf("%d %d %d 不可以构成三角形",a,b,c); 26 } 27 return 0; 28 }