一维数组//中等已完结
-
从键盘输入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;
}

-
下面的两个数组代表生产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;
}

-
编写一个程序,将用户输入的十进制短整型正数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;
}
-
编写程序,把一维数组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;
}
最值计算//中等已完结
-
编程实现一个输入指定范围内的整数的函数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;
}

-
按如下函数原型,编程实现计算数组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;
}
-
要求:从键盘输入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;
}
-
从键盘输入某班学生某门课的成绩和学号(最多不超过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;
}
-
按如下函数原型计算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];
}
}
}
-
输入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;
}
-
有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;
}
-
计算数组最大值及最大值下标。数组最多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;
}
}
}
-
从键盘输入某班学生某门课的成绩(每班人数最多不超过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从键盘输入某单位职工的月收入(最多不超过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;
}
-
写一个程序,输入十个整数到数组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;
}
-
要求:从键盘输入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;
}
-
从键盘输入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↙
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;
}
-
求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;
}
-
下列给定的程序中,函数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;
}
}
}
}
-
将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;
}
-
在长度为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;
}
-
下面程序功能是在一个一维数组中找出其中最大的数及其下标。请改正程序中的错误,使之能得到正确的结果。
#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);
}
-
下面程序的功能是从键盘任意输入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");
}
-
下面的程序将数字进行加密,其中的每一个数字转化为另一个不同的数字。请改正程序中的错误,使它能得出正确的结果。
#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');
}
}
-
程序改错。在一个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; } } } } |
-
下列给定程序中,函数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);
}
-
下面程序用于从键盘输入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;
}
-
输入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]); } } |


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


-
在数组元素中找最大值及其所在下标位置。
#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;
}
-
在数组元素中找最大值及其所在下标位置。
#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;
}
-
在下面使用指针数组的程序中存在一个错误,试分析这个程序,并上机运行,观察运行结果,找到这个错误,并分析出错的原因。
#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");
}
-
下列给定程序中,函数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;
}
-
将字符串“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;
}
-
下面程序实现折半查找算法,当找到输入元素后显示其在数组中的下标。找出其中的错误,并改正之
#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");
}
-
编程计算矩阵相乘之积。找出下列程序中的错误并改正之。
#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];
}
}
}
}
日期转换//中等已完结
-
背景:钟面上的时针和分针之间的夹角总是在 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;
}
-
给定某年某月某日,将其转换成这一年的第几天并输出。
**输入格式要求:"%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;
}

-
按如下函数原型,用指针做函数参数,编程实现两个元素值的交换。
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;
}
-
按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):
输入某一年的第几天,计算并输出它是这一年的第几月第几日。
/* 函数功能: 对给定的某一年的第几天,计算它是这一年的第几月第几日
函数入口参数:整型变量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;
}
选择控制结构//中等已完结
-
身高预测。
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。
设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;
}
-
请进行程序设计,从键盘上输入三个字符,根据其在计算机内的存储方式按照从小到大的顺序输出这三个字符。
提示:字符输入方式可以使用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;
}
二维数据处理//中等已完结
-
求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;
}

结构体//中等已完结
-
以下程序有若干语法错误,不能正确输出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);
}


-
程序改错。以下程序用于打印输出结构体数组的所有元素。
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;
}
-
给定如下定义:
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;
}
-
给定如下定义:
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",¤t_time->hours,¤t_time->mins,¤t_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(¤t_time);
increment_time(¤t_time);
output_time(¤t_time);
return 0;
}
-
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;
}
-
编程统计候选人的得票数。设有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;
}
-
编程统计候选人的得票数。设有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;
}
-
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题。
输入格式要求:"请输入日期(年,月,日)\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;
}
-
以下程序有若干语法错误,不能正确输出成员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;
}
-
用结构体实现输入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;
}
-
写一个函数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;
}
-
中国有句俗语叫“三天打鱼两天晒网”,某人从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;
}
字符数组//中等已完结
-
输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。
#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);
}


循环控制结构//中等已完结
-
将任一整数转换为二进制形式。
**输入格式要求:"%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;
}


-
以下划线、英文字符开头的并且由下划线、英文字符和数字组成的标识符都是合法的标识符。
编写一个程序,判断输入的一行字符是否构成一个合法的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;
}



-
程序:显示法定格式的日期合同和其他法律文档中经常使用下列日期格式:
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;
}
数组//中等已完结
-
按如下函数原型,用指针作函数参数,编程统计数组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;
}
-
有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;
}
-
有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;
}