26_2_2 作业题

2 阅读6分钟

 序号题目内容
1自增自减运算符综合计算(a、b、c 变量运算)
2for 循环 + if 判断(输出 i=5)
3嵌套 switch 语句执行结果分析
4strcmp 函数比较 "abc" 和 "cde"
5打印 1-100 中 3 的倍数
6三个整数从大到小输出
7判断输入的三边能否构成三角形及三角形类型
8计算 1/1-1/2+1/3-1/4+…+1/99-1/100 的值
9统计 1-100 的整数中数字 9 出现的个数
10打印 1000-2000 年之间的闰年
11找出 10 个整数中的最大值

一、基础运算与自增自减

题目 1:自增自减运算符综合计算

#include <stdio.h>
int main()
{
    int a, b, c;
    a = 5;
    c = ++a;  // 前置自增:a先变成6,再赋值给c → a=6, c=6
    // 逗号表达式:从左到右执行,赋值优先级高于逗号
    b = ++c, c++, ++a, a++;  // ++c→c=7,赋值给b;后续c++→8,++a7a++→先用7后变8
    b += a++ + c;  // b = 7 + (8 + 8) = 23a++先用8,后变成9
    printf("a = %d b = %d c = %d\n", a, b, c);  // 输出:a=9 b=23 c=8
    return 0;
}

​

考点:前置 / 后置自增(++a/a++)、逗号表达式、赋值运算符优先级。

二、循环与分支结构

题目 2:for 循环 + if 判断

#include <stdio.h>
int main()
{
    int i = 0;
    for (i = 1; i < 10; i++)
    {
        if (i == 5)  // 注意:=是赋值,==是判断,此处修正原注释错误
            printf("%d ", i);  // 仅当i=5时打印
        else 
            continue;  // 其他情况跳过本次循环
    }
    return 0;  // 输出:5
}

​

考点:for 循环、continue 语句、相等判断(==)与赋值(=)的区别。

题目 3:嵌套 switch 语句

#include <stdio.h>
int main() {
    int x = 3;
    int y = 3;
    switch (x % 2) {  // 3%2=1,进入case 1
    case 1:
        switch (y) {  // y=3,无匹配case,进入default
        case 0:
            printf("first\n");
        case 1:
            printf("second\n");
            break;
        default: 
            printf("hello\n");  // 输出hello(无break,继续执行外层case 2)
        }
    case 2:
        printf("third");  // 输出third
    }
    return 0;  // 最终输出:hello third
}

​

考点:switch-case 语句、break 的作用(无 break 会 “穿透” 到下一个 case)。

题目 4:打印 1-100 中 3 的倍数

#include <stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=100;i++){
        if(i%3==0){  // 判断是否为3的倍数(取模等于0)
            printf("%d ",i);
        }
    }
    return 0;  // 输出:3 6 9 ... 99
}

​

考点:for 循环、取模运算(%)、条件判断。

题目 5:1000-2000 年闰年判断

#include <stdio.h>
int main()
{
    int year;
    for(year=1000;year<=2000;year++){
        // 闰年规则:能被4整除且不能被100整除,或能被400整除
        if ((year%4==0 && year%100!=0) || (year%400==0))
            printf("%d ",year);
    }
    return 0;
}

​

考点:闰年判断逻辑、逻辑运算符(&&/||)。

三、字符串操作

题目 6:strcmp 字符串比较

#include <stdio.h>
#include <string.h> 
int main()
{
    // strcmp规则:前串<后串返回负数,相等返回0,前串>后串返回正数
    int ret = strcmp("abc","cde");  // "abc" < "cde",返回负数(通常是-1)
    printf("%d\n",ret);  // 输出:-1(不同编译器可能略有差异)
    return 0;
}

​

考点:字符串比较函数strcmp的使用(需包含string.h)。

四、数值处理

题目 7:三个整数从大到小排序

#include <stdio.h>
int main()
{
    int a,t;
    int b;
    int c;
    scanf("%d %d %d",&a,&b,&c);
    // 第一步:确保a≥b
    if(a<b){
        t=a;
        a=b;
        b=t;
    }
    // 第二步:确保a≥c(此时a是最大值)
    if(a<c){
        t=a;
        a=c;
        c=t;
    }
    // 第三步:确保b≥c(此时b是次大值,c是最小值)
    if(b<c){
        t=b;
        b=c;
        c=t;
    }
    printf("%d %d %d",a,b,c);  // 输入示例:3 1 2 → 输出:3 2 1
    return 0;
}

​

考点:变量交换、多条件排序逻辑。

题目 8:1-100 数字中 9 的个数统计

#include <stdio.h>
int main()
{
    int sum=0;
    for(int i=1;i<=100;i++){
        if(i%10==9){  // 统计个位为9的数(9,19,...,99)→ 10个
            sum++;
        } 
        if(i/10==9){  // 统计十位为9的数(90-99)→ 10个(99会被统计两次)
            sum++;
        } 
    }
    printf("%d",sum);  // 输出:20
    return 0;
}

​

考点:数位拆分(个位i%10、十位i/10)、重复计数处理。

题目 9:10 个整数找最大值

#include <stdio.h>
int main()
{
    int i, max;
    int arr[10]; 
    printf("请输入10个整数:\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }

    max = arr[0];  // 初始化最大值为数组第一个元素
    for (i = 1; i < 10; i++)
    {
        if (arr[i] > max)
        {
            max = arr[i];  // 更新最大值
        }
    }
    printf("这10个整数中的最大值是:%d\n", max);  // 输入示例:1 5 3 9 2 → 输出:9
    return 0;
}

​

考点:数组遍历、最大值初始化与更新。

五、数学逻辑判断

题目 10:三角形类型判断

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    // 先判断是否能构成三角形(任意两边之和大于第三边)
    if((a+b<=c) || (a+c<=b) || (b+c<=a)){
        printf("Not a triangle!");
    } 
    // 再判断等边三角形(需优先于等腰判断)
    else if(a==b && b==c){
        printf("Equilateral triangle!");
    }
    // 再判断等腰三角形
    else if((a==b) || (a==c) || (b==c)){
        printf("Isosceles triangle!");
    }
    // 最后是普通三角形
    else {
        printf("Ordinary triangle!");
    }
    return 0;
    // 输入示例1:1 2 3 → 输出:Not a triangle!
    // 输入示例2:3 3 3 → 输出:Equilateral triangle!
    // 输入示例3:3 3 4 → 输出:Isosceles triangle!
    // 输入示例4:3 4 5 → 输出:Ordinary triangle!
}

​

考点:三角形构成条件、多分支判断的优先级。

题目 11:分数交替求和(1/1 - 1/2 + 1/3 - 1/4 + ... + 1/99 - 1/100)

#include <stdio.h>
int main()
{
    double sum=0.0;  // 必须用浮点型(int会丢失小数)
    int flag=1;  // 符号标记:1为正,-1为负
    for(int i=1;i<=100;i++){
        sum = sum + 1.0 * flag / i;  // 1.0确保浮点运算,避免整数除法
        flag = -flag;  // 交替改变符号
    }
    printf("%lf\n",sum);  // 输出:0.688172(近似值)
    return 0;
}

​

考点:浮点运算、符号交替控制、循环累加。

总结

  1. 核心语法:自增自减、循环(for)、分支(if/switch)、数组是 C 语言基础核心,需掌握优先级和执行逻辑;
  2. 运算细节:整数 / 浮点运算的区别(分数求和需用double)、取模(%)用于倍数 / 数位判断;
  3. 逻辑优先级:多条件判断(如三角形类型)需注意顺序(先判断 “否”,再判断特殊情况,最后普通情况)。