ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PTA指针&结构体

2021-11-20 14:00:56  阅读:156  来源: 互联网

标签:include name int scanf PTA char ++ 指针 结构


目录

1.移动字母

2.拆分实数的整数与小数部分

3.查找星期 

4.字符串的连接

5.使用函数实现字符串部分复制

6 判断回文字符串 

*7.按等级统计学生成绩

* 8.指定位置输出字符串



* 9.计算职工工资

*10.输出学生成绩

11.找出总分最高的学生

12.计算平均成绩

*13.循环移动

*14.找最大的字符串

*15.删除字符串中指定字母


1.移动字母

 

 void Shift( char s[] )
{
    char a[3];
    int i,j;
    for(i = 0; i < 3;i++)
        a[i] = s[i];
    for(i=3;s[i]!='\0'; i++)
        s[i-3]=s[i];
    for(j=i-3, i = 0; i < 3;i++,j++)
        s[j] = a[i];
}

2.拆分实数的整数与小数部分

 

 void splitfloat( float x, int *intpart, float *fracpart )
 {
	int y=(int)x;
	float z;
	*intpart=y;
	z=(x-(int)x);
	*fracpart=z ;
	return;
}

3.查找星期 

 

int getindex( char *s )
{
  int result = -1;
    if(strcmp(s,"Monday")==0)
        result = 1;
    if(strcmp(s,"Tuesday")==0)
        result = 2;
    if(strcmp(s,"Wednesday")==0)
        result = 3;
    if(strcmp(s,"Thursday")==0)
        result = 4;
    if(strcmp(s,"Friday")==0)
        result = 5;
    if(strcmp(s,"Saturday")==0)
        result = 6;
    if(strcmp(s,"Sunday")==0)
        result = 0;
    
    return result;
}

4.字符串的连接

 

char *str_cat( char *s, char *t )
{
    char *one = s;
    while(*s !='\0')
    {
        s++;
    }
    for(;*t!='\0';s++,t++)
    {
        *s = *t;
    }
    *s = '\0';
    return one;
}

5.使用函数实现字符串部分复制

 

  void strmcpy( char *t, int m, char *s )
 {
     int len = strlen(t);
     char*p = m+t-1;
     if(m>len)
         *s = NULL;
     while(*p!='\0')
     {
         *s = *p;
         s++;
         p++;
     }
     *s = '\0';
     return s;
 }

置为空指针时,是指针指向的值置为空   *s = NULL

6 判断回文字符串 

 

bool palindrome( char *s )
{
    int flat = 1;
    int len = strlen(s);
    for(int i = 0;i<len/2;i++)
    {
        if(s[i] !=s[len-1-i])
            flat = 0;
    }
    return flat;
}

*7.按等级统计学生成绩

 

  int set_grade( struct student *p, int n )
{
    int count = 0;
    int i = 0;
    for(i=0;i<n;i++)
    {
        if((*p).score<60)//不能写成*p.score 此时视为*(p.score)
        {
            count++;
            (*p).grade = 'D';
        }
        else if((*p).score>=60&&(*p).score<=69)
            (*p).grade = 'C';
        else if((*p).score>=70&&(*p).score<=84)
            (*p).grade = 'B';
        else 
            (*p).grade = 'A';
        
        p++;
    }
    return count;
}

* 8.指定位置输出字符串

 //法一:
char *match( char *s, char ch1, char ch2 )
{
	int i=0;
	char *p;
	for(;(i<strlen(s))&&(s[i]!=ch1);i++);
	p=&s[i];      //保存起始位置的首地址
	for(;i<strlen(s);i++)
  {
	printf("%c",s[i]);//从起始位置开始输出知道结尾
	if(s[i]==ch2)
	break;
  }
	printf("\n");
	return p;
}
 

//法二:
char *match( char *s, char ch1, char ch2 )
{
  int index=-1;  //-1表示没找到,不是-1表示找到了ch1
  for(int i=0;i<strlen(s);i++)
  { //找到ch1以后开始输出字符,找到第一个ch2以后结束输出
	if(index==-1&&s[i]==ch1)
	  index=i;
	if(index!=-1)printf("%c",s[i]);
	if(index!=-1&&s[i]==ch2)break;
  }
  printf("\n");
  if(index==-1)return s+strlen(s);//如果没找到输出空行,要表示空行,则用字符串最后一位,即s[len]
  return s+index;
}
 
//法三:
char *match( char *s, char ch1, char ch2 )
{
	char *p=s;//先指向s
	while(*p!='\0'&&*p!=ch1)
	{
		p++;
	}//查找ch1
	char *q=p;
	if(*p==ch1&&*q==ch2)
	{
	  printf("%c\n",ch1);
	  return p;
	}//如果ch1与ch2指向同一个字符直接输出
	while(*q!='\0'&&*q!=ch2)
	{
		printf("%c",*q++);
		if(*q==ch2)
		{
		  printf("%c",ch2);
		}//这是找的到ch1的情况
		先输出再自增移动到下一个位置
	}
	printf("\n");
	注意格式,在例子中可以发现有输出空行
	return p;
}


//法四:
char* match(char* s, char ch1, char ch2)
{
	char* p;
	int i, j;
	for (i = 0; i < strlen(s); i++)
		if (s[i] == ch1)break;
	p = &s[i];
	for (j = i; j < strlen(s); j++)
	{
		printf("%c", s[j]);
		if (s[j] == ch2)break;
	}
	printf("\n");
	return p;
}

 优先考虑方法4

* 9.计算职工工资

 #include<stdio.h>
typedef struct work
{
	char name[100];
	float base;
	float fdgz;
	float expend;
	float sum;
 
 
}WORK;
int main()
{
	WORK s[10000];
	int n, i,j;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		
		scanf("%s", &s[i].name);
		scanf("%f", &s[i].base);
		scanf("%f", &s[i].fdgz);
		scanf("%f", &s[i].expend);
		s[i].sum = (s[i].base + s[i].fdgz)-s[i].expend;
	}
	for (j = 0; j < n;j++)
	{
		printf("%s %.2f\n", s[j].name, s[j].sum);
 
	}
	return 0;
}

*10.输出学生成绩

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,n;
    int *p;
    scanf("%d",&n);
    p = (int*)malloc(sizeof(int)*n);
    float sMax,sMin,sSum = 0;
    float sAvg;
    for(i = 0;i<n;i++)
    {
        scanf("%d",p+i);
        if(i==0)
        {
            sMax = *p;
            sMin = *p;
        }
        else 
        {
            if(sMax<*(p+i))
                sMax =*(p+i);
            if(sMin>*(p+i))
                sMin = *(p+i);
        }
        sSum += *(p+i);
    }
    sAvg = sSum/n;
    printf("average = %.2f\n",sAvg);
    printf("max = %.2f\n",sMax);
    printf("min = %.2f",sMin);
    
    return 0;
    
}

11.找出总分最高的学生

 

#include <stdio.h>
typedef struct student
{
    char number[100];
    char name[100];
    int math;
    int english;
    int chinese;
    int sum;
}student;

int main()
{
    struct student s[100];
    int i,j,n,k;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        {
            scanf("%s %s %d %d %d",&s[i].number,&s[i].name,
                  &s[i].math,&s[i].english,&s[i].chinese);
            s[i].sum = s[i].math+s[i].chinese+s[i].english;
        }
    int max = 0;
    for(j=0;j<n;j++)
    {
        if(s[j].sum>max)
        {
            max = s[j].sum;
            k = j;
        }
    }
    printf("%s %s %d",s[k].name,s[k].number,s[k].sum);
    return 0;
    
}

12.计算平均成绩

 

#include<stdio.h>
struct student{
	char num[6];
	char name[10];
	int score;
}; 
int main (){
	struct student A[10];
	int n,i,sum=0;
	scanf("%d\n",&n);
	for(i=0;i<n;i++){
	scanf("%s%s%d",A[i].num,A[i].name,&A[i].score);
	sum+=A[i].score;}
	float average;
	average=((float)sum)/n;
	int flag=0;
	printf("%.2f\n",average);
	for(i=0;i<n;i++){
		if(A[i].score<average&&flag==0){
			printf("%s %s",A[i].name,A[i].num);
			flag++;
		}
		else if(A[i].score<average){
			printf("\n");
			printf("%s %s",A[i].name,A[i].num);
	}}
	return 0;
}

*13.循环移动

#include<stdio.h>
#include<stdlib.h>
void move(int *x,int n,int m)
{
    int i;
    printf("After move:");
    for(i=n-m;i<n;i++)
        {
                printf(" %d",x[i]);
        }
    for(i=0;i<n-m;i++)
        {
                printf(" %d",x[i]);
        }
}
int main()
{   
    int *p;    
    int n,m,i;
    scanf("%d %d",&n,&m);
    p=(int *)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
    {        
          scanf("%d",&p[i]);
    }
    move(p,n,m);
    return 0;
}



*14.找最大的字符串

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

#define MAX 5
#define MAX_LINE 10

int main()
{
    int i,j;
    char name[MAX][MAX_LINE];
    char temp[2][100];

    for (i = 0; i < MAX; i++)
        scanf("%s", &name[i]);
        strcpy(temp[0],name[0]);
    //printf("%s", temp[0]);
    for (i = 1; i < MAX; i++)
        if(strcmp(temp[0],name[i]) < 0)
            strcpy(temp[0],name[i]);
    printf("Max is:");
    printf(" %s", temp[0]);

    return 0;
}

*15.删除字符串中指定字母

 

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[100];
    int i,k,j=0;
    char ah[100];
    gets(ch);
    k=strlen(ch);
    for(i=0;i<k;i++)
    {
        if(ch[i]!='a')
            ah[j++]=ch[i];
    }
    puts(ah);
    return 0;
}
#include<stdio.h>
int main()
{
    char a[100],*n,*m;
    gets(a);
    for(n=&a[0],m=&a[0]; *n != '\0';n++)//n=&a[0]把首地址赋值给n(或n=a)
        if(*n != 'a') *m++ =*n; //*m++ =*n;  相当于*m =*n;m++;
            *m = *n;
    puts(a);
return 0;
}
#include<stdio.h>
#include<string.h>
void main()
{
    char a[100],*p;
	int v,i,u;
	scanf("%s",a);
	p=a;
	v=strlen(p);
	for(i=0;i<v;i++)
		if(*(p+i)=='a')
		{
			u=i;
			while(*(p+u+1)!='\0')
			{
				*(p+u)=*(p+u+1);
				u++;
			}
			*(p+u)='\0';
			i--;
		}
	printf("%s\n",p);
}

标签:include,name,int,scanf,PTA,char,++,指针,结构
来源: https://blog.csdn.net/m0_61548909/article/details/121436993

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有