期末复习——基础题集 pta c语言

5-7
本题目用指针变量输入、输出数组arrA的元素值。

#include <stdio.h>

int main(void)
{
    int *ptr, arrA[5];
    //读入数组元素
    for ( ptr=arrA; ptr<arrA+5; ptr++)
    {
        
scanf("%d",ptr);

    }
        //输出数组元素
    
ptr=arrA;

    for(;  ptr<arrA+5;   ptr++)
    {
        printf("%d ",*ptr);
    }
    printf("\n");

    return 0;
}

5-8
本题要求输出字符数组中下标为偶数的字符。

#include<stdio.h>

int main(void)
{
    
char *str;
 

    str = "abcdefghijk";

    while (*str != '\0')
    {
        putchar(*str);

        
str+=2;


        if ('\0' == *(str-1))
        {
            break;
        }

    }

    return 0;
}

5-9
本题要求实现字符串的拷贝。

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

void MyStrcpy(char *dstStr, const char *srcStr);

int main(void)
{
    char srcStr[100], detStr[100];

    printf("please input string :");
    gets(srcStr);
    MyStrcpy(detStr, srcStr);
    printf("copied string is:");
    puts(detStr);

    return 0;
}

void  MyStrcpy(char *dstStr, const char *srcStr)
{
    while 
(*srcStr)

    {
        
*dstStr=*srcStr;

        srcStr++;
        dstStr++;
    }
    
*dstStr='\0';

}

5-10
本题目要求写一个函数 mystrcmp实现字符串比较,相等输出 0,不等输出其差值,在主函数输出比较结果。

#include<stdio.h>
#define N 20
int mystrcmp(char *s1,char *s2); 
int main()
{
    char str1[N],str2[N];

    gets(str1);

    gets(str2);

    printf("compare result = %d\n",
mystrcmp(str1,str2)
 );   

    return 0;
}

int mystrcmp(char *s1,char *s2) 
{
    while(*s1!='\0'&&*s2!='\0') 
    {
        if 
(*s1==*s2)

        {
            s1++;
            s2++;
        }
        else 
return *s1-*s2;
     
    }
    while(*s1 != '\0') 
            return *s1;
    while(*s2 != '\0') 
            return -*s2;
    return 0;
}

5-11
程序功能是将二维数组的元素值输出到屏幕上

#include<stdio.h>

int main(void)
{
    int a[2][3]={1, 2, 3, 4, 5, 6}, i, j;

    int (*p)[3];

    p = a;
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("%d   ", 
*(*(p+i)+j)
);
        }
        printf("\n");
    }

    return 0;
}

5-12
程序的功能是从键盘读入一个不超过80个字符的字符串(包括数字、非数字字符、空格等,如:a123x456 17960? 302tab5876),将其中连续的数字作为一个整数,依次存放到一数组a中,例如针对刚才的例子,则123放在a[0]中,17960放在a[2]中……统计共有多少个整数,假定连续的数字值在int表示范围内。

#include<stdio.h>
#include<string.h>
int main(void)
{
    char str[80], *pstr;
    int i, j, k, m, e10, digit, ndigit, a[80], *pa;

    gets(str);
    pstr = str;           /* 字符指针pstr置于数组str首地址 */

    
pa=a;
       /* 指针pa置于a数组首地址 */
    ndigit = 0;              /* ndigit代表有多少个整数 */
    i = 0;                    /* 代表字符串中第n个字符 */
    j = 0;                    /* 代表连续数字的位数 */
    while (1)
    {
        if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
        {
            j++;
        }
        else
        {
            if (j > 0)
            {
                
digit=*(pstr + i-1)-'0';
 /* 将个位数赋予digit */
                k = 1;
                while (k < j)     
                {
                    e10=1;
                    for (m=1; m<=k; m++)
                    {
                        e10=e10*10;       /* e10代表该位数所应乘的因子 */
                    }
                    digit = digit + (*(pstr + i - 1 - k) - '0') * e10;     
                    k++;                 
                }

                 
*pa=digit;
               /* 将数值赋予数组a */
                ndigit++;
                pa++;                     
                j = 0;
            }
        }
        if ('\0' == *(pstr + i))
        {
            break;
        }
        i++;
    }

    printf("There are %d numbers in this line.They are:\n", ndigit);
    for(j=0; j<ndigit; j++)              /* 显示数据 */
    {
        printf("%d ", a[j]);
    }
    printf("\n");

    return 0;
}

5-13
程序的功能是:找出任意的一个m×n矩阵每一行上的最大值存放在数组max中,并在主函数显示出来。

#include <stdio.h>
#define N 20

void max_row(int (*p)[N], int m, int n, int *max);

int main(void)
{

    int i, j, juZhen[N][N];
    int m, n ,max[N];
    scanf("%d%d", &m, &n);

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &juZhen[i][j]);
        }
    }
     
max_row(juZhen,m,n,max);


    for (i=0; i<m; i++)
        printf("The max in line %d is: %d\n", i+1, 
*(max+i)
);    
    return 0;
}

void max_row(int (*p)[N], int m, int n, int *max)
{
    int i, j;

    for (i=0; i<m; i++, p++, max++)
    {
        *max = **p;
        for (j=0; j<n; j++)
        {
            if (
*((*p)+j)>*max
)
                
*max=*((*p)+j);

        }
    }
}

5-14
程序功能是找到二维数组每一行的最大值。

#include <stdio.h>

void findmax(int (*pArr)[4], int *pmax, int m, int n);

int main(void)
{ 
  int arr[3][4], *pa, max[3], i;
  pa = arr[0];
  for (i=0; i<12; i++)
  {
     scanf("%d", pa++);
  }
  
findmax(arr,max,3,4);

  for (i=0; i<3; i++)
  {
     printf("line %d's max = %d\n", i, max[i]);
  }
  return 0;
}

void findmax(int (*pArr)[4], int *pmax, int m, int n)
{
   int i, j;

   for (i=0;  i<m;  i++, pmax++)
   {
       
*pmax=*(*pArr+i);

       for (j=1; j<n; j++)
       {
         if 
(*(*(pArr+i)+j)>*pmax)

         {
             
*pmax=*(*(pArr+i)+j);

         }
    }
   }
} 

5-15 题目要求调用input函数输入N个字符串。

#include <stdio.h>
#define N 5
void input(char **p, int n);
int main(void)
{
    char data[N][81], *ptr[N];
    int i;
    for(i=0;i<N;i++)
        
ptr[i]=data[i];

    input(ptr,N);
    for(i=0;i<N;i++)
        printf("%s\n",*(ptr+i));
    return 0;
} 
void input(char **p, int n)
{
    int i;
    for(i=0;i<n;i++)
    
gets(*p++);

}

5-16
字符串排序,例如输入:banana orrange apple,则以下程序的输出结果: apple banana orrange

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

#define  MAXLINE 20

void sort(char **pstr);

int main(void)        
{
    int i;
    char *pstr[3], str[3][MAXLINE];

    for (i=0; i<3; i++)
    {
        pstr[i] = str[i];
    }

    printf("Please input:");
    for (i=0; i<3; i++) 
    {
        scanf("%s",
str[i]
);
    }

    sort(pstr);
    printf("output:");
    for (i=0; i<3; i++)
    {
        printf("%s\n",
pstr[i]
);
    }

    return 0;
}

void sort(char **pstr)
{
    int i, j;
    char *p;

    for (i=0; i<3; i++)
    {
        for (j=i+1; j<3; j++)
        {
            if (strcmp(
*(pstr+i),*(pstr+j)
) > 0)
            { 
                p = *(pstr+i);
                *(pstr+i) = *(pstr+j);
                *(pstr+j) = p;
            }
        }
    }
}

5-17
程序功能是:输入数组的长度n(n<=20)以及每个数组元素,排序后输出。

#include <stdio.h>

void change(int *p1, int *p2);
int *sort(int *pArr, int n);

int main( )
{
    int arr[20], *pa, i, n;

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

    
pa=sort(arr,n);

    printf("output : \n");
    for (i=0; i<n; i++)
    {
        printf("%d   ", *(pa + i));
    }
    printf("\n");

    return 0;   
}

void change(int *p1, int *p2)
{
    int tmp;

    tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
}

int *sort(int *pArr, int n)

{
    int i, *pa;

    for (i=n-1; i>0; i--)
    {
        for (pa=pArr; pa<pArr+i; pa++)
        {
            if (*pa > *(pa+1))
            {
                
change(pa,pa+1);

            }
        }
    }

    
return pArr;


}

5-20
程序功能是:在子函数中动态申请内存空间,并在主函数中使用该空间进行赋值等操作。

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10
void GetMemory(char **ptr, int num);

int main(void)
{
    char *str;

    
GetMemory(&str,N);

    strcpy(str, "hello");
    printf("%s\n", str);

    
free(str);


    return 0;
}

void GetMemory(char **ptr, int num)
{
     
*ptr=(char *)malloc(num*sizeof(char));

}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页