《程序设计》编程题|061-072

习题7-3 判断上三角矩阵 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <stdbool.h>

int main(){
    // 输入
    int test;
    scanf("%d",&test);
    // 输出
    for(int k=1;k<=test;++k){
        int size;
        scanf("%d",&size);
        int cur;
        bool isLegal=true;
        for(int i=1;i<=size;++i){
            for(int j=1;j<=size;++j){
                scanf("%d",&cur);
                if(cur!=0 && i>j){
                    isLegal=false;
                }
            }
        }
        if(isLegal){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    
    return 0;
}

习题7-4 求矩阵各行元素之和 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入
    int m,n;
    scanf("%d %d",&m,&n);
    // 输出
    for(int i=1;i<=m;++i){
        int sum=0;
        int cur=0;
        for(int j=1;j<=n;++j){
            scanf("%d",&cur);
            sum+=cur;
        }
        printf("%d",sum);
        if(i<m){
            printf("\n");
        }
    }
    
    return 0;
}

习题7-5 找鞍点 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <stdbool.h>

// 输入:矩阵
void getMatrix(int row,int col,int matrix[row][col]){
    for(int i=0;i<row;++i){
        for(int j=0;j<col;++j){
            scanf("%d",&matrix[i][j]);
        }
    }
    return;
}

// 返回:鞍点->true 否则->false
bool isSaddle(int row,int col,int matrix[row][col],int ti,int tj){
    // 鞍点行上最大
    for(int j=0;j<col;++j){
        if(matrix[ti][j]>matrix[ti][tj]){
            return false;
        }
    }
    for(int i=0;i<row;++i){
        if(matrix[i][tj]<matrix[ti][tj]){
            return false;
        }
    }
    return true;
}

int main(){
    // 输入
    int size;
    scanf("%d",&size);
    int matrix[size][size];
    getMatrix(size,size,matrix);
    // 输出
    bool isExist=false;
    for(int i=0;i<size;++i){
        for(int j=0;j<size;++j){
            if(isSaddle(size,size,matrix,i,j)){
                printf("%d %d\n",i,j);
                isExist=true;
            }
        }
    }
    if(!isExist){
        printf("NONE");
    }
    
    return 0;
}

习题7-6 统计大写辅音字母 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <ctype.h>

int main(){
    // 处理
    int cnt=0;
    char cur;
    while((cur=getchar())!=EOF){
        if(cur=='\n'){
            break;
        }
        if(isupper(cur)
          && cur!='A' && cur!='E'
          && cur!='I' && cur!='O'
          && cur!='U'){
            ++cnt;
        }
    }
    // 输出
    printf("%d",cnt);
    
    return 0;
}

习题7-7 字符串替换 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <string.h>
#define MAXLEN 81

int main(){
    // 输入
    char str[MAXLEN];
    fgets(str,MAXLEN,stdin);
    int len=strlen(str);
    if(len>0 && str[len-1]=='\n'){
        str[--len]='\0';
    }
    // 处理
    for(int i=0;i<len;++i){
        if(str[i]>='A' && str[i]<='Z'){
            str[i]='Z'-(str[i]-'A');
        }
    }
    // 输出
    printf("%s",str);
        
    return 0;
}

习题7-8 字符串转换成十进制整数 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // 输入
    char ch;
    char hexStr[100] = {0};
    int isNegative = 0;
    int hasFirstHex = 0;
    int idx = 0;
    // 处理
    while ((ch = getchar()) != '#') {
        if (!hasFirstHex && ch == '-') {
            isNegative = 1;
        }
        if (isdigit(ch) || (tolower(ch) >= 'a' && tolower(ch) <= 'f')) {
            hasFirstHex = 1;
            hexStr[idx++] = ch;
        }
    }
    long decimalNum = strtol(hexStr, NULL, 16);
    if (isNegative) {
        decimalNum = -decimalNum;
    }
    // 输出
    printf("%ld\n", decimalNum);

    return 0;
}

习题8-7 字符串排序 – 浙大版《C语言程序设计(第4版)》题目集

#include<stdio.h>
#include<string.h>

int main(void) {
    // 输入
    char str[5][81];
    for (int i = 0; i < 5; i++) {
        scanf("%s", str[i]);
    }

    // 选择排序法对字符串进行排序
    for (int i = 0; i < 4; i++) {
        for (int j = i + 1; j < 5; j++) {
            if (strcmp(str[i], str[j]) > 0) {
                char temp[81];
                strcpy(temp, str[i]);
                strcpy(str[i], str[j]);
                strcpy(str[j], temp);
            }
        }
    }
    // 输出
    printf("After sorted:\n");
    for (int i = 0; i < 5; i++) {
        printf("%s\n", str[i]);
    }

    return 0;
}

习题8-10 输出学生成绩 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(){
    // 输入
    int n;
    scanf("%d",&n);
    double *scores=(double *)malloc(n*sizeof(double));
    for(int i=0;i<n;++i){
        scanf("%lf",&scores[i]);
    }
    // 处理:求平均值 最大值 最小值
    double sum=0;
    double average=0;
    double max=DBL_MIN;
    double min=DBL_MAX;
    for(int i=0;i<n;++i){
        sum+=scores[i];
        if(max<scores[i]){
            max=scores[i];
        }
        if(min>scores[i]){
            min=scores[i];
        }
    }
    average=sum/n;
    // 输出
    printf("average = %.2f\n",average);
    printf("max = %.2f\n",max);
    printf("min = %.2f\n",min);

    free(scores);
    return 0;
}

习题9-1 时间换算 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入
    int hour,min,sec;
    scanf("%d:%d:%d",&hour,&min,&sec);
    int n;
    scanf("%d",&n);
    // 处理
    min+=(sec+n)/60;
    sec=(sec+n)%60;
    hour+=min/60;
    min=min%60;
    hour=hour%24;
    // 输出
    printf("%02d:%02d:%02d\n",hour,min,sec);
    
    return 0;
}

习题9-3 平面向量加法 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>

int main(){
    // 输入
    double point[3][2];
    scanf("%lf %lf %lf %lf",
          &point[0][0],&point[0][1],
          &point[1][0],&point[1][1]);
    // 处理:
    // 平面向量加法
    point[2][0]=point[0][0]+point[1][0];
    point[2][1]=point[0][1]+point[1][1];
    // 舍入处理 不能输出−0.0
    if(fabs(point[2][0])<0.05){
        point[2][0]=0.0;
    }
    if(fabs(point[2][1])<0.05){
        point[2][1]=0.0;
    }
    // 输出
    printf("(%.1f, %.1f)\n",point[2][0],point[2][1]);
    
    return 0;
}

习题9-4 查找书籍 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <string.h>

#define MAX_BOOKS 10
#define MAX_NAME_LENGTH 31

// 结构体:书
typedef struct {
    char name[MAX_NAME_LENGTH];
    double price;
} Book;

int main() {
    // 输入
    int n;
    scanf("%d", &n);
    Book books[MAX_BOOKS];
    for (int i = 0; i < n; i++) {
        getchar();    // 吃掉换行符
        fgets(books[i].name, MAX_NAME_LENGTH, stdin);
        // 转换字符串格式
        size_t len = strlen(books[i].name);
        if (len > 0 && books[i].name[len - 1] == '\n') {
            books[i].name[len - 1] = '\0';
        }
        scanf("%lf", &books[i].price);
    }
    
    // 查找价格最高和最低的书籍索引
    int max_index = 0, min_index = 0;
    for (int i = 1; i < n; i++) {
        if (books[i].price > books[max_index].price) {
            max_index = i;
        }
        if (books[i].price < books[min_index].price) {
            min_index = i;
        }
    }
    
    // 输出
    printf("%.2f, %s\n", books[max_index].price, books[max_index].name);
    printf("%.2f, %s\n", books[min_index].price, books[min_index].name);
    
    return 0;
}

习题9-5 通讯录排序 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <string.h>

#define MAX_FRIENDS 10
#define MAX_NAME_LENGTH 11
#define MAX_PHONE_LENGTH 18
#define BIRTHDAY_LENGTH 9

// 结构体:朋友
typedef struct {
    char name[MAX_NAME_LENGTH];
    char birthday[BIRTHDAY_LENGTH];
    char phone[MAX_PHONE_LENGTH];
} Friend;

int main() {
    // 输入
    int n;
    scanf("%d", &n);
    Friend friends[MAX_FRIENDS];
    for (int i = 0; i < n; i++) {
        scanf("%s %s %s", friends[i].name, friends[i].birthday, friends[i].phone);
    }
    // 简单选择排序
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (strcmp(friends[j].birthday, friends[j + 1].birthday) > 0) {
                Friend temp = friends[j];
                friends[j] = friends[j + 1];
                friends[j + 1] = temp;
            }
        }
    }
    
    // 输出
    for (int i = 0; i < n; i++) {
        printf("%s %s %s\n", friends[i].name, friends[i].birthday, friends[i].phone);
    }
    
    return 0;
}

《《程序设计》编程题|061-072》有1条评论

发表评论