C基础的练习集及测试答案(1-15)

练习题:
注:标有(课堂)字样的为课上练习,其他为课下练习
基础题(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 }

原文地址:https://www.cnblogs.com/lanbofei/p/9428557.html