Day04:C语言学习作业

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

#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

答案:14

分析:题目有两个if-else语句,第一个判断条件是-1,结果为真,所以输出1,第二个判断条件为0,结果为假,输出4,结果就为14

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

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

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

答案:A

分析:B:%s是字符串的输出占位符,C:%x是十六进制占位符,AD:%d和%i都是整形的输出占位符,问题是语句末尾有没有分号,所以选A

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

答案:if(8 == n)更好,因为在输入时可能会错误输出 n = 8;这个错误也不会被系统识别,但是 8 = n会被识别出来,更容易发现错误

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

答案:if - else if - else效率更高,首先switch只支持整形数据判断,这一点上就不如if ,其次switch只能识别连续的数据,没有if灵活,在小型数据中,switch的效率会更高,但数据量大了就不可以了

结构化程序设计所规定的三种基本控制结构是:( )

A. 输入、处理、输出 B. 形、网形、环形

C. 顺序、选择、循环 D. 主程序、子程序、函数

答案:C

分析:图灵提出的

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

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

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

答案:C

分析:标识符只能由字母、数字和下滑线组成,但不能由数字开头

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

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

答案:C

分析: 记录的数字为5,进入判断时++在后,则先判断后++,也就是5>5,结果为假,进入else,此时x++后的结果为6,进入输出语句,--在后,先输出,打印的结果为6

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

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

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

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

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

答案:ABCD

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

//创建记录小写字母的容器
char lowercase;
scanf("%c",&lowercase);

//判断记录的值的范围
if(lowercase >= 'a' && lowercase <= 'z'){
    printf("%c",lowercase - 32);
} 
//错误范围的数字报错
else{
    printf("Incorrect input!!\n");
}

已知学生成绩(100分为满分)与等级的对应关系为:

成绩(grade)

等级

90<=grade<=100

A

80<=grade<90

B

70<=grade<80

C

60<=grade<70

D

grade<60

E

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

//创建成绩容器
int grade;
//将键盘输入数据注入成绩容器
printf("Enter student's grade:\n");
scanf("%d",&grade);

//限制成绩输入范围,本身超出范围的值,不会进入switch,所以不用中断程序
if(grade < 0 || grade > 100){
    printf("Incorrect input!!\n");
} 
//switch函数无法覆盖到100这个值,需要单独声明
else if(grade == 100){
    printf("This student's level s : A!!\n");
}

//创建判断介质,减少判断次数
int temp = grade / 10;
switch (temp) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("This student's level s : E!!\n");
        break;
    case 6:
        printf("This student's level s : D!!\n");
        break;
    case 7:
        printf("This student's level s : C!!\n");
        break;
    case 8:
        printf("This student's level s : B!!\n");
        break;
    case 9:
        printf("This student's level s : A!!\n");
        break;
}

编写一个程序。a=3,b=5,对a和b的值进行交换。 

int a = 3;
int b = 5

//两种方法
//第一种,引入中间容器
int c;
c = a;
a = b;
b = c;

//第二种,不引用中间容器
a = a + b;
b = a - b;
a = a - b;

编写一个程序。实现输入一个三位数,判断是否是水仙花数。

水仙花数——各个位立方之和等于本身。
eg: 1*1*1 + 5*5*5 + 3*3*3 = 153,所以153是水仙花数
//创建数字容器,并通过键盘注入值
int num ;
printf("Enter a num : \n");
scanf("%d",&num);

//创建个位,十位,百位容器
int single,decade,hundred;

//将num值拆解,注入位容器
single = num % 10;
decade = (num / 10) % 10;
hundred = num / 100;

//设置三位数断点
if(num >= 100 && num < 1000){
    if(num == single * single * single + decade * decade * decade + hundred * hundred * hundred){
        printf("%d is a narcissistic number!!\n",num);
    }
}
//范围外打印错误输入
else
    printf("Incorrect input!!\n");

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

//创建年容器,并通过键盘注入值
int year
printf("Enter a year : \n");
scanf("%d",&year);

//判断闰年:能被400整除,或者能被4整除,但不能被100整除的数
if(year % 400 == 0){
    printf("This year is a leap year!!\n");
}else{
    printf("This year is not a leap year!!\n");
}

编写一个程序。请实现以下功能:输入三个数,分别为年、月、日,输出此日是该年的第几天。

输入:

XXX  XXX  XXX

输出:

此日是该年的第XXX 天

示例:

输入 2020 2 20

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

//创建年月日容器,并通过键盘注入值
int y,m,d;
printf("xxxx xx xx\n");
scanf("%d %d %d",&y,&m,&d);

//限制月份的输入
if(m < 0 || m > 12)
    printf("Err\n");
}

//限制日的输入
if(m == 1 || m == 3 || m = 5 || m = 7 || m = 8 || m = 10 || m = 12){
    if(day > 31)
        printf("Err!!\n");
}else if(m = 4 || m = 6 || m = 9 || m = 11){
    if(day > 30)
        printf("Err!!\n");
}else if(m == 2){
    //区分平年和闰年的2月天数,平年28天,闰年29天
    if(y % 400 == 0 && m > 29){
        printf("Err!!\n");
    }else if(y % 400 != 0 && m > 28){
        printf("Err!!\n");
    }
}

//以平年为基础计算天数
switch (m) {
    case 1:d = d;break;
    case 2:d = d + 31;break;
    case 3:d = d + 59;break;
    case 4:d = d + 90;break;
    case 5:d = d + 120;break;
    case 6:d = d + 151;break;
    case 7:d = d + 181;break;
    case 8:d = d + 212;break;
    case 9:d = d + 243;break;
    case 10:d = d + 273;break;
    case 11:d = d + 304;break;
    case 12:d = d + 334;break;
}

//闰年且二月后的情况,天数加1
if(y % 4 == 0 && y % 100 != 0 && m > 2)
    day += 1;
}

printf("这天是这一年的第%d天!\n",d);

编写一个程序。输入三角形的 三个边长

        判断能否构成三角形,如果能

            输出能构成三角形

            再输出是什么三角形

                等边 [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]

                普通

        如果不能

            输出不能构成三角形

//创建三边容器,并通过键盘注入数值
int a,b,c;
print("Enter three num : \n");
scanf("%d %d %d",&a,&b,&c);

//先判断能不能构成三角形
if(a + b < c || a + c < b || b + c < a){
    printf("Can not make a triangle!!\n");
} else{
    if(a == b && a == c){
        printf("Equilateral triangle,!\n");
    } else if((a == b && a != c)||(b == c && b != a)||(a == c && a != b)){
        printf("Isosceles triangle!\n");
    } else if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a){
        printf("Right triangle!\n");
    } else
        printf("Normal triangle!\n");
}

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

//创建a b c d的容器,并通过键盘注入值
int a,b,c,d;
printf("Enter a b c d : \n");
scanf("%d %d %d %d",&a ,&b,&c,&d);

//这里写法比较超纲,用了数组,如果用本章的知识,需要用if,我觉得这样太蠢了,以后也不会这么写
int num_arr[4] = {a,b,c,d};

//创建中间容器
int temp;
//使用了冒泡排序,所以从数据尾端遍历到数据前端,依次减少
for (int i = 3; i >= 0 ; --i) {
    //将最小值换到尾端
    //因为循环内对比的是当前位置和前一个位置,所以j的初始值为1而不是为0
    for (int j = 1; j < 4; ++j) {
        //将数据两两对比,前一个比后一个小则交换数据
        if(num_arr[j - 1] < num_arr[j]){
            temp = num_arr[j - 1];
            num_arr[j - 1] = num_arr[j];
            num_arr[j] = temp;
        }
    }
}

//for循环打印值
for (int i = 0; i < 4; ++i) {
    printf("%d ",num_arr[i]);
}
//保证数组在同一行输出
printf("\n");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值