南京師範大学の再審査プログラムエイト

71.その日計算(年、月、日を含む)構造体変数の定義、年、月、日を入力し、今年の日です

#include <stdio.h>

struct y_m_d  //年月日结构体
{
    int year;
    int month;
    int day;
};

int days(int year,int month,int day)  //求天数
{
    int day_sum=0,i;
    int day_tab[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    for(i=1; i<month; i++)
        day_sum+=day_tab[i];
    day_sum+=day;
    if(((year%4==0&&year%100!=0)||year%400==0)&&month>=3)  //判断闰年
        day_sum+=1;
    return day_sum;
}

int main()
{
    struct y_m_d date;
    int day_sum;
    scanf("%d %d %d",&date.year,&date.month,&date.day);
    day_sum=days(date.year,date.month,date.day);
    printf("该日是第%d天\n",day_sum);
    return 0;
}

結果:

72.学生番号、名前、3コースのグレード、3コースの成績平均点を印刷し、学生番号、名前、コースグレード3、平均含めた学生の最高得点(を含む3人の学生、各学生のデータがあります。スコア)

#include <stdio.h>
#define n 3
struct Student   //学生结构体
{
    long num;
    char name[8];
    int score[3];
    float avg;
} stu[n];
int main()
{
    int i,j,maxi=0;
    float sum,max=0;
    for(i=0; i<n; i++)   //对n个学生成绩处理
    {
        sum=0;
        scanf("%ld %s ",&stu[i].num,stu[i].name);
        for(j=0; j<3; j++)
        {
            scanf("%d",&stu[i].score[j]);
            sum+=stu[i].score[j];
        }
        if(sum>max)
        {
            max=sum;
            maxi=i;
        }
        stu[i].avg=sum/3.0;
    }

    printf("打印学生信息:\n");
    for(i=0; i<n; i++)
    {
        printf("%ld %s ",stu[i].num,stu[i].name);
        for(j=0; j<3; j++)
            printf("%d ",stu[i].score[j]);
        printf("%.2f\n",stu[i].avg);
    }

    printf("打印平均成绩最高的学生信息:\n");
    printf("%ld %s ",stu[maxi].num,stu[maxi].name);
    for(j=0; j<3; j++)
        printf("%d ",stu[maxi].score[j]);
    printf("%.2f\n",stu[maxi].avg);
    return 0;
}

結果:

73.交換(ポインタ)

#include <stdio.h>

int main()
{
    int *p1,*p2,a,b,*p;
    scanf("%d %d",&a,&b);
    p1=&a;
    p2=&b;
    if(a<b)   //a,b的值未变;p1,p2中保存的地址变了,所以指向的值自然就变了
    {
        p=p1;
        p1=p2;
        p2=p;
    }
    printf("a=%d,b=%d\n",a,b);
    printf("max=%d,min=%d\n",*p1,*p2);
    return 0;
}

結果:

74交換ジ(ポインタ)

#include <stdio.h>

void swap(int *p1,int *p2)   //交换的是地址中的值,注意和上面a,b值的区别
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}
int main()
{
    int *p1,*p2,a,b;
    scanf("%d %d",&a,&b);
    p1=&a;
    p2=&b;
    swap(p1,p2);
    printf("a=%d,b=%d\n",a,b); 
    printf("max=%d,min=%d\n",*p1,*p2);
    return 0;
}

結果:

75ああ入力3つの数字、B、C、それらの出力の降順。

#include <stdio.h>

void swap(int *p1,int *p2)  //交换地址中的值
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}

void exchange(int *p1,int *p2,int *p3)
{
    if(*p1<*p2)
        swap(p1,p2);
    if(*p1<*p3)
        swap(p1,p3);
    if(*p2<*p3)
        swap(p2,p3);
}

int main()
{
    int *p1,*p2,*p3,a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    p1=&a;
    p2=&b;
    p3=&c;
    exchange(p1,p2,p3);  //传址
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    printf("*p1=%d,*p2=%d,*p3=%d\n",*p1,*p2,*p3);
    return 0;
}

結果:

76配列ポインタ

#include <stdio.h>

int main()
{
    int a[10]= {0,1,2,3,4,5,6,7,8,9};
    int *p;
    printf("一维数组中的值:\n");
    for(p=a; p<a+10; p++)    //一维数组指针应用
        printf("%d ",*p);
    printf("\n");

    int b[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23};
    int *q;
    printf("二维数组中的值:");
    for(q=b[0]; q<b[0]+12; q++)  //二维数组,线性存储
    {
        if((q-b[0])%4==0)
            printf("\n");
        printf("%4d ",*q);
    }
    printf("\n");

    return 0;
}

結果:

77. 3×3行列転置(ポインタ)

#include <stdio.h>

void moved(int *pointer)
{
    int i,j,t;
    for(i=0; i<3; i++)    //对矩阵进行转置
        for(j=0; j<i; j++)
        {
            t=*(pointer+3*i+j);    //二维数组的指针表示法
            *(pointer+3*i+j)=*(pointer+3*j+i);
            *(pointer+3*j+i)=t;
        }
}
int main()
{
    int a[3][3],*p,i,j;
    for(i=0; i<3; i++)       //输出原矩阵
        for(j=0; j<3; j++)
            scanf("%d",&a[i][j]);
    p=&a[0][0];    //二维数组的首地址
    moved(p);   //转置
    printf("转置之后的矩阵为:\n");  //输出转置矩阵
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    return 0;
}

結果:

78.数nは逆の順序で、入力配列(ポインタ)

#include <stdio.h>

void sort(char *p,int m)
{
    int i;
    char temp,*p1,*p2;
    for(i=0; i<m/2; i++)
    {
        p1=p+i;
        p2=p+(m-1-i);
        temp=*p1;
        *p1=*p2;
        *p2=temp;
    }
}
int main()
{
    int i,n;
    char *p,num[20];
    scanf("%d",&n);
    getchar();    //char数组用scanf输入能接收回车
    for(i=0; i<n; i++)
        scanf("%c",&num[i]);
    p=&num[0];
    sort(p,n);
    for(i=0; i<n; i++)
        printf("%c",num[i]);
    printf("\n");
    return 0;
}

結果:

79. 2つの文字列の比較(ポインタ)を達成するために、独自のstrcmp関数を書きます

#include <stdio.h>

int strcmp(char *p1,char *p2)
{
    int i;
    i=0;
    while(*(p1+i)==*(p2+i))  //进行比较。若相等则继续
        if(*(p1+i++)=='\0')
            return 0;
    return (*(p1+i)-*(p2+i));  //若两字符不相等,则返回结果
}
int main()
{
    char str1[20],str2[20],*p1,*p2;
    gets(str1);
    gets(str2);
    p1=&str1[0];
    p2=&str2[0];
    printf("Result:%d",strcmp(p1,p2));
    printf("\n");
    return 0;
}

結果:

80月の数、月の英語名の出力(ポインタ)を入力します

#include <stdio.h>

int main()
{   //month_name[13][20]相同作用
    char *month_name[13]= {"illegal month","January","February","March","April","May","June","July","August","September","October","November","December"};
    int n;
    scanf("%d",&n);
    if(n>=1&&n<=12)
        printf("It is %s",*(month_name+n));
    printf("\n");
    return 0;
}

結果:

 

公開された462元の記事 ウォン称賛55 ビュー320 000 +

おすすめ

転載: blog.csdn.net/LY_624/article/details/105030114