工大SSE(中等难度)

一维数组//中等已完结

  1. 从键盘输入n个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。

要求按如下函数原型编写程序

void ReadData(int a[], int n);

void PrintData(int a[], int n);

void MaxMinExchang(int a[], int n);

**输入提示信息要求:

"Input n(n<=10):\n"

"Input %d numbers:\n"

**要求输入格式为:"%d"

**输出提示信息:"Exchange results:"

**要求输出格式为:"%5d"

输出数组中所有数据后换行

注意此题提示信息"Input %d numbers:\n"不是打印出%d而是打印出n的值


#include <stdio.h>
#include <stdlib.h>
#define N 10
void ReadData(int a[],int n)
{

    printf("Input %d numbers:\n",n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
}
void MaxMinExchange(int a[],int n)
{
    int max=-99999;
    int min=99999;
    int tempmax=-1;
    int tempmin=-1;
    for(int i=0;i<n;i++)
    {

            if(max<a[i])
            {
                tempmax=i;
                max=a[i];
            }
            if(min>a[i])
            {
                tempmin=i;
                min=a[i];
            }
    }
    a[tempmax]=min;
    a[tempmin]=max;
}
void PrintData(int a[],int n)
{
    printf("Exchange results:");
    for(int i=0;i<n;i++)
    {
        printf("%5d",a[i]);
    }
}
int main()
{
    int a[N],n;
    printf("Input n(n<=10):\n");
    scanf("%d",&n);
    ReadData(a,n);
    MaxMinExchange(a,n);
    PrintData(a,n);
    return 0;
}

如果想打印出%d,则需要在printf函数中输入printf("Input %%d numbers:\n",n);


#include <stdio.h>
#include <stdlib.h>
#define N 10
void ReadData(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("Input %%d numbers:\n");
        scanf("%d",&a[i]);
    }
}
void MaxMinExchange(int a[],int n)
{
    int max=-99999;
    int min=99999;
    int tempmax=-1;
    int tempmin=-1;
    for(int i=0;i<n;i++)
    {

            if(max<a[i])
            {
                tempmax=i;
                max=a[i];
            }
            if(min>a[i])
            {
                tempmin=i;
                min=a[i];
            }
    }
    a[tempmax]=min;
    a[tempmin]=max;
}
void PrintData(int a[],int n)
{
    printf("Exchange results:");
    for(int i=0;i<n;i++)
    {
        printf("%5d",a[i]);
    }
}
int main()
{
    int a[N],n;
    printf("Input n(n<=10):\n");
    scanf("%d",&n);
    ReadData(a,n);
    MaxMinExchange(a,n);
    PrintData(a,n);
    return 0;
}
  1. 下面的两个数组代表生产8个产品时的固定成本和可变成本:

float fixed[] = { 11.31, 12.12, 13.67, 11.91, 12.30, 11.8, 11.00, 12.00 } ;

float variable[] = { 1.12, 1.13, 3.14, 1.35, 2.20, 1.28, 1.00, 2.10 } ;

写一个程序输入编号为1到8的产品号以及生产的数量,输出生产这种产品的总成本。

注:总成本=固定成本+产品个数*可变成本

**输入格式要求:"%d"

提示信息:"请输入产品号(1-8):" "请输入该种产品的生产数量:"

**输出格式要求:"生产编号为%d,数量为%d的产品的总成本为%.2f\n"


#include <stdio.h>
#include <stdlib.h>
float All(float fixed[],float variable[],int n,int flag)
{
    return fixed[n]+flag*variable[n];
}
int main()
{
    float fixed[]   =  { 11.31, 12.12, 13.67, 11.91, 12.30, 11.8, 11.00, 12.00 };
    float variable[] = { 1.12, 1.13, 3.14, 1.35, 2.20, 1.28, 1.00, 2.10 };
    int n;
    printf("请输入产品号(1-8):");
    scanf("%d",&n);
    int flag;
    printf("请输入该种产品的生产数量:");
    scanf("%d",&flag);
    float ans=All(fixed,variable,n-1,flag);
    printf("生产编号为%d,数量为%d的产品的总成本为%.2f\n",n,flag,ans);
    return 0;
}
  1. 编写一个程序,将用户输入的十进制短整型正数n转换成二进制数。如果用户输入负数或者读入错误,则要求用户重新输入。

输入提示信息:"n="

**输入格式:"%hd" /* short 类型 */

输出信息:"the binary number is "

**输出格式要求:"%d"

程序运行示例如下:

n=37

the binary number is 0000000000100101


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int a[16]={0};
    printf("n=");
    short n;
    scanf("%hd",&n);
    while(n<=0)
    {
        printf("n=");
        scanf("%hd",&n);
        }
    }
    int ans=0;
    while(n!=0)
    {
        a[ans]=n%2;
        ans++;
        n/=2;
    }
    printf("the binary number is ");
    for(int i=15;i>=0;i--)
    {
        printf("%d",a[i]);
    }
    return 0;
}
  1. 编写程序,把一维数组a 输入任意6个整数。

程序运行示例:

7 4 5 9 1 2↙

7 4 5 9 1 2

2 7 4 5 9 1

1 2 7 4 5 9

9 1 2 7 4 5

5 9 1 2 7 4

4 5 9 1 2 7

**输入格式要求:"%d"

**输出格式要求:"%d "

在输出每一行的数据后加"\n"


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

int main()
{
    int a[6];
    for(int i=0;i<6;i++)
    scanf("%d",&a[i]);
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<5;j++)
            printf("%d ",a[j]);
        printf("%d \n",a[5]);
        int temp=a[5];
        for(int j=5;j>0;j--)
        {
            a[j]=a[j-1];
        }
        a[0]=temp;

    }
    return 0;
}

最值计算//中等已完结

  1. 编程实现一个输入指定范围内的整数的函数getint,其完整的函数原型为:int getint(int min, int max);,它负责接收用户的输入,进行验证,保证接收的一定是一个介于min和max之间([min, max]区间内)的一个整数并最后返回该整数。如果用户输入不合法,则会提示继续输入,直到输入合法时为止。要求编写完整的程序并测试你所写的getint函数。已知[min, max]区间为[3,100]。

***输入提示信息***:"请输入[%d..%d]间的一个整数:\n"

***输入数据格式***:在getint()函数中输入数据用"%d"

***输出数据格式***:"请输入[%d..%d]间的一个整数:\n"

"你输入的整数为:%d\n"

程序的运行示例如下:

请输入[3..100]间的一个整数:0

请输入[3..100]间的一个整数:102

请输入[3..100]间的一个整数:200

请输入[3..100]间的一个整数:36

你输入的整数为:36


#include <stdio.h>
#include <stdlib.h>
int getint(int min,int max)
{
    printf("请输入[3..100]间的一个整数:\n");
    int a;
    scanf("%d",&a);
    if(a>=min&&a<=max)
    {
        printf("你输入的整数为:%d\n",a);
        return a;
    }
    else
        return 0;
}
int main()
{
    while(getint(3,100)==0)
    {

    }
    return 0;
}
  1. 按如下函数原型,编程实现计算数组a中n个整数的最大值和最小值,并互换它们在数组中的位置。

void MaxMinExchang(int a[], int n);

要求按如下函数原型,用指针做函数参数,实现两个数的互换。

void Swap(int *x, int *y);

在主函数中调用函数ReadData()从键盘输入10个整数,调用函数MaxMinExchang()计算其最大值和最小值并互换它们在数组中的位置,最后调用函数PrintData()输出互换后的数组的各个元素值。

**输入提示信息:"Input 10 numbers:"

**输入格式:"%d"

**输出提示信息:"Exchange results:"

**输出格式:"%5d"

请按如下框架编程,在“......”的位置添加缺失的语句,使程序完整。

#include <stdio.h>

voidReadData(inta[], intn);

voidPrintData(inta[], intn);

void MaxMinExchang(inta[], intn);

voidSwap(int*x, int*y);

intmain()

{

int a[10];

printf("Input 10 numbers:");

ReadData(a, 10);

......

printf("Exchange results:");

PrintData(a, 10);

return0;

}

/* 函数功能:输入数组a的n个元素值 */

voidReadData(inta[], intn)

{

inti;

for(i = 0; i < n; i++)

{

scanf("%d", &a[i]);

}

}

/* 函数功能:输出数组a的n个元素值 */

voidPrintData(inta[], intn)

{

inti;

for(i = 0; i < n; i++)

{

printf("%5d", a[i]);

}

printf("\n");

}

/* 函数功能:将数组a中的最大数与最小数位置互换 */

void MaxMinExchang(inta[], intn)

{

int maxValue = a[0], minValue = a[0], maxPos = 0, minPos = 0;

int i;

for(i = 1; i < n; i++)

{

if(a[i] > maxValue)

{

maxValue = a[i];

maxPos = i;

}

if(a[i] < minValue)

{

minValue = a[i];

minPos = i;

}

}

......

}

/* 函数功能:两整数值互换 */

void Swap(int*x, int*y)

{

int temp;

......

}


#include  <stdio.h>
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void  MaxMinExchang(int a[], int n);
void Swap(int *x, int *y);
int main()
{
    int  a[10];
    printf("Input 10 numbers:");
    ReadData(a,10);
    MaxMinExchang(a,10);
    printf("Exchange results:");
    PrintData(a, 10);
    return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%5d", a[i]);
    }
    printf("\n");
}
/* 函数功能:将数组a中的最大数与最小数位置互换 */
void  MaxMinExchang(int a[], int n)
{
    int  maxValue = a[0], minValue = a[0], maxPos = 0, minPos = 0;
    int  i;
    for (i = 1; i < n; i++)
    {
        if (a[i] > maxValue)
        {
            maxValue = a[i];
            maxPos = i;
        }
        if (a[i] < minValue)
        {
            minValue = a[i];
            minPos = i;
        }
    }
    Swap(a+minPos,a+maxPos);
}
/* 函数功能:两整数值互换 */
void  Swap(int *x, int *y)
{
    int  temp;
    temp=*x;
    *x=*y;
    *y=temp;
}
  1. 要求:从键盘输入10个不同的整数存入一个数组中,用函数编程将其中的最大数与最小数位置互换,分别输出互换之前最大值和最小值及其在数组中的位置,以及互换后的数组

函数原型:void MaxMinExchang(int a[], int n);

输入提示信息:"Input 10 numbers:"

输入格式:"%d"

最大值输出提示信息:"Max element position:%d,Max element:%d\n"

最小值输出提示信息:"Min element position:%d,Min element:%d\n"

数组输出提示信息:"Exchange results:"

数组输出格式:"%4d"

程序运行结果示例:

Input 10 numbers:0 2 7 4 9 11 5 47 6 97↙

Max element position:9,Max element:97

Min element position:0,Min element:0

Exchange results: 97 2 7 4 9 11 5 47 6 0


#include <stdio.h>
#include <stdlib.h>
void MaxMinExchang(int a[],int n)
{
    int max=-9999,min=9999;
    int maxpos=0,minpos=0;
    for(int i=0;i<10;i++)
    {
        if(a[i]>max)
        {
            max=a[i];
            maxpos=i;
        }
        if(a[i]<min)
        {
            min=a[i];
            minpos=i;
        }
    }
    a[maxpos]=min;
    a[minpos]=max;
    printf("Max element position:%d,Max element:%d\n",maxpos,max);
    printf("Min element position:%d,Min element:%d\n",minpos,min);
}
int main()
{
    int a[10];
    printf("Input 10 numbers:");
    for(int i=0;i<10;i++)
        scanf("%d",&a[i]);
    MaxMinExchang(a,10);
    printf("Exchange results:");
    for(int i=0;i<10;i++)
    {
        printf("%4d",a[i]);
    }
    return 0;
}
  1. 从键盘输入某班学生某门课的成绩和学号(最多不超过40人),当输入为负值时,表示输入结束,用函数编程通过返回数组中最大元素的下标,查找并输出成绩的最高分及其所在的学生学号。

**输入格式要求:"%ld%d" 提示信息:"Input student’s ID and score:" "input error!\n"

**输出格式要求:"Total students are %d\n" "The highest is:%ld, %d\n"

程序运行示例如下:

Input student’s ID and score:070310122 84

Input student’s ID and score:070310123 83

Input student’s ID and score:070310124 88

Input student’s ID and score:070310125 87

Input student’s ID and score:070310126 61

Input student’s ID and score:-1 -1

Total students are 5

The highest is:70310124, 88


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

int main()
{
    long a[40];
    int b[40];
    printf("Input student’s ID and score:");
    int i=0;
    scanf("%ld%d",&a[i],&b[i]);
    while(a[i]>=0&&b[i]>=0)
    {
        i++;
        printf("Input student’s ID and score:");
        scanf("%ld%d",&a[i],&b[i]);
    }
    printf("Total students are %d\n",i);
    int max=-1,maxpos=0;
    for(int j=0;j<i;j++)
    {
        if(b[j]>max)
        {
            max=b[j];
            maxpos=j;
        }
    }
    printf("The highest is:%ld, %d\n",a[maxpos],b[maxpos]);
    return 0;
}
  1. 按如下函数原型计算n名职工的最高月收入:

void FindMax(float income[],long num[],int n,float *pMaxincome,long *pnum);

在主函数中从键盘输入某单位n名职工的月收入及职工号(最多不超过30人,具体人数n由键盘输入),调用函数FindMax()计算职工的最高月收入及职工号。

**输入提示信息:无

**输入格式:输入职工人数用"%d",输入职工号及月收入用"%ld%f"

**输出提示信息和格式:"Maxincome=%.2f\tMnum=%ld\n"(要求在主函数中输出最高收入和职工号)

请按如下框架编程,在“......”的位置添加缺失的语句,使程序完整。

#include <stdio.h>

#define N 30

voidFindMax(floatincome[],longnum[],intn,float*pMaxIcome,long*pMaxNum);

intmain()

{

float income[N], maxIncome;

int n, i;

long num[N], maxNum;

scanf("%d", &n);

for(i=0; i<n; i++)

{

............

}

FindMax(............);

printf("Maxincome=%.2f\tMnum=%ld\n", maxIncome, maxNum);

return0;

}

/*功能:计算职工的最高月收入及职工号

参数: incomen 职工的月收入

num 职工号

n 职工数目

pMaxIcome 指向最高月收入的指针

pMaxNum 指向月收入最高的职工号的指针

*/

voidFindMax(floatincome[],longnum[],intn,float*pMaxIcome,long*pMaxNum)

{

............

}


#include  <stdio.h>
#define  N  30
void FindMax(float income[],long num[],int n,float *pMaxIcome,long *pMaxNum);
int main()
{
    float  income[N], maxIncome;
    int    n, i;
    long   num[N], maxNum;
    scanf("%d", &n);
    for (i=0; i<n; i++)
    {
        scanf("%ld%f",&num[i],&income[i]);
    }
    FindMax(income,num,n,&maxIncome,&maxNum);
    printf("Maxincome=%.2f\tMnum=%ld\n", maxIncome, maxNum);
    return 0;
}
/*功能:计算职工的最高月收入及职工号
参数:  incomen 职工的月收入
     num 职工号
     n 职工数目
     pMaxIcome 指向最高月收入的指针
     pMaxNum 指向月收入最高的职工号的指针
*/
void FindMax(float income[],long num[],int n,float *pMaxIcome,long *pMaxNum)
{
    *pMaxIcome=0;
    for(int i=0;i<n;i++)
    {
        if(income[i]>*pMaxIcome)
        {
            *pMaxIcome=income[i];
            *pMaxNum=num[i];
        }
    }
}
  1. 输入5个字符串,输出其中最小的字符串。

**输入格式要求:"%s"

**输出格式要求:"min is %s\n"

程序运行示例如下:

first <===输入5行字符串

second

third

44444

555555

min is 44444 <===此行为输出


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char a[5][100];
    char temp[100];
    for(int i=0;i<5;i++)
    {
        scanf("%s",a[i]);
    }
    strcpy(temp,a[0]);
    for(int i=1;i<5;i++)
    {
        if(strcmp(temp,a[i])>0)
        {
            strcpy(temp,a[i]);
        }
    }
    printf("min is %s\n",temp);
    return 0;
}
  1. 有10个评委参加打分。输入10个评委打的分数(1—10之间的数字),找出一个最高分和一个最低分后,并输出是第几个评委打的最高分,第几个评委打的最低分。

函数原型如下:

void ReadScore(int Score[]) ; //用于输入评委的分数

void MaxMin(int Score[],int *MaxNum,int *MinNum) ;//用于找出最高分和最低分的评委

**输入提示信息:无

**输入格式:"%d"

**输出提示信息及格式:"最高分为第%d个评委,最低分为第%d个评委\n"

按如下框架编写程序:

#include <stdio.h>

voidReadScore(intScore[])

{

}

voidMaxMin(intScore[],int*MaxNum,int*MinNum)

{

}

main()

{

}

注:用纯C语言编程,所有变量必须在第一条可执行语句前定义。


#include <stdio.h>
#include <stdlib.h>
void ReadScore(int Score[])
{
     for(int i=0;i<10;i++)
     {
         scanf("%d",Score+i);
     }
}
void MaxMin(int Score[],int *MaxNum,int *MinNum)
{
    int max=0,min=11;
    for(int i=0;i<10;i++)
    {
        if(max<Score[i])
        {
            max=Score[i];
            *MaxNum=i;
        }
        if(min>Score[i])
        {
            min=Score[i];
            *MinNum=i;
        }
    }
}
int main()
{
    int a[10];
    int MaxNum=0,MinNum=0;
    ReadScore(a);
    MaxMin(a,&MaxNum,&MinNum);
    printf("最高分为第%d个评委,最低分为第%d个评委\n",MaxNum+1,MinNum+1);
    return 0;
}
  1. 计算数组最大值及最大值下标。数组最多30个元素,数组元素个数n由键盘输入。

请按如下框架编程,在“......”的位置添加缺失的语句,使程序完整。

#include <stdio.h>

voidInput(inta[], intn);

intFindmax(inta[], intn, int*pos);

intmain()

{

int n, a[30];

intmaxNum;//存放数组最大值

intmaxPos;//存放最大值下标

printf("Input n:");

scanf("%d", &n);

Input(a, n);

......

printf("The maximum subscript is:%d,The maximum value is:%d\n", maxPos, maxNum);

return0;

}

//读入数组元素的值

voidInput(inta[], intn)

{

inti;

for(i = 0; i < n; i++)

{

scanf("%d", &a[i]);

}

}

//计算数组最大值及最大值下标

intFindmax(inta[], intn, int*pos)

{

inti, maxNum;

*pos = 0;

maxNum = a[0];

... ...

}


#include <stdio.h>
void Input(int a[], int n);
int Findmax(int a[], int n, int *pos);
int main()
{
    int  n, a[30];
    int maxNum;//存放数组最大值
    int maxPos;//存放最大值下标
    printf("Input n:");
    scanf("%d", &n);
    Input(a, n);
    Findmax(a,n,&maxPos);
    maxNum=a[maxPos];
    printf("The maximum subscript is:%d,The maximum value is:%d\n", maxPos, maxNum);
    return 0;
}
//读入数组元素的值
void Input(int a[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
}
//计算数组最大值及最大值下标
int Findmax(int a[], int n, int *pos)
{
    int i, maxNum;
    *pos = 0;
    maxNum = a[0];
    for(i=0;i<n;i++)
    {
        if(maxNum<a[i])
        {
            maxNum=a[i];
            *pos=i;
        }
    }
}
  1. 从键盘输入某班学生某门课的成绩(每班人数最多不超过30人,具体人数由键盘输入),按如下函数原型,用指针做函数参数编写函数FindMax()计算最高分及相应学生的学号返回给主函数,然后在主函数中输出最高分及相应学生的学号。

void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum);

**输入提示信息:

输入学生人数的提示信息为"How many students?"

输入学号和成绩的提示信息为"Input student’s ID and score:\n"

**输入数据格式:输入学生人数用"%d", 输入学号和成绩用"%ld%d"

**输出提示信息和数据格式:"maxScore = %d, maxNum = %ld\n"

按如下框架编写程序:

#include <stdio.h>

#define N 30

voidFindMax(intscore[],longnum[],intn,int*pMaxScore,long*pMaxNum);

main()

{

}

/* 函数功能:计算最高分及其相应学生的学号 */

voidFindMax(intscore[],longnum[],intn,int*pMaxScore,long*pMaxNum)

{

}


#include <stdio.h>
#include <stdlib.h>
void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum)
{
    *pMaxScore=score[0];
    *pMaxNum=num[0];
    for(int i=1;i<n;i++)
    {
        if(*pMaxScore<score[i])
        {
            *pMaxScore=score[i];
            *pMaxNum=num[i];
        }
    }
}
int main()
{
    printf("How many students?");
    int a[30];
    long num[30];
    int n;
    scanf("%d",&n);
    printf("Input student’s ID and score:\n");
    for(int i=0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&a[i]);
    }
    int maxscore,maxnum;
    FindMax(a,num,n,&maxscore,&maxnum);
    printf("maxScore = %d, maxNum = %ld\n",maxscore,maxnum);
    return 0;
}
  1. 1从键盘输入某单位职工的月收入(最多不超过30人),具体人数由键盘输入。试编程输出该单位职最高月收入和最低月收收。

输出格式:printf("min=%10.2f,max=%10.2f\n", );

要求:利用函数计算n名职工的最高和最低月收入。

函数原型:void find_MaxMin(float income[],int n,float *pmax,float *pmin);


#include <stdio.h>
#include <stdlib.h>
void find_MaxMin(float income[],int n,float *pmax,float *pmin)
{
    *pmax=income[0];
    *pmin=income[0];
    for(int i=1;i<n;i++)
    {
        if(*pmax<income[i])
            *pmax=income[i];
        if(*pmin>income[i])
            *pmin=income[i];
    }
}
int main()
{
    int n;
    float income[30],pmax,pmin;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%f",&income[i]);
    find_MaxMin(income,n,&pmax,&pmin);
    printf("min=%10.2f,max=%10.2f\n",pmin,pmax);
    return 0;
}
  1. 写一个程序,输入十个整数到数组unsorted中。程序将循环遍历unsorted数组十遍,每遍选择最小的值拷贝到sorted数组中的下一个可用元素位置,并将unsorted中对应的最小值替换为一个大值(例如9999)。示例如下:

开始时的unsorted:14 22 67 31 89 11 42 35 65 49

开始时的sorted:

第一遍后的unsorted:14 22 67 31 89 9999 42 35 65 49

第一遍后的sorted:11

第二遍后的unsorted:9999 22 67 31 89 9999 42 35 65 49

第一遍后的sorted:11 14

……

显示sorted数组的值。

**输入格式要求:"%d" 提示信息:"请输入十个整数:\n" "第%d个数:"

**输出格式要求:"%d " 提示信息:"完成后sorted数组的值为:"


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

int main()
{
    int unsorted[10],sorted[10];
    printf("请输入十个整数:\n");
    for(int i=0;i<10;i++)
    {
        printf("第%d个数:",i+1);
        scanf("%d",&unsorted[i]);
    }
    for(int i=0;i<10;i++)
    {
        int min=9999;
        int minpos=0;
        for(int j=0;j<10;j++)
        {
            if(min>unsorted[j])
            {
                min=unsorted[j];
                minpos=j;
            }
        }
        unsorted[minpos]=9999;
        sorted[i]=min;
    }
    printf("完成后sorted数组的值为:");
    for(int i=0;i<10;i++)
        printf("%d ",sorted[i]);
    return 0;
}
  1. 要求:从键盘输入10个整数存入一个数组中,用函数编程将其中的最大数与最小数位置互换,然后输出互换后的数组。函数原型:void MaxMinExchang(int a[], int n);

输入提示信息:"Input 10 numbers:"

输入格式:"%d"

输出提示信息:"Exchang results:"

输出格式:"%4d"

程序运行结果示例:

Input 10 numbers:0 2 7 4 9 11 5 47 6 97↙

Exchang results: 97 2 7 4 9 11 5 47 6 0


#include <stdio.h>
#include <stdlib.h>
void MaxMinExchang(int a[], int n)
{
    int max=a[0],min=a[0],maxpos=0,minpos=0;
    for(int i=1;i<10;i++)
    {
        if(max<a[i])
        {
            maxpos=i;
            max=a[i];
        }
        if(min>a[i])
        {
            minpos=i;
            min=a[i];
        }
    }
    a[maxpos]=min;
    a[minpos]=max;
}
int main()
{
    printf("Input 10 numbers:");
    int a[10];
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    MaxMinExchang(a,10);
    printf("Exchang results:");
    for(int i=0;i<10;i++)
    {
        printf("%4d",a[i]);
    }
    return 0;
}
  1. 从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。

要求按如下函数原型编写程序

void ReadData(int a[], int n);

void PrintData(int a[], int n);

void MaxMinExchang(int a[], int n);

**输入提示信息要求:

"Input n(n<=10):\n"

"Input %d numbers:\n"

**要求输入格式为:"%d"

**输出提示信息:"Exchange results:"

**要求输出格式为:"%5d"

输出数组中所有数据后换行

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。


#include <stdio.h>
#include <stdlib.h>
void ReadData(int a[], int n)
{
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
}
void PrintData(int a[], int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%5d",a[i]);
    }
}
void MaxMinExchang(int a[],int n)
{
    int max=a[0],min=a[0],maxpos=0,minpos=0;
    for(int i=1;i<n;i++)
    {
        if(max<a[i])
        {
            maxpos=i;
            max=a[i];
        }
        if(min>a[i])
        {
            minpos=i;
            min=a[i];
        }
    }
    a[maxpos]=min;
    a[minpos]=max;
}
int main()
{
    int n;
    printf("Input n(n<=10):\n");
    scanf("%d",&n);
    int a[10];
    printf("Input %d numbers:\n",n);
    ReadData(a,n);
    MaxMinExchang(a,n);
    printf("Exchange results:");
    PrintData(a,n);
    return 0;
}

改错题

  1. 有关输入输出问题。

输入为:

1↙

2↙

a↙

b↙

运行结果为:1,2,a,b,123.300000,65535

请改正程序中的错误,使它能得出正确的结果。

#include <stdio.h>

main()

{

int b;

unsigned short a = 65535;

short k = a;

char c, d;

int f, g;

b = (1234.0 - 1) / 10;

scanf("%c", &c);

scanf("%c", &d);

scanf("%d", &f);

scanf("%d", &g);

printf("%c,%c,%c,%c,%f,%d", c


#include <stdio.h>

main()
{
    float b;
    unsigned short a=65535;
    short k;//强制类型转换
    k=(unsigned short)a;
    char c,d;
    int f, g;
    b=((1234.0-1.0)/10.0);
    scanf("%1d", &f);
    scanf("%1d", &g);
    scanf(" %c", &c);
    scanf(" %c", &d);
    printf("%d,%d,%c,%c,%.5f,%u",f,g,c,d,b,k);
    return 0;
}
  1. 求100~200间的全部素数(即质数),要求每行输出10个素数。

下面程序中存在比较隐蔽的错误,

请通过分析和调试程序,发现并改正程序中的错误。

注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才得满分。

#include <stdio.h>

main()

{

intm,k,i,n;

for(m=101;m<=200;m+=2)

{

if(n%10==0)

printf("\n");

k=sqrt(m);

for(i= 1;i<=k;i++)

if(m%i==0)

continue;

if(i==m%10)

{

printf("%d ",m);

n++;

}

}

}


#include <stdio.h>
int main()
{
  int m,i,n=0;
  int k;
  printf("\n");
  for(m=101;m<=200;m+=2)
  {     if(n==10)
        {
            printf("\n");
            n=0;
        }
      k=sqrt(m);
      for(i=2;i<=k;i++)
          if(m%i==0)//能被整除
             break;
          if(i>=k+1)
          {
             printf("%d ",m);
             n++;
          }
      
  }
  return 0;
}
  1. 下列给定的程序中,函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

请改正代码中的错误。将修改正确后的完整源程序拷贝粘贴到答题区内。

不得增行或删行,也不得更改程序的结构。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。

经教师手工核对后,如果未用指针做函数参数编程,那么即使做对也不给分。

#include <stdio.h>

#include <math.h>

voidfun(inta, int*b, int*c);

main()

{

inta, b, c;

do

{

printf("Input a:\n");

scanf("%d", &a);

}

while(a % 2)

fun(a, b, c);

printf("%d = %d + %d\n", a, b, c);

}

voidfun(inta, int*b, int*c);

{

inti, j, d, y;

for(i = 3; i <= a / 2; i = i + 2)

{

y = 1;

for(j = 2; j <= sqrt((double)i); j++)

{

if(i % j != 0)

{

y = 0;

}

}

if(y = 1)

{

d = i - a;

for(j = 2; j <= sqrt((double)d); j++)

{

if(d % j == 0)

y = 1;

}

if(y == 1)

{

b = i;

c = d;

}

}

}

}


#include <stdio.h>
#include <math.h>
void fun(int a, int *b, int *c);
int main()
{
    int a,b,c;
    do
    {
        printf("Input a:\n");
        scanf("%d", &a);
    }
    while (a%2!=0);//判断是偶数
    fun(a,&b,&c);
    printf("%d = %d + %d\n",a,b,c);
    return 0;
}

void fun(int a,int *b,int *c)
{
    int i,j,d,y;
    for (i=3; i<=a/2;i=i+2)
    {
        y=1;
        for (j=2;j<=sqrt((double)i);j++)
        {
            if (i%j!= 0)
            {
                y=0;//不是素数
            }
        }
        if (y=1)//如果是素数
        {
            d=a-i;
            for (j = 2; j <= sqrt((double)d); j++)
            {
                if (d%j==0)//不是素数
                    y=0;
            }
            if (y==1)
            {
                *b=i;
                *c=d;
            }
        }
    }
}
  1. 将5*5的矩阵A转置(即行变列,列变行),并将行列互换即转置

前、后的矩阵分别打印出来。

下面程序中存在比较隐蔽的错误,

请通过分析和调试程序,发现并改正程序中的错误。

注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才得满分。

#include (stdio.h)

main()

{

int a[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21}, i, j;

printf(“before transposition\n”);

for(i=0; i<=4; i++)

for(j=0; j<=4; j++)

printf("%4d%s", a[i][j],j-4?' ':'\n');

for(i=0; i<=4; i++)

for(j=0; j<=4; j++)

{

t=a[i][j];

a[i][j]=a[j][i];

a[j][i]=t;

}

printf(“after transposition\n”);

for(i=0; i<=4; i++);

for(j=0; j<=4; j++)

printf("%4d%s", a[i][j],j-4?' ':'\n');

}


#include <stdio.h>
int main()
{
    int  a[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,0,0,0,0}, i, j;
    printf("before transposition\n");
    for (i=0;i<=4;i++)
    {
        for (j=0;j<=4;j++)
        {
            if(j==0)
             printf("%4d",a[i][j]);
             else
                printf("%5d",a[i][j]);
        }
             printf("\n");
    }
    for (i=0; i<=4; i++)
    {
        int t=0;
        for (j=0; j<i;j++)
       {
            t=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=t;
       }
    }
    printf("after transposition\n");
    for (i=0;i<=4;i++)
    {
        for (j=0;j<=4;j++)
        {
            if(j==0)
             printf("%4d",a[i][j]);
             else
                printf("%5d",a[i][j]);
        }
             printf("\n");
    }
    return 0;
}
  1. 在长度为10的数组中查找数组元素最大值及其在数组中的下标位置。下面的程序有错误,请找出并改正之。

#include <stdio.h>

#define n = 10;

intFindMax(intnum[], intn, int*pMaxPos);

main()

{

intnum[n], maxValue, maxPos, i;

printf("Input %d numbers:\n",n);

for(i=0; i<n; i++)

{

scanf("%d", num[i]);

}

maxValue = FindMax(num, n, maxPos);

printf("Max=%d, Position=%d\n", maxValue, maxPos);

}

intFindMax(intnum[], intn, int*pMaxPos)

{

inti, max = num[0];

for(i=1; i<n; i++)

{

if(num[i] > max)

{

max = num[i];

pMaxPos = i;

}

}

returnmax;

}

注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。

(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。


#include <stdio.h>
const int  n=10;
int FindMax(int num[],int n,int *pMaxPos);
int main()
{
    int num[n], maxValue, maxPos=0, i;
    printf("Input %d numbers:\n",n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &num[i]);
    }
    maxValue = FindMax(num, n, &maxPos);
    printf("Max=%d, Position=%d\n",  maxValue, maxPos);
    return 0;
}
int FindMax(int num[], int n, int *pMaxPos)
{
    int i, max = num[0];
    for (i=1; i<n; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            *pMaxPos = i;
        }
    }
    return max;
}
  1. 下面程序功能是在一个一维数组中找出其中最大的数及其下标。请改正程序中的错误,使之能得到正确的结果。


#define N 10
#include <stdio.h>
float fun(int *a,int *b,int n)
{
    int *c,max=*a;
    for(c=a+1;c<a+n;c++)
    {
        if(*c>max)
        {
            max=*c;
            b=c-a;
        }
     }
     return max;
}
main()
{
    int a[N],i,max,p=0;
    printf("please  input 10 intergers:\n");
    for(i=0;i<N;i++)
    {
        scanf("%d",a[i]);
    }
    max=fun(a,p,N);
    printf("max=%d,position=%d\n",max,p);
}

#define N 10
#include <stdio.h>
float fun(int *a,int *b,int n)
{
    int *c,max=*a;
    for(c=a+1;c<a+n;c++)
    {
        if(*c>max)
        {
            max=*c;
            *b=c-a;
        }
     }
     return max;
}
main()
{
    int a[N],i,max,p=0;
    printf("please  input 10 intergers:\n");
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    max=fun(a,&p,N);
    printf("max=%d,position=%d\n",max,p);
}
  1. 下面程序的功能是从键盘任意输入n个数,然后找出其中的最大数与最小数,并将其位置对换。

该程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。

注意:将修改后的完整的源程序写在答题区内。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才给加5分,

如果只改正了部分错误,则不加分。不能修改函数原型。

改错时不能改变程序原有的意图,不能改变函数原型。

#include <stdio.h>

#define n = 10;

void MaxMinExchang(int*a, intn)

{

int maxValue = *a, minValue = *a, maxPos, minPos;

int i, temp;

for(i=0; i<n; i++)

{

if(*a+i > maxValue)

{

maxValue = *a+i;

maxPos = i;

}

if(*a+i < minValue)

{

minValue = *a+i;

minPos = i;

}

}

temp = *a + maxPos;

*a + maxPos = *a + minPos;

*a + minPos = temp;

}

main()

{

inta[n], i, n;

printf("Input n(n<=10):\n");

scanf("%d", n) ;

printf("Input %d Numbers:\n", n);

for(i=0; i<n; i++)

{

scanf("%d", a[i]);

}

MaxMinExchang(a, n);

printf("After MaxMinExchange:\n");

for(i=0; i<n; i++)

{

printf("%d ", a[i]);

}

printf("\n");

}


#include  <stdio.h>
#define N 10
void  MaxMinExchang(int *a, int n)
{
    int  maxValue = *a, minValue = *a, maxPos=0, minPos=0;
    int  i, temp;
    for (i=0; i<n; i++)
    {
        if (*(a+i) > maxValue)
        {
            maxValue = *(a+i);
            maxPos = i;
        }
         if (*(a+i) < minValue)
        {
            minValue = *(a+i);
            minPos = i;
        }
    }
    temp = *(a + maxPos);
    *(a + maxPos) = *(a + minPos);
    *(a + minPos) = temp;
}
main()
{
    int a[N],i,n;
    printf("Input n(n<=10):\n");
    scanf("%d",&n) ;
    printf("Input %d Numbers:\n", n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    MaxMinExchang(a, n);
    printf("After MaxMinExchange:\n");
    for (i=0; i<n; i++)
    {
            printf("%d ", a[i]);
    }
    printf("\n");
}
  1. 下面的程序将数字进行加密,其中的每一个数字转化为另一个不同的数字。请改正程序中的错误,使它能得出正确的结果。


#include <stdio.h>

main()
{
    char s[] = "24635", c, i;

    for (i = 0; c = s[i]; i++)
    {
        switch ((c - '0')
        {
        case 2:
        case 3:
            putchar(c + 4);
            continue;
        case 4:
            putchar(c + 4);
            break;
        case 5:
            putchar(c + 3);
        default:
            putchar(c + 2);
        }
        putchar('\n');
    }
}


#include <stdio.h>

main()
{
    char s[5] = "24635", c, i;
    for (i = 0; i<5; i++)
    {
        c=s[i];
        switch (c - '0')
        {
        case 2:
        case 3:
            {
                putchar(c + 4);
                break;
            }
        case 4:
            {
                putchar(c + 4);
                break;
            }
        case 5:
            {
                putchar(c + 3);
                break;
            }
        default:
            {
                putchar(c + 2);
                break;
                }
        }
        putchar('\n');
    }
}
  1. 程序改错。在一个3x4矩阵中找出最大数及最大数所在元素的下标。

#include <stdio.h>

#define M 3

#define N 4

intFindMax(int(*p)[N],intm,intn, int*pRow, int*pCol)

main()

{

intscore[M][N], i, j, maxScore, row, col;

for( i=0; i<M; i++ )

{

for( j=0; j<N; j++ )

{

scanf("%d", &score[i][j]);

}

}

maxScore = FindMax(*score, M, N, &row, &col);

printf("%d %d %d\n", maxScore, row+1, col+1);

}

intFindMax( int(*p)[N], intm, intn,

int*pRow, int*pCol )

{

int i, j, max;

max = *(p);

pRow = 0;

pCol = 0;

for(i=0; i<m; i++)

{

for(j = 0; j<n; j++)

{

if( *(*(p+i)+j) > max )

{

max = *(*(p+i)+j) ;

*pRow = i;

*pCol = j;

}

}

}

}

  1. 下列给定程序中,函数fun的功能是:用下面的公式求pi的近似值,直到最后一项的绝对值小于指定的数(参数 num)为止。 pi/4≈1-1/3+1/5-1/7+...

例如程序运行后,若输入0.0001,则程序输出3.1418

请修改程序中的错误,使它能得出正确的结果。

注意:

请将修改正确后的完整源程序拷贝粘贴到答题区内。

不得增行或删行,也不得更改程序的结构。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才给满分。


#include <stdio.h>
#include <math.h>
int fun(float num)
{
    int s;
    float n,t,pi;
    t=0;
    pi=0;
    n=0;
    s=-1;
    while(t>=num);
    {
        pi=pi+t;
        n=n+1;
        s=+s;
        t=s%n;
    }
    pi=pi*4;
    return pi;
}
main()
{
    float n1,n2;
    printf("Enter a float number: ");
    scanf(" %d",&n1);
    n2=fun(n1);
    printf( "%6.4f\n ",n2);

}

#include <stdio.h>
#include <math.h>
float fun(float num)
{
    int s;
    float n,t,pi;
    t=1;
    pi=0;
    n=1;
    s=1;
    while(fabs(t)>=num)
    {
        pi=pi+t;
        n=n+2;
        s=-s;
        t=s/n;
    }
    pi=pi*4;
    return pi;
}
main()
{
    float n1,n2;
    printf("Enter a float number: ");
    scanf(" %f",&n1);
    n2=fun(n1);
    printf( "%6.4f\n ",n2);

}
  1. 下面程序用于从键盘输入3*4矩阵的元素,通过调用函数FindMax,求出这3*4矩阵元素中的最大值及其所在行列位置,然后输出这个最大值及其所在行列下标位置(注意下标从0开始)。(找出其中的4处错误,并改正之)


#include <stdio.h>
intFindMax(intx[3][4],int*pRow,int*pCol);
main()
{ 
    inta[3][4], max, i, j, row, col; 
     
    for(i=0; i<3; i++)
    {
        for(j=0; j<4; j++)  
        {
            scanf("%d",a[i][j]); 
        }
    }
    max = FindMax(a,&row,&col);
    printf("max=%d,row=%d,col=%d\n",max,row,col);
}    
intFindMax(intx[3][4],int*pRow,int*pCol)
{ 
    intmax, i, j;
    max = x[0][0]; 
    for(i=0; i<3; i++)
    {
        for(j=0; j<4; j++)
        {
            if(x[i][j] > max); 
            { 
                max = x[i][j]; 
                *pRow = i; 
                *pCol = j; 
            }
        }
    }   
    returnmax;
}

#include <stdio.h>
int FindMax(int x[3][4],int *pRow,int *pCol);
main()
{
    int a[3][4], max, i, j, row, col;

    for (i=0; i<3; i++)
    {
        for (j=0; j<4; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    max = FindMax(a,&row,&col);
    printf("max=%d,row=%d,col=%d\n",max,row,col);
}
int FindMax(int x[3][4],int *pRow,int *pCol)
{
    int max, i, j;
    max = x[0][0];
    for (i=0; i<3; i++)
    {
        for (j=0; j<4; j++)
        {
            if (x[i][j] > max)
            {
                max = x[i][j];
                *pRow = i;
                *pCol = j;
            }
        }
    }
    return max;
}
  1. 输入m个学生(最多为30人)n门课程(最多为5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。

标签:第11章

通过上机运行程序并观察运行结果,分析下面程序错误的原因并改正之。

#include <stdio.h>

#define STUD 30 /* 最多可能的学生人数 */

#define COURSE 5 /* 最多可能的考试科目数 */

void Total(int*pScore, intsum[], floataver[], intm, intn);

void Print(int*pScore, intsum[], floataver[], intm, intn);

intmain()

{

int i, j, m, n, score[STUD][COURSE], sum[STUD];

float aver[STUD];

printf("How many students?");

scanf("%d", &m);

printf("How many courses?");

scanf("%d", &n);

printf("Input scores:\n");

for(i = 0; i < m; i++)

{

for(j = 0; j < n; j++)

{

scanf("%d", &score[i][j]);

}

}

Total(*score, sum, aver, m, n);

Print(*score, sum, aver, m, n);

return0;

}

void Total(int*pScore, intsum[], floataver[], intm, intn)

{

int i, j;

for(i = 0; i < m; i++)

{

sum[i] = 0;

for(j = 0; j < n; j++)

{

sum[i] = sum[i] + pScore[i * n + j];

}

aver[i] = (float) sum[i] / n;

}

}

void Print(int*pScore, intsum[], floataver[], intm, intn)

{

int i, j;

printf("Result:\n");

for(i = 0; i < m; i++)

{

for(j = 0; j < n; j++)

{

printf("%4d\t", pScore[i * n + j]);

}

printf("%5d\t%6.1f\n", sum[i], aver[i]);

}

}

  1. 用函数编程解决如下的日期转换问题(要求考虑闰年的问题):输入某年某月某日,计算并输出它是这一年的第几天。下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。

#include <stdio.h>

intDayofYear(intyear, intmonth, intday);

intdayTab[2][13] = {

{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},

{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

main()

{

intyear, month, day;

printf("Please enter year, month, day:");

scanf("%d,%d,%d", &year, &month, &day);

printf("yearDay = %d\n"DayofYear(year, month, day));

}

/* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天

函数参数: 整型变量year、month、day,分别代表年、月、日

函数返回值:这一年的第几天 */

intDayofYear(intyear, intmonth, intday);

{

inti, leap;

leap = year % 4 == 0 & year % 100 != 0 | year % 400 = 0;

for(i = 1; i <= month; i++)

{

day = dayTab[leap][i];

}

}

注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加分。

(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。


#include  <stdio.h>
int DayofYear(int year, int month, int day);
int dayTab[2][12] = {{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

int main()
{
    int year,month, day;
    printf("Please enter year, month, day:");
    scanf("%d,%d,%d", &year, &month, &day);
    printf("yearDay = %d\n",DayofYear(year, month, day));
    return 0;
}
/* 函数功能:  对给定的某年某月某日,计算它是这一年的第几天
函数参数:  整型变量year、month、day,分别代表年、月、日
函数返回值:这一年的第几天 */
int DayofYear(int year, int month, int day)
{
    int i, leap=1;
    if(year%4 == 0 && year%100!= 0||year%400==0)//闰年
    leap=0;
    for (i = 0; i < month-1;i++)
    {
        day +=  dayTab[leap][i];
    }
        return day;
}
  1. 下面程序用于将6个数按输入时顺序的逆序进行排列。找出其中错误,并改正之。

#include<stdio.h>

voidSwap(int*x, int*y)

{

int*temp;

temp = x;

x = y;

y = temp;

}

voidSort(char*p,intm)

{

inti;

charchange,*p1,*p2;

for(i=0;i<m/2;i++)

{

*p1=p+i;

*p2=p+(m-1-i);

Swap(*p1,*p2);

}

}

intmain( )

{

inti;

char *p,num[6];

for(i=0;i<=6;i++)

scanf("%d",num[i]);

p=num[0];

Sort(*p,6);

for(i=0;i<=6;i++)

printf("%d",num[i]);

return0;

}


#include<stdio.h>
void Swap(int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
void Sort(int *p,int m)
{
  int i;
  int change,*p1,*p2;
  for(i=0;i<m/2;i++)
  {
    p1=p+i;
    p2=p+(m-1-i);
     Swap(p1,p2);
  }
}
int main( )
{
  int i;
  int  *p,num[6];
  for(i=0;i<6;i++)
  scanf("%d",&num[i]);
  p=num;
  Sort(p,6);
  for(i=0;i<6;i++)
    printf("%d ",num[i]);
  return 0;
}
  1. 改错


#include <stdio.h>
unsigned long Factorial(unsigned int n);
{    
    if (n < 0)
    {
        printf("data error!");
        return 0;
    }
    else if (n==0 && n==1)
    {
        return 1;
    }
    else 
    {
        return n * Factorial(n-1); 
    }
} 
main()
{
        int n;
    unsigned long x;
    printf("Input n:\n");
    scanf("%d", n);
    x = Factorial(n);
    printf("%d!=%ld\n", n, x);
}
  1. 在数组元素中找最大值及其所在下标位置。


#include <stdio.h>
#define n=10;
int FindMax(int num[], int n, int *pMaxPos);
main()
{
    int num[n], maxValue, maxPos, minValue, minPos, i;    
    printf("Input %d numbers:\n",n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &num[i]);                  
    }                        
    maxValue = FindMax(num, n, &maxPos);  
    printf("Max=%d, Position=%d\n",     maxValue, maxPos);    
}
int FindMax(int num[], int n, int *pMaxPos)  
{
    int i, max = num[0];
    for (i=1; i<n; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            *pMaxPos = i;
        }
    }     
    return max;
}

#include <stdio.h>
const int n=10;
int FindMax(int num[], int n, int *pMaxPos);
main()
{
    int num[n], maxValue, maxPos, minValue, minPos, i;
    printf("Input %d numbers:\n",n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &num[i]);
    }
    maxValue = FindMax(num, n, &maxPos);
    printf("Max=%d, Position=%d\n",     maxValue, maxPos);
}
int FindMax(int num[], int n, int *pMaxPos)
{
    int i, max = num[0];
    *pMaxPos=0;
    for (i=1; i<n; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            *pMaxPos = i;
        }
    }
    return max;
}
  1. 在数组元素中找最大值及其所在下标位置。


#include <stdio.h>
#define n=10;
int FindMax(int num[], int n, int *pMaxPos);
main()
{
    int num[n], maxValue, maxPos, minValue, minPos, i;    
    printf("Input %d numbers:\n",n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &num[i]);                  
    }                        
    maxValue = FindMax(num, n, &maxPos);  
    printf("Max=%d, Position=%d\n",     maxValue, maxPos);    
}
int FindMax(int num[], int n, int *pMaxPos)  
{
    int i, max = num[0];
    for (i=1; i<n; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            *pMaxPos = i;
        }
    }     
    return max;
}

#include <stdio.h>
const int n=10;
int FindMax(int num[], int n, int *pMaxPos);
main()
{
    int num[n], maxValue, maxPos, minValue, minPos, i;
    printf("Input %d numbers:\n",n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &num[i]);
    }
    maxValue = FindMax(num, n, &maxPos);
    printf("Max=%d, Position=%d\n",     maxValue, maxPos);
}
int FindMax(int num[], int n, int *pMaxPos)
{
    int i, max = num[0];
    *pMaxPos=0;
    for (i=1; i<n; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            *pMaxPos = i;
        }
    }
    return max;
}
  1. 在下面使用指针数组的程序中存在一个错误,试分析这个程序,并上机运行,观察运行结果,找到这个错误,并分析出错的原因。

#include <stdio.h>

void Print(char*arr[], intlen);

intmain(void)

{

char *pArray[] = {"Fred","Barrey","Wilma","Betty"};

int num = sizeof(pArray) / sizeof(char);

printf("Total string numbers = %d\n", num);

Print(pArray, num);

return0;

}

void Print(char*arr[], intlen)

{

int i;

for(i=0; i<len; i++)

{

printf("%s,", arr[i]);

}

printf("\n");

}


#include <stdio.h>
void  Print(char *arr[], int len);
int main(void)
{
    char  *pArray[4] = {"Fred","Barrey","Wilma","Betty"};
    int    num = sizeof(pArray) / (4*sizeof(char));
    printf("Total string numbers = %d\n", num);
Print(pArray, num);
return 0;
}
void  Print(char *arr[], int len)
{
    int  i;
    for (i=0; i<len; i++)
    {
        printf("%s,", arr[i]);
    }
    printf("\n");
}
  1. 下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a[0]中的数对调,次最小数和a[1]中的数对调。

注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。

#include <stdio.h>

#define N 20

voidfun(int*a,intn)

{

inti, m, t, k;

for(i=0; i<n; i++)

{

m=i;

for(k=i; k<n; k++)

if(a[k]<a[m])

k=m;

t=a[k]

a[k]=a[i];

a[i]=t;

}

}

intmain()

{

intb[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;

for(i=0; i<n; i++)

printf("%d ",b[i]);

printf("\n");

fun(b,n);

for(i=0; i<n; i++)

printf("%d ", b[i]);

printf("\n");

return0;

}


#include <stdio.h>
#define N 20
void fun(int *a,int n)
{
    int i, m, t, k;
    for(i=0; i<2; i++)
    {
        m=i;
        for(k=i+1; k<n; k++)
            if(*(a+k)<*(a+m))//查找最小值
            m=k;
        t=*(a+m);
        *(a+m)=*(a+i);
       *(a+i)=t;
    }
}
int main()
{
    int b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;
    for(i=0; i<n;i++)
        printf("%d ",b[i]);
    printf("\n");
    fun(b,n);
    for(i=0; i<n; i++)
        printf("%d ", b[i]);
    printf("\n");
    return 0;
}
  1. 将字符串“Hello World”读入字符数组中去。请改正程序中的错误,使它能得出正确的结果。


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

main()
{
    char ch[10];

    scanf("%s", ch);
    if (!strcmp(ch, "Hello World"))
        printf("OK!");
    else
        printf("Error!");
}

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

int main()
{
    char ch[11];
    gets(ch);
    if(strcmp(ch,"Hello World")==0)
        printf("OK!");
    else
        printf("Error!");
        return 0;
}
  1. 下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。找出其中的错误,并改正之

#include <stdio.h>

main()

{

int up=10, low=1, mid, found, find;

int a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41};

scanf("%d", find);

printf("\n");

while(up>=low || !found)

{

mid=(up+low)/2;

if( a[mid] = find )

{

found=1;

break;

}

else if(a[mid]>find)

up=mid+1;

else

low=mid+1;

}

if(found) printf("found number is %dth", mid);

else printf("no found");

}


#include <stdio.h>
main()
{
    int  up=9, low=0, mid, found, find;
    int  a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41};
    scanf("%d", &find);
    printf("\n");
    while (up>=low||!found)
    {
        mid=(up+low)/2;
        if( a[mid]== find )
        {
                found=1;
                break;
        }
         else  if(a[mid]>find)
                up=mid-1;
            else
                        low=mid+1;
   }

    if(found)  printf("found number is %dth", mid);
    else    printf("no  found");
}
  1. 编程计算矩阵相乘之积。找出下列程序中的错误并改正之。

#include<stdio.h>

#define ROW = 2;

#define COL = 3;

main()

{

inta[ROW][COL], b[COL][ROW], c[ROW][ROW], i, j;

printf("Input array a:\n");

for(i=0; i<ROW; i++)

{

for(j=0; j<COL; j++)

{

scanf("%d", a[i][j]);

}

}

printf("Input array b:\n");

for(i=0; i<COL; i++)

{

for(j=0; j<ROW; j++)

{

scanf("%d", b[i][j]);

}

}

MultiplyMatrix(a, b, c);

printf("Results:\n");

for(i=0; i<ROW; i++)

{

for(j=0; j<ROW; j++)

{

printf("%6d", c[i][j]);

}

}

}

voidMultiplyMatrix(inta[ROW][COL],intb[COL][ROW], intc[ROW][ROW])

{

inti, j, k;

for(i=0; i<ROW; i++)

{

for(j=0; j<ROW; j++)

{

for(k=0; k<COL; k++)

{

c[i][j] = c[i][j] + a[i][k] * b[j][k];

}

}

}

}

注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。

(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。


#include<stdio.h>
#define  ROW 2
#define  COL 3
main()
{
    int a[ROW][COL], b[COL][ROW], c[ROW][ROW]={0}, i, j;
    printf("Input array a:\n");
    for (i=0; i<ROW; i++)
    {
        for (j=0; j<COL; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    printf("Input array b:\n");
    for (i=0; i<COL; i++)
    {
        for (j=0; j<ROW; j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
    MultiplyMatrix(a,b,c);
    printf("Results:\n");
    for (i=0; i<ROW; i++)
    {
        for (j=0; j<ROW; j++)
        {
            printf("%6d", c[i][j]);
        }
        printf("\n");
    }
}
void MultiplyMatrix(int a[ROW][COL],int b[COL][ROW], int c[ROW][ROW])
{
    int i, j, k;
    for (i=0; i<ROW; i++)
    {
        for (j=0; j<ROW; j++)
        {

            for (k=0; k<COL; k++)
            {
                c[i][j] = c[i][j] + a[i][k] * b[k][j];
            }
        }
    }
}

日期转换//中等已完结

  1. 背景:钟面上的时针和分针之间的夹角总是在 0 度~ 359 度之间。

举例来说,在十二点的时候两针之间的夹角为 0 度,而在六点的时候夹角为 180 度,在三点的时候为 90 度。本题要解决的是计算 0:00 到 12:00之间任意一个时间的夹角。输入:要求输入必须为 小时h分钟m的格式,如12h00m, 5h43m等,其他形式的输入都不接收,如 12,00 或5h43等输入都不被接收,而且需要对“小时”和“分钟”进行数值有效判断(小时在[0,12],分钟在[0.60]之间),不满足以上要求时,需要重新输入。在程序中首先打印:Please input time(e.g: 5h43m),然后输入时间。格式为:"Please input time(e.g: 5h43m)\n""%d%c%d%c"输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。格式为:"At %d:%02d the angle is %.1f degrees.\n"如:输入“12h00m”时,输出 At 12:00 the angle is 0.0 degrees.输入“5h43m” 时,输出 At 5:43 the angle is 86.5 degrees.输入“5h5m” 时,输出 At 5:05 the angle is 122.5 degrees.提示1:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。要求结果角度为正值,即最终要取绝对值(fabs函数)提示2:二者之间角度不应大于180度,如果大于,应用360度减去该角度。


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int hour,minute,hour1,minute1;
    char h,m;
    printf("Please input time(e.g: 5h43m)\n");
    scanf("%d%c%d%c",&hour,&h,&minute,&m);
    hour1=hour%12;
    minute1=minute%60;
    float angle1,angle2;
    angle1=(hour1*60+minute1)*0.5;
    angle2=minute1*6;
    float angle;
    angle=fabs(angle1-angle2);
    if(angle>180)
        angle=360-angle;
    printf("At %d:%02d the angle is %.1f degrees.\n",hour,minute,angle);
    return 0;
}
  1. 给定某年某月某日,将其转换成这一年的第几天并输出。

**输入格式要求:"%d%d%d"

**输出格式要求:"%d"

程序运行示例如下:

2012 11 8

313


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

int main()
{
    int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
    int year,month,day;
    int ans=0;
    scanf("%d%d%d",&year,&month,&day);
    if(((year%4==0)&&(year%100!=0))||(year%400==0))//闰年
    {

            for(int i=0;i<month-1;i++)
            {
                ans+=a[1][i];
            }
            ans+=day;
    }
    else//非闰年
        {
            for(int i=0;i<month-1;i++)
            {
                ans+=a[0][i];
            }
            ans+=day;
        }
        printf("%d",ans);
    return 0;
}
  1. 按如下函数原型,用指针做函数参数,编程实现两个元素值的交换。

void Swap(int *x, int *y);

在主函数中输入数组元素的个数n,然后分别调用函数ReadData()输入数组a和数组b的元素值,在循环语句中调用函数Swap()交换数组a和数组b的对应元素的值,最后在主函数中分别调用函数PrintData()输出数组a和数组b的元素值。

**输入提示信息:

"Input array size(n<=10):"

"Input array a:"

"Input array b:"

**输入格式:"%d"

**输出提示信息:

"Output array a:"

"Output array b:"

**输出格式:"%5d"

请按如下框架编程:

#include <stdio.h>

#define N 10

voidReadData(inta[], intn);

voidPrintData(inta[], intn);

voidSwap(int*x, int*y);

main()

{

int a[N], b[N], i, n;

}

/* 函数功能:输入数组a的n个元素值 */

voidReadData(inta[], intn)

{

}

/* 函数功能:输出数组a的n个元素值 */

voidPrintData(inta[], intn)

{

}

/* 函数功能:两整数值互换 */

void Swap(int*x, int*y)

{

}


#include  <stdio.h>
#define N 10
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void Swap(int *x, int *y);
int main()
{
    int  a[N], b[N], i, n;
    printf("Input array size(n<=10):");
    scanf("%d",&n);
    printf("Input array a:");
    ReadData(a,n);
    printf("Input array b:");
    ReadData(b,n);
    for(int i=0;i<n;i++)
        Swap(a+i,b+i);
    printf("Output array a:");
    PrintData(a,n);
    printf("\n");
    printf("Output array b:");
    PrintData(b,n);
     return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
     for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
    for(int i=0;i<n;i++)
        printf("%5d",a[i]);
}
/* 函数功能:两整数值互换 */
void  Swap(int *x, int *y)
{
     int temp;
     temp=*x;
     *x=*y;
     *y=temp;
}
  1. 按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):

输入某一年的第几天,计算并输出它是这一年的第几月第几日。

/* 函数功能: 对给定的某一年的第几天,计算它是这一年的第几月第几日

函数入口参数:整型变量year,存储年

整型变量yearDay,存储这一年的第几天

函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量

整型指针pDay,指向存储第几日的整型变量

函数返回值: 无 */

void MonthDay(int year, int yearDay, int *pMonth, int *pDay);

输入提示信息:"Please enter year, yearDay:"

输入格式:"%d,%d"

输出提示信息和格式:"month = %d, day = %d\n"


#include <stdio.h>
#include <stdlib.h>
int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
void MonthDay(int year,int yearDay,int *pMonth,int *pDay)
{
    int i=0;
    if((year%4==0&&year%100!=0)||year%400==0)//闰年
    {
        while(yearDay>a[1][i])
        {
            yearDay-=a[1][i++];
        }
        *pDay=yearDay;
    }
    else
    {
        while(yearDay>a[0][i])
        {
            yearDay-=a[0][i++];
        }
        *pDay=yearDay;
    }
    *pMonth=i+1;
}
int main()
{

    int year,yearDay,pMonth,pDay;
    printf("Please enter year, yearDay:");
    scanf("%d,%d",&year,&yearDay);
    MonthDay(year,yearDay,&pMonth,&pDay);
    printf("month = %d, day = %d\n",pMonth,pDay);
    return 0;
}

选择控制结构//中等已完结

  1. 身高预测。

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,为float类型,身高预测公式为

男性成人时身高 = (faHeight + moHeight) × 0.54 cm

女性成人时身高 = (faHeight × 0.923 + moHeight) / 2 cm

此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。

请编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。

运行示例:

Are you a boy(M) or a girl(F)?F↙

Please input your father's height(cm):182↙

Please input your mother's height(cm):162↙

Do you like sports(Y/N)?N↙

Do you have a good habit of diet(Y/N)?Y↙

Your future height will be 167(cm)


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

int main()
{
    float faHeight,moHeight,Height;
    char sex,sports,diet;
    printf("Are you a boy(M) or a girl(F)?");
    scanf("%c",&sex);
    printf("Please input your father's height(cm):");
    scanf("%f",&faHeight);
    printf("Please input your mother's height(cm):");
    scanf("%f",&moHeight);
    getchar();
    if(sex=='M'||sex=='m')
        Height=(faHeight+moHeight)*0.54;
    else if(sex=='F'||sex=='f')
        Height=(faHeight*0.923+moHeight)/2.0;
    printf("Do you like sports(Y/N)?");
    scanf("%c",&sports);
    getchar();
    if(sports=='Y'||sports=='y')
        Height*=1.02;
    printf("Do you have a good habit of diet(Y/N)?");
    scanf("%c",&diet);
    if(diet=='Y'||diet=='y')
        Height*=1.015;
    printf("Your future height will be %.0f(cm)",Height);
    return 0;
}
  1. 请进行程序设计,从键盘上输入三个字符,根据其在计算机内的存储方式按照从小到大的顺序输出这三个字符。

提示:字符输入方式可以使用scanf()或者getchar()

输入格式:"%c%c%c"

输出格式:"%c %c %c\n"


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Sort(char *a,char *b)
{
    char temp;
    if(*a-*b>0)
    {
        temp=*a;
        *a=*b;
        *b=temp;
    }
}
int main()
{
    char a,b,c;
    scanf("%c%c%c",&a,&b,&c);
    Sort(&a,&b);
    Sort(&a,&c);
    Sort(&b,&c);
    printf("%c %c %c\n",a,b,c);
    return 0;
}

二维数据处理//中等已完结

  1. 求1898

现將不超过2000的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。这样可以得到两行数,如下:

2 3 5 7 11 13 17 19 ......1997 1999

1 2 2 4 2 4 2 ......... 2

请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假如存在的话,又有几种这样的情况?

**输入格式要求:提示信息:"There are follwing primes in first row :\n"

**输出格式要求:"(%d).%3d,......,%d\n"

程序运行示例如下:

There are follwing primes in first row :

(1).101,......,1999

(2). 89,......,1987

(3). 53,......,1951

(4). 3,......,1901


#include <stdio.h>
#include <stdlib.h>
#define N 2000
int main()
{
    int a[2][N]={0};
    int k=0;
    for(int i=0;i<N;i++)
    {
        int n=i/2+1;
        int sum=2;
        int flag=0;
        if(i==2)
        {
            a[0][k]=2;
            k++;
            continue;
        }
        while(sum!=n)
        {
            if(i%sum==0)
            {
                flag=1;
                break;
            }
            sum++;
        }
        if(flag==0)//是素数
        {
            a[0][k]=i;
            k++;
        }
    }
    for(int j=0;j<k-1;j++)
    {
        a[1][j]=a[0][j+1]-a[0][j];
    }
    int flag=1;
    printf("There are follwing primes in first row :\n");
    for(int i=k-2;i>=0;i--)
    {
        int ans=1898;
        for(int j=i;j>=0;j--)
        {
            if(ans>=a[1][j])
            {
                ans-=a[1][j];
                if(ans==0)
                {
                    printf("(%d).%3d,......,%d\n",flag,a[0][j],a[0][i+1]);
                    flag++;
                }
            }
            else
                break;
        }
    }
    return 0;
}

结构体//中等已完结

  1. 以下程序有若干语法错误,不能正确输出s的成员n、s的成员b中的成员d、s的成员a的值。请找出并改正之。

输入:无

输出:Wang,11,30

#include <stdio.h>

structdate

{

int y;m;d;

}

structstu

{ charn[10];

structdate b;

inta;

}s={“Wang”,{1980,12,11},30};

main()

{

printf(“%c,%d,%d\n”,s.n,s.d,s.a);


#include <stdio.h>
struct date
{
    int  y,m,d;
};
struct stu
{   char n[10];
    struct date b;
    int a;
};
struct stu s={"Wang",{1980,12,11},30};
main()
{

    printf("%s,%d,%d\n",s.n,s.b.d,s.a);
}
  1. 程序改错。以下程序用于打印输出结构体数组的所有元素。

structs

{

charname[10];

intage;

}

main()

{

structs a[3] = {”John”,19,”Paul”,17,”Marry”,18};

int*p;

for(p = a; p < 3; p++)

{

printf("%s,%d\n", p->name, p->age );

}

}


#include <stdio.h>
#include <stdlib.h>
struct s
{
    char name[10];
    int age;
};
int main()
{
    struct s a[3] = {{"John",19},{"Paul",17},{"Marry",18}};
    int p;
    for(p=0;p<3;p++)
    {
        printf("%s,%d\n", a[p].name,a[p].age);
    }
     return 0;
}
  1. 给定如下定义:

structdate_rec

{

intday ;

intmonth ;

intyear ;

};

写一个函数接收两个日期,如果两个日期相同,则返回0,如果第一个日期晚于第二个日期,则返回1,如果第一个日期早于第二个日期,则返回-1。并编写main函数测试它。

**输入格式要求:"%d%d%d" 提示信息:"请输入当前日期(年 月 日):"

**输出格式要求:"当前日期:%d年%d月%d日!\n" "第一个日期晚于第二个日期!" "第一个日期早于第二个日期!" "两个日期相同!"

程序运行示例如下:

请输入当前日期(年 月 日):2012 9 10↙

请输入当前日期(年 月 日):2013 7 10↙

当前日期:2012年9月10日!

当前日期:2013年7月10日!

第一个日期早于第二个日期!


#include <stdio.h>
#include <stdlib.h>
struct date_rec
  {
    int day ;
    int month ;
    int year ;
  };
int main()
{
    struct date_rec data1,data2;
    printf("请输入当前日期(年 月 日):");
    scanf("%d%d%d",&data1.year,&data1.month,&data1.day);
    printf("请输入当前日期(年 月 日):");
    scanf("%d%d%d",&data2.year,&data2.month,&data2.day);
    printf("当前日期:%d年%d月%d日!\n",data1.year,data1.month,data1.day);
    printf("当前日期:%d年%d月%d日!\n",data2.year,data2.month,data2.day);
    if(data1.year<data2.year)
    {
        printf("第一个日期早于第二个日期!");
    }
    else if(data1.year==data2.year)
    {
        if(data1.month<data2.month)
        {
            printf("第一个日期早于第二个日期!");
        }
        else if(data1.month==data2.month)
        {
            if(data1.day<data1.day)
            {
                printf("第一个日期早于第二个日期!");
            }
            else if(data1.day==data1.day)
                printf("两个日期相同!");
            else
              printf("第一个日期晚于第二个日期!") ;
        }
        else
        {
            printf("第一个日期晚于第二个日期!");
        }
    }
    else
        printf("第一个日期晚于第二个日期!");
    return 0;
}
  1. 给定如下定义:

struct time_rec

{

int hours ;

int mins ;

int secs ;

} ;

struct time_rec current_time ;

写一个程序包含如下的函数,完成:

(a) 输入current_time的值:

void input_time(struct time_rec *current_time)

(b) 将current_time增加1秒:

void increment_time(struct time_rec *current_time)

(c) 显示current_time的新值。

void output_time(struct time_rec *current_time)

**输入格式要求:"%d%d%d" 提示信息:"请输入当前时间(时 分 秒):"

**输出格式要求:"当前时间:%d时%d分%d秒!"


#include <stdio.h>
#include <stdlib.h>
 struct time_rec
  {
    int hours;
    int mins;
    int secs;
  };
void input_time(struct time_rec *current_time)//输入current_time的值
{
    printf("请输入当前时间(时 分 秒):");
    scanf("%d%d%d",&current_time->hours,&current_time->mins,&current_time->secs);
}
void increment_time(struct time_rec *current_time)//将current_time增加1秒
{
    current_time->secs++;
    if(current_time->secs>=60)
    {
        current_time->secs-=60;
        current_time->mins++;
        if(current_time->mins>=60)
        {
            current_time->mins-=60;
            current_time->hours++;
            if(current_time->hours>=24)
            {
                current_time->hours-=24;
            }
        }
    }
}
void output_time(struct time_rec *current_time)
{
    printf("当前时间:%d时%d分%d秒!",current_time->hours,current_time->mins,current_time->secs);
}
int main()
{
    struct time_rec current_time ;
    input_time(&current_time);
    increment_time(&current_time);
    output_time(&current_time);
    return 0;
}
  1. 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。

输出提示 "出圈成员及顺序:" 格式 "%3d"

输出提示 "\n最后的成员是:" 格式 "%3d"

程序的运行示例如下:

出圈成员及顺序: 3 6 (后面以此类推,抱歉这里的输出结果保密,暂不公开,注意最后一个人是不出圈的哦)

最后的成员是: (抱歉这里的输出结果保密,暂不公开)


#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
    int before;//原来的序号;
    int after;//现在的序号;
    int flag;//是否出局;
}std;
int main()
{
    std s[13];
    int sum=13;
    for(int i=0;i<13;i++)
    {
        s[i].before=i+1;
        s[i].flag=0;
    }
    int ans=0;
    printf("出圈成员及顺序:");
    for(int i=0;i<39;i++)
    {
        ans%=13;
        if(sum==1)//就剩最后一个人
        {
            break;
        }
        while(s[ans].flag==1)//找到在圈内;
        {
            ans++;
            ans%=13;
        }
        s[ans].after=i+1;
        if(s[ans].after%3==0)
        {
            s[ans].flag=1;//出局;
            sum--;
            printf("%3d",ans+1);
        }
        ans++;
    }
    ans=0;
    while(s[ans].flag==1)
    {
        ans++;
    }
    printf("\n最后的成员是:");
    printf("%3d",ans+1);
    return 0;
}
  1. 编程统计候选人的得票数。设有3个候选人,Li,Zhang,Fun。

要求输入投票总数n,然后每次输入一个得票的候选人的名字(区分大小写),若选民输错候选人姓名,则按废票处理。

选民投票结束后程序自动显示各候选人的得票结果。

请通过分析和调试程序,发现并改正程序中的错误。

注意:将修改后的完整的源程序写在答题区内。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,

才给加10分,如果只改正了部分错误,则不加分。

#include <string.h>

structperson

{

charname[20];

intcount;

}

person leader[3] = {"Li", 0, "Zhang", 0, "Fun", 0};

intmain()

{

inti, j;

charleader_name[20];

scanf("%d\n", &n);

for(i = 0; i < n; i++)

{

scanf("%s", leader_name);

for(j = 0; j < 3; j++)

if(leader_name == leader[j].name)

leader[j].count++;

}

printf("\n");

for(i = 0; i < 3; i++)

printf("%5s:%d\n", leader[i].name, leader[i].count);

return0;

}

程序运行示例如下:

输入

4

Li

Zhang

zha

Fun

输出

Li:1

Zhang:1

Fun:1


#include <string.h>

struct person
{
    char name[20];
    int count;
};
struct person leader[3]={{"Li",0},{"Zhang",0},{"Fun",0}};
int main()
{
    int i,j,n;
    char leader_name[20][6];
    scanf("%d\n",&n);
    for (i = 0;i<n; i++)
    {
        scanf("%s",leader_name[i]);
        for (j = 0;j<3; j++)
        {
            if (strcmp(leader_name[i],leader[j].name)==0)
                leader[j].count++;
        }
    }
    printf("\n");
    for (i = 0; i < 3; i++)
        printf("%5s:%d\n", leader[i].name, leader[i].count);
    return 0;
}
  1. 编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显示各候选人的得票结果和废票信息。要求用结构体数组candidate表示3个候选人的姓名和得票结果。

例如:

Input vote 1:li

Input vote 2:li

Input vote 3:Zhang

Input vote 4:wang

Input vote 5:zhang

Input vote 6:Wang

Input vote 7:Zhang

Input vote 8:wan

Input vote 9:li

Input vote 10:lii

Election results:

li:3

zhang:3

wang:2

Wrong election:2

输入格式:

"Input vote %d:"

"%s"

输出格式:

"Election results:\n"

"%8s:%d\n"

"Wrong election:%d\n"


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
    char name[20];
    int count;
};
struct person candidate[3]={{"li",0},{"zhang",0},{"wang",0}};
int main()
{
    int i,j;
    char leader_name[10][6];
    int flag=0;
    int sum=0;
    for (i=0;i<10;i++)
    {
        printf("Input vote %d:",i+1);
        scanf("%s",leader_name[i]);
        flag=0;
        if (strcmp(leader_name[i],candidate[0].name)==0||strcmp(leader_name[i],"Li")==0)
        {
            candidate[0].count++;
            flag=1;
        }
        else if(strcmp(leader_name[i],candidate[1].name)==0||strcmp(leader_name[i],"Zhang")==0)
        {
            candidate[1].count++;
            flag=1;
        }
        else if(strcmp(leader_name[i],candidate[2].name)==0||strcmp(leader_name[i],"Wang")==0)
        {
            candidate[2].count++;
            flag=1;
        }
        if(flag==0)
        {
            sum++;
        }
    }
    printf("Election results:\n");
    for (i = 0; i < 3; i++)
        printf("%8s:%d\n", candidate[i].name, candidate[i].count);
        printf("Wrong election:%d\n",sum);
    return 0;
}
  1. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题。

输入格式要求:"请输入日期(年,月,日)\n"

输出格式要求:"%d月%d日是%d年的第%d天\n"

程序的运行示例如下:

请输入日期(年,月,日)

1990,2,14↙

2月14日是1990年的第45天。


#include <stdio.h>
#include <stdlib.h>
typedef struct time
{
    int year,month,day;
}td;
int main()
{
    int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
    td date;
    printf("请输入日期(年,月,日)\n");
    scanf("%d,%d,%d",&date.year,&date.month,&date.day);
    int sum=0;
    if(date.year%4==0&&date.year%100!=0||date.year%400==0)//判断是闰年
    {
        for(int i=0;i<date.month-1;i++)
        {
            sum+=a[1][i];
        }
        sum+=date.day;
    }
    else
    {
        for(int i=0;i<date.month-1;i++)
        {
            sum+=a[0][i];
        }
        sum+=date.day;
    }
    printf("%d月%d日是%d年的第%d天\n",date.month,date.day,date.year,sum);
    return 0;
}
  1. 以下程序有若干语法错误,不能正确输出成员a和成员v的值。请找出错误并改正之。

union

{ inta;

Struct

{ intu;

floatv;

}b;

}

main()

{ unionuu m;

m.a=200;

m.u=500;

m.v=120.5;

printf(“%d\t%f\n”,m.a,m.b.v);

}


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

union  uu
{   int a;
    struct c
    {   int u;
        float v;
    }b;
};
int main()
{   union uu m;
    m.a=200;
    m.b.v=120.5;
    printf("%d\t%f\n",m.a,m.b.v);
    return 0;
}
  1. 用结构体实现输入4个学生的学号(无符号整数)、姓名(字符串)和考试成绩(整数),然后按从高分到低分的顺序排列后输出。

程序的运行示例如下:

输入第1个学生的信息:学号、姓名、成绩

2011 zhangsan 89

输入第2个学生的信息:学号、姓名、成绩

2012 lisi 96

输入第3个学生的信息:学号、姓名、成绩

2013 wangwu 67

输入第4个学生的信息:学号、姓名、成绩

2014 liuliu 59

排序后学生的信息为:

2012 lisi 96

2011 zhangsan 89

2013 wangwu 67

2014 liuliu 59


#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
    unsigned int num;
    char name[20];
    int score;
}std;
void Sort(std *a,int n)
{
    std temp;
    for(int i=0;i<4;i++)
    {
        int flag=0;
        for(int j=3;j>i;j--)
        {
            if(a[j-1].score<a[j].score)
            {
                temp=a[j];
                a[j]=a[j-1];
                a[j-1]=temp;
                flag=1;
            }
        }
        if(flag==0)
            break;
    }
}
int main()
{
    std a[4];
    for(int i=0;i<4;i++)
    {
        printf("输入第%d个学生的信息:学号、姓名、成绩\n",i+1);
        scanf("%d %s %d",&a[i].num,a[i].name,&a[i].score);
    }
    Sort(a,4);
    printf("排序后学生的信息为:\n");
    for(int i=0;i<4;i++)
    {
        printf("%d %s %d\n",a[i].num,a[i].name,a[i].score);
    }
    return 0;
}
  1. 写一个函数days,实现主函数将年、月、日(结构体类型)传递给days函数,days函数计算该年该月该日是该年的第几天并传回主函数输出。

程序的运行示例如下:

请输入日期(年,月,日)

1990,2,14

2月14日是1990年的第45天。

输入格式:

"请输入日期(年,月,日)\n"

"%d,%d,%d"

输出格式:

"\n%d月%d日是%d年的第%d天。"


#include <stdio.h>
#include <stdlib.h>
int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
typedef struct time
{
    int year,month,day;
}td;
void days(td *date,int *sum)
{
    if(date->year%4==0&&date->year%100!=0||date->year%400==0)//判断是闰年
    {
        for(int i=0;i<date->month-1;i++)
        {
            (*sum)+=a[1][i];
        }
        (*sum)+=date->day;
    }
    else
    {
        for(int i=0;i<date->month-1;i++)
        {
            (*sum)+=a[0][i];
        }
        (*sum)+=date->day;
    }
}
int main()
{
    td date;
    printf("请输入日期(年,月,日)\n");
    scanf("%d,%d,%d",&date.year,&date.month,&date.day);
    int sum=0;
    days(&date,&sum);
    printf("\n%d月%d日是%d年的第%d天。" ,date.month,date.day,date.year,sum);
    return 0;
}
  1. 中国有句俗语叫“三天打鱼两天晒网”,某人从90年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天中是在“打渔”,还是在“晒网”.

**输入格式要求:"%d%d%d" 提示信息:"Enter year/month/day:"

**输出格式要求:"He is fishing.\n" "He is sleeping.\n"

程序运行示例如下:

Enter year/month/day:1990 1 5

He is sleeping.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
typedef struct time
{
    int year,month,day;
}td;
void days(td *date,int *sum)
{
    if(date->year%4==0&&date->year%100!=0||date->year%400==0)//判断是闰年
    {
        for(int i=0;i<date->month-1;i++)
        {
            (*sum)+=a[1][i];
        }
        (*sum)+=date->day;
    }
    else
    {
        for(int i=0;i<date->month-1;i++)
        {
            (*sum)+=a[0][i];
        }
        (*sum)+=date->day;
    }
}
int main()
{
    td date;
    int sum=0;
    printf("Enter year/month/day:");
    scanf("%d%d%d",&date.year,&date.month,&date.day);
    for(int i=1990;i<date.year;i++)
    {
        if(i%4==0&&i%100!=0||i%400==0)//判断闰年
            sum+=366;
        else//非闰年
            sum+=365;
    }
    days(&date,&sum);
    switch(sum%5)
    {
            case 1:
            case 2:
            case 3:
                {
                    printf("He is fishing.\n");
                    break;
                }
            default :
                {
                    printf("He is sleeping.\n");
                    break;
                }
    }
    return 0;
}

字符数组//中等已完结

  1. 输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。

#include <stdio.h>

#include <string.h>

#define ARR_SIZE = 80;

main()

{

charstr[ARR_SIZE];

int len, i;

int letter=0,digit=0,space=0,other=0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

for(i=0; i<len; i++)

{

if(a=<str[i]<=z || A=<str[i]<=Z)

{

letter ++;

}

elseif(0=<str[i]<=9)

{

digit ++;

}

elseif(str[i]=' ')

{

space ++;

}

else

other ++;

}

printf("英文字符数:%d\n", letter);

printf("数字字符数:%d\n", digit);

printf("空格数:%d\n", space);

printf("其他字符数:%d\n", other);

}


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

#define ARR_SIZE  80//define后不能有分号且不是等号(1)

main()
{
    char str[ARR_SIZE];
    int  len,i;
    int  letter=0,digit=0,space=0,other=0;
    printf("请输入一个字符串:");
    gets(str);
    len = strlen(str);
    for (i=0; i<len; i++)
    {
        if (str[i]>='a'&&str[i]<='z' || str[i]>='A'&&str[i]<='Z')//符号要带''
        {
            letter ++;
        }
        else if (str[i]>='0'&&str[i]<='9')
        {
            digit ++;
        }
        else if (str[i]==' ' )
        {
            space ++;
        }
        else
            other ++;
    }

    printf("英文字符数:%d\n", letter);
    printf("数字字符数:%d\n", digit);
    printf("空格数:%d\n", space);
    printf("其他字符数:%d\n", other);
}

循环控制结构//中等已完结

  1. 将任一整数转换为二进制形式。

**输入格式要求:"%d" 提示信息:"Input number:"

**输出格式要求:"number of decimal form:%d\n" " it\'s binary form: "

程序运行示例如下:

Input number:876

number of decimal form:876

it's binary form: 00000000000000000000001101101100


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

int main()
{
    int n,a[32]={0};
    printf("Input number:");
    scanf("%d",&n);
    int ans=0,temp=n;
    while(n!=0)
    {
        a[ans]=n%2;
        n=n/2;
        ans++;
    }
    printf("number of decimal form:%d\n",temp);
    printf( "    it\'s binary form: ");
    for(int i=31;i>=0;i--)
        printf("%d",a[i]);
    return 0;
}
  1. 以下划线、英文字符开头的并且由下划线、英文字符和数字组成的标识符都是合法的标识符。

编写一个程序,判断输入的一行字符是否构成一个合法的C标识符(以下划线_开头的标识符视为合法的C标识符)。(假设输入的字符串非关键字且最大长度为32)

**输入格式要求:getchar()

**输出格式要求:"is\n" "is not\n"

程序运行示例1如下:

$223

is not

程序运行示例2如下:

hello world

is not

程序运行示例3如下:

hello

is


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char a[32];
    gets(a);
    int l=strlen(a);
    int flag=0;
    if(a[0]>='a'&&a[0]<='z'||a[0]>='A'&&a[0]<='Z'||a[0]=='_')
    {
        for(int i=1;i<l;i++)
        {
            if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'||a[i]=='_')
            {

            }
            else
            {
                flag=1;
                break;
            }
        }
    }
    else
        flag=1;
    if(flag==0)
        printf("is\n");
    else
        printf("is not\n");
    return 0;
}
  1. 程序:显示法定格式的日期合同和其他法律文档中经常使用下列日期格式:

Dated this day of ,19 .

编写程序用来显示这种格式的日期。用户以月/日的格式录入日期,然后计算机显示出“法定”格式的日期:

Enter date (mm/dd/yy) : 7/19/96

Dated this 19th day of July, 1996.

可以使用printf函数实现主要的格式化。然而,还有两个问题:如何为日添加“th”(或者“st”、“nd”、“rd”),以及如何使用单词代替数字显示月份。幸运的是,switch语句可以很好地解决这两种问题:用一个switch语句负责显示日的后缀,再用另一个switch语句显示出月份名。注意,11日、12日、13日对应的英文是th结尾。

**输入格式要求:"%d/%d/%d" 提示信息:"Enter date (mm/dd/yy):" "Dated this %d" "st/nd/rd/th" " day of " "January/February/.../December"

如果输入的日期不在合法范围内,则输出"Input error!\n"。

**输出格式要求:", 19%.2d.\n"


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

int main()
{
    int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
    printf("Enter date (mm/dd/yy):");
    int month,day,year;
    scanf("%d/%d/%d",&month,&day,&year);
    int temp=year+1900;
    if((temp%4==0&&temp%100!=0)||temp%400==0)//闰年
    {
        if(month>12||a[1][month-1]<day)//输入的日期不合法
        {
            printf("Input error!\n");
        }
        else//输入合法
        {
            month%=12;
            switch(month)
            {
                case 0:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of December, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of December, 19%.2d.\n",year);
                        break;
                    }
                }
                case 1:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of January, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of January, 19%.2d.\n",year);
                    break;
                }
                }
                case 2:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of February, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of February, 19%.2d.\n",year);
                    break;
                }
                }
                case 3:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of March, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of March, 19%.2d.\n",year);
                    break;
                }
                }
                case 4:
                {
                        int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of April, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of April, 19%.2d.\n",year);
                        break;
                    }
                }
                case 5:
                {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of May, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of May, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 6:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of June, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of June, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 7:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of July, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of July, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 8:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of August, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of August, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 9:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of September, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of September, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 10:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of October, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of October, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 11:
                    {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of November, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of November, 19%.2d.\n",year);
                        break;
                    }
                    }
            }
        }

    }
    else
    {
        if(month>12||a[1][month-1]<day)//输入的日期不合法
        {
            printf("Input error!\n");
        }
        else//输入合法
        {
            month%=12;
            switch(month)
            {
                case 0:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of December, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of December, 19%.2d.\n",year);
                        break;
                    }
                }
                case 1:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of January, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of January, 19%.2d.\n",year);
                    break;
                }
                }
                case 2:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of February, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of February, 19%.2d.\n",year);
                    break;
                }
                }
                case 3:
                {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of March, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                    printf(" day of March, 19%.2d.\n",year);
                    break;
                }
                }
                case 4:
                {
                        int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of April, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of April, 19%.2d.\n",year);
                        break;
                    }
                }
                case 5:
                {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of May, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of May, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 6:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of June, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of June, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 7:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of July, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of July, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 8:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of August, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of August, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 9:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of September, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of September, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 10:
                        {
                    int ans=day;
                        if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of October, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of October, 19%.2d.\n",year);
                        break;
                    }
                }
                    case 11:
                    {
                    int ans=day;
                    if(ans>=4&&ans<=20)
                    {
                        printf("Dated this %dth",day);
                        printf(" day of November, 19%.2d.\n",year);
                        break;
                    }
                    else
                    {
                        ans%=10;
                        switch(ans)
                        {
                        case 1:
                            {
                                printf("Dated this %dst",day);
                                break;
                            }
                        case 2:
                            {
                                printf("Dated this %dnd",day);
                                break;
                            }
                        case 3:
                            {
                                printf("Dated this %drd",day);
                                break;
                            }
                        default:
                            {
                                printf("Dated this %dth",day);
                                break;
                            }
                        }
                        printf(" day of November, 19%.2d.\n",year);
                        break;
                    }
                    }
            }
        }
    }
    return 0;
}

数组//中等已完结

  1. 按如下函数原型,用指针作函数参数,编程统计数组a中奇数和偶数的个数,指针形参odd返回奇数的个数,指针形参even返回偶数的个数:

void f(int a[], int *odd, int *even);

在主函数中输入20个整数,调用函数f()统计奇数和偶数的个数并通过指针形参返回给主函数,在主函数中输出统计结果。

**输入提示信息:"input 20 numbers:"

**输入数据格式:"%d"

**输出数据格式:"Odd numbered=%d,Even numbered=%d\n"

请按如下框架编程,在“......”的位置添加缺失的语句,使程序完整。

#include <stdio.h>

/*

功能:统计数组a中奇数和偶数的个数

参数:odd为指向奇数个数的指针

even指向偶数个数的指针

*/

voidf(inta[], int*odd, int*even)

{

........................

}

intmain()

{

inta[20], i, odd = 0, even = 0;

printf("input 20 numbers:");

............

printf("Odd numbered=%d,Even numbered=%d\n", odd, even);

return0;

}


#include <stdio.h>
/*
功能:统计数组a中奇数和偶数的个数
参数:odd为指向奇数个数的指针
   even指向偶数个数的指针
*/
void f(int a[], int *odd, int *even)
{
     for(int i=0;i<20;i++)
     {
         if(a[i]%2==0)//如果是偶数
         (*even)++;
         else
            (*odd)++;
     }
}
int main()
{
    int a[20],i,odd=0, even =0;
    printf("input 20 numbers:");
    for(i=0;i<20;i++)
        scanf("%d",&a[i]);
    f(a,&odd,&even);
    printf("Odd numbered=%d,Even numbered=%d\n",odd,even);
    return 0;
}
  1. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数。

程序的运行示例如下:

共有多少个数?5

后移多少个?2

请以,号为间隔输入5个数。

1,2,3,4,5

移动后顺序为:

4,5,1,2,3


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

int main()
{
    int a[100],n;
    printf("共有多少个数?");
    scanf("%d",&n);
    printf("后移多少个?");
    int k;
    scanf("%d",&k);
    printf("请以,号为间隔输入%d个数。\n",n);
    for(int i=0;i<n;i++)
        scanf("%d,",&a[i]);

    printf("移动后顺序为:\n");
    for(int i=0;i<k;i++)
    {
        int temp=a[n-1];
        for(int j=n-1;j>0;j--)
        {
            a[j]=a[j-1];
        }
        a[0]=temp;
    }
    for(int i=0;i<n-1;i++)
    printf("%d,",a[i]);
    printf("%d\n",a[n-1]);
    return 0;
}
  1. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

**输入格式要求:"%d" 提示信息:"the total numbers is:" "back m:"

**输出格式要求:"%d," "%d"

程序运行示例1如下:

the total numbers is:5

back m:2

1 2 3 4 5

4,5,1,2,3

程序运行示例2如下:

the total numbers is:6

back m:3

1 2 3 4 5 6

4,5,6,1,2,3


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

int main()
{
    int a[100],n;
    printf("the total numbers is:");
    scanf("%d",&n);
    printf("back m:");
    int k;
    scanf("%d",&k);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(int i=0;i<k;i++)
    {
        int temp=a[n-1];
        for(int j=n-1;j>0;j--)
        {
            a[j]=a[j-1];
        }
        a[0]=temp;
    }
    for(int i=0;i<n-1;i++)
    printf("%d,",a[i]);
    printf("%d\n",a[n-1]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值