PTA - C语言接口题集

news2024/11/14 16:03:24

目录

  • 6-1 计算两个复数之积(结构体函数)
  • 6-2 字符定位(返回字符的地址,指针)
  • 6-3 求结构体平均成绩(变量名(数组名)用.;指针(带有*)用->)
  • 6-4 删除字符串中数字字符
  • 6-5 使用函数找出数组中的最大值
  • 6-6 在数组中查找指定元素
  • 6-7 按等级统计学生成绩
  • 6-8 学生成绩比高低
  • 6-11 mystrcpy
  • 6-12 mystrcat
  • 6-13 mystrcmp
  • 6-14 求正整数的因子和
  • 6-15 字符串翻转
  • 6-17 判断完数
  • 6-18 mystrlen
  • 6-19 mystrcpy
  • 6-20 mystrcat
  • 6-21 mystrupr
  • 6-22 数字字符转整数
  • 6-23 统计英文字母的个数
  • 6-24 求字符串中英文字母和数字字符的个数(传址调用,对指针解引用)
  • 6-27 回文
  • 6-28 递归顺序输出字符串
  • 6-29 逆序输出字符串
  • 6-30 四舍五入(实现round函数)
  • 6-31 Sum of the nodes of a Singly Linked List with dummy header

6-1 计算两个复数之积(结构体函数)

本题要求实现一个计算复数之积的简单函数。

函数接口定义:

struct complex multiply(struct complex x, struct complex y);

其中struct complex是复数结构体,其定义如下:

struct complex{
    int real;
    int imag;
};

裁判测试程序样例:

#include <stdio.h>

struct complex{
    int real;
    int imag;
};
struct complex multiply(struct complex x, struct complex y);
int main()
{
    struct complex product, x, y;
    scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
    product = multiply(x, y);
    printf("(%d+%di) * (%d+%di) = %d + %di\n", 
            x.real, x.imag, y.real, y.imag, product.real, product.imag);
    
    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
3 4 5 6
输出样例:
(3+4i) * (5+6i) = -9 + 38i

struct complex multiply(struct complex x, struct complex y){
    struct complex ans;
    ans.real = x.real*y.real-x.imag*y.imag;
    ans.imag = x.real*y.imag+y.real*x.imag;

    return ans;
}

6-2 字符定位(返回字符的地址,指针)

本题要求定义一个函数,在字符串中查找字符,并定位在最后一次找到的位置。

函数接口定义:

char * match(char *s, char ch);

其中s是字符串首地址,ch是要查找的字符。要求函数在字符串s中查找字符ch,如果找到,返回最后一次找到的该字符在字符串中的位置(地址);否则,返回空指针NULL。

裁判测试程序样例:

#include <stdio.h> 

char *match(char *s, char ch); 
int main(void )
{
    char ch, str[80], *p = NULL;
    scanf("%s", str);
    getchar();                 /* 跳过输入字符串和输入字符之间的分隔符 */
    ch = getchar();          /* 输入一个字符 */
    p = match(str, ch);     /* 调用函数match() */
    if( p != NULL ){        /* 找到字符ch */
        printf("%s\n", p);
    }else{ 
        printf("Not Found.\n");
    }

    return 0;
}

/* 请在这里填写答案 */
输入样例1:
program
r
输出样例1:
ram
输入样例2:
program
x
输出样例2:
Not Found.

char * match(char *s, char ch){
    char* ans=NULL;
    for(int i=0;s[i]!='\0';i++){
        if(s[i]==ch) {
            ans=&s[i];
        }
    }
    return ans;
}

6-3 求结构体平均成绩(变量名(数组名)用.;指针(带有*)用->)

本题要求实现一个函数,可统计结构体中成绩项的平均成绩。

结构体由两项组成:学号和成绩。

函数接口定义:

double avg(RECORD x[],int n);

其中 n 是结构体数组的元素个数。

裁判测试程序样例:

#include <stdio.h>
#define N 20

typedef struct
{
    char no[10];
    double score;
}RECORD;
double avg(RECORD x[],int n);
int main()
{
    RECORD a[N];
    int n,i;
    double av;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%s%lf",a[i].no,&a[i].score);
    av=avg(a,n);
    printf("%f",av);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
5
1001 1
1002 2
1003 3
1004 4
1005 5
输出样例:
3.000000

double avg(RECORD x[],int n){
    double ans=0;
    for(int i=0;i<n;i++){
        ans+=x[i].score;
    }
    ans/=n;
    return ans;
}

6-4 删除字符串中数字字符

删除一个字符串中的所有数字字符。

函数接口定义:

void delnum(char *s);

其中 s 是用户传入的参数。 函数的功能是删除指针 s 所指的字符串中的所有数字字符。

裁判测试程序样例:

#include "stdio.h"

void delnum(char *s);
int main ()
{ 
	char item[80];
	gets(item);
	delnum(item);
	printf("%s\n",item);
 
	return 0;
}

/* 请在这里填写答案 */
输入样例:
a0bc+d496df
输出样例:
abc+ddf

void delnum(char *s){
    int i=0;
    while(s[i]!='\0'){
        if(s[i]>='0' && s[i]<='9')
        // if(isdigit(s[i]))
        {
            int j=i;
            while(s[j]!='\0'){
                s[j]=s[j+1];
                j++;
            }
        }
        else i++;
    }
}

6-5 使用函数找出数组中的最大值

本题要求实现一个找出整型数组中最大值的函数。

函数接口定义:

int FindArrayMax( int a[], int n );

其中a是用户传入的数组,n是数组a中元素的个数。函数返回数组a中的最大值。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

int FindArrayMax( int a[], int n );
int main()
{
    int i, n;
    int a[MAXN];
    scanf("%d", &n);
    for( i=0; i<n; i++ ){
        scanf("%d", &a[i]);
    }
    printf("%d\n", FindArrayMax(a, n));
   
    return 0;
}

/* 请在这里填写答案 */
输入样例:
4
20 78 99 -14
输出样例:
99

int FindArrayMax( int a[], int n ){
    int ans=a[0];
    for(int i=1;i<n;i++){
        if(a[i] > ans) ans = a[i];
    }
    return ans;
}

6-6 在数组中查找指定元素

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

int search( int list[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );
int main()
{
    int i, index, n, x;
    int a[MAXN];
    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d\n", index);
    else
        printf("Not found\n");
            
    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例1:
5
1 2 2 5 4
2
输出样例1:
index = 1
输入样例2:
5
1 2 2 5 4
0
输出样例2:
Not found

int search( int list[], int n, int x ){
    for(int i=0;i<n;i++){
        if(list[i]==x) return i;
    }
    return -1;
}

6-7 按等级统计学生成绩

本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

函数接口定义:

int set_grade( struct student *p, int n );

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};
int set_grade( struct student *p, int n );
int main()
{  
	struct student stu[MAXN], *ptr;
	int n, i, count;
	ptr = stu;
	scanf("%d\n", &n);
	for(i = 0; i < n; i++){
		scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
	} 
	count = set_grade(ptr, n);
	printf("The count for failed (<60): %d\n", count);
	printf("The grades:\n"); 
	for(i = 0; i < n; i++)
		printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
	
	return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78
输出样例:
The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B

int set_grade( struct student *p, int n ){
    int ans=0;
    for(int i=0;i<n;i++){
        if(p[i].score <60) ans++;
        
        if(p[i].score>=85 && p[i].score<=100) p[i].grade='A';
        else if(p[i].score>=70) p[i].grade='B';
        else if(p[i].score>=60) p[i].grade='C';
        else p[i].grade='D';
    }
    return ans;
}

6-8 学生成绩比高低

学生结构体定义如下:

struct Student{
    int sid;
    int C;
    int English;
};

其中sid是学号,C是C语言课程成绩,English是英语课程成绩。学生的成绩按照这样的规则比较:
先比较两门课的总成绩,总成绩高的为优;
若总成绩相同,再比较C语言成绩,C语言成绩高的为优;
若C语言成绩也相同,则说明两名学生成绩相等。

函数接口定义:

int compareScore(const struct Student *s1, const struct Student *s2);

其中s1s2是传入的参数,分别指向两名学生的结构体变量。函数返回值为int型,
s1所指学生成绩优于s2所指学生,返回1
s2所指学生成绩优于s1所指学生,返回-1
若两学生成绩相等,返回0
裁判测试程序样例:

#include <stdio.h>

struct Student{
    int sid;
    int C;
    int English;
};
int compareScore(const struct Student *s1, const struct Student *s2);
int main(){
    struct Student zs, ls;
    scanf("%d%d%d", &zs.sid, &zs.C, &zs.English);
    scanf("%d%d%d", &ls.sid, &ls.C, &ls.English);
    int r;
    r = compareScore(&zs, &ls);
    if(r < 0) printf("Less\n");
    else if(r > 0) printf("Greater\n");
    else printf("Equal\n");
    
    return 0;
}

/* 你所编写的函数代码将被嵌在这里 */
输入样例1:
1 95 90
2 90 91
输出样例1:
Greater
输入样例2:
1 90 95
2 95 90
输出样例2:
Less

int compareScore(const struct Student *s1, const struct Student *s2) {
    int sum1 = s1->C + s1->English;
    int sum2 = s2->C + s2->English;

    if (sum1 != sum2) {
        return sum1 > sum2 ? 1 : -1;
    } else if (s1->C != s2->C) {
        return s1->C > s2->C ? 1 : -1;
    } else {
        return 0;
    }
}

6-11 mystrcpy

编写一个函数 char *mystrcpy(char *s1, const char *s2)

它的功能是把字符串s2中的所有字符复制到字符数组s1中。函数返回指向数组s1第一个元素的指针。

函数接口定义:
函数接口:

char *mystrcpy(char *s1, const char *s2);

把字符串s2中的所有字符复制到字符数组s1中。函数返回指向数组s1第一个元素的指针。

裁判测试程序样例:

#include <stdio.h>

char *mystrcpy(char *s1, const char *s2);
int main()
{
    char a[30], b[30], c[30];
    gets(c);
    mystrcpy(a, mystrcpy(b, c));
    puts(a);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
abcd
输出样例:
abcd

char *mystrcpy(char *s1, const char *s2){
    char* ans=s1;
    int i=0;
    for(i=0;s2[i]!='\0';i++){
        s1[i]=s2[i];
    }
    s1[i]='\0';
    return ans;
}

6-12 mystrcat

编写一个函数 char* mystrcat(char *s1, const char *s2)

函数功能是把字符串s2的所有元素连接到字符串s1之后。函数返回指向字符串s1第一个元素的指针。

函数接口定义:
函数接口:

 char* mystrcat(char *s1, const char *s2);

把字符串s2的所有元素连接到字符串s1之后。函数返回指向字符串s1第一个元素的指针。

裁判测试程序样例:

#include <stdio.h>

char *mystrcat(char *s1, const char *s2);
int main()
{
    char a[100] = "abcd", b[60], c[30];
    scanf("%s", b);
    scanf("%s", c);
    mystrcat(a, mystrcat(b, c));
    puts(a);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
fgh
ijk
输出样例:
abcdfghijk

char* mystrcat(char *s1, const char *s2){
    char* ans=s1;
    int start=0;
    while(s1[start]!='\0') start++;
    int i=0;
    for(i=0;s2[i]!='\0';i++){
        s1[start+i]=s2[i];
    }
    s1[start+i]='\0';
    
    return ans;
}

6-13 mystrcmp

写一个函数 int mystrcmp(const char *string1, const char *string2)

函数的功能是比较2个字符串的大小。返回值表示两个字符串比较的结果。

函数接口定义:
函数接口:

 int mystrcmp(const char *string1, const char *string2);

函数的功能是比较2个字符串的大小。返回值表示两个字符串比较的结果。
图
字符串比较的规则是对两个字符串自左至右逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如全部字符相同,则认为相等;若出现不同的字符,则以第一个不相同的字符的比较结果为准。
例如:

“A”< “B”,“a”>“A”,“computer”>“compare”,“these”>“that”, “36+54”<“99”, “CHINA”>“CANADA”, “DOG”<“cat”,“abc”<“ax”,“abcde”>“abcd”。

裁判测试程序样例:

#include <stdio.h>

int mystrcmp(const char *s1, const char *s2);
int main()
{
    char s1[30], s2[30];
    scanf("%s", s1);
    scanf("%s", s2);
    if (mystrcmp(s1, s2) > 0)
        printf("%s > %s\n", s1, s2);
    if (mystrcmp(s1, s2) == 0)
        printf("%s == %s\n", s1, s2);
    if (mystrcmp(s1, s2) < 0)
        printf("%s < %s\n", s1, s2);
        
    return 0;
}

/* 请在这里填写答案 */
输入样例:
abcd
ax
输出样例:
abcd < ax

int mystrcmp(const char *string1, const char *string2){
    while(*string1 && *string2){
        if(*string1 > *string2) return 1;
        else if(*string1 < *string2) return -1;
        string1++;string2++;
    }
    if(*string1) return 1;
    if(*string2) return -1;
    
    return 0;
}

6-14 求正整数的因子和

本题要求实现一个函数,可统计1个正整数的因子中,不包括自己的其它所有因子之和。例如,4的因子和是1+2=3,6的因子和是1+2+3=6,7的因子和是1,8的因子和是1+2+4=7,9的因子和是1+3=4。我们约定1的因子和是0。

函数接口定义:
函数接口如下:

int  factors_sum( int x);

其中’ x’是用户传入的参数。 x 的值不超过int的范围。函数须返回 x 的因子和。

裁判测试程序样例:

#include <stdio.h>

int factors_sum(int x);
int main(void)
{
    int x;
    scanf("%d", &x);
    while (x != -1){
        printf("%d\n", factors_sum(x));
        scanf("%d", &x);
    }
    return 0;
}

/* 请在这里填写答案 */
输入样例:
3
9
7
8
10
-1
输出样例:
1
4
1
7
8

int  factors_sum( int x)
{
    int ans=0;
    for(int i=1;i<x;i++){
        if(x%i==0) ans+=i;
    }
    return ans;
}

6-15 字符串翻转

本题要求实现一个函数,把一个字符串前后翻转。

函数接口定义:
函数接口如下:

void reverse(char *start, char *end);

参数中的start指针和end指针指向同一个字符串,start指针小于等于end指针。

裁判测试程序样例:

#include <stdio.h>

void reverse(char *start, char *end);
int main(void)
{
    char s[] = "abcdefghijklmnopqrstuvwxyz";
    printf("%s\n", s);
    reverse(s + 1, s + 3);
    reverse(s + 6, s + 10);
    reverse(s + 13, s + 21);
    printf("%s\n", s);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:

输出样例:
abcdefghijklmnopqrstuvwxyz
adcbefkjihglmvutsrqponwxyz

void reverse(char *start, char *end){
    while(*start!=*end){
        char tmp=*start;
        *start=*end;
        *end=tmp;
        start++;end--;
    }
}

6-17 判断完数

例如:本题要求实现一个函数,判断一个自然数是否是完数。如果一个自然数除自身之外的因子和等于它自己,则称该数为完数。例如 6 = 1 + 2 + 3;则6是完数。

函数接口定义:
在这里描述函数接口。:

int isPerfect (int x);

在这里解释接口参数。其中 x 是用户传入的参数。 x 的值不超过int的范围且 x大于0;如果 x是完数,函数返回1,否则返回0。

裁判测试程序样例:

#include <stdio.h>

int isPerfect(int x);
int main()
{
    for (int i = 1; i <= 10000; i++){
        if (isPerfect(i))
            printf("%d\n", i);
    }
    return 0;
}

/* 请在这里填写答案 */
输入样例:
本程序无需输入
输出样例:
6
28
496
8128

int isPerfect (int x){
    if(x==1) return 0;
    
    int sum=0;
    for(int i=1;i<=x/2;i++){
        if(x%i==0) sum+=i;
    }

    return sum==x;
}

6-18 mystrlen

写一个函数,返回一个字符串的长度。
在C语言中,字符串的长度定义为除’\0’之外的字符元素的个数。

函数接口定义:

int mystrlen ( const char *s );

其中 s 是用户传入的字符串。函数返回 字符串 s 的长度。

裁判测试程序样例:

#include <stdio.h>

int mystrlen(const char *s);
int main(void)
{
    char s[30];
    gets(s);
    printf("%d", mystrlen(s));
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
Hello world!
输出样例:
12

int mystrlen ( const char *s ){
    int ans=0;
    for(int i=0;s[i]!='\0';i++) 
        ans++;

    return ans;
}

6-19 mystrcpy

编写一个函数 char *mystrcpy(char *s1, const char *s2)

它的功能是把字符串s2中的所有字符复制到字符数组s1中。函数返回指向数组s1第一个元素的指针。

函数接口定义:

char *mystrcpy(char *s1, const char *s2)

其中 s1s2 都是用户传入的参数。 函数把字符串s2 中的所有字符复制到字符数组s1中。函数返回指向数组s1第一个元素的指针。

裁判测试程序样例:

#include <stdio.h>

char *mystrcpy(char *s1, const char *s2);
int main(void)
{
    char str1[30], str2[30], str3[30];
    gets(str3);
    mystrcpy(str1, mystrcpy(str2, str3));
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s\n", str3);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
Hello world!
输出样例:
str1: Hello world!
str2: Hello world!
str3: Hello world!

char *mystrcpy(char *s1, const char *s2)
{
    char* ans=s1;
    int i=0;
    for(i=0;s2[i]!='\0';i++){
        s1[i]=s2[i];
    }
    s1[i]='\0';

    return ans;
}

6-20 mystrcat

编写一个函数 char* mystrcat(char *s1, const char *s2)

函数功能是把字符串s2的所有元素连接到字符串s1之后。

函数接口定义:

char* mystrcat(char *s1, const char *s2)

裁判测试程序样例:

#include <stdio.h>

char* mystrcat(char *s1, const char *s2);
int main(void)
{
    char str1[100] = "Winter ", str2[60] = "is ", str3[30] = "comming.";
    mystrcat(str1, mystrcat(str2, str3));
    printf("%s", str1);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
无输入
输出样例:
Winter is comming.

char* mystrcat(char *s1, const char *s2)
{
    char* ans=s1;
    int start=0;
    while(s1[start]!='\0') start++;
    int i=0;
    for(i=0;s2[i]!='\0';i++){
        s1[start+i]=s2[i];
    }
    s1[start+i]='\0';

    return ans;
}

6-21 mystrupr

编写一个函数 void mystrup(char *s);
函数功能是把字符串s中的所有小写字母变成大写字母,其它字符不变。

函数接口定义:

void mystrupr(char *s)

其中 s 是一个字符串。

裁判测试程序样例:

#include <stdio.h>

void mystrupr(char *s);
int main(void)
{
    char s[] = "ab+cdEFhijk@cqust";
    mystrupr(s);
    printf("%s", s);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:

输出样例:
AB+CDEFHIJK@CQUST

void mystrupr(char *s){
    for(int i=0;s[i]!='\0';i++){
        if(s[i]>='a' && s[i]<='z') 
            s[i]-=32;
    }
}

6-22 数字字符转整数

编写函数 int myatoi(const char *s);
返回字符串s中所有数字字符按从左到右的顺序组合成的整数。

函数接口定义:

 int myatoi(const char *s);

其中 s 是用户传入的字符串。 字符串s中可能含有数字字符。把s中的数字字符按从左到右的顺序组合成一个整数,返回这个整数的值。
例如,字符串 "ab3A70@9"中,含有数字字符组合成整数3709。如果字符串s中没有数字字符,则返回0。数据保证数字字符组合不超过整型表示范围。

裁判测试程序样例:

#include <stdio.h>

int myatoi(const char *s);
int main(void)
{
    char s1[30] = "ab6@0gap49$";
    char s2[30] = "5rt1";
    int x = myatoi(s1);
    int y = myatoi(s2);
    int z = x + y;
    printf("%d + %d = %d\n", x, y, z);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:

输出样例:
6049 + 51 = 6100

 int myatoi(const char *s){
     int ans=0;
     int flag=1;
     for(int i=0;s[i]!='\0';i++){
         if(s[i]>='1' && s[i]<='9' && flag==1) {
             ans+=s[i]-'0';
             flag=0;
         }
         else if(s[i]>='0' && s[i]<='9' && !flag)
         {
             ans=ans*10+s[i]-'0';
         }
     }
     return ans;
 }

6-23 统计英文字母的个数

编写函数
int countAlpha(const char *s);
返回字符串s中英文字母的个数。

函数接口定义:
在这里描述函数接口。例如:

int countAlpha(const char *s);

其中 s 是用户传入的字符串。 函数返回字符串 s 中英文字母的个数。如果字符串 s 中没有英文字母,则返回0。

裁判测试程序样例:

#include <stdio.h>

int countAlpha(const char *s);
int main(void)
{
    char s[100];
    gets(s);
    printf("%d", countAlpha(s));
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
963AfBy@ t7
输出样例:
5

int countAlpha(const char *s){
    int ans=0;
    for(int i=0;s[i]!='\0';i++){
        if(s[i]>='A' && s[i]<='Z') ans++;
        if(s[i]>='a' && s[i]<='z') ans++;
    }

    return ans;
}

6-24 求字符串中英文字母和数字字符的个数(传址调用,对指针解引用)

本题要求实现一个函数,可统计任一字符串中英文字母和数字字符出现的次数。例如字符串"Ab32+72=A"中,英文字母出现了3次,数字字符出现了4次。

函数接口定义:
在这里描述函数接口。例如:

int countString(char *str, int *pDigitCount);

在这里解释接口参数。例如:其中 strpDigitCount 都是用户传入的参数。 字符指针 str 指向一个以’\0’结束的字符串; 整型指针pDigitCount指向一个用来统计数字字符出现次数的整数 。函数须返回 str 中 英文字母出现的次数。

裁判测试程序样例:

#include <stdio.h>

int countString(char *str, int *pDigitCount);
int main(void)
{
    char buf[30];
    int alphaCount, digitCount;
    gets(buf);
    alphaCount = countString(buf, &digitCount);
    printf("alphaCount = %d\n", alphaCount);
    printf("digitCount = %d\n", digitCount);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例:
Ab32+72=A
输出样例:
alphaCount = 3
digitCount = 4

int countString(char *str, int *pDigitCount){
    int ans=0;
    *pDigitCount=0;
    for(int i=0;str[i]!='\0';i++){
        if(str[i]>='A' && str[i]<='Z') ans++;
        if(str[i]>='a' && str[i]<='z') ans++;

        if(str[i]>='0' && str[i]<='9') (*pDigitCount)++;
    }

    return ans;
}

6-27 回文

回文是前后两个方向拼写完全相同的字符串。回文的例子如“radar”、“able was i ere i saw elba"和"ABCBA”,“ABBA”。很显然,空字符串是回文,任何一个只有1个字符的字符串是回文。编写一个函数 testPalindrome, 判断一个字符串是否是回文。

函数接口定义:
在这里描述函数接口。例如:

int testPalindrome ( char *start, char *end);

其中 startend 都是用户传入的参数。 字符指针 start 指向字符串第一个字符,字符指针end 指向字符串最后一个字符('\0’前的一个字符)。

裁判测试程序样例:

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

int isPalindrome(char *str);
int testPalindrome(char *start, char *end);
int main(void)
{
    char s[30];
    gets(s);
    if (isPalindrome(s))
        printf("%s is a palindrome.\n", s);
    else
        printf("%s is not a palindrome.\n", s);
    return 0;
}

//isPalindrome函数用来调用testPalindrome
//该函数为用户提供了更友好的接口
//我们可以称isPalindrome函数是testPalindrome函数的包装函数
int isPalindrome(char str)
{
return testPalindrome(str, str + strlen(str) - 1);
}
/
请在这里填写答案 */
输入样例1:
radar
输出样例1:
radar is a palindrome.
输入样例2:
ABBA
输出样例2:
ABBA is a palindrome.
输入样例3:
ABCA
输出样例3:
ABCA is not a palindrome.

int testPalindrome ( char *start, char *end){
    while(start<end){
        if(*start!=*end) 
            return 0;
        start++;end--;
    }
    return 1;
}

6-28 递归顺序输出字符串

编写一个递归函数 displayString,顺序输出一个字符串的所有元素。

函数接口定义:

void displayString(char *s)

其中 s 是用户传入的参数。 s 指向一个以‘\0’结束的字符串第一个字符。

裁判测试程序样例:

#include <stdio.h>

void displayString(char *s);
int main(void)
{
    char s[30];
    gets(s);
    displayString(s);
    return 0;
}

/* 请在这里填写答案 */
输入样例:
Hello world
输出样例:
Hello world

// 递归顺序输出
void displayString(char *s){
    if(*s=='\0') return;// 递归出口

    printf("%c",*s);
    displayString(s+1);
}

6-29 逆序输出字符串

编写一个递归函数 displayStringReverse,逆序输出一个字符串的所有元素。

函数接口定义:

void displayStringReverse(char *s);

其中 s 是用户传入的参数。 s 指向一个以‘\0’结束的字符串第一个字符。

裁判测试程序样例:

#include <stdio.h>

void displayStringReverse(char *s);
int main(void)
{
    char s[30];
    gets(s);
    displayStringReverse(s);
    return 0;
}

/* 请在这里填写答案 */
输入样例:
Hello world!
输出样例:
!dlrow olleH

// 递归逆序输出
void displayStringReverse(char *s){
    if(*s=='\0') return;// 递归出口

    displayStringReverse(s+1);
    printf("%c",*s);
    
}

6-30 四舍五入(实现round函数)

本题要求实现一个函数myRound,返回其浮点型参数四舍五入之后得到的整数。例如myRound(6.49)应该返回6,而myRound(6.51)应该返回7。

函数接口定义:

int myRound (double x);

其中 x 是用户传入的参数。 x 的值不超过double的范围。函数须返回 x 四舍五入后得到的整型数。

裁判测试程序样例:

#include <stdio.h>

int myRound(double x);
int main(void)
{
    double x;
    int y;
    scanf("%lf", &x);
    y = myRound(x);
    printf("x = %f, y = %d\n", x, y);
    
    return 0;
}

/* 请在这里填写答案 */
输入样例1:
6.49
输出样例1:
x = 6.490000, y = 6
输入样例2:
6.51
输出样例2:
x = 6.510000, y = 7

int myRound (double x){
    int ans=(int)x;
    x*=10;
    int res=(int)(x-(int)x/10*10);
    
    return res>=5?ans+1:ans;
}

6-31 Sum of the nodes of a Singly Linked List with dummy header

In this problem you will implement a function for a singly-linked list for geting the sum of the nodes.

Format of functions:

ElementType getSum(List L);

The parameter L is a pointer to the dummy header. The function return the sum of the nodes of a Singly Linked List with dummy header.

where List is defined as the following:

typedef int ElementType; 
struct Node 
{ 
        ElementType data; 
        struct Node* next; 
}; 
typedef struct Node* PtrToNode; 
typedef PtrToNode List;

A singly linked list is a data structure in which an element has two parts one is the value and other is the link to the next element. So to find the sum of all elements of the singly linked list, we have to navigate to each node of the linked list and add the element’s value to a sum variable.

For example
Suppose we have a linked list: Dummy Header -> 2 -> 27 -> 32 -> 1 -> 5
sum = 2 + 27 + 32 + 1 + 5 = 67.

Sample program of judge:

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

typedef int ElementType;
struct Node
{
    ElementType data;
    struct Node* next;
};
typedef struct Node* PtrToNode;
typedef PtrToNode List;
ElementType getSum(List L);
int main(void)
{
    List L = malloc(sizeof(struct Node));
    L->next = NULL;
    ElementType x;
    scanf("%d", &x);
    while (x != -1)
    {
        PtrToNode t = malloc(sizeof (struct Node));
        t->data = x;
        t->next = L->next;
        L->next = t;
        scanf("%d", &x);
    }
    printf("%d", getSum(L));

    return 0;
}

/* Your functions will be put here */

Sample Input:
2 27 32 1 5 -1
Sample Output:
67

ElementType getSum(List L){
    int sum=0;
    for(List p=L->next;p!=NULL;p=p->next){
        sum+=p->data;
    }
    return sum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2097551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统更新报“更新失败“

系统更新报"更新失败" 本章只针对统信UOS系统 系统检查更新失败&#xff0c;或者系统更新的过程中失败&#xff0c;或者提示依赖错误&#xff0c;检测更新失败。 故障处理&#xff1a; 检查下网络是否正常&#xff0c;系统时间是否正常&#xff1b;开启开发者&…

MOS管驱动电路阻值如何选取?以及为什么要有下拉电阻

开通时&#xff0c;电源为高电平&#xff0c;会通过Rg1给MOS的Cgs充电&#xff0c;关断时&#xff0c;Cgs通过Rg2放电.实现慢开快关的过程 如果驱动阻值太大&#xff0c;开关会很慢&#xff0c;会让MOS管的损耗增加&#xff0c;降低了效率&#xff0c;dv/dt&#xff0c;di/dt也…

电路基础 ---- 运放里的虚短虚断

令人稀里糊涂的虚短虚断 想必好多人在学习硬件电路分析时&#xff0c;都会听到虚短虚断这个专业术语&#xff0c;但是对于新手玩家&#xff0c;这个术语不好理解&#xff0c;比如我自己&#xff0c;经常将这两个概念混淆。最近刷到大佬的视频&#xff0c;讲解的非常简洁易懂&a…

蓝卓与用友、中控签署全面战略合作协议

8月9日&#xff0c;蓝卓数字科技有限公司&#xff08;以下简称“蓝卓”&#xff09;与用友网络科技股份有限公司&#xff08;以下简称“用友网络”&#xff09;与中控技术股份有限公司&#xff08;以下简称“中控技术”&#xff09;签署全面战略合作协议。三方将在平台产品融合…

MySQL5.7版本实现数据库审计功能

一、基本介绍 MySQL 数据库审计&#xff08;MySQL Database Auditing&#xff09;主要将用户对数据库的各类操作行为记录审计日志&#xff0c;以便日后进行跟踪、查询、分析&#xff0c;以实现对用户操作的监控和审计。审计是一项非常重要的工作&#xff0c;也是企业数据安全体…

1412312

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

BugKu练习记录:你喜欢下棋吗

题目&#xff1a; 密码全为小写&#xff0c;格式bugku{} 解压密码&#xff1a; 你喜欢下棋吗&#xff1f; 解压密码为小写 4423244324433534315412244543棋盘密码解密&#xff1a; thisispolybius用这个密码解压&#xff0c;打开flag.txt文件 一种5bit的编码 bugku里面的内…

Transformer 动画揭秘:数据处理的四大关键技术

0背景 Transformer 大模型&#xff0c;一种基于自注意力机制的神经网络架构&#xff0c;已被广泛应用于各种自然语言处理任务&#xff0c;比如&#xff1a;机器翻译、文本摘要、生成问答等。 从端到端的角度来看&#xff0c;Transformer 大模型中数据的处理流程主要包括四个阶…

基于matlab的行人和车辆检测系统

基于matlab的行人和车辆检测系统 【目标检测】基于计算机视觉&#xff0c;含GUI界面 算法&#xff1a;二帧差分法&#xff0c;三帧差分法&#xff0c;混合高斯建模&#xff0c;ViBe算法。 功能&#xff1a;对视频中出现的动态目标进行逐帧作差分析或ViBe算法检测&#xff0c;使…

[线程] 定时器 及 实现定时器

文章目录 一. 定时器二. 标准库中的定时器三. 实现定时器1. 创建MyTimerTask类2. 通过一定的数据结构, 保存多个任务3.MyTimer类的构造方法4. 实现schedule方法完整代码: 一. 定时器 定时器, 就是"闹钟"的效果 指定一个任务(Runnable), 并且指定一个时间, 此时这个任…

PMP核心知识点—之项目运行环境

知识点1&#xff1a;项目合规性 不合规的项目就不应该做。 知识点2&#xff1a;项目影响两大因素 组织过程资产、事业环境因素 知识点3&#xff1a;职能型以及项目型组织结构 知识点4&#xff1a;矩阵型组织结构 弱矩阵—平衡矩阵—强矩阵 (项目经理权力的强弱) 知识点5&am…

Oracle rac模式下undo表空间爆满的解决

文章目录 前言一、确认对应实例的undo表空间二、确认对应实例undo的文件位置三、确认回滚段使用情况四、检查undo segment状态五、创建新的undo表空间并进行切换六、等待原undo表空间segment状态变更为offline七、删除原undo表空间以及数据文件 前言 一、确认对应实例的undo表空…

如何把自动获取的ip地址固定

在大多数网络环境中&#xff0c;‌设备通常会自动从DHCP服务器获取IP地址。‌这种动态分配IP的方式虽然灵活方便&#xff0c;‌但在某些特定场景下&#xff0c;‌我们可能需要将设备的IP地址固定下来&#xff0c;‌以确保网络连接的稳定性和可访问性。‌本文将详细介绍如何把自…

C++知识点概述

C知识点概述 C是一种功能强大的编程语言&#xff0c;广泛应用于系统软件、游戏开发、高性能服务器和客户端应用等领域。在大学课程中&#xff0c;C通常作为计算机科学和软件工程学科的核心课程之一。以下是C的一些关键知识点&#xff0c;这些知识点构成了大学课程的基础。 1.…

CTF入门之奇怪的密码及图形编码总结篇(持续更新中ing)

CTF入门之奇怪的编码及图形编码(持续更新中ing UTF-8&#xff0c;unicode乱码社会主义核心价值观编码&#xff1a;在线解码&#xff1a; 与佛论禅&#xff1a;在线解密网站&#xff1a; 与熊论道&#xff1a;在线网站解密&#xff1a; 兽音&#xff1a;在线网站解密&#xff1a…

MySQL数据库(0)—— 云服务器安装MySQL

本篇主要介绍在Ubuntu环境下安装MySQL 一&#xff0c;查看系统版本 lsb_release -a二&#xff0c;添加MySQL APT 源 2.1 访问下载页面并下载发布包 传送门&#xff1a;MySQL :: Download MySQL APT Repository 下载之后&#xff0c;就可以通过 rz 命令上传到云服务器上&…

大牛荐书:美团王慧文清华大学产品经理课推荐阅读书单

美团网的王兴大家应该都很熟悉&#xff0c;作为美团的掌舵人和1号位&#xff0c;带领美团于2018年9月在港交所上市&#xff0c;公司市值在国内互联网大厂中排名第4&#xff0c;公司全职员工数11.5万人&#xff0c;2023年实现营业收入2767亿元&#xff0c;利润233亿元。 相比王兴…

MATLAB下的粒子滤波例程|三维非线性模型|组合导航|PF代码(无需下载,直接复制到MATLAB上即可运行)

文章目录 模型与程序概述PF介绍运行结果程序代码各部分模块的作用模型与程序概述 模拟INS、GPS组合导航的应用背景。在模型预处理的时候通过迭代计算三维位置的真值和滤波前(模拟纯INS计算)的值。 通过 P F PF PF(粒子滤波, p

WorkPlus安全即时通讯:端到端加密开启信息保密新时代

在数字化时代&#xff0c;信息的保密性和安全性变得越发重要。企业和个人需要确保他们的敏感信息和机密通讯不会落入黑客或第三方的手中。为了满足这一需求&#xff0c;WorkPlus安全即时通讯平台应运而生。作为一款拥有端到端加密功能的通讯平台&#xff0c;WorkPlus着重于保护…

8.30 容器部署project-exam-system项目

一、项目-使用docker部署project-exam-system 1、背景 在一台主机之内&#xff0c;实现容器的编排&#xff0c;发布考试系统 2、环境准备 # 部署docker环境 [rootdocker ~]# sh docker.sh [rootdocker ~]# vim /etc/docker/daemon.json { "registry-mirrors…