2022年-2024年春考技能测试网络技术+软件与应用技术真题

2025年模拟题

题型1:数组元素排序

  • 1.输入5个随机整数存入数组,将元素从小到大排序并输出,每行输出1个数字
#include <stdio.h>

int main(){
    int a[5] = {0};
    int i = 0, j = 0, temp = 0;

    printf("请输入数组元素:\n");
    for(i = 0;i < 5;i++){
        scanf("%d", &a[i]);
    }

    for(i = 0; i < 4; i++){
        for(j = i + 1; j < 5; j++){
            if(a[i] > a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }

    for(i = 0;i < 5;i++){
        printf("%d\n", a[i]);
    }

    return 0;
}


#include <stdio.h>

int main(){
    int a[5] = {0};
    int i = 0, j = 0, temp = 0;

    printf("请输入数组元素:\n");
    for(i = 0; i < 5; i++){
        scanf("%d", &a[i]);
    }

    for(i = 0; i < 4; i++){
        for(j = 0; j < 5 - i - 1; j++){
            if(a[j] > a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }

    for(i = 0;i < 5;i++){
        printf("%d\n", a[i]);
    }

    return 0;
}


#include <stdio.h>

int main(){
    int a[5] = {0};
    int i = 0, j = 0, temp = 0, flag = 0;

    printf("请输入数组元素:\n");
    for(i = 0;i < 5;i++){
        scanf("%d", &a[i]);
    }

    for(i = 0;i < 4;i++){
        flag = 0;
        for(j = 0;j < 5 - i - 1; j++){
            if(a[j] > a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
                flag = 1;
            }
        }
        if(!flag){
	        break;
        }
    }

    for(i = 0;i < 5;i++){
        printf("%d\n", a[i]);
    }

    return 0;
}

题型2:进制转换

  • 2.输入一个合法的八进制正整数,转为十进制并输出
#include <stdio.h>  // 方法1

int main(){
    int num = 0, a = 0;
    int t = 1, sum = 0;

    printf("请输入一个合法的八进制数:\n");
    scanf("%d", &num);

    while(num){
        a = num % 10;
        sum = sum + a * t;
        num /= 10;
        t *= 8;
    }
    printf("sum=%d\n", sum);

    return 0;
}


#include <stdio.h>  // 方法2
#include <math.h>

int main(){
    int num = 0, a = 0;
    int t = 0, sum = 0;

    printf("请输入一个合法的八进制数:\n");
    scanf("%d", &num);

    while(num){
        a = num % 10;
        sum = sum + a * pow(8, t);
        num /= 10;
        t++;
    }
    printf("sum=%d", sum);

    return 0;
}

题型3:处理字符串

  • 3.输入一个字符串,长度不超过100个字符,再输入一个整数n,从字符串右边截取n个字符组成新的字符串并输出。例如输入 ABCDEF 3,则输出DEF
#include <stdio.h>
#define MAX 100

int main(){
    char s[MAX] = {0}, t[MAX] = {0};
    int num = 0, length = 0, i = 0, j = 0;

    printf("请输入一个字符串:");
    gets(s);
    printf("请输入一个整数:");
    scanf("%d", &num);

    while(s[i] != '\0'){
        i++;
    }
    length = i;
    i = length - num;
    while(s[i] != '\0'){
        t[j] = s[i];
        i++;
        j++;
    }
    t[j] = '\0';
    puts(t);

    return 0;
}

2024年考题回忆版

题型1:简单的多位数拆分 题源:课本例2-20

  • 1.输入一个三位数的整数,输出百位数、十位数和个位数
#include <stdio.h>

int main(){
    int num = 0;
    int hundred = 0, ten = 0, unit = 0;
    scanf("%d", &num);
    	
    hundred = num / 100;  // 求百位数
    ten = num / 10 % 10;  // 求十位数
    unit = num % 10;  // 求个位数
    	
    printf("%d %d %d", hundred, ten, unit);
    	
    return 0;
}  
  • 2.输入一个整数,求出个位数和十位数,并输出十位和个位的乘积
#include <stdio.h>

int main(){
    int num = 0;
    int ten = 0, unit = 0, multi = 0;
    scanf("%d", &num);
    	
    ten = num / 10 % 10;
    unit = num % 10;
    multi = ten * unit;
    printf("%d %d %d", ten, unit, multi);
	
    return 0;
}

题型2:多位数拆分+循环 题源:课本例2-18 例4-3

  • 1.输出100以内能被4整除且个位数是8的整数
#include <stdio.h>

int main(){
    int num = 0, unit = 0;
	
    for(num = 8; num <= 100; num++){
        unit = num % 10;
        if (num % 4 == 0 && unit == 8){
            printf("%d ",num);
        }
    } 
    return 0;
}
  • 2.打印由0-9组成且每一位都不重复的三位数的个数
#include <stdio.h>

int main(){
    int num = 0;
    int unit = 0, ten = 0, hundred = 0;
    int count = 0;
	
    for(num = 100; num <= 999; num++){
        unit = num % 10;
        ten = num / 10 % 10;
        hundred = num / 100;
		
        if(unit != ten && unit != hundred && ten != hundred){
            printf("%d ", num);
            count ++;
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
} 


#include <stdio.h>

int main(){
    int i = 0, j = 0, k = 0;
    int count = 0;

    for(i = 1; i <= 9; i++){
        for(j = 0; j <= 9; j++){
            for(k = 0; k <= 9; k++){
                if(i != j && i != k && j != k){
                    printf("%d ", i * 100 + j * 10 + k);
                    count++;
                }
            }
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
} 
  • 3.输出10-50中个位和十位的乘积大于个位和十位之和的数
#include <stdio.h>

int main(){
    int num = 0, unit = 0, ten = 0;
	
    for(num = 10; num <= 50; num++){
        unit = num % 10;
        ten = num / 10 % 10;
        if(unit * ten > unit + ten){
            printf("%d ", num);
        }
    }
	
    return 0;
}
  • 4.打印输出10-1000中各位数之和等于10的整数,如19、190
#include <stdio.h>

int main(){
    int num = 0, b = 0;
    int t = 0, sum = 0;
    	
    for(num = 10; num <= 1000; num++){
        t = num;
        sum = 0;
    		
        while(t){
            b = t % 10;
            sum = sum + b;
            t = t / 10;
        }
        if(10 == sum){
            printf("%d ", num);
        }
    }
    	
    return 0;
}  
  • 5.打印输出100-999中各位数之和等于10的整数的个数
#include <stdio.h>

int main() {
    int num = 0, count = 0;;
    int unit = 0, ten = 0, hundred = 0;
    	
    for(num = 100; num <= 999; num++){
        unit = num % 10;
        ten = num / 10 % 10;
        hundred = num / 100;
        if(unit + ten + hundred == 10){
            count++;
        }
    }
    printf("各位数之和等于10的有%d个", count);
    	
    return 0;
}
  • 6.输出100-999中百位数为7的数
#include <stdio.h>

int main(){
    int num = 0, hundred = 0;
    	
    for(num = 100; num <= 999; num++){
        hundred = num / 100;
    		
        if(7 == hundred){
            printf("%d ", num);
        }
    }
    	
    return 0;
} 
  • 7.打印1-100中能被3和7同时整除的数,并计算个数
#include <stdio.h>

int main(){
    int i = 0, count = 0;
    	
    for(i = 1; i <= 100; i++) {
        //if(i%3 == 0&&i%7 == 0) {
        //	printf("%-4d", i);
        //	count++;
        //}
        if(i % 21 == 0) {
            printf("%-4d", i);
            count++;
        }
    }
    printf("共%d个", count);
		
    return 0;
}

题型3:给定数值进行组合+循环

  • 1.一个由x、y、z三个数字组成的数xyz和zyx相加得1555,求x、y、z
// 在满足条件的数中,x和z全不为0,因此x和y从1开始循环即可
#include <stdio.h>

int main(){
    int x = 0, y = 0, z = 0;
    int i = 0, j = 0;

    for(x = 1; x <= 9; x++){
        for(y = 0; y <= 9; y++){
            for(z = 1;z <= 9; z++){
                i = x * 100 + y * 10 + z;
                j = z * 100 + y * 10 + x;
                if(i + j == 1555){
                    printf("%d %d %d\n", x, y, z);
                }
            }
        }
    }

    return 0;
}
  • 2.打印10-99之间个位和十位相加不小于13的数
#include <stdio.h>

int main(){
    int i = 0, unit = 0, ten = 0;

    for(i = 10; i <= 99; i++) {
        unit = i % 10;
        ten = i / 10;
        // ten = i / 10 % 10;
        if(unit + ten >= 13) {
            printf("%-4d", i);
        }
    }	

    return 0;
}
  • 3.打印1-99之间是3的倍数且是奇数的元素
// 方法1:遍历1-99之间的所有数
#include <stdio.h>

int main(){
    int i = 0;

    for(i = 1; i <= 99; i++) {
        if(i % 3 == 0 && i % 2 == 1) {
            printf("%-4d", i);
        }
    }	
    return 0;
}

// 方法2:遍历1-99之间的所有奇数
#include <stdio.h>

int main(){
    int i = 0;

    for(i = 1; i <= 99; i+=2) {
        if(i % 3 == 0) {
            printf("%-4d", i);
        }
    }	

    return 0;
}

题型4:数组+奇偶数/最值

  • 1.输入两行单词,输出下标为奇数的部分字符
#include <stdio.h> 
#define MAX 1000

void print_odd(char s[]){
    int i = 0;

    while(s[i] != '\0'){
        if(i % 2){
            putchar(s[i]);
        }
        i++;
    }
}

int main(){
    char s1[MAX] = {0}, s2[MAX] = {0};
    printf("请输入s1和s2的值:");
    gets(s1);
    gets(s2);

    print_odd(s1);
    print_odd(s2);

    return 0;
}
  • 2.给定一个数组s存储字符串,从中获取ASCII码为奇数的字符并输出
#include <stdio.h>
#define MAX 1000

int main(){
    char s[MAX] = {0};
    int i = 0;
    printf("请输入字符串的值:");
    gets(s);

    while(s[i] != '\0'){
        if(s[i] % 2){
            putchar(s[i]);
        }
        i++;
    }

    return 0;
} 
  • 3.将整数数组a[10]中的偶数放在数组b中
#include <stdio.h>
#define LEN 10

int main(){
    int i = 0, j = 0, index = 0;
    int a[LEN] = {12, 63, 51, 7, 24, 10, 78, 67, 51, 90}, b[LEN] = {0};
    for(i = 0; i < LEN; i++){
        if(a[i] %2 == 0){
            b[j] = a[i];
            j++;
        }
    }

    printf("数组b中的值为: ");
    for(index = 0; index < j; index++){
        printf("%d ", b[index]);
    }

    return 0;
} 
  • 4.现有一3行4列的二维数组,将数组的最大值和最小值交换位置后输出新的数组
#include <stdio.h>
#define ROW 3
#define COL 4

int main(int argc, const char * argv[]) {
    // insert code here...
    int a[ROW][COL] = {{4, 6, 12, 7}, {1, 5, 3, 9}, {11, 8, 0, -2}};
    int max = 0, min = 0, i = 0, j = 0;
    int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;

    max = min = a[0][0];
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            if (a[i][j] > max) {
                max = a[i][j];
                max_i = i;
                max_j = j;
            }
            if (a[i][j] < min){
                min = a[i][j];
                min_i = i;
                min_j = j;
            }
        }
    }

    printf("原数组最大值为%d (%d, %d), 最小值为%d (%d, %d)\n", max, max_i, max_j, min, min_i, min_j);

    temp = a[max_i][max_j];
    a[max_i][max_j] = a[min_i][min_j];
    a[min_i][min_j] = temp;

    printf("交换后新数组的值为:\n");
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

  • 5.现有一4行5列的二维数组,请将每一列上的最大数和最小数互换,然后输出新数组
#include <stdio.h>
#define ROW 4
#define COL 5

void print_arr(int s[][5], int m) {
    int i = 0, j = 0;
    for (i = 0; i < m; i++) {
        for (j = 0; j < COL; j++) {
            printf("%4d", s[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int a[ROW][COL] = {{4, 7, 2, 10, 11}, {6, 3, 25, 12, 8}, {3, 5, 9, 15, 0}, {14, 13, 17, 1, 27}};
    int i = 0, j = 0, max = 0, min = 0;
    int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;

    printf("交换之前的数组为:\n");
    print_arr(a, ROW);

    for (j = 0; j < COL; j++) {
        max = min = a[0][j];
        max_i = min_i = 0;
        max_j = min_j = j;
        for (i = 1; i < ROW; i++) {
            if (a[i][j] > max) {
                max = a[i][j];
                max_i = i;
                max_j = j;
            }
            if (a[i][j] < min) {
                min = a[i][j];
                min_i = i;
                min_j = j;
            }
        }
        temp = a[max_i][max_j];
        a[max_i][max_j] = a[min_i][min_j];
        a[min_i][min_j] = temp;
    }

    printf("\n交换之后的数组为:\n");
    print_arr(a, ROW);

    return 0;
}

  • 6.已知数组a[10]中各元素的值,计算其中正数的平均值
#include <stdio.h>

int main(){
    int a[10] = {-6, 33, 5, 21, 43, -39, -1, 0, 21, -7};
    int i = 0, count = 0;
    float avg = 0;

    for(i = 0; i < 10; i++) {
        if(a[i] > 0) {
            avg += a[i];
            count++;
        }
    }
    avg /= count;

    printf("数组中正数的平均值为:%.4f\n", avg);

    return 0;
}

题型5:简单的数学运算+循环

  • 1.输入整数n,打印输出1-n的阶乘
#include <stdio.h>
#include <math.h>
long func(int);

int main(){
    long ret = 0;
    int i = 0, n = 0;
    printf("请输入整数n的值:");
    scanf("%d", &n);

    for(i = 1; i <= n; i++){
        ret = func(i);
        printf("%d的阶乘值为: %ld\n", i, ret); // long类型数据输入和输出都使用%ld格式符
    }

    return 0; 
}

long func(int m){
    long result = 1;
    int i = 0;

    for(i = 1; i <= m; i++){
        result *= i;
    }

    return result;
}
  • 2.输入1-9其中的某个整数n,计算n + nn + nnn + nnnn。如果输入的n不在1-9之间(含1-9),就提示"输入的数据范围不合法,请重新输入!",直到输入满足的n,计算出结果后退出程序。
#include <stdio.h>
int main(){
    int num = 0, t = 0;
    int sum = 0, i = 0;
    printf("请输入num的值(1-9):\n");
    scanf("%d", &num);

    while(1){
        if(num < 1 || num > 9){
            printf("输入的数据范围不合法,请重新输入!\n");
            scanf("%d", &num);
            continue;
        }

        t = num;
        for(i = 1; i <= 4; i++){
            sum = sum + t;
            t = t * 10 + num;
        }
        printf("sum=%d", sum);
        break;
    } 

    return 0;
}
  • 3.小明参加了卖书活动,每本书18元,第一天卖3本,以后每一天卖书的数量都是前一天的2倍,哪一天卖书的收入会超过1000元
#include <stdio.h>

int main(){
    int day=1, num=3;
    int price=18, money;
    money = price*num;

    while(money <= 1000){
        num *= 2;// 6 12
        money = price * num;//108 216
        day++;//2 3
    }
    printf("day=%d", day);

    return 0;
}
  • 4.输入整数n,计算12 + 22 + 32 + ... + n2的结果
#include <stdio.h>

int main(){
    int i, n, sum = 0.0;
    printf("请输入n的值:\n");
    scanf("%d", &n);

    for(i=1;i<=n;i++){
        sum = sum + i * i;
    }
    printf("sum=%d", sum);

    return 0;
}
  • 5.用户一直输入一个整数,计算它们的和,直到输入的数不大于0就结束
#include <stdio.h>

int main(){
    int num = 0, sum=0;
    printf("请输入一个整数:");
    scanf("%d", &num);

    while(num > 0){
        sum += num;
        printf("请继续输入一个整数, 直到不大于0停止:");
        scanf("%d", &num);
    } 
    printf("sum=%d\n", sum);

    return 0;
}
  • 6.小明的身高为1.5米,一张纸的厚度为1毫米,请问这张纸对折多少次后的厚度会超过小明的高度?
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    int h1 = 1500, h2 = 1, count = 0;
    while (h2 <= h1) {
        h2 *= 2;  // 2 4
        count++;  // 1 2
    }
    printf("总共折了%d次\n", count);

    return 0;
}

题型6:简单的数学运算+循环+数组

  • 1.有一个3行4列的整型数组,输出其中的最大值
#include <stdio.h>
#define ROWS 3
#define COLS 4

int main(){
    int a[ROWS][COLS] = {0};
    int i = 0, j = 0, max = 0;

    for(i = 0; i < ROWS; i++){
        for(j = 0; j < COLS; j++){
            scanf("%d", &a[i][j]);
        }
    }

    max = a[0][0];
    for(i = 0; i < ROWS; i++){
        for(j = 0; j < COLS; j++){
            if(a[i][j] > max){
                max = a[i][j];
            }
        }
    }
    printf("max=%d\n", max);

    return 0;
}
  • 2.输入十个数,计算平均数,结果保留4位小数
#include <stdio.h>

int main(){
    float a[10] = {0}, sum = 0, avg = 0;
    int i = 0;

    for(i = 0; i < 10; i++){
        // scanf("%f", a+i);
        scanf("%f", &a[i]);
        sum += a[i];
    }
    avg = sum/10;
    printf("avg=%.4f\n", avg);

    return 0;
}
  • 3.现有三行四列的二维数组,找到最小的数并输出行列号
#include <stdio.h>
#define ROWS 3
#define COLS 4

int main(){
    int a[ROWS][COLS] = {0}, i = 0, j = 0;
    int min = 0, row = 0, col = 0;

    for(i = 0; i < ROWS; i++){
        for(j = 0; j < COLS; j++){
            scanf("%d", &a[i][j]);
        }
    }

    min = a[0][0];
    for(i = 0; i < ROWS; i++){
        for(j = 0; j  < COLS; j++){
            if(a[i][j] < min){
                min = a[i][j];
                row = i;
                col = j;
            }
        }
    }
    printf("min=%d,row=%d,col=%d\n", min, row, col);

    return 0;
}
  • 4.输入三行四列二维数组的值,将每行的平均值放在一个一维数组中并输出
#include <stdio.h>
int main(){
    int a[3][4] = {0}, i = 0, j = 0;
    float avg[3] = {0};

    for(i = 0; i < 3; i++){
        for(j = 0; j < 4; j++){
            scanf("%d", &a[i][j]);
            avg[i] += a[i][j];
        }
        avg[i] /= 4;
        printf("第%d行的平均值为%f", i+1, avg[i]);
    } 

    return 0;
}
  • 5.现有5名员工,每名员工的信息包含员工号、时薪和工作时间计算每位员工的总工资并输出
#include <stdio.h>
int main(){
    int employee[5][3] = {{101, 80, 8}, {102, 60, 12}, {103, 62, 10}, {104, 45, 16}, {105, 120, 8}};
    int i = 0, salary = 0;

    for(i = 0; i < 5; i++){
        salary = employee[i][1] * employee[i][2];
        printf("工号为%d的员工总工资为%d\n", employee[i][0], salary);
    }

    return 0;
}

题型7:选择语句的简单应用

  • 1.输入两个整数,从小到大输出
#include <stdio.h>

int main(){
    int a = 0, b = 0, temp = 0;
    scanf("%d %d", &a, &b);

    if(a > b){
        temp = a;
        a = b;
        b = temp;
    }
    printf("%d %d\n", a, b); 

    return 0;
}
  • 2.输入三条边,判断能否构成三角形。如果是三角形,判断能否构成直角三角形
#include <stdio.h>

int main(){
    int a = 0, b = 0, c = 0;
    printf("请输入三条边的值:\n");
    scanf("%d %d %d", &a, &b, &c);

    if(a + b > c && a + c > b && b + c > a){
        printf("能构成三角形\n");
        if(a * a + b * b == c * c || b * b + c * c == a * a || a * a + c * c == b * b){
            printf("是直角三角形\n");
        } 
    }
    else{
        printf("不是三角形\n");
    }

    return 0;
}
  • 3.输入三个整数,输出三个数之间的最大值
#include <stdio.h>

int main(){
    int a = 0, b = 0, c = 0, temp = 0;
    scanf("%d %d %d", &a, &b, &c);

    if(a < b){
        temp = a;
        a = b;
        b = temp;
    }
    if(a < c){
        temp = a;
        a = c;
        c = temp;
    }
    printf("最大的数是%d\n", a);

    return 0;
}


#include <stdio.h>

int main(){
    int a = 0, b = 0, c = 0, max = 0;
    scanf("%d %d %d", &a, &b, &c);

    max = (max = a < b? b : a) < c? c : max;
    printf("最大的数是%d\n", max);

    return 0;
}

题型8:选择结构应用题

  • 1.小明参与图书促销活动,每本书价格40元。周一到周五打七折,周六打八折,周日打九折。输入当周第几天和图书数,输出价格
#include <stdio.h>
int main(){
    int price = 40, day = 0, num = 0;
    float money = 0;
    scanf("%d %d", &day, &num);

    switch(day){
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            money = price * 0.7 * num;
            break;
        case 6:
            money = price * 0.8 * num;
            break;
        case 7:
            money = price * 0.9 * num;
            break;
    }
    printf("money=%f\n", money);

    return 0;
}
  • 2.输入1打印开,输入2打印关,输入其他数字打印默认
#include <stdio.h>

int main(){
    char sw = getchar();
    switch(sw){
        case '1':
            printf("开");
            break;
        case '2':
            printf("关");
            break;
        default:
            printf("默认");
            break;
    }

    return 0;
}
  • 3.输入近视度数,判断是不是近视。度数低于100是不近视,不低于100但低于300就是轻度近视,度数不低于300但低于500就是中度近视,度数高于500就是高度近视
#include <stdio.h>

int main(){
    int num = 0;
    printf("请输入近视度数:\n");
    scanf("%d", &num);

    if(num < 100){
        printf("不近视\n");
    } 
    else if(num < 300){
        printf("轻度近视\n");
    }
    else if(num < 500){
        printf("中度近视\n");
    }
    else{
        printf("重度近视\n");
    }
    return 0;
} 
  • 4.输入时间等于9是打开窗帘,等于8是关闭窗帘,其他输出报错
#include <stdio.h>

int main(){
    int time = 0;
    scanf("%d", &time);

    switch(time){
        case 9:
            printf("打开窗帘");
            break;
        case 8:
            printf("关闭窗帘");
            break;
        default:
            printf("报错");
            break;
    }

    return 0;
}

题型9:二维数组应用题+循环

  • 1.有三家商店,以及每个商店四个月的销量,计算出月销量的平均值,并确定哪一家商店是销冠
#include <stdio.h>

int main(){
    float a[3][4] = {0};
    int i = 0, j = 0, max = 0;
    float sum_store[3] = {0}, avg_month[4] = {0}, max_store = 0;

    for(i = 0; i < 3; i++){
        for(j = 0; j < 4; j++){
            scanf("%f", &a[i][j]);
        }
    }

    for(i = 0; i < 4; i++){
        for(j = 0; j < 3; j++){
            avg_month[i] += a[j][i];
        }
        avg_month[i] /= 3;
        printf("%d月的平均销量为%f\n", i + 1, avg_month[i]);
    }

    max_store = sum_store[0];
    for(i = 0; i < 3; i++){
        for(j = 0; j < 4; j++){
            sum_store[i] += a[i][j];
        }
        if(sum_store[i] > max_store){
            max_store = sum_store[i];
            max = i;
        }
    }
    printf("销量冠军是%d号公司,销售额为%f\n", max + 1, max_store);

    return 0;
}
  • 2.定义二维数组,其中包含三名同学五门课的成绩,输出每门课的最大成绩
#include <stdio.h>

int main(){
    float a[3][5] = {0}, max = 0;
    int i = 0, j = 0;

    for(i = 0; i < 3; i++){
        for(j = 0; j < 5; j++){
            scanf("%f", &a[i][j]);
        }
    } 

    for(i = 0; i < 5; i++){
        max = a[0][i];
        for(j = 1; j < 3; j++){
            if(a[j][i] > max){
                max = a[j][i];
            }
        }
        printf("第%d门课的最大成绩为%f\n", i + 1, max);
    } 
        
    return 0;
}
  • 3.现有三个运动员,每位运动员都有五个项目成绩,求每个项目的最高成绩
#include <stdio.h>

int main(){
    float score[3][5] = {0}, max = 0;
    int i = 0, j = 0;

    for(i = 0; i < 3; i++){
        for(j = 0; j < 5; j++){
            scanf("%f", &score[i][j]);
        }
    } 

    for(i = 0; i < 5; i++){
        max = score[0][i];
        for(j = 1; j < 3; j++){
            if(score[j][i] > max){
                max = score[j][i];
            }
        }
        printf("第%d门课的最大成绩为%f\n", i + 1, max);
    }     

    return 0;
}
  • 4.现有三条街,每条街上都有五个路灯,用0表示关灯,1表示开灯。实现输入字符c查看路灯状态,输入字符d将路灯状态置反,输入字符q退出程序
#include <stdio.h>

void process_arr(int s[][5], int m, char ch){
    int i = 0, j = 0;
    for(i = 0; i < m; i++){
        for(j = 0; j < 5; j++){
            if(ch == 'c'){
                printf("%d ", s[i][j]);
            }
            else if(ch == 'd'){
                if(s[i][j] == 0){
                    s[i][j] = 1;
                }
                else{
                    s[i][j] = 0;
                }
            }
        }
        printf("\n");
    }
}
int main(){
    int a[3][5] = {{0, 0, 1, 0, 0}, {0, 1, 1, 0, 0}, {1, 0, 0, 1, 1}}, i, j;
    char ch = 0;
    printf("请输入字符(c:查看状态 d:状态置反 q:退出程序):");
    scanf("%c", &ch);

    switch(ch){
        case 'c':
            printf("正在查看路灯状态...\n");
            process_arr(a, 3, ch);
            break;
        case 'd':
            printf("正在置反路灯状态...\n");
            process_arr(a, 3, ch);
            printf("置反后的路灯状态为:\n");
            process_arr(a, 3, 'c');
            break;
        case 'q':
            printf("正在退出程序...已退出...\n");
            break;
        default:
            printf("输入的字符错误!\n");	
            break;
    }	
    return 0;
}
  • 5.在二维数组中输入两个人的身份证号,打印出生年月,并比较两人年龄的大小
#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    char id[2][19] = {0}, birth[2][9] = {0};
    int i = 0, j = 0, k = 0;
    printf("请输入2人的身份证号信息:\n");
    gets(id[0]);
    gets(id[1]);

    for (i = 0; i < 2; i++) {
        k = 0;
        for (j = 6; j < 14; j++) {
            birth[i][k] = id[i][j];
            k++;
        }
        // birth[i][k] = '\0';
    }
    puts(birth[0]);
    puts(birth[1]);

    if (strcmp(birth[0], birth[1]) < 0) {
        printf("第1个人的年龄更大\n");
    }
    else if (strcmp(birth[0], birth[1]) > 0) {
        printf("第2个人的年龄更大\n");
    }
    else {
        printf("两人的年龄一样大\n");
    }
    return 0;
}

题型10:字符数组中字符的前后移动+循环

  • 1.现有9个已经按照升序排完的字母放在一维数组中,添加一个字母到数组中并依然有序,输出新数组
#include <stdio.h>
#include <string.h>
#define MAX 11

int main(){
    char s[MAX] = {'a', 'c', 'f', 'g', 'k', 'p', 'q', 'r', 'x'}, c = 0;
    int i = 0, length = strlen(s);
    i = length - 1;

    printf("请输入一个新的字符:\n");
    c = getchar();

    while(i >= 0 && s[i] > c){
        s[i+1] = s[i];
        i--;
    }
    s[i+1] = c;
    length ++;
    puts(s);

    return 0;
}
  • 2.输入一串含*的字符串,将最后一个*后方的所有字符往前移动一个字符单位
#include <stdio.h>
#include <string.h>
#define MAX 100

int main(){
    char s[MAX] = {0}, i = 0;
    printf("请输入一串带*的字符串:\n");
    gets(s);
    int length = strlen(s);

    if(s[length-1] == '*'){
        printf("无需移动");
        return 0;
    }

    i = length - 1;
    while(i >= 0 && s[i] != '*'){
        i--;
    }
    while(i <= length - 1){
        s[i] = s[i+1];
        i++;
    }
    puts(s);

    return 0;
}
  • 3.输入字符串,将其中的大写字母统一后移4位
#include <stdio.h>
#include <string.h>
#define MAX 100

int main(){
    char s[MAX] = {0}, i = 0;
    printf("输入一个字符串:\n");
    gets(s);
    int length = strlen(s);
    i = length - 1;
    s[length] = ' '; 

    while(i >= 0){
        if(s[i] >= 'A'&& s[i] <= 'Z'){
            s[i + 4] = s[i];
            s[i] = ' ';
        }
        i--;
    }

    s[length + 4] = '\0';
    //puts(s);
    for(i = 0; i < length + 4; i++){
        printf("%c", s[i]);
    }

    return 0;
}
  • 4.在数组中输入5个互不相同的正整数,找出其中的最大值删除后并输出新数组的值
#include <stdio.h>
#define LEN 5

int main(){
    int a[5] = {0}, i = 0;
    int max = 0, index = 0;

    printf("输入数组的值:\n");
    for(i = 0; i < 5; i++){
        scanf("%d", &a[i]);
    }

    max = a[0];
    index = 0;
    for(i = 1; i < 5; i++){
        if(a[i] > max){
            max = a[i];
            index = i;
        }
    }

    while(index <= LEN - 2){
        a[index] = a[index + 1];
        index++;
    }

    for(i = 0; i < length - 1; i++){
        printf("%d ", a[i]);
    }
	
    return 0;
}

题型11:字符串特征判断+循环

  • 1.输入一串字符,长度不超过20,判断是否是回文数组
#include <stdio.h>
#include <string.h>
#define MAX 21

int main(){
    char s[MAX] = {0}, i = 0, j = 0;
    printf("请输入不超过20的字符串:\n");
    gets(s);

    j = strlen(s) - 1;
    while(i < j){ // while(i <= j)
        if(s[i] != s[j]){
            printf("不是回文数组!\n");
            return -1;
        }
        i++;
        j--;
    }
    printf("是回文数组!");

    return 0;
}
  • 2.输入一串字符,判断是字母还是数字还是其他字符
#include <stdio.h>
#define MAX 100

int main(){
    char s[MAX] = {0}, t = 0;
    int i = 0, alpha_flag = 0, num_flag = 0, other_flag = 0; 
    printf("请输入一串字符串:\n");
    gets(s);

    while(s[i] != '\0'){
        t = s[i];
        if(alpha_flag == 0&&((t>='A'&&t<='Z')||(t>='a'&&t<='z'))){
            alpha_flag = 1;
        }
        else if(num_flag == 0&&(t>='0'&&t<='9')){
            num_flag = 1;
        }
        else if(other_flag == 0&&(t<48||(t>57&&t<65)||(t>90&&t<97)||t>122)){
            other_flag = 1;
        }
        i++;
    }
    	
    if(alpha_flag==1&&num_flag==0&&other_flag==0){
        printf("是字母字符串");
    }
    else if(alpha_flag==0&&num_flag==1&&other_flag==0){
        printf("是数字符串");
    }
    else if(alpha_flag==0&&num_flag==0&&other_flag==1){
        printf("是其他字符串");
    }
    else{
        printf("是混合符串");
    } 
    return 0;
}
  • 3.输入数组a[5]、b[5]的值,如果a[i]与b[i]的和能被4整除就将这两个数存到数组c中,否则将和乘以4后输出
#include <stdio.h>
#define MAX 5

void input_arr(int x[], int n){
    int i = 0;

    for(i = 0; i < n; i++){
        scanf("%d", x + i);
    }
}

void print_arr(int x[], int n){
    int i = 0;

    for(i = 0; i < n; i++){
        printf("%d ", x[i]);
    }
}

int main(){
    int a[MAX] = {0}, b[MAX] = {0}, c[MAX*2] = {0};
    int i = 0, j = 0, sum = 0;

    printf("请输入数组a的值:");
    input_arr(a, MAX); 
    printf("请输入数组b的值:");
    input_arr(b, MAX);

    for(i = 0; i < MAX; i++){
        sum = a[i] + b[i];
        if(sum % 4 == 0){
            c[j++] = a[i];
            c[j++] = b[i];
        }
        else{
            printf("%d ", sum * 4);	
        }
    }
    printf("\n------------\n");
    print_arr(c, j);
    return 0;
} 
  • 4.输入一串不高于80个字符的字符串,将其中的大小写字母互换,其余字母不变,然后输出
#include <stdio.h>
#include <ctype.h>
#define MAX 80
int main(){
	char s[MAX];
	int i = 0;
	printf("请输入s的值:");
	gets(s);
	while(s[i] != '\0'){
		if(isupper(s[i])){
			s[i] += 32;
		}
		else if(islower(s[i])){
			s[i] -= 32;
		}
		i++; 
	}
	printf("新字符串的内容为:%s", s);
	return 0;
} 
  • 5.输入一行字符,统计其中有多少个单词,单词之间用空格分开
#include <stdio.h>

int main(){
    char s[50] = {0};
    int i = 0, word=0, count=0;
    printf("请输入一行字符串:\n");
    gets(s);

    while(s[i] != '\0'){
        if(s[i] != ' ' && word == 0){
            word = 1;
            count ++;
        }
        if(s[i] == ' '){
            word = 0;
        }
        i++; 
    }
    printf("count=%d\n", count);

    return 0;
}
  • 6.输入一串字符串,如果存在B或E,则将其改为a,否则原样输出
#include <stdio.h>
#include <string.h>
#define MAX 1000

int main() {
    char str[MAX] = {0};
    int i = 0;
    printf("请输入一串字符串: ");
    gets(str);
    
    for (i = 0; i < strlen(str); i++) {
        if (str[i] == 'B' || str[i] == 'E') {
            str[i] = 'a';
        }
    }
    
    // 输出处理后的字符串
    printf("处理后的字符串: %s\n", str);
    
    return 0;
}
  • 7.输入一串字符串,如果存在A或a,则将其改为e,否则原样输出
#include <stdio.h>
#include <string.h>
#define MAX 1000

int main() {
    char str[MAX] = {0};
    int i = 0;
    printf("请输入一串字符串: ");
    gets(str);
    
    for (i = 0; i < strlen(str); i++) {
        if (str[i] == 'A' || str[i] == 'a') {
            str[i] = 'e';
        }
    }
    
    // 输出处理后的字符串
    printf("处理后的字符串: %s\n", str);
    
    return 0;
}

题型12:字符串拼接

  • 1.将两个字符串a[30]和b[30]拼接成一个新的字符串c[70],并打印输出
#include <stdio.h>
#include <string.h>
#define LEN 30

int main(){
    char a[LEN] = {0}, b[LEN] = {0}, c[70] = {0};
    int i = 0, j = 0, k = 0;
    printf("请输入a的值:");
    gets(a);
    printf("请输入b的值:");
    gets(b);

    while(a[i] != '\0'){
        c[k++] = a[i++];
    }
    while(b[j] != '\0'){
        c[k++] = b[j++];
    }
    printf("字符串拼接后的内容为:%s", c);

    return 0;
} 

题型13:字符串应用题+循环

  • 1.假设小明的春考技能成绩查询密码为wljspass666,用户输入密码,若正确则输出密码;否则提示错误,当错误次数达到4次时输出密码锁定,此时程序退出
#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]){
    char pwd[100] = {0};
    int i = 0, count = 4;
    printf("输入密码:");
    gets(pwd);

    while(count > 0){
        if(strcmp(pwd, "wljspass666")==0){
            printf("登录成功!\n");
            break;
        }
        else{
            count--;
            printf("密码错误,剩余%d次机会.\n", count);
            if(count == 0){
                printf("次数已用完,账户被锁定!\n");
                break;
            }
            printf("输入密码:");
            gets(pwd);
        }
    }
    return 0;
}

考题补充

  • 1.输入两个浮点数,以浮点数的形式格式化输出,宽度为10,小数点后保留2位
#include <stdio.h>

int main() {
    float num1 = 0, num2 = 0;

    printf("请输入两个浮点数:");
    scanf("%f %f", &num1, &num2);

    // 格式化输出:宽度10(总字符数),小数点后保留2位
    // %10.2f 中:10 表示输出占10个字符位置,.2 表示保留2位小数,不足时左侧补空格
    printf("\n第一个数:%10.2f\n", num1);
    printf("第二个数:%10.2f\n", num2);

    return 0;
}
  • 2.某水费结算系统中输入1表示民用水,每吨3.5元;输入2表示商用水,每吨4.0元。输入水费标识(1或2)和用水量,输出水费
#include <stdio.h>
int main(){
    int flag = 0, weight = 0;
    float price = 0, money = 0;
    printf("请输入水费标识(1或2)和用水量(吨):");
    scanf("%d %d", &flag, &weight);

    if(flag == 1){
        price = 3.5;
    }
    else if(flag == 2){
        price = 4.0;
    }
    else {
        printf("输入异常,只能输入1或2!\n");
        return -1;
    }
    money = price * weight;
    printf("水费共计%.2f元\n", money);

    return 0;
}
  • 3.输入10个人的年龄,求平均年龄,并输出最接近且不大于平均值的年龄
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    int age[10] = {0}, below_avg_age[10] = {0};
    int i = 0, j = 0, k = 0;
    float avg_age = 0, min = 0;

    for (i = 0; i < 10; i++) {
        scanf("%d", age + i);
        avg_age += age[i];
    }
    avg_age /= 10;
    printf("平均年龄为%.4f\n", avg_age);

    for (i = 0; i < 10; i++) {
        if (avg_age >= age[i]) {
            below_avg_age[j++] = age[i];
        }
    }

    min = avg_age - below_avg_age[0];
    k = 0;
    for (i = 1; i < j; i++) {
        if (avg_age - below_avg_age[i] < min) {
            min = avg_age - below_avg_age[i];
            k = i;
        }
    }
    printf("最接近且不大于平均值的年龄是%d", below_avg_age[k]);

    return 0;
}

  • 4.使用函数func打印输出1000以内能被7整除的偶数,每行打印12个,输出格式为%7d
#include <stdio.h>

void func(int num) {
    int i = 0;
    for(i = 0; i <= num; i+=2){
        if(i % 7 == 0){
            printf("%7d", i);
            count++;
            if(count % 12 == 0){
                printf("\n");
            }
        }
    }	
}

int main(){
    int num = 1000;
    func(num);

    return 0;
}
  • 5.输入一串字符串,将其中的数字字符加6。注意:字符'4'加6后的结果按字符'0'计算,字符'5'加6后的结果按字符'1'计算
#include <stdio.h>
#define MAX 1000

int main(int argc, const char * argv[]) {
    // insert code here...
    char s[MAX] = {0}, t = {0};
    int i = 0;
    printf("请输入一串字符:");
    gets(s);

    while (s[i] != '\0') {
        t = s[i];
        if (t >= '0' && t <= '3') {
            s[i] += 6;
        }
        else if (t >= '4' && t <= '9') {
            s[i] -= 4;
        }
        i++;
    }
    puts(s);

    return 0;
}
  • 6.输入n个数,传入func函数中,打印输出n个数中的最小值
#include <stdio.h>  // 方法1:不用数组,静态变量存储上一次传进来的值
float func(float num){
	static float m = 10e20;
	if(num < m) {
		m = num;
	}
	return m;
}
int main(){
	int i, n;
	float num, ret;
	printf("请输入n的值:");
	scanf("%d", &n);
	for(i = 0; i < n; i++){
		printf("请输入第%d个数:", i + 1);
		scanf("%f", &num);
		ret = func(num);
	}
	printf("最小值为:%f", ret);
	return 0;
}


#include <stdio.h>  // 方法2:可变长度数组VLA,在 C99 (1999年发布)及之后的标准里,支持可变长度数组,能够使用变量来指定数组的长度。1989年发布的C89/C90标准不支持VLA,以下代码可能会报错
int func(int arr[], int n){
	int min = arr[0], i;
	for(i = 1; i < n; i++){
		if(arr[i] < min){
			min = arr[i];
		}
	}
	return min;
}
int main(){
	int i, n, min;
	printf("请输入n的值:");
	scanf("%d", &n);
	int arr[n];
	for(i = 0; i < n; i++){
		printf("请输入第%d个数:", i + 1);
		scanf("%d", arr+i);
	}
	min = func(arr, n);
	printf("最小值为%d", min);
	return 0;
}

#include <stdio.h>  // 方法3:在C89/C90标准下不可使用可变长度数组时,能够借助动态内存分配函数像malloc、calloc或者realloc)来创建数组
#include <stdlib.h>

int func(int arr[], int n){
    int min = arr[0], i;
    for(i = 1; i < n; i++){
        if(arr[i] < min){
            min = arr[i];
        }
    }
    return min;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    int i, n, min;
    int *arr;
    printf("请输入n的值:");
    scanf("%d", &n);
    arr = (int *)malloc(n * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败!\n");
        return -1;
    }
    for(i = 0; i < n; i++){
        printf("请输入第%d个数:", i + 1);
        scanf("%d", arr+i);
    }
    min = func(arr, n);
    printf("最小值为%d\n", min);
    return 0;
}
  • 7.输入n,找出1-n之间的所有奇数,输出奇数的个数和奇数的平均值
#include <stdio.h>
int main(){
	int n, i, count = 0;
	float avg = 0;
	printf("请输入n的值:");
	scanf("%d", &n);
	for(i = 1; i <= n; i+=2) {
		count++;
		avg += i;
	}
	avg /= count;
	printf("共有奇数%d个,平均值为%.4f\n", count, avg);
	return 0;
}
  • 8.用函数调用一个公式,结果如果是正数则返回,是负数则返回0
#include <stdio.h>
int func(int a, int b, int c){
	return a*a+b*b-c*c;
}
int main(){
	int a, b, c, ret;
	printf("请输入a b c的值:");
	scanf("%d %d %d", &a, &b, &c);
	ret = func(a, b, c);
	printf("ret=%d", ret);
	return 0;
}
  • 9.输入n个数,统计正数、负数和0的个数
#include <stdio.h>
int main(){
	int n, i, cnt_pos = 0, cnt_neg = 0, cnt_zero = 0;
	printf("请输入n的值:");
	scanf("%d", &n);
	int a[n];  // 部分编译器不支持该语句
	printf("请输入%d个整数:", n);
	for(i = 0; i < n; i++) {
		scanf("%d", a+i);
		if(a[i] > 0) {
			cnt_pos++;
		}
		else if(a[i] < 0) {
			cnt_neg++;
		}
		else {
			cnt_zero++;
		}
	}
	printf("数组中有%d个正数,%d个负数,%d个0", cnt_pos, cnt_neg, cnt_zero);
	return 0;
}
  • 10.数组a中有5位同学的成绩,输出最高成绩和最低成绩,要用指针
  • 11.输入一个4位数,计算每一位平方的和。如输入1234,输出30
#include <stdio.h>
int main(){
	int num, sum = 0, b;
	printf("请输入一个4位数:");
	scanf("%d", &num);
	while(num){
		b = num%10;
		sum += b*b;
		num /= 10;
	}	
	printf("sum=%d", sum);
	return 0;
}
  • 12.将二进制数11001110置反,输出00110001
#include <stdio.h>
int main(){
	int a[8] = {1, 1, 0, 0, 1, 1, 1, 0}, i;
	for(i = 0; i < 8; i++){
		if(a[i]){
			a[i] = 0;
			printf("%d", a[i]);
		}
		else {
			a[i] = 1;
			printf("%d", a[i]);
		}
	}
	return 0;
}
  • 13.在数组a中输入5个字符(不含'\0'),数组b中已有'a'、'b'两个字符,将数组a连接到数组b后方
#include <stdio.h>
#include <string.h>
int main(){
	char a[6], b[8] = "ab";
	int i, length_b = strlen(b);
	printf("请输入5个字符(不含\'\\0\'):");
	for(i = 0; i < 5; i++){
		scanf("%c", a+i);
		b[length_b++] = a[i];	
	}
	b[length_b] = '\0';
	printf("连接后的新字符串为:");
	puts(b);
	return 0;
}
  • 14.用户输入6个学生的成绩,计算平均成绩和高于平均成绩的学生的平均成绩
#include <stdio.h>
int main(){
	int score[6], i, count = 0; 
	float avg1 = 0, avg2 = 0;
	printf("请输入6名学生的成绩:\n");
	for(i = 0; i < 6; i++) {
		scanf("%d", score+i);
		avg1 += score[i];
	}
	avg1 /= 6;
	for(i = 0; i < 6; i++) {
		if(score[i] > avg1) {
			avg2 += score[i];
			count++;
		}
	}
	avg2 /= count;
	printf("平均成绩为%.2f,高于平均成绩的共%d人,其平均成绩为%.2f", avg1, count, avg2);
	return 0;
}
  • 15.某商场举行促销活动,满600元减200元,不满600元但高于200元,打八折,不高于200元打九折。输入消费金额,输出应付金额
#include <stdio.h>
int main(){
	float money, pay;
	printf("请输入消费金额:");
	scanf("%f", &money);
	if(money < 0){
		printf("输入异常, end...");
		return -1;
	}
	else if(money <= 200){
		pay = money * 0.9;
	}
	else if(money < 600){
		pay = money * 0.8;
	}
	else {
		pay = money - 200;
	}
	printf("消费%.2f元,支付%.2f元.", money, pay);
	return 0;
}

  • 16.现有5位同学的综合得分(2位数),将得分乘以3加上5后输出
  • 17.现有元素只为0或1的5行5列二维数组a,第5行和第5列元素未初始化。若每行1的个数为偶数个,则该行第5个数初始化为1,反之为0。若每列1的个数是偶数,则该列第5个数初始化为1,反之为0。
//  示例
0 0 1 1
1 1 1 0
1 0 0 1
0 1 0 0

#include <stdio.h>
#define ROW 5
#define COL 5
void print_arr(int s[][COL], int m, int n){
    int i, j;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            printf("%4d", s[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int a[ROW][COL] = {{0, 0, 1, 0}, {1, 0, 1, 1}, {0, 1, 1, 0}, {0, 1, 1, 1}};
    int i, j, sum;
    printf("数组前4行4列元素的值为:\n");
    print_arr(a, 4, 4);
    for (i = 0; i < ROW - 1; i++) {
        sum = 0;
        for (j = 0; j < COL - 1; j++) {
            sum += a[i][j];
        }
        if (!(sum%2)) {
            a[i][j] = 1;
        }
    }
    for (j = 0; j < COL; j++) {
        sum = 0;
        for (i = 0; i < ROW - 1; i++) {
            sum += a[i][j];
        }
        if (!(sum%2)) {
            a[i][j] = 1;
        }
    }
    printf("填充完毕后数组元素的值为:\n");
    print_arr(a, 5, 5);
    return 0;
}

  • 18.求和:1-1/3+1/5-1/7+...,一直到1/99
  • 19.现有3*3矩阵,计算第4列各行元素的值,要求每行4个元素相加的和为20
#include <stdio.h>
void print_arr(int s[][4], int m, int n){
	int i, j;
	for(i = 0; i < m; i++){
		for(j = 0; j < n; j++){
			printf("%4d", s[i][j]);
		}
		printf("\n");
	}	
}
int main(){
	int a[3][4] = {{1, 8, 17}, {12, 4, -5}, {6, 7, 1}}, i, j, sum;
	printf("3*3数组元素为:\n");
	print_arr(a, 3, 3);
	for(i = 0; i < 3; i++){
		sum = 0;
		for(j = 0; j < 3; j++){
			sum += a[i][j];
		}
		a[i][3] = 20 - sum;
	}	
	printf("填充后3*4数组元素为:\n");
	print_arr(a, 3, 4);
	return 0;
}
  • 20.求和:1+1/2+1/3+...,一直到1/99
  • 21.定义一个数组并赋值,输出数组前n个数的和与后n个数的和
#include <stdio.h>
#define N 10
void print_arr(int s[], int n, int m){
	int i;
	for(i = n; i <= m; i++){
		printf("%4d", s[i]);
	}
}
int main(){
	int a[N] = {9, 4, 6, 7, 1, 3, 8, 5, 2, 0}, n, i, j;
	printf("请输入n的值(n<=%d):", N);
	scanf("%d", &n);
	if(n > N){
		printf("下标越界,end...\n");
		return -1;
	}
	printf("前%d个数为:", n);
	print_arr(a, 0, n-1);
	printf("\n后%d个数为:", n);
	print_arr(a, N-n, N-1);
	return 0;
}
  • 22.模拟点餐程序:定义数组food和price,定义整型变量c、n和op,其中c为食物编号,n为食物数量,op为功能选项(0:点餐 1:查看 2:结账 其他值:错误)。现要求用户输入c、n和op值,打印输出相应的结果。
    food[3][40] = {"汉堡", "薯条", "可乐"} price[3] = {20, 10, 5}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ITEM 3  // 食物种类
#define LEN 1000  // 每种食物占据的最长字节数
#define MAX 1000 // 购物车可加食物数量上限

int car_length = 0;  // 购物车数组的长度,全局变量

void print_food(char food[][LEN]) {
    int i;
    for (i = 0; i < ITEM; i++) {
        printf("%s  ", food[i]);
    }
}

void add_food(char food[][LEN], char car[][LEN], int c, int n) {  // c:食物编号 n:食物数量
    int i;
    for (i = car_length; i < car_length + n; i++) {
        strcpy(car[i] ,food[c]);
    }
    car_length = i;  // 更新长度,后续可能会继续在购物车中增加物品,所以当前的长度需要保存
}

void print_car(char car[][LEN]){
    int i = 0;
    while (car[i][0] != '\0') {  // 购物车数组中某行的字符串中0列为'\0',代表此处为空的,未存储食物
        printf("%s ", car[i]);
        i++;
    }
    if (i == 0) {
        printf("购物车为空!");
    }
    printf("\n");
}

int cal_pay(char car[][LEN], int price[]) {
    int pay = 0, i;
    for (i = 0; car[i][0] != '\0'; i++) {  // 遍历购物车结束条件也是某行0列字符为'\0'
        if (strcmp(car[i], "汉堡") == 0) {
            pay += price[0];
        }
        else if (strcmp(car[i], "薯条") == 0) {
            pay += price[1];
        }
        else {
            pay += price[2];
        }
        strcpy(car[i], "\0");  // i位置处的食物算入总价后,就将i位置处的内容置为"\0",支付的过程即伴随着清空购物车.此处清空购物车只是数组中每行为"\0",但购物车长度不是0
    }
    car_length = 0;  // 所以此处也要将购物车的长度置零,在下方case 2处置零也可以
    return pay;
}

int main(int argc, const char * argv[]) {
    // insert code here...
    char food[ITEM][LEN] = {"汉堡", "薯条", "可乐"};
    int c, n, op, money, price[ITEM] = {20, 10, 5};  // c:食物编号 n:食物数量 op:功能选项
    char car[MAX][LEN] = {'\0'};  // 购物车,直接初始化为'\0',利于后续处理中找到car数组的边界
    while (1) {
        printf("开始操作(0:点餐 1:查看购物车 2:结账 3:退出):");
        scanf("%d", &op);
        switch (op) {
            case 0:
                printf("有以下食物:\n");
                print_food(food);
                printf("\n开始点餐...请输入食物编号(0 1 2)和食物数量\n");
                scanf("%d %d", &c, &n);
                add_food(food, car, c, n);
                break;
            case 1:
                printf("正在查看购物车...\n");
                print_car(car);
                break;
            case 2:
                printf("正在结账...\n");
                money = cal_pay(car, price);
                printf("共支付%d元\n", money);
//                car_length = 0;
                break;
            case 3:
                printf("正在退出...\n");
                exit(-1);
            default:
                printf("功能选项输入错误,请重新输入!\n");
        }
    }
    return 0;
}

  • 23.输入一个整数,判断100以内能被这个数整除的数

2023年考题回忆版

  • 1.输入整数直径,求圆的面积,如果输入的是负数,就打印提示“异常”
#include <stdio.h>
#define PI 3.14159
int main(){
	int d;
	float r, s;
	printf("请输入圆的直径:");
	scanf("%d", &d);
	if(d < 0){
		printf("直径值异常!\n");
		return -1;
	}
	r = d / 2;
	s = PI * r * r;
	printf("面积为%.2f", s);
	return 0;
}
  • 2.输入一个1800-2800之间的整数作为年份,判断该年份是否为闰年
#include <stdio.h>
int main(){
	int year;
	printf("请输入一个年份(1800-2800):");
	scanf("%d", &year);
	if(year >= 1800&&year <= 2800){
		if(year % 4 == 0&&year % 100 != 0||year % 400 == 0){
			printf("%d是闰年!", year);
		}
		else{

			printf("%d不是闰年!", year);
		}
	}
	else{
		printf("输入的年份非法!");
	}
	return 0;
}
  • 3.输入一个长度不超过80的字符串,将其中的大写字母转换成小写字母,其他字符不变,输出转换后的字符串
#include <stdio.h>
#include <string.h> 
#define MAX 100
int main(){
	char s[MAX];
	int i = 0;
	printf("请输入字符串:");
	gets(s);
	if(strlen(s) <= 80){
		while(s[i] != '\0'){
			if(s[i] >= 'A'&&s[i] <= 'Z'){
				s[i] += 32;
			}
			i++;
		}
		puts(s);
	}
	else{
		printf("字符串长度不合法!");
	}
	return 0;
} 

2022年考题回忆版

  • 1.输出杨辉三角形的前10行
#include <stdio.h>
#define ROW 10
#define COL 10
int main(){
    int i = 0, j = 0, s[ROW][COL] = {0};
    for(i = 0; i < ROW; i++){
        s[i][0] = 1;  // 每一行下标为0的元素置为1
        s[i][i] = 1;  // 对角线元素置为1
    }
    for(i = 2; i < ROW; i++){
        for(j = 1; j < i; j++){
            s[i][j] = s[i-1][j] + s[i-1][j-1];  // 每一行下标为1至倒数第2个元素的值为正上方与左斜上方元素的和
        }
    }
    for(i = 0; i < ROW; i++){
        for(j = 0; j <= i; j++){
            printf("%4d", s[i][j]);
        }
        printf("\n");
    }
    return 0;
} 
  • 2.输入购买商品总价,若总价小于1000则八折出售;若总价高于1000则将超出的部分六折出售,输出优惠金额和实付金额
#include <stdio.h>
int main(){
	float total, discount, pay;
	printf("请输入商品总价:");
	scanf("%f", &total);
	if(total < 0){
		printf("输入数据异常!");
                return -1;
	}
	else if(total < 1000){
		discount = total * (1 - 0.8);
		pay = total * 0.8;
	}
	else{
		discount = (total - 1000) * (1 - 0.6);
		pay = 1000 + (total - 1000) * 0.6;
	}
	printf("总价%.2f,优惠金额%.2f,实付金额%.2f", total, discount, pay);
	return 0;
} 
  • 3.输入本月用电度数:若在50度以下(含50度)每度1.3元,若高于50度,超出的部分按每度2.3元收,请输出电费
#include <stdio.h>
int main(){
	float total, pay;
	printf("请输入本月用电度数:");
	scanf("%f", &total);
	if(total < 0){
		printf("数值异常!");
		return -1; 
	}
	else if(total <= 50){
		pay = total * 1.3;
	}
	else{
		pay = 50 * 1.3 + (total - 50) * 2.3;
	}
	printf("用了%.2f度电, 电费%.2f元", total, pay);
	return 0;
} 
  • 4.输入两个字符串s1和s2,将s2链接到s1后方,不能使用字符串连接函数
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(){
	char s1[MAX], s2[100];
	int len, i = 0; 
	printf("请输入s1的值:");
	gets(s1);
	len = strlen(s1);  // 定位到s1字符串'\0'的位置
	printf("请输入s2的值:");
	gets(s2);
	while(s2[i] != '\0'){  // 从头遍历字符串s2
		s1[len++] = s2[i++];  // 依次将字符串s2的字符连接到s1后方
	}
	s1[len] = '\0';  // 为字符串s1添加结束标志
	printf("s2连接到s1后方的新字符串为:%s", s1);
	return 0;
} 
  • 5.计算1+2+3+...+100的值
#include <stdio.h>
int main(){
	int i, sum = 0;
	for(i = 1; i <= 100; i++){
		sum += i;
	}
	printf("sum=%d", sum);
	return 0;
}
  • 6.(变式)计算1-2+3-4+5-...+99-100的值
// 方法1:将加减号看成乘以1或乘以-1
#include <stdio.h>
int main() {
  int i = 1, sum = 0;
  int t = 1;
  while(i <= 100 {
    sum = sum + i * t;
    i ++;
    t = -t;
  }
  printf("%d", sum);
  return 0;
}

// 方法2:利用奇偶数,观察原式发现奇数前方的符号为“+”,偶数前方的符号为“-”。
#include <stdio.h>
int main(){
  int i = 1, sum = 0;
  while(i <= 100){
    if(i % 2 != 0){
      sum = sum + i;
    }
    else {
      sum = sum - i;
    }
    i++;
  }
  printf("sum=%d", sum);
  return 0;
} 

posted @ 2025-03-02 10:21  pycoder_666  阅读(836)  评论(0)    收藏  举报