PTA习题(C语言)

翁恺-C语言程序设计 PTA习题集 代码练习题 阅读详情

目录

素数对猜想

找出不是两个数组共有的元素

统计不同数字字符出现次数

 组个最小数

单词长度

IP地址转换

找鞍点

通讯录排序

统计期末成绩

选民投票

歌唱比赛计分

判断两个字符串是否为变位词

求矩阵的局部极大值

最长最短单词

 sdut-array2-5 打印“杨辉三角“ 品中国数学史 增民族自豪感(2)

1000以内所有各位数字之和为n的正整数

统计素数并求和

求一定范围内的所有完数

最大公约数和最小公倍数

求整数序列中出现次数最多的数

 求一批整数中出现最多的个位数字

简单选择排序显示第K趟

统计字符

统计大写辅音字母

字符串解压

 判断上三角矩阵

 字符串排序

学生信息的那些操作:(5)添加记录

学生信息的那些操作:(6) 删除记录

求一组数的平均值并按降序排序

过滤字符串只保留串中的数字字符

电码加密

从键盘读入一串字符后去除首尾字符后的字符串按降序排序

每个单词的首字母改为大写

按要求移动字符

查找二维数组中的最大值及其行列下标


素数对猜想

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free

void init(int n, bool *is, int *pre, int *cnt) {
    for (int i = 2; i <= n; i++) {
        if (!is[i]) pre[(*cnt)++] = i;
        for (int j = 0; j < *cnt; j++) {
            int product = pre[j] * i;
            if (product > n) break;
            is[product] = true;
            if (i % pre[j] == 0) break;
        }
    }
}

int main() {
    int n;
    scanf("%d", &n);

    // 动态分配数组
    bool *is = calloc(n + 1, sizeof(bool));  // 初始化为 false(分配内存并初始化)
    int *pre = malloc((n + 1) * sizeof(int));
    int cnt = 0;

    init(n, is, pre, &cnt);

    int ans = 0;
    for (int i = 1; i < cnt; i++) {
        if (pre[i] - pre[i-1] == 2) ans++;
    }
    printf("%d\n", ans);

    free(is);
    free(pre);
    return 0;
}

 在C语言中,malloc只需要一个参数,即要分配的总字节数。

calloc 不仅分配内存,还会将分配的内存初始化为零(对于数值类型,如 int 和 bool,这意味着初始化为 false)。

找出不是两个数组共有的元素

给定两个整型数组,本题要求找出不是两者共有的元素。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

输出样例: 

3 5 -15 6 4 1

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free

int main() {
    int n, m;

    scanf("%d", &n);
    int *a = malloc(n*sizeof(int));
    for (int i = 0; i<n; i++){
        scanf("%d", &a[i]);
    }
    scanf("%d", &m);
    int *b = malloc(m*sizeof(int));
    for (int i = 0; i<m; i++){
        scanf("%d", &b[i]);
    }
    int *c = malloc((n+m)*sizeof(int));
    int k =0;
    for (int i = 0; i<n; i++){
        int flag = 0;
        for (int j = 0; j<m; j++){
            if (a[i] == b[j]) {
                flag = 1;
                break;
            }
        }
        if (flag == 0) c[k++] = a[i];
    }
    for (int i = 0; i<m; i++){
        int flag = 0;
        for (int j = 0; j<n; j++){
            if (b[i] == a[j]) {
                flag = 1;
                break;
            }
        }
        if (flag == 0) c[k++] = b[i];                
    }
    for (int i = 0; i<k; i++){
        for (int j = i+1; j<k; j++){
            if (c[i] == c[j]){
                for (int l = j+1; l<k; l++){
                    c[l-1] = c[l];
                }
                k--;
            }
        }
    }
    for (int i = 0; i<k; i++){
        if (i == 0){
            printf("%d", c[i]);
        }
        else printf(" %d", c[i]);
    }
    return 0;
}

统计不同数字字符出现次数

从键盘读入一行字符(约定:字符数≤127字节),统计并显示该行字符中10个数字字符各自出现的次数,没有出现的字符不显示。如果没有数字字符,则输出"None!"。

输入样例

a053 JHSa 5we !=-)35xhyasei..df

 输出样例

0-1
3-2
5-3

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    int n, m;

    char a[128];
    gets(a);
    int num[10] = {0};
    for (int i = 0; i<strlen(a); i++){
        if (a[i] >= '0' && a[i] <= '9'){
            num[a[i]-'0']++;
        }
    }
    int flag = 0;
    for (int i = 0; i<10; i++){
        if (num[i] != 0){
            printf("%d-%d\n", i, num[i]);
            flag = 1;
        }
    }
    if (!flag){
        printf("None!");
    }
    return 0;
}

 组个最小数

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

 输出样例:

10015558

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free

int main() {
    int n, m;

    int num[10] = {0};
    for (int i = 0; i<10; i++){
        scanf("%d", &num[i]);
    }
    for (int i = 1; i<10; i++){
        if (num[i] != 0){
            printf("%d", i);
            num[i]--;
            break;
        }
    }
    for (int i = 0; i<10; i++){
        while (num[i]){
            printf("%d", i);
            num[i]--;
        }
    }
    return 0;
}

单词长度

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入样例:

It's great to see you here.

 输出样例:

4 5 2 3 3 4

 AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    char ch;
    int num = 0, cnt = 0;
    int flag = 0;
    scanf("%c", &ch);
    while (ch != '.'){
        if (ch == ' '){
            if (num != 0){
                if (cnt == 0){
                    printf("%d", num);
                }
                else printf(" %d", num);
                cnt++;
            }
            num = 0;
        }
        else num++;
        scanf("%c", &ch);
    }
    if (num != 0){
        if (cnt == 0){
            printf("%d", num);
        }
        else printf(" %d", num);
    }
    return 0;
}

IP地址转换

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

输入样例:

11001100100101000001010101110010

 输出样例:

204.148.21.114

 AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    char ch;
    for (int i = 0; i<4; i++){
        int s = 0;
        for (int j = 0; j<8; j++){
            scanf("%c", &ch);
            s = s*2+ch-'0';
        }
        printf("%d", s);
        if (i != 3){
            printf(".");
        }
    }
    return 0;
}

找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

 输出样例1:

2 1

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct node{
    int x, y;
};
int max(int a, int b){
    if (a > b){
        return a;
    }
    else return b;
}
int min(int a, int b){
    return (a < b) ? a : b;
}
int main() {
    int n;
    scanf("%d", &n);
    int a[n][n];
    for (int i = 0; i<n; i++){
        for (int j=0; j<n; j++){
            scanf("%d", &a[i][j]);
        }
    }
    int h[n], l[n];
    for (int i = 0; i<n; i++){
        int max_h = 0, min_l = 10000;
        for (int j = 0; j<n; j++){
            max_h = max(max_h, a[i][j]);
            min_l = min(min_l, a[j][i]);
        }
        h[i] = max_h;
        l[i] = min_l;
    }
    struct node *p = (struct node*)malloc((n*n)*sizeof(struct node));
    int cnt = 0;
    for (int i = 0; i<n; i++){
        for (int j = 0; j<n; j++){
            if (a[i][j] == h[i] && a[i][j] == l[j]){
                p[cnt].x = i;
                p[cnt++].y = j;
            }
        }
    }
   if (cnt == 0){
    printf("NONE");
   } 
   else{
        for (int i = 0; i<cnt; i++){
            printf("%d %d\n", p[i].x, p[i].y);
        }
   }
    return 0;
}

通讯录排序

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

 输出样例:

 wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

 AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct student{
    char name[10];
    int birth;
    char phone[17];
}stu[10], stu1;
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i<n; i++){
        scanf("%s %d %s", stu[i].name, &stu[i].birth, stu[i].phone);
    }
    for (int i = 0; i<n-1; i++){
        for (int j = 0; j<n-1-i; j++){
            if (stu[j].birth > stu[j+1].birth){
                stu1 = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = stu1;
            }
        }
    }
    for (int i = 0; i<n; i++){
        printf("%s %d %s\n", stu[i].name, stu[i].birth, stu[i].phone);
    }
    return 0;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct student{
    char name[10];
    int birth;
    char phone[17];
}stu[10], stu1;
int cmp(const void *a, const void *b){
    return (((struct student*)a)->birth - ((struct student*)b)->birth);
}
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i<n; i++){
        scanf("%s %d %s", stu[i].name, &stu[i].birth, stu[i].phone);
    }
    qsort(stu, n, sizeof(struct student), cmp);
    for (int i = 0; i<n; i++){
        printf("%s %d %s\n", stu[i].name, stu[i].birth, stu[i].phone);
    }
    return 0;
}

统计期末成绩

程序设计校选课期末计划安排在第十五周周五下午,有学生反映第十五周周末恰逢端午节假期,已请假提前回家。
经过协商,该课程期末考试共进行两次,分别在第十五周周五下午和第十六周周五下午。
如果学生两次考试都参加,则该课程期末成绩取两次成绩最高分。如果只参加了一次,则该次成绩即为期末考试成绩。
请你帮老师统计下每个学生该门课程的期末成绩。

输入样例:

3
201410300106 wanyun 70 88
201618050322 zhangyu 90 0
201509210118 lixiao 0 0

 输出样例:

201410300106 wanyun 88
201509210118 lixiao 0
201618050322 zhangyu 90

 AC代码:

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

#define MAX_NAME_LENGTH 21
#define MAX_STUDENTS 10

typedef struct {
    char id[16];
    char name[MAX_NAME_LENGTH];
    int score1;
    int score2;
} Student;

int compareStudents(const void *a, const void *b) {
    return strcmp(((Student *)a)->id, ((Student *)b)->id);
}

int main() {
    int n;
    scanf("%d", &n);

    Student students[MAX_STUDENTS];

    for (int i = 0; i < n; i++) {
        scanf("%s %s %d %d", students[i].id, students[i].name, &students[i].score1, &students[i].score2);
    }

    // 对学生按照学号进行排序
    qsort(students, n, sizeof(Student), compareStudents);

    for (int i = 0; i < n; i++) {
        int finalScore = (students[i].score1 > students[i].score2) ? students[i].score1 : students[i].score2;
        printf("%s %s %d\n", students[i].id, students[i].name, finalScore);
    }

    return 0;
}

qsort 函数:

  • qsort 是 C 标准库中的一个函数,用于对数组进行排序。它的原型定义在 <stdlib.h> 头文件中。
  • 函数原型:
    ​​​​​​​void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
  • void *base:    这是指向要排序的数组的起始地址的指针。base 是一个 void* 类型的指针,因此它可以指向任何类型的数组。

  • size_t nmemb:   这是数组中元素的个数。nmemb 是一个 size_t 类型的值,表示数组中要排序的元素数量。

  • size_t size:   这是数组中每个元素的大小(以字节为单位)。size 是一个 size_t 类型的值,表示数组中每个元素占用的内存大小。

  • int (*compar)(const void *, const void *):    这是一个指向比较函数的指针。比较函数用于确定数组中两个元素的顺序。compar 函数接收两个 const void* 类型的指针,分别指向要比较的两个元素。

compareStudents 参数:

  • compareStudents 是一个函数指针,指向一个比较函数。
  • 比较函数的原型:int compareStudents(const void *a, const void *b);
#include <stdio.h>
#include <string.h>

#define MAX_NAME_LENGTH 21
#define MAX_STUDENTS 10

typedef struct {
    char id[16];
    char name[MAX_NAME_LENGTH];
    int s1;
    int s2;
} Student;
int main() {
    int n;
    scanf("%d", &n);

    Student stu[MAX_STUDENTS], stu1;

    for (int i = 0; i < n; i++) {
        scanf("%s %s %d %d", stu[i].id, stu[i].name, &stu[i].s1, &stu[i].s2);
    }
    for (int i = 0; i<n-1; i++){
        for (int j = 0; j<n-i-1; j++){
            if (strcmp(stu[j].id, stu[j+1].id) > 0){
                stu1 = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = stu1;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        int finalScore = (stu[i].s1 > stu[i].s2) ? stu[i].s1 : stu[i].s2;
        printf("%s %s %d\n", stu[i].id, stu[i].name, finalScore);
    }
    return 0;
}

选民投票

编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(候选人姓名不区分大小写,姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。

输入样例1:

3
zhang
li
wang
9
Wang
Zhang
zhuang
LI
Liao
ZHANG
WANG
Wang
wang

 输出样例1:

wang:4
zhang:2
li:1

invalid vote:
zhuang
Liao

 输入样例2:

2
liu
yang
5
Liu
liu
YANG
yang
Liu

 输出样例2:

liu:3
yang:2

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct candidate{
    char name[20];
    int sum;
};
int cmp(const void *a, const void *b){
    return (((struct candidate*)b)->sum) - (((struct candidate *)a)->sum);
}
int main() {
    int n;
    scanf("%d", &n);
    struct candidate s[n];
    for (int i = 0; i<n; i++){
        s[i].sum = 0;
    }  
    for (int i = 0; i<n; i++){
        scanf("%s", s[i].name);
    }
    int m, invalid_num = 0;;
    scanf("%d", &m);
    char invalid[86][10];
    for (int i = 0; i<m; i++){
        char name[20];
        int cnt = 0;
        scanf("%s", name);
        for (int j = 0; j<n; j++){
            int flag = 0;
            for (int k = 0; name[k]!= '\0'; k++){
                if (name[k]!= s[j].name[k] && name[k] != s[j].name[k]+32 && name[k]!= s[j].name[k]-32){
                    flag=1;
                    cnt++;
                    break;
                }
            }
            if (flag == 0){
                s[j].sum++;
                break;
            }
        }
        if (cnt == n){
            strcpy(invalid[invalid_num++], name);
        }
    }
    qsort(s, n, sizeof(struct candidate), cmp);
    for (int i = 0; i<n; i++){
        printf("%s:%d\n", s[i].name, s[i].sum);
    }
    if (invalid_num){
        printf("\ninvalid vote:\n");
        for (int i = 0; i<invalid_num; i++){
            printf("%s\n", invalid[i]);
        }
    }
    return 0;
}

歌唱比赛计分

设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入,计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。

输入样例:

1 4 7 3 6 3
8 7 8 5 9 8
7 5 6 8 5 4
7 6 7 5 6 5
3 5 6 7 5 5
7 7 7 8 9 6
7 7 6 7 6 8
9 4 3 7 3 6
4 8 6 7 5 8
8 7 8 8 9 8

 输出样例:

No.10: 8.00
No.2 : 7.75
No.6 : 7.25
No.7 : 6.75
No.9 : 6.50
No.4 : 6.00
No.3 : 5.75
No.5 : 5.25
No.8 : 5.00
No.1 : 4.00

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct singer{
    int id;
    float s;
};
int max(int a, int b){
    return a > b?a : b;
}
int min(int a, int b){
    return a < b?a : b;
}
int main() {
    struct singer si[10], s1;
    for (int i = 0; i<10; i++){
        int l=0, r=10;
        float su = 0;
        for (int j = 1; j<=6; j++){
            int x;
            scanf("%d", &x);
            su += x;
            l = max(l, x);
            r = min(r, x);
        }
        su -= (l+r);
        si[i].id = i+1;
        si[i].s = su/4;
    }
    for (int i = 0; i<9; i++){
        for (int j = 0; j<10-1-i; j++){
            if (si[j].s < si[j+1].s){
                s1 = si[j];
                si[j] = si[j+1];
                si[j+1] = s1;
            }
        }
    }
    for (int i = 0; i<10; i++){
        printf("No.%-2d: %.2f\n", si[i].id, si[i].s);
    }
    return 0;
}

判断两个字符串是否为变位词

如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy”也互为变位词。

输入样例1:

Mary
arMy

 输出样例1

yes

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
void pai(char *s){
    char ch;
    for (int i = 0; i<strlen(s)-1; i++){
        for (int j = 0; j<strlen(s)-1-i; j++){
            if (s[j] > s[j+1]){
                ch = s[j];
                s[j] = s[j+1];
                s[j+1] = ch;
            }
        }
    }
}
int main() {
    char s1[100], s2[100];
    gets(s1);
    gets(s2);
    pai(s1);
    pai(s2);
    if (strcmp(s1, s2) == 0){
        printf("yes\n");
    }
    else printf("no\n");
    return 0;
}

求矩阵的局部极大值

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

 输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

 输出样例1:

9 2 3
5 3 2
5 3 4

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
struct node{
    int val, x, y;
};
int main() {
    int n, m;
    scanf("%d %d", &m, &n);
    int dx[4] = {0, 1, 0, -1};
    int dy[4] = {1, 0, -1, 0};
    struct node submax[500];
    int a[m][n];
    for (int i = 0; i<m;i++){
        for (int j = 0; j<n; j++){
            scanf("%d", &a[i][j]);
        }
    }
    int cnt = 0;
    for (int i = 1; i<m-1; i++){
        for (int j = 1; j<n-1; j++){
            int flag = 0;
            for (int k = 0; k<4; k++){
                if (a[i][j] <= a[i+dx[k]][j+dy[k]]){
                    flag = 1;
                    break;
                }
            }
            if (!flag) {
                submax[cnt].val = a[i][j];
                submax[cnt].x= i+1;
                submax[cnt++].y=j+1;
            }
        }
    }
    if (!cnt){
        printf("None %d %d\n", m, n);
    }
    else {
        for (int i=0; i<cnt; i++){
            printf("%d %d %d\n", submax[i].val, submax[i].x, submax[i].y);
        }
    }
    return 0;
}

最长最短单词

输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。

试输出第1个最长的单词和第1个最短单词。

输入样例:

I am studying Programming language C in Peking University

 输出样例:

Programming
I

 

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    char str[220][101], chstr[101];
    gets(chstr);
    int len = strlen(chstr);
    int str_num = 0, num = 0;
    for (int i = 0; i<len; i++){
        if (chstr[i] == ' ' || chstr[i] == ','){
            if (num > 0) str_num++;
            num = 0;
        }
        else {
            str[str_num][num++] = chstr[i];
        }
    }
    char max_str[101];
    strcpy(max_str, str[0]);
    char min_str[101];
    strcpy(min_str, str[0]);
    int max_num = strlen(max_str);
    int min_num = strlen(min_str);
    for (int i = 0; i<str_num; i++){
        if (strlen(str[i]) > max_num){
            max_num = strlen(str[i]);
            strcpy(max_str, str[i]);
        }
        if (strlen(str[i]) < min_num){
            min_num = strlen(str[i]);
            strcpy(min_str, str[i]);
        }
    }
    puts(max_str);
    puts(min_str);
    return 0;
}

 sdut-array2-5 打印“杨辉三角“ 品中国数学史 增民族自豪感(2)

输入样例:

5

 输出样例:

        1   
      1   1   
    1   2   1   
  1   3   3   1   
1   4   6   4   1   

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    int a[n][n];
    for (int i = 0; i<n; i++){
        for (int j = 0; j<=i; j++){
            if (i == j || j==0) a[i][j] = 1;
            else a[i][j] = a[i-1][j-1]+a[i-1][j];
        }
    }
    for (int i=0; i<n; i++){
        for (int j = 0; j<n-1-i; j++){
            printf("  ");
        }
        for (int j = 0; j<=i; j++){
            printf("%-4d", a[i][j]);
            if (j == i) printf("\n");
        }
    }
    return 0;
}

1000以内所有各位数字之和为n的正整数

输出1000以内所有各位数字之和为n的正整数,例如:如果输入的n是6,那么,105的各位数字之和1+0+5=6, 123的各位数字之和1+2+3=6,两者都满足要求。每行输出6列,每个整数占8位宽度右对齐。

输入样例:

6

 输出样例:

       6      15      24      33      42      51
      60     105     114     123     132     141
     150     204     213     222     231     240
     303     312     321     330     402     411
     420     501     510     600

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    int ans = 0;
    for (int i = 1; i<=1000; i++){
        int cnt = 0;
        int num = i;
        while (num){
            cnt += num%10;
            num/=10;
        }
        if (cnt == n){
            ans++;
            printf("%8d", i);
            if (ans % 6 == 0) printf("\n");
        }
    }
    // printf("\n");
    return 0;
}

统计素数并求和

输入样例:

10 31

 输出样例:

7 143

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
// 欧拉筛
int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    bool is[505];
    int pre[505], num=0;
    int ans_1 = 0, ans_2=0;
    for (int i = 2; i<=n; i++){
        if (!is[i]) {
            pre[num++]=i;
            if (i>=m && i<=n){
                ans_1++;
                ans_2+=i;
            }
        }
        for (int j = 0; j<num; j++){
            if (i*pre[j] > n) break;
            is[i*pre[j]] = true;
            if (i % pre[j] == 0) break;
        }
    }
    printf("%d %d\n", ans_1, ans_2);
    return 0;
}

求一定范围内的所有完数

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出任意两正整数m和n之间的所有完数。

输入样例:

3 30

 输出样例:

6 its factors are 1,2,3
28 its factors are 1,2,4,7,14

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
// 欧拉筛
int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int sum, flag = 0;

    for (int i = m; i<=n; i++){
        sum = 0;
        for (int j = 1; j<i; j++){
            if (i%j == 0) sum += j;
        }
        if (sum == i){
            flag = 1;
            printf("%d its factors are 1",i);
            for (int j = 2; j<i; j++){
                if (i % j == 0){
                    printf(",%d", j);
                }
            }
            printf("\n");
        }
    }
    if (flag == 0){
        printf("Not Found!");
    }
    return 0;
}

最大公约数和最小公倍数

本题要求两个给定正整数的最大公约数和最小公倍数。

输入样例:

511 292

 输出样例:

73 2044

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int gcd(int a, int b){
    return b == 0?a:gcd(b, a%b);
}
int main() {
    int n,m;
    scanf("%d%d",&n,&m);
    printf("%d %d\n", gcd(n, m), n*m/gcd(n,m));
    return 0;
}

求整数序列中出现次数最多的数

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

 输出样例:

3 4

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    int a[n];
    for (int i = 0; i<n; i++){
        scanf("%d", &a[i]);
    }
    int max_num = a[0], max = 1;
    for (int i = 1; i<n; i++){
        int cnt = 1;
        for (int j = 0; j<i; j++){
            if (a[i] == a[j]){
                cnt++;
            }
        }
        if (cnt > max){
            max = cnt;
            max_num = a[i];
        }
    }
    printf("%d %d\n", max_num, max);
    return 0;
}

 求一批整数中出现最多的个位数字

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入样例:

3
1234 2345 3456

 输出样例:

3: 3 4

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int max(int a, int b){
    return a > b? a : b;
}
int main() {
    int n;
    scanf("%d", &n);
    int num[10]={0};
    int max_num = 0;
    for (int i = 0; i<n; i++){
        int x;
        scanf("%d", &x);
        while (x){
            num[x%10]++;
            max_num = max(max_num, num[x%10]);
            x/=10;
        }
    }
    printf("%d:", max_num);
    for (int i = 0; i<10; i++){
        if (num[i] == max_num){
            printf(" %d", i);
        }
    }
    return 0;
}

简单选择排序显示第K趟

将N个整数按从小到大排序的选择排序法是这样工作的:选择所有数中最大(小)的,与最后一个(第一个)交换。通过一遍扫描,则最后一个元素必定是最大的元素(或第一个元素必定是最小的元素)。然后用同样的方法余下的N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,即完成对N个数的排序。
本题要求对任意给定的K(<N)按找大的原则,输出扫描完第K遍后的中间结果数列。

输入样例:

6 2
2 3 5 1 6 4

 输出样例:

2 3 4 1 5 6

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    int a[n];
    for (int i=0; i<n; i++){
        scanf("%d", &a[i]);
    }
    for (int i = 0; i<k; i++){
        int max = a[0], pos = 0;
        for (int j = 1; j<n-i; j++){
            if (a[j] > max){
                max = a[j];
                pos = j;
            }
        }
        int temp = a[pos];
        a[pos] = a[n-1-i];
        a[n-1-i] = temp; 
    }
    for (int i = 0; i<n; i++){
        if (i == 0) printf("%d", a[i]);
        else printf(" %d", a[i]);
    }
    return 0;
}

统计字符

本题目要求从键盘读入一串字符,以回车结束。分别统计其中的英文字母、数字、空格和其他字符的数量。

输入样例:

w1e2r3t AGH4--#  23  %%**
 

 输出样例:

字母:7,数字:6,空格:5,其他:7

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int main() {
    char str[128];
    gets(str);
    int letter = 0, num = 0, space = 0, other = 0;
    for (int i = 0; i<strlen(str); i++){
        if ((str[i]>='a' && str[i] <='z') || (str[i]>='A' && str[i]<='Z')){
            letter++;
        }
        else if (str[i] >= '0' && str[i] <= '9'){
            num++;
        }
        else if (str[i] == ' ') space++;
        else other++;
    }
    printf("字母:%d,数字:%d,空格:%d,其他:%d\n", letter, num, space, other);
    return 0;
}

统计大写辅音字母

英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入样例:

HELLO World!

 输出样例:

4

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int main() {
    char str[128];
    gets(str);
    char p[5] = {'A', 'E', 'I', 'O', 'U'};
    int num = 0;
    for (int i = 0; i<strlen(str); i++){
        int cnt = 0;
        for (int j = 0; j<5; j++){
            if (str[i] != p[j]) cnt++;
        }
        if (cnt == 5 && str[i]>='A' && str[i]<='Z') num++;
    }
    printf("%d\n", num);
    return 0;
}

字符串解压

输入压缩后的字符串,输出压缩前的字符串。

压缩的方法是把连续的相同字母压缩为"长度+字母"的形式,在本题中,单个的字母不需要压缩。

输入样例:

12ab10c2ax

 输出样例:

aaaaaaaaaaaabccccccccccaax

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
int main() {
    char  str[128];
    gets(str);
    for (int i = 0; i<strlen(str); i++){
        int sum = 0;
        while (str[i]>='0' && str[i]<='9'){
            sum = sum*10+str[i++]-'0';
        }
        for (int j = 0; j<sum; j++){
            putchar(str[i]);
        }
        if (sum == 0){
            putchar(str[i]);
        }
    }
    return 0;
}

 判断上三角矩阵

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

 

 输出样例:

YES
NO
NO

 

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
void solve(){
    int n;
    scanf("%d", &n);
    int x, flag = 0;
    for (int i = 0; i<n; i++){
        for (int j = 0; j<n; j++){
            scanf("%d", &x);
            if (i>j && x!=0) flag = 1;
        }
    }
    if (flag){
        printf("NO\n");
    }
    else{
        printf("YES\n");
    }
}
int main() {
    int t;
    scanf("%d", &t);
    for (int i = 0; i<t; i++) solve();
    return 0;
}

 字符串排序

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入样例:

red yellow blue black white

 输出样例:

After sorted:
black
blue
red
white
yellow

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>

int main() {
    char str[5][85];
    for (int i = 0; i<5; i++){
        scanf("%s", str[i]);
    }
    for (int i = 0; i<4; i++){
        for (int j = 0; j<4-i; j++){
            if (strcmp(str[j], str[j+1]) > 0){
                char temp[85];
                strcpy(temp, str[j]);
                strcpy(str[j], str[j+1]);
                strcpy(str[j+1], temp);
            }
        }
    }
    printf("After sorted:\n");
    for (int i= 0; i<5; i++){
        printf("%s\n", str[i]);
    }
}

学生信息的那些操作:(5)添加记录

有一学生成绩表,包括学号、姓名、3门课程成绩。已知该成绩表按学号升序排序。请编程实现,添加一个新的学生信息,且使成绩表仍按学号有序;若待添加的学号与已有学号重复,则输出错误信息,拒绝添加。

输入样例:

3
202016040201 Zhangling 78 95 55
202016040202 Wangli 87 99 88
202016040204 Fangfang 68 76 75
202016040203 Lilei 68 79 82

 输出样例:

202016040201 Zhangling 78 95 55
202016040202 Wangli 87 99 88
202016040203 Lilei 68 79 82
202016040204 Fangfang 68 76 75

 AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
typedef struct{
    char id[13], name[21];
    int s1, s2, s3;
}stu;
int main() {
    int n;
    scanf("%d", &n);
    stu s[n+1], ss;
    for (int i = 0; i<n; i++){
        scanf("%s %s %d %d %d", s[i].id, s[i].name, &s[i].s1, &s[i].s2, &s[i].s3);
    }
    scanf("%s %s %d %d %d", s[n].id, s[n].name, &s[n].s1, &s[n].s2, &s[n].s3);
    int flag = 0;
    for (int i = 0; i<n; i++){
        if (strcmp(s[i].id, s[n].id) == 0){
            flag = 1;
            break;
        }
    }
    if (flag){
        printf("error!\n");
    }
    else{
        for (int i = 0; i<n; i++){
            for (int j = 0; j<n-i; j++){
                if (strcmp(s[j].id, s[j+1].id) > 0){
                    ss = s[j];
                    s[j] = s[j+1];
                    s[j+1] = ss;
                }
            }
        }
        for (int i = 0; i<=n; i++){
            printf("%s %s %d %d %d\n", s[i].id, s[i].name, s[i].s1, s[i].s2, s[i].s3);
        }
    }
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
typedef struct{
    char id[13], name[21];
    int s1, s2, s3;
}stu;
int cmp(const void *a, const void *b){
    return strcmp(((stu*)a)->id, ((stu*)b)->id);
}
int main() {
    int n;
    scanf("%d", &n);
    stu s[n+1];
    for (int i = 0; i<n; i++){
        scanf("%s %s %d %d %d", s[i].id, s[i].name, &s[i].s1, &s[i].s2, &s[i].s3);
    }
    scanf("%s %s %d %d %d", s[n].id, s[n].name, &s[n].s1, &s[n].s2, &s[n].s3);
    int flag = 0;
    for (int i = 0; i<n; i++){
        if (strcmp(s[i].id, s[n].id) == 0){
            flag = 1;
            break;
        }
    }
    if (flag){
        printf("error!\n");
    }
    else{
        qsort(s, n+1, sizeof(stu), cmp);
        for (int i = 0; i<=n; i++){
            printf("%s %s %d %d %d\n", s[i].id, s[i].name, s[i].s1, s[i].s2, s[i].s3);
        }
    }
}

学生信息的那些操作:(6) 删除记录

有一学生成绩表,包括学号、姓名、3门课程成绩。请实现如下删除功能:输入一个学生的学号,删除该学生的所有信息。

 输入样例:

3
202016040201 Zhangling 78 95 55
202016040202 Wangli 87 99 88
202016040203 Fangfang 68 76 75
202016040201

 输出样例:

202016040202 Wangli 87 99 88
202016040203 Fangfang 68 76 75

AC代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>  // 用于 malloc 和 free
#include <string.h>
typedef struct{
    char id[13], name[21];
    int s1, s2, s3;
}stu;
int main() {
    int n;
    scanf("%d", &n);
    stu s[n+1], ss;
    for (int i = 0; i<n; i++){
        scanf("%s %s %d %d %d", s[i].id, s[i].name, &s[i].s1, &s[i].s2, &s[i].s3);
    }
    scanf("%s %s %d %d %d", ss.id, ss.name, &ss.s1, &ss.s2, &ss.s3);
    int flag = 0;
    for (int i = 0; i<n; i++){
        if (strcmp(s[i].id, ss.id) == 0){
            flag = i;
            break;
        }
    }
    if (flag){
        printf("error!\n");
    }
    else{
        for (int i = flag+1; i<n; i++){
            s[i-1] = s[i];
        }
        for (int i = 0; i<n-1; i++){
            printf("%s %s %d %d %d\n", s[i].id, s[i].name, s[i].s1, s[i].s2, s[i].s3);
        }
    }
}

求一组数的平均值并按降序排序

调用Input函数从键盘读入不超过10个学生的成绩,成绩低于0分或者超过100分重新读入,读满10个或者遇到9999结束;调用Average函数求一组数的平均值;调用Sort函数将这组数按照降序排序。

裁判测试程序样例:

#include <stdio.h>
#define N 10
void Input(float *pa,int *n);
float Average(float *pa, int n);
void Sort(float *pa,int n);

int main()
{
    float a[N],ave;
    float *p = a;
    int n;
    Input(p, &n);
    ave = Average(p, n);
    Sort(p,n);
    printf("average = %.2f\n",ave);
    for(p = a;p<a+n;p++)
        printf("%-7.1f",*p);
    return 0;
}

/* 请在这里填写答案 */

输入样例1:

59.5 88.5 77 40 95 65 9999

 输出样例1:

average = 70.83
95.0   88.5   77.0   65.0   59.5   40.0   

AC代码:

void Input(float *pa,int *n){
    int num=0;
    float x;
    scanf("%f", &x);
    while (num < 10 && x != 9999){
        if (x < 0 || x > 100){
            scanf("%f", &x);
            continue;
        }
        else {
            pa[num++] = x;
        }
        scanf("%f", &x);
    }
    *n = num;
}
float Average(float *pa, int n){
    float sum = 0;
    for (int i = 0; i<n; i++){
        sum += pa[i];
    }
    return sum/n;
}
void Sort(float *pa,int n){
    for (int i = 0; i<n-1; i++){
        for (int j = 0; j<n-1-i; j++){
            if (pa[j] < pa[j+1]){
                float temp = pa[j];
                pa[j] = pa[j+1];
                pa[j+1] = temp;
            }
        }
    }
}

过滤字符串只保留串中的数字字符

函数的功能是:输入一个字符串,过滤此串,统计串中包含的数字字符个数,逆序输出串中的数字字符。

输入样例:

hjds34jj,&67

 输出样例:

There are 4 digits in the string,they are 3467
The  number of inversions is 7643

裁判测试程序样例:


#include <stdio.h>

int Count_Digit ( char *ptr,int *num );

int main()
{
    char str[80];
    int cnt,num;
    gets(str);
    cnt=Count_Digit(str,&num);
    printf("There are %d digits in the string,they are %s\n",cnt,str);
    printf("The  number of inversions is %d\n",num);
    return 0;
 }

/* 请在这里填写答案 */

AC代码:

int Count_Digit ( char *ptr,int *num ){
    char *s;
    int count = 0, sum = 0;
    s = ptr;
    while (*ptr!='\0'){
        if (*ptr >= '0' && *ptr <= '9'){
            s[count++] = *ptr;
        }
        ptr++;
    }
    s[count] = '\0';
    for (int i = count-1; i>=0; i--){
        sum = sum*10+s[i]-'0';
    }
    *num = sum;
    ptr = s;
    return count;
}

电码加密

为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。要求编写并调用函数encrypt (),按要求修改字符串内容。变换规则如下:小写字母z变换成为a,其他字母变换成为该字母ASCII码顺序后一位的字母,比如o变换成为p。

输入样例:

adfz

 输出样例:

bega

 裁判测试程序样例:


#include <stdio.h>
# include <string.h>
# define MAXLINE 80
void encrypt ( char *s);
int main (void)
{
   char line [MAXLINE];
    
   gets(line);
   encrypt (line);
   printf ("%s\n", line);
     return 0;
}


/* 请在这里填写答案 */

AC代码:

void encrypt ( char *s){
    for (;*s!='\0'; s++){
        if (*s == 'z'){
            *s = 'a';
        }
        else *s = *s+1;
    }
}

从键盘读入一串字符后去除首尾字符后的字符串按降序排序

请编写函数Sort函数,将字符串中除首、尾字符外的其余字符按降序排列。

输入样例:

CEAedca

 输出样例:

CedcEAa

 裁判测试程序样例:


#include <stdio.h>
void Sort(char *p);

int main(void)
{
    char str[21] ;
 
    gets(str);
    Sort(str);
    puts(str); 

    return 0;
} 

/* 请在这里填写答案 */

AC代码:

void Sort(char *p){
    int len = strlen(p);
    for (int i = 1; i < len - 2; i++) {
        for (int j = 1; j < len - 2 - (i - 1); j++) {
            if (p[j] < p[j + 1]) {
                char temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
            }
        }
    }
}

每个单词的首字母改为大写

本题要求实现一个函数,将p所指字符串中每个单词的首字母字母改成大写,大写字母及非字母不变化。(这里的“单词”是指由一个或者多个空格隔开的字符串)。

输入样例:

There are 45 students in my class.

 输出样例:

After changing:   There Are 45 Students In My Class.

 裁判测试程序样例:

#include <stdio.h>
void Conv( char *p );
int main()
{
        char str[64];  
        
        gets(str);
        Conv(str);
        printf("After changing:   %s", str);
        return 0;
}


/* 请在这里填写答案 */

AC代码:

void Conv( char *p ){
    int num=0;
    while (*p!='\0'){
        if (*p == ' '){
            num = 0;
        }
        else{
            if (num == 0){
                if (*p>='a' && *p<='z') *p = *p-32;
            }
            num++;
        }
        p++;
    }
}

按要求移动字符

函数Move_str的功能是:在字符串str中找到ASCII码值最大的字符,将该字符放到首位,其余字符顺序后移。

输入样例:

ABCDeFGe

 输出样例:

The string after moving:eeABCDFG

 裁判测试程序样例:

#include<stdio.h>
void Move_str ( char *p);
int main()
{
    char str[80];
    gets(str);
    Move_str(str);
    printf("The string after moving:");
    puts(str);
    return 0;
  }


/* 请在这里填写答案 */

AC代码:

void Move_str ( char *p){
    char t=p[0];
    int pos = 0;
    int len = strlen(p);
    for (int i = 0; p[i]!='\0'; i++){
        if (p[i] > t) {
            t = p[i];
            pos = i;
        }
    }
    for (int i = pos; i>0; i--){
        p[i] = p[i-1];
    }
    p[0] = t;
    for (int i = 1; i<len; i++){
        if (p[i] == t){
            for (int j=i-1; j>=0; j--){
                p[j+1] = p[j];
            }
            p[0] = t;
        }
    }
}

查找二维数组中的最大值及其行列下标

程序实现查找二维数组的最大值以及行、列下标,请根据函数 FindMaxbyCol()的声明和调用完成函数的定义。

输入样例:

3 4
3 5 -1 4
7 -32 0 9
-102 45 78 4

 输出样例:

78 2 2

 裁判测试程序样例:

#include <stdio.h>
int  FindMaxbyCol(int *q,int row,int col,int *maxRow,int *maxCcol);
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    int a[m][n];
    int max,maxr,maxc;
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);   
    }
     max=FindMaxbyCol(a[0],m,n,&maxr,&maxc);
    printf("%d %d %d\n",max,maxr,maxc);
    return 0;
}

/* 请在这里填写答案 */

AC代码:

int FindMaxbyCol(int *q, int row, int col, int *maxRow, int *maxCcol) {
    int i, j, max = q[0]; // 初始化最大值为第一个元素
    *maxRow = 0;
    *maxCcol = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            if (q[i * col + j] > max) { // 计算二维数组中元素的一维索引
                max = q[i * col + j];
                *maxRow = i;
                *maxCcol = j;
            }
        }
    }
    return max;
}

pta基础编程题目集,c语言实现 由于考研复试的机试需要指定c语言完成,很长时间没有写过c语言的代码,故而用c语言刷了pta上的基础编程题目集,后续会继续更新c语言实现的数据结构。 阅读详情

相关推荐

C语言-翁恺-PTA-41-80课后练习题-02

代码地址。

Huangpengyu123的博客 1728

pta平台用c语言编程答案,C语言PTA平台习题与答案

第二章作业 1①.本题要求编写程序,输出一个短句“Welcome to You!”#includeint main(){printf("Welcome to You!\n");return 0;}②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。计算公式:C=5×(F?32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。fahr = 100, celsius = 计算所...

weixin_39673184的博客 8422

PTA 习题8-4 报数 (20分)——C语言

PTA 习题8-4 报数 (20分)——C语言 【小白遇到运行超时问题,求大佬解决。】 报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。 本题要求编写函数,给出每个人的退出顺序编号。 函数接口定义: void CountOff( int n, int m, int out[] ); 其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每

万宝玉的博客 731

【C语言】PTA-基础编程题目集-编程题(二)

这道题的难点在对“中午12点被认为是下午”这句话的理解,这句话的意思是输入12:23,会输出12:23 PM。我个人是如此理解的,因为在PTA网页中如果输出结果为0:23 PM,会显示部分正确。如果对此有异议,可以在评论区指出。可以看到区别是很小的,就在于换成scanf_s后需要在&ch,后面加个1。出现该区别的缘由是,这道题是简单的,如果出现错误一般就在格式错误,直接复制题中代码进行修改就不会有问题。

m0_58373406的博客 938

C语言练习100例-选择法排序 PTA练习题

#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int i, index, k, n, temp; int a[10]; scanf("%d", &n); for(i=0; i<n; i++) scanf("%d", &a[i]); for(k=0; k<n-1; k++) ...

Rarepython的博客 2027

c语言期末复习----PTA作业习题集

指向字符的指针(如 char*)

2401_86517033的博客 905

7-31 歌唱比赛计分 pta (一行一句注释)

设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入,计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。

chiyuchiyu9527的博客 1476

C语言—程序设计入门—PTA练习题 7-039龟兔赛跑

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

qq_43437499的博客 441

PTA浙大版《C语言程序设计》编程题,练习2-1到习题2-6答案

个人建议 初学者还是把格式规范起来,自己读起来既方便又美观 PTA对结果的格式要求很严格,答题的时候注意题目要求 练习2-1 Programming in C is fun! (5 分) 本题要求编写程序,输出一个短句“Programming in C is fun!”。 输入格式: 本题目没有输入。 输出格式: 在一行中输出短句“Programming in C is fun!”。 #include<stdio.h> //调用库 int main(void) { printf("Pro

qq_54388490的博客 1万+

PTA基础编程答案

浙江大学PTA基础编程答案, 代码精练,用c或c++。适合程序设计爱好者学习。

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文提供了一份基于STM32实现SPWM逆变器控制的完整实战指南。文章从硬件选型(如STM32F103C8T6、IR2104驱动器)入手,详细解析了利用定时器TIM1生成SPWM波形的核心原理与代码实现,并涵盖了驱动电路、全桥功率电路及LC滤波器的设计要点与调试技巧,旨在帮助读者从零构建一个可靠的单相全桥逆变器系统。

weixin_29208327的博客 589

pta平台c语言作业答案,C语言PTA平台习题与答案.pdf

C语言PTA平台习题与答案.pdfC 语言程序与设计 PTA 平台习题与答案 1 1 第二章 作业 1 .本题要求编写程序,输出一个短句“Welcome to You” include int main printfWelcome to Youn; return 0; .本题要求编写程序,计算华氏温度 100F 对应的摄氏温度。计算公式C5F32/9, 式中C表示摄氏温度,F表示华氏温度,输出数据...

weixin_31940835的博客 1万+

Windows 10/11 安装 HYSPLIT 气象模型全攻略(附必备工具包下载清单)

本文提供了一份详尽的Windows 10/11系统下HYSPLIT气象模型安装与配置全攻略。指南涵盖了从核心认知、必备工具包(Tcl/Tk、ImageMagick)下载,到分步安装、环境变量设置及首次运行验证的完整流程,旨在帮助研究者和学生高效部署这一用于大气轨迹模拟与污染物扩散分析的专业工具。

weixin_28335283的博客 608

PTA习题(C语言版本)- 1003 我要通过! (20 分)

原题如下 “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组...

chenxizhan1995的博客 7347

ADS 使用调整器动态调参教程(Tuning)

ADS动态调参教程

weixin_42845306的博客 1万+

基于AC算法的图像显著性检测及Matlab代码实现

以上是基于AC算法的图像显著性检测的Matlab代码实现。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。

TechPulseZ的博客 438

PTA—C语言练习题

复习C练习题 1-1:Hello World! 要求:编写程序,输出一个短句“Hello World"。 #include<stdio.h> int main(void){ printf("Hello World!"); return 0; } 1-2:温度转换 要求:本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。 输出格式:fahr = 150, celsius = 计算所

lcyiloveyou的博客 8544

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解(Python/JS/C/C++)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释发现新题目,随时更新。

学Java,找哪吒 5万+

C语言实战:从PTA课后习题解析到编程思维提升

本文通过深度解析PTA平台上的C语言经典习题,如简单计算器、兔子繁衍和二分法求根,揭示了从模仿答案到掌握编程核心思维的路径。文章强调通过反向推导和深度练习,将解题过程内化为抽象建模、算法优化与调试能力,帮助学习者真正提升C语言实战水平与编程思维。

python9snake的博客 451

ShengBTE热导计算:利用ShengBTE计算热导显示NAN的原因是什么?算出的热导不随平均声子自由程变化

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 963

Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

IAYLBL的博客 695

习题2-1 求整数均值 (10分) PTA 浙大版《C语言程序设计(第3版)》题目集

浙大版《C语言程序设计(第3版)》题目集 习题2-1 求整数均值 (10分) 本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。 输入格式: 输入在一行中给出4个整数,其间以空格分隔。 输出格式: 在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。 输入样例: 1 2 3 4 输出样例: Sum = 10; Average = 2.5 #include<stdio.h> int main(void

qq_45831699的博客 318

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浙大PTA C语言 习题2-3 求平方与倒数序列的部分和

浙大PTA C语言 习题2-3 求平方与倒数序列的部分和 输入格式: 输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。 输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。 输入样例: 5 10 输出样例: sum = 355.845635 代码如下: #include <stdio.h> int main(void) { double a=0,b=0; double m,n;

weixin_52390207的博客 2356

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pta c语言作业,C语言PTA平台习题与答案

第二章作业 1①.本题要求编写程序,输出一个短句“Welcome to You!”#includeint main(){printf("Welcome to You!\n");return 0;}②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。计算公式:C=5×(F?32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。fahr = 100, celsius = 计算所...

weixin_32830601的博客 7537

C语言 PTA 习题目录

自己方便复习整理的

weixin_63484669的博客 4671
上一篇: Educational Codeforces Round 174 (Rated for Div. 2)(部分题解)
下一篇: Codeforces Round 1006 (Div. 3)(部分题解)
wirepuller_king
博客等级 码龄3年 9288粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wirepuller_king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值