输入输出函数和三大结构习题

1、下面的一段程序的输出结果为( ) 

#include <stdio.h>

int main()

{

    if(-1)

 printf("1");

    else

        printf("2");

    if(0)

        printf("3");

    else

        printf("4");

    return 0;

}

        A. 23         B. 24         C. 13         D. 14

        解析:

2、设int s = 100,要输出字符串"s的值是100"应使用下列哪个语句? ( A  D 

        A. printf("s 的值是%d", s);            B. printf("s 的值是%s", s)

        C. printf("s 的值是%x", s):            D. printf("s 的值是%i", s)

        解析:int 的格式控制符是:%i 和%d

3、if(n==8)和if(8== n)两种判断方式,哪一种更好,为什么?

        解析:if(8== n)更好,两种判断方式效率上没有什么区别,但第一种if(n==8)在写判断语句的时候很容易漏写一个"="

4、if-elseif-else结构和switch-case结构,哪个效率高,为什么?

        解析:switch...case...执行效率高,switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

5、结构化程序设计所规定的三种基本控制结构是: 顺序、选择、循环

6、C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符:  C

A. 必须为字母                       B. 必须为下划线

C. 必须为字母或下划线      D. 可以是字母,数字和下划线中任一字符

7、若执行下面的程序时,从键盘上输入 5,则输出是 (  C

int main(int argc, char **argv)

{

    int x;

    scanf("%d", &x);

    if(x++ > 5)       

        printf("%d\n", x);

    else

        printf("%d\n", x--);

    return 0;

}

A. 7                  B. 4                  C. 6                  D. 5

        解析:通过scanf输入,得到x=5,  if(x++ > 5) 表示先5赋值给x,在++自增为6,判断5>6为假,执行else语,此时x=6,x自减;输出6

8、以下语句中,能够判断uiNum(unsigned int)可以被16整除的有(  ABCD

        A. if (((uiNum / 16) * 16) == uiNum)

        B. if ((uiNum % 16) == 0)

        C. if ((uiNum & 0x0F) == 0)

        D. if (((uiNum >> 4) << 4) == uiNum)

9、编写一个程序。实现输入一个小写字母,程序输出它对应的大写字母。(提示:小写字母的ASCII码值比大写宇母大32) 

#include <stdio.h>
int main()
{
	char ch;

	printf("请输入一个小写字母:");
	scanf("%c",&ch);

	if(ch>='a'&&ch<='z')
	{
		printf("%c\n",ch-32);
	}
	return 0;
}

运行结果:

10、已知学生成绩(100分为满分)与等级的对应关系为: (中科四平)

成绩(grade)

等级

90<=grade<=100

A

80<=grade<90

B

70<=grade<80

C

60<=grade<70

D

grade<60

E

请你编写一个程序,要求:输入学生成绩,输出学生成绩对应的等级。(提示:使用switch....case 语句)

          

#include <stdio.h>
int main()
{
    //定义成绩score,等级grade变量
	int score,grade;

	
	printf("请输入成绩:");
	scanf("%d",&score);
	
	//判断成绩是否有效
	if(score<0||score>100)
	{
	    printf("成绩无效\n"); 
	    
	    return 0;
	}
	
	//划分成绩等级
	grade=score/10;
	switch(grade)
	{
	    case 10: case 9: printf("A\n"); break;      //A等级
	    case 8:  printf("B\n");         break;      //B等级
	    case 7:  printf("C\n");         break;     //C等级
	    case 6:  printf("D\n");         break;     //D等级
	    default: printf("E\n");         break;     //E等级

	}
	return 0;
}

运行结果:

 

 

11、编写一个程序。a=3,b=5,对a和b的值进行交换。 (北京君正集成电路)

 (1)引入中间参数

#include <stdio.h>
int main()
{
    int a,b,t;
    printf("输入两个数值:");
    
    scanf("%d %d",&a,&b);
    
    t=a;
    a=b;
    b=t;
    
    printf("%d %d",a,b);
    return 0;
}

(2) 相加分离法

#include <stdio.h>
int main()
{
    int a,b;
    printf("输入两个数值:");
    
    scanf("%d %d",&a,&b);
    a=a+b; 
    b=a-b;
    a=a-b;
 
    printf("%d %d",a,b);
    return 0;
}

两种方法都可以运行正确结果:

 

 12、编写一个程序。实现输入一个三位数,判断是否是水仙花数。水仙花数——各个位立方之和等于本身。eg:

#include <stdio.h>
int main()
{
	int num;
	printf("请输入一个三位数:");

	scanf("%d",&num);

	if(num>=100&&num<=999)     //三位数
	{
    	int g,s,b;        //定义个位,十位,百位
	    g=num%10;
    	s=num/10%10;
    	b=num/100%10;
        if(g*g*g+s*s*s+b*b*b==num)     //判断是否是水仙花数
    	{
	    	printf("是水仙花数");
	    }
	    else 
    	{
	    	printf("不是水仙花数");
	    }
	}

	return 0;
}

运行结果: 

13、编写一个程序。实现输入一个年份,判断是不是闰年

#include <stdio.h>
int main()
{
    int year;
	printf("请输入一个年份:");

	scanf("%d",&year);
	 //判断是否是闰年
    if(year%4==0&&year%100!=0||year%400==100)    
    {
	    printf("%d年是闰年\n",year);
    }
	
	 else 
	 {
	    printf("%d年不是闰年\n",year);
      }
    return 0;
}

运行结果:

14、编写一个程序。请实现以下功能:

输入三个数,分别为年、月、日,输出此日是该年的第几天。

输入:XXX  XXX  XXX

输出:此日是该年的第XXX 天

示例:

输入 2020 2 20

程序输出 此日是该年的第51 天

#include <stdio.h>
int main()
{
    int y1=31,y3=31,y5=31,y7=31,y8=31,y10=31,y12=31;
    int y4=31,y6=31,y9=31,y11=31;
    int y2=28;
    
    int year,month,day,sum;  //定义年,月,日,求和
    printf("请输入年月日:\n");
    scanf("%d %d %d",&year,&month,&day);
    
     
    if((year%4==0&&year%100!=0)||year%400==0)
    {
 
        y2 = 29;
 
    }
    printf("%d %d %d\n",year,month,day);
 
    if(month>12||month<0) printf("输入的月份不正确");
 
    if(day>31||day<0) printf(" 输入的日期不正确");
    
    sum=0;
    switch(month)
    {
 
          case 12: sum=sum+y11;
 
          case 11: sum=sum+y10;
 
          case 10: sum=sum+y9;
 
          case 9: sum=sum+y8;
 
          case 8: sum=sum+y7;
 
          case 7: sum=sum+y6;
 
          case 6: sum=sum+y5;
 
          case 5: sum=sum+y4;
 
          case 4: sum=sum+y3;
 
          case 3: sum=sum+y2;
 
          case 2: sum=sum+y1;
 
          case 1: sum=sum+day;
          break;
 
    }
 
        printf("此日该年的%d天",sum);
 
        return 0;
 
}

运行结果: 

16、编写一个程序。输入三角形的 三个边长判断能否构成三角形,如果能输出能构成三角形,再输出是什么三角形?

等边 [a==b && a==c && b==c]

等腰 [a==b || a==c || b==c]

直角(勾股定理)[a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a]

普通

如果不能: 输出不能构成三角形


#include <stdio.h>

int main()
{
    
    int a,b,c;
    printf("请输入三个边长:");
    scanf("%d %d %d",&a ,&b ,&c);
    
    if(a+b>c&&a-b<c)
    {
        printf("能构成三角形\n");

    
        if(a==b&&b==c&&a==c)
        {
            printf("等边三角形");
        }
    
            else if(a==b||b==c||a==c)
            {
             printf("等腰三角形");
            }
    
            else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
            {
             printf("直角三角形");
            }
    
            else 
            {
            printf("其他三角形");
            }
        
    }
    else
    printf("不能构成三角形");

        return 0;
}

 运行结果:

16、编写一个程序。有 4 个变量 a,b,c,d,我们提前并不知道他们的值,请用你的方式将他们从大到小排序。算法任意。

#include <stdio.h>
int main()
{
    int a,b,c,d,t;
    printf("输入四个数值:");
    
    scanf("%d %d %d %d",&a,&b,&c,&d);
    
    if(a<b) t=a , a = b , b = t;
 
    if(b<c) t=b , b = c , c = t;
 
    if(c<d) t=c , c = d , d = t;
    
    if(a<b) t=a , a = b , b = t;
 
    if(b<c) t=b , b = c , c = t;

    printf("%d %d %d %d",a,b,c,d);
    return 0;
}

运行结果:

 

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值