/*1、输入星期数,输出行程安排,例如:
周六 - 和朋友去长城
周日 - 陪家人去故宫
周一至周五 - 工作*/
#include<stdio.h>
int main()
{
int n;
printf("输入星期数n:");
scanf_s("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:printf("工作"); break;
case 6:printf("和朋友去长城"); break;
case 7:printf("陪家人去故宫"); break;
}
return 0;
}
//2、写一程序,判断某一年是否为闰年。
#include<stdio.h>
int main()
{
int year;
printf("input year:");
scanf_s("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("%d is a leap year.", year);
else
printf("%d is not a leap year.", year);
return 0;
}
//3、有人用温度计测量出用华氏法表示的温度(如64°F),今要求把它转换为以摄氏法表示的温度(如17.8℃)
#include<stdio.h>
int main()
{
double F, C;
F = 64.0;
C = (5.0 / 9) * (F - 32);
printf("F=%2.0f\nC=%2.1f\n", F, C);
return 0;
}
//4、用C语言求30!。并画出流程图
#include<stdio.h>
int main()
{ //int会数据溢出,12/13为界
float t = 1, i = 2;
while (i <= 30)
{
t = t * i;
i = i + 1;
}
printf("%f\n", t);
return 0;
}
//5、输入身高(米)和体重(千克)计算BMI值,其中BMI值计算公式为,BMI = 体重/身高^2。
#include<stdio.h>
int main()
{
double h, w, BIM;
printf("输入您的身高(米)、体重(千克)分别是:\n");
scanf_s("%lf%lf", &h, &w);
BIM = w / (h * h);
printf("您的BMI=%8.6f", BIM);
}
//6、给定一个大写字母,要求用小写字母输出。提示:大写字母比小写字母的ASCII 码小32。
/*
//法一
#include<stdio.h>
int main()
{
char c = 'A';
c = c + 32;
printf("%c\n", c);
return 0;
}
//法二
#include<stdio.h>
int main()
{
char c;
printf("输入一个大写字母:");
scanf_s("%c", &c, 5);
c = c + 32;
printf("输出它的小写字母:%c\n", c);
return 0;
}
*/
//7、从键盘输入一个四位的整数num,将其个、十、百、千位倒序生成一个数字输出。例如:输入1234,输出4321 。
#include<stdio.h>
int main()
{
int num, y;
printf("请输入原数字:");
scanf_s("%d", &num);
if (num > 9999) printf("输入数字不能超过四位数");
else
{
for (y = 0; num != 0; num = num / 10)
y = y * 10 + num % 10;
}
printf("倒序后的数字:%d", y);
return 0;
}
//8、求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac>0。
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, x1, x2;
printf("Input a,b,c:");
scanf_s("%lf,%lf,%lf", &a, &b, &c);
if (a == 0)
printf("x=%lf", -c / b);
else
{
x1 = (-b + sqrt(b * b - 4 * a * c)) / 2 * a;
x2 = (-b - sqrt(b * b - 4 * a * c)) / 2 * a;
printf("x1=%lf,x2=%lf", x1, x2);
}
return 0;
}
/*9、求ax2+bx+c=0方程的根。a,b,c由键盘输入。需判别,
如果b2-4ac≥0,就计算并输出方程的两个实根,
如果b2-4ac<0,就输出“此方程无实根”的信息。*/
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, x, x1, x2;
printf("Input a,b,c:");
scanf_s("%lf,%lf,%lf", &a, &b, &c);
if (a == 0)
printf("x=%lf", -c / b);
else if (b * b - 4 * a * c < 0)
printf("此方程无实根");
else
{
x1 = (-b + sqrt(b * b - 4 * a * c)) / 2 * a;
x2 = (-b - sqrt(b * b - 4 * a * c)) / 2 * a;
printf("x1=%lf,x2=%lf", x1, x2);
}
return 0;
}
//10、给出三角形的三边长,求三角形面积。
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, s, area;
printf("输三角形三边长:");
scanf_s("%lf,%lf,%lf", &a, &b, &c);
if (a + b > c && b + c > a && a + c > b)
{
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形的面积是:%lf\n", area);
}
else
printf("不能构成三角形");
return 0;
}
//11、输入两个实数,按由小到大的顺序输出这两个数。
#include<stdio.h>
int main()
{
float num1, num2;
printf("输入输入两个实数:");
scanf_s("%f,%f", &num1, &num2);
float temp;
if (num1 > num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
printf("按由小到大的顺序:%.2f,%.2f\n", num1, num2);
return 0;
}
/*12、输入一个字符,判别它是否为大写字母,
如果是,将它转换成小写字母;
如果不是,不转换。然后输出最后得到的字符。*/
#include <stdio.h>
int main()
{
char a;
printf("输入一个字符:");
a = getchar();
a = (a >= 'A' && a <= 'Z') ? (a + 32) : a;
printf("由题意输出为:%c", a);
return 0;
}
/*13、模拟自动售货机可选择的:
1、巧克力
2、小面包
3、可口可乐
如果都不是则 输出错误!!!*/
#include<stdio.h>
int main()
{
int n;
printf("********************\n");
printf("自动售货机可选择的:\n");
printf("1:巧克力\n");
printf("2:小面包\n");
printf("3:可口可乐\n");
printf("输入您的选择:");
scanf_s("%d", &n);
switch (n)
{
case 1:printf("选择巧克力\n"); break;
case 2:printf("选择蛋糕\n"); break;
case 3:printf("选择可口可乐\n"); break;
default:printf("输出错误!!!\n"); break;
}
printf("\n");
return 0;
}
/*14、已知小明成绩为85分,请使用if else语句判断小明的成绩属于以下哪个等级。
60分以下:不及格
60 - 70分:及格
70 - 90分:良好
90 - 100分:优秀*/
#include<stdio.h>
int main()
{
float g = 85;
printf("已知小明成绩为%.1f分\n", g);
if (g < 60) printf("不及格");
else if (g < 70) printf("及格");
else if (g < 90) printf("良好");
else if (g < 100)printf("优秀");
return 0;
}
/*
#include<stdio.h>
int main()
{
printf("已知小明成绩为");
float g = scanf_s("%f", &g);
if (g < 60) printf("不及格");
else if (g < 70) printf("及格") ;
else if (g < 90) printf("良好");
else if (g < 100)printf("优秀") ;
return 0;
}
*/
//15、求1+2+3+…+100。并画出流程图。
/*
//法一while当型
#include<stdio.h>
int main()
{
int i=1, sum = 0;
while (i <= 100)
{
sum = sum + i;
i = i++;
}
printf("sum=%d\n", sum);
return 0;
}
//法二do while直到型
#include<stdio.h>
int main()
{
int i=1, sum = 0;
do
{
sum = sum + i;
i = i++;
}while(i<=100);
printf("sum=%d\n", sum);
return 0;
}
//法三for当型
#include<stdio.h>
int main()
{
int i, sum;
for(i=1,sum=0;i<=100;i++)
sum=sum+i;
printf("sum=%d\n", sum);
return 0;
}
*/
/*16、用公式π/4≈1?1/3+1/5?1/7+?求π的近似值,
直到发现某一项的绝对值小于10-6为止(该项不累加)。*/
#include<stdio.h>
#include<math.h>
int main()
{
int sign = 1;//sign数值符号
double pi = 0.0, n = 1.0, term = 1.0;//n分母,term当前项
while (fabs(term) >= 1e-6)//绝对值
{
pi = pi + term;
n = n + 2;
sign = -sign;
term = sign / n;
}
pi = pi * 4;
printf("pi=%10.8f\n", pi);
return 0;
}
/*17、百钱百鸡:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:
一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,
现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
问题分析
(1)用百钱如果只买公鸡,最多可以买20只,但题目要求买一百只,由此可知,所买公鸡的数量应该在0~20之间。
(2)同理,所买母鸡的数量应该在0~33之间。
(3)不妨把公鸡,母鸡和小鸡的数量分别设为cock,hen,chicken,则cock+hen+chicken=100*/
/*
//法一
#include<stdio.h>
int main()
{
int cock, hen, chicken;
for (cock = 0; cock <= 20; cock++)
for (hen = 0; hen <= 33; hen++)
for (chicken = 0; chicken <= 100; chicken++)
{
if ((5 * cock + 3 * hen + chicken / 3.0 == 100) && (cock + hen + chicken == 100))
printf("cock=%2d,hen=%2d,chicken=%2d\n", cock, hen, chicken);
}
return 0;
}
//法二
#include<stdio.h>
int main()
{
int cock, hen;
for (cock = 0; cock <= 20; cock++)
for (hen = 0; hen <= 33; hen++)
{
if (5 * cock + 3 * hen + (100 - cock - hen) / 3.0 == 100)
printf("cock=%2d,hen=%2d,chicken=%2d\n", cock, hen, 100 - cock - hen);
}
return 0;
}
*/
/*18、在全系1000名学生中举行慈善募捐,
当总数达到10万元时就结束,
统计此时捐款的人数以及平均每人捐款的数目*/
#include<stdio.h>
#define SUM 100000
int main()
{
float amount, aver, total;
int i;
for (i = 1, total = 0; i <= 1000; i++)
{
printf("please enter amount:");
scanf_s("%f", &amount);
total = total + amount;
if (total >= SUM) break;
}
aver = total / i;
printf("num=%d\naver=%10.2f\n", i, aver);
return 0;
}
//19、要求输出100~200之间的不能被3整除的数。并画出流程图。
//法一
#include <stdio.h>
int main()
{
int n;
printf("100~200之间不能被3整除的数:\n");
for (n = 100; n <= 200; n++)
{
if (n % 3 == 0)
continue;
printf("%d ", n);//有空格
}
printf("\n");
return 0;
}
/*
//法二
#include <stdio.h>
int main()
{
int n;
printf("100~200之间不能被3整除的数:\n");
for (n = 100; n <= 200; n++)
{
if (n % 3 != 0)
printf("%d\t", n);
}
printf("\n");
return 0;
}
*/
//20、输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。
//法一
#include <stdio.h>
int main()
{
int n, i;
printf("please enter a integer number,n=?");
scanf_s("%d", &n);
for (i = 2; i <= n - 1; i++)
if (n % i == 0) break;
if (i < n) printf("%d is not a prime number.\n", n);
else printf("%d is a prime number.\n", n);
return 0;
}
//法二
/*
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, k;
printf("please enter a integer number:n=?");
scanf_s("%d", &n);
k = sqrt(n);
for (i = 2; i <= k; i++)
if (n % i == 0) break;
if (i <= k) printf("%d is not a prime number.\n", n);
else printf("%d is a prime number.\n", n);
return 0;
}
*/
/*21、假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。
计算公式为P=(1+r)^n,r为年增长率;n为年数;P为与现在相比的百分比。*/
//法一
#include <stdio.h>
#include <math.h>
int main()
{
float p, r, n;
r = 0.1; //如果年增长率为9%,就改为r=0.09
n = 10;
p = pow(1 + r, n);
printf("p=%f\n", p);
return 0;
}
/*
//法二
#include <stdio.h>
#include <math.h>
int main()
{
float p, r, i;
r = 0.1; //如果年增长率为9%,就改为r=0.09
for (p = 1, i = 1; i <= 10; i++)
p = p * (1 + r);
printf("p=%f\n", p);
return 0;
}
*//22.
* 存款利息的计算 有1000元,想存5年,可按以下5种办法存: 2007年12月的银行存款利息如下:
(1)一次存5年期 1年期定期存款利息为1.5 %
(2)先存2年,到期后将本息再存3年期 2年期定期存款利息为2.1 %
(3)先存3年,到期后将本息再存2年期 3年期定期存款利息为2.75 %
(4)存1年期,到期后将本息再存1年期,连续存5次。 5年期定期存款利息为3 %
(5)存活期存款。活期利息每一季度结算一次。 活期存款利息为0.35 % (活期存款每一季度结算一次利息)
如果r为年利息,n为存款年数,则计算本息和的公式为 :
1年期本息和:P = 1000 * (1 + r);
n年期本息和:P = 1000 * (1 + n * r);
存n次1年期的本息和:P = 1000 * (1 + r) ^ n;
活期存款本息和:P = 1000 * (1 + r / 4) ^ 4n;
说明:1000 * (1 + r / 4)是一个季度的本息和。 * /
#include <stdio.h>
#include <math.h>
int main()
{
float r5, r3, r2, r1, r0, p, p1, p2, p3, p4, p5;
p = 1000;
r1 = 0.0015;
r2 = 0.0021;
r3 = 0.00275;
r5 = 0.003;
r0 = 0.00035;
p1 = p * (1 + 5 * r5); // 一次存5年期
p2 = p * (1 + 2 * r2) * (1 + 3 * r3); // 先存2年期,到期后将本息再存3年期
p3 = p * (1 + 3 * r3) * (1 + 2 * r2); // 先存3年期,到期后将本息再存2年期
p4 = p * pow(1 + r1, 5); // 存1年期,到期后将本息存再存1年期,连续存5次
p5 = p * pow(1 + r0 / 4, 4 * 5); // 存活期存款。活期利息每一季度结算一次
printf("p1=%10.2f\n", p1); // 输出按第1方案得到的本息和
printf("p2=%10.2f\n", p2); // 输出按第2方案得到的本息和
printf("p3=%10.2f\n", p3); // 输出按第3方案得到的本息和
printf("p4=%10.2f\n", p4); // 输出按第4方案得到的本息和
printf("p5=%10.2f\n", p5); // 输出按第5方案得到的本息和
return 0;
}
/*23、购房从银行贷了一笔款d ,准备每月还款额为p ,月利率为r ,计算多少月能还清。
设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。
提示:计算还请月数m 的公式如下:
m = [log p - log(p - d * r)] / log(1 + r)
可以将公式该写为
m = { log[p / (p - d * r)] } / log(1 + r)
C的库函数中有求对数的函数log10, 是求以10为底的对数,log(p)表示log p。*/
#include <stdio.h>
#include <math.h>
int main()
{
float d = 300000, p = 6000, r = 0.01, m;
m = log10(p / (p - d * r)) / log10(1 + r);
printf("m=%6.2f\n", m);
return 0;
}
/*24、请编程序将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。*/
//法一
#include <stdio.h>
int main()
{
char c = getchar(); // 输入一个字符给字符变量c
while (c != '\n') // 检查c的值是否换行符'\n'
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) // c如果是字母
{
if (c >= 'W' && c <= 'Z' || c >= 'w' && c <= 'z') c = c - 22; // 如果是26个字母中最后4个字母之一
else c = c + 4; // 如果是前面22个字母之一,就使c加4,即变成其后第4个字母
}
printf("%c", c); // 输出己改变的字符
c = getchar(); // 再输入下一个字符给字符变量c
}
printf("\n");
return 0;
}
/*
#include <stdio.h>
int main()
{
char c;
while ((c = getchar()) != '\n') // 输入一个字符给字符变量c并检查它c的值是否换行符
{
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) // c如果是字母
{
c = c + 4; // 只要是字母,都先加4
if (c >= 'W' && c <= 'Z' + 4 || c > 'z') // 如果是26个字母中最后4个字母之一
c = c - 26; // c的值改变为26个字母中最前面的4个字母中对应的字母
}
printf("%c", c); // 输出己改变的字符
}
printf("\n");
return 0;
}
*/
/*25、编写一个函数,接受3个参数:一个字符和两个整数。 编写一个调用此函数的程序。
字符参数是待打印的字符,第1个整数指定一行中打印字符的次数,第2个整数指定打印字符的行数。
示例:Enter a character (# to quit): s
Enter number of columns and number of rows: 5 2
sssss
sssss */
#include<stdio.h>
int main()
{
void f(char ch, int m, int n);
char ch;
int m, n;
printf("Enter a character (# to quit):");
ch = getchar();
printf("Enter number of columns and number of rows:");
scanf_s("%d%d", &n, &m);
f(ch, n, m);
return 0;
}
void f(char ch, int m, int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
printf("%c", ch);
printf("\n");
}
}
/*26、编写一个函数,返回存储在double类型数组中的最大值和最小值的差值,并在一个简单的程序中调用测试该函数。
示例: 数组是:1.1 2 3 4 12 61.3 7 8 9 10
maxmin difference=60.2 */
#include<stdio.h>
#define N 400
double CH(double a[], int n);
int main()
{
double a[N];
int n, i;
printf("元数个数:");
scanf_s("%d", &n);
printf("数组是:");
for (i = 0; i < n; i++)
scanf_s("%lf", &a[i]);
printf("%.1lf", CH(a, n));
return 0;
}
double CH(double a[], int n)
{
int i;
double min = a[0], max = a[0], c;
for (i = 0; i < n; i++)
{
if (max < a[i]) max = a[i];
if (min > a[i]) min = a[i];
}
c = max - min;
return c;
}
/*27、两数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,
最后取计算结果的倒数。编写一个函数,接受两个double类型的参数,返回这两个参数的调和平均函数。
示例: Enter two numbers and i will return it's harmonic mean:
1 2
harmonic mean is 1.33 */
#include<stdio.h>
int main()
{
double tiaohe(double m, double n);
double n1, n2, harmonic;
printf("Enter two numbers and i will return it's harmonic mean:\n");
scanf_s("%lf%lf", &n1, &n2);
harmonic = tiaohe(n1, n2);
printf("harmonic mean is ");
printf("%.2lf", harmonic);
return 0;
}
double tiaohe(double m, double n)
{
double harmonic = 1 / ((1 / m + 1 / n) / 2);
return harmonic;
}
/*28、编写一个函数,把两个数组中相对应的元素相加,然后把结果储存到第3个数组中。
也就是说,如果数组1中包含的值是2、4、5、8,数组2中包含的值是1、0、4、6,
那么该函数把3、4、9、14赋给第3个数组。函数接受3个数组名和一个数组大小。
在一个简单的程序中调用测试该函数。
示例: 原两个数组为:
1 2 3 4 5
2 3 4 5 6
原两个数组相加后为:
3 5 7 9 11 */
#include<stdio.h>
int main()
{
void solve(int a[], int b[], int c[], int n);
int a[5], b[5], c[5], i, n = 5;
printf("原两个数组为:\n");
for (i = 0; i < n; i++) scanf_s("%d", &a[i]);
for (i = 0; i < n; i++) scanf_s("%d", &b[i]);
printf("原两个数组相加后为:\n");
solve(a, b, c, n);
for (i = 0; i < n; i++)
printf("%d ", c[i]);
return 0;
}
void solve(int a[], int b[], int c[], int n)
{
int i;
for (i = 0; i < n; i++) c[i] = a[i] + b[i];
}
/*29、编写一个程序,声明一个int类型的3×5二维数组,并用合适的值初始化它。
该程序打印数组中的值,然后各值翻倍(即是原值的2倍),并显示出各元素的新值。
编写一个函数显示数组的内容,再编写一个函数把各元素的值翻倍。这两个函数都以数组名和行数作为参数。
示例: original array: double array:
1 2 3 4 5 2 4 6 8 10
6 7 8 9 10 12 14 16 18 20
11 12 13 14 15 22 24 26 28 30 */
#include <stdio.h>
void double_arr(int n, int m, double source[3][5]);
void show_arr(int n, int m, double arr1[3][5]);
int main(void)
{
double arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
printf("original array:\n");
show_arr(3, 5, arr);
printf("double array:\n");
double_arr(3, 5, arr);
show_arr(3, 5, arr);
return 0;
}
void double_arr(int m, int n, double source[3][5])
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
source[i][j] = source[i][j] * 2;
}
void show_arr(int n, int m, double arr1[3][5])
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%-4.0f", arr1[i][j]);
printf("\n");
}
}
/*30、给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,
要求也按非递减顺序排序。要求用函数实现。示例: 输入:-4,-1,0,3,10
输出:0,1,9,16,100 */
#include<stdio.h>
int main()
{
int A[5], i, j, temp;
printf("输入:");
for (i = 0; i < 5; i++)
{
scanf_s("%d", &A[i]);
A[i] *= A[i];
}
for (j = 0; j < 4; j++)
for (i = 0; i < 4 - i; i++)
if (A[i] > A[i + 1])
{
temp = A[i];
A[i] = A[i + 1];
A[i + 1] = temp;
}
printf("输出:");
for (i = 0; i < 5; i++)
printf("%d,", A[i]);
return 0;
}
/*31、编写一个函数,返回储存在int类型数组中的最大值;编写一个函数,返回储存在double类型数组中最大值的下标;
编写一个函数,把 double类型数组中的数据倒序排列。在一个简单的程序中调用并测试这三个函数。 */
#include <stdio.h>
int main()
{
int Max(int Array[], int Array_Length);
int Arr(double Array[], int Array_Length);
void sort(double Array[], int Array_Length);
int A[10] = { 1,2,3,4,5,6,7,8,9,0 };
double B[10] = { 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 };
printf("%d\n", Max(A, 10));
printf("%d\n", Arr(B, 10));
sort(B, 10);
for (int i = 0; i < 10; i++)printf("%.0lf ", B[i]);
return 0;
}
int Max(int Array[], int Array_Length)//int类型数组中的最大值函数
{
int Max = Array[0];
for (int i = 1; i < Array_Length; i++)
if (Max < Array[i])Max = Array[i];
return Max;
}
int Arr(double Array[], int Array_Length)//double类型数组中最大值的下标函数
{
int Max = Array[0], i, Arr;
for (i = 1, Arr = 0; i < Array_Length; i++)
if (Max < Array[i])
{
Max = Array[i];
Arr = i;
} return Arr;
}
void sort(double Array[], int Array_Length)// 将n个数逆序排列函数
{
int i, temp;
for (i = 0; i < Array_Length / 2; i++)
{
temp = Array[i];
Array[i] = Array[Array_Length - 1 - i];
Array[Array_Length - 1 - i] = temp;
}return;
}
/*32、编写一个程序,提示用户输入3组数,每组数包含5个double类型的数
(假设用户都正确地响应,不会输入非数值数据)。该程序应完成下列任务。
a.把用户输入的数据储存在3×5的数组中
b.计算每组(5个)数据的平均值
c.计算所有数据的平均值
d.找出这15个数据中的最大值 */
#include <stdio.h>
#define ROW 3
#define LIN 5
void save(double pt[][LIN], int n);
double ave1(double pt[][LIN], int n);
double ave2(double pt[][LIN], int n);
double max(double pt[][LIN], int n);
void show(double ptp[][LIN], int n);
int main(void)
{
double ajazz[ROW][LIN];
int i;
save(ajazz, ROW);
printf("你输入的数组是:\n");
show(ajazz, ROW);
for (i = 0; i < ROW; i++)
printf("第%d行的平均值为:%.2lf\n", i + 1, ave1(ajazz, i));
printf("数组的平均数是:%.2lf\n", ave2(ajazz, ROW));
printf("数组中最大值是:%.2lf\n", max(ajazz, ROW));
return 0;
}
void save(double pt[][LIN], int n)
{
double val;
int i, j;
printf("Please enter 3 * 5 for value:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < LIN; j++)
{
scanf_s("%lf", &val);
pt[i][j] = val;
}
}
}
void show(double ptp[][LIN], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < LIN; j++)
printf("%5.2lf ", ptp[i][j]);
putchar('\n');
}
}
double ave1(double pt[][LIN], int n)
{
int j;
double ave, sum_row = 0;
for (j = 0; j < LIN; j++)
sum_row += pt[n][j];
ave = sum_row / LIN;
return ave;
}
double ave2(double pt[][LIN], int n)
{
int i, j;
double ave, sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < LIN; j++)
sum += pt[i][j];
ave = sum / (ROW * LIN);
return ave;
}
double max(double pt[][LIN], int n)
{
int i, j;
double max = pt[0][0];
for (i = 0; i < n; i++)
for (j = 0; j < LIN; j++)
if (max < pt[i][j])max = pt[i][j];
return max;
}
/*34、编程求1!+2!+3!+4!+……+12!。(!为阶乘符号)*/
#include <stdio.h>
int main()
{
double s = 0, t = 1;
int n;
for (n = 1; n <= 20; n++)
{
t = t * n;
s = s + t;
}
printf("1!+2!+...+20!=%.0lf\n", s);
//printf("1!+2!+...+20!=%22.15e\n",s);
//e以指数形式输出单双精度实数
return 0;
}
/*35、一个球从100米高度落下,每次落地后跳回原高度的一半,再落下,
编程求第10次落地时,球共经过的距离为多少米?
第10次落地后的反弹高度是多少米? */
#include<stdio.h>
int main()
{
double a = 100, b = a / 2, c = 100;//开始的初始值100米
int i;
for (i = 1; i < 10; i++)//i自加完后循环,循环9次
{
c = c + 2 * b;//假设小球从弹起到刚落地一个循环,开始100米落地那次不是循环
b = b / 2;//第i+1次小球弹起的高度
}
printf("共经过的距离为%lf\n", c);
printf("10落地反弹高度%lf\n", b);
return 0;
}
/*36、编写程序,找出用户输入的一串数中的最大数。
程序需要提示用户一个一个地输入数。
当用户输入0或者负数时,程序必须显示出已输入的最大非负数。
Enter a number:60
Enter a number:78.5
Enter a number:1203
Enter a number:100.2
Enter a number:0
The largest number entered was 1203 */
#include<stdio.h>
int main()
{
int i, N = 5, max = 0;
for (i = 0; i < N; i++)
{
printf("Enter a number:");
scanf_s("%d", &i);
if (i > max) max = i;
}
printf("The largest number entered was %d", max);
return 0;
}
/*37、数学常量e的值可以用一个无穷级数表示:e = 1 + 1/1! + 1/2! + 1/3! +……
编写程序,用下面的公式计算e的近似值:1 + 1/1! +1/2! + 1/3! +……+ 1/n!,
其中n是用户输入的整数。
请给出n=50时,e的近似值。*/
#include<stdio.h>
int main()
{
int i;
double fenmu = 1, e = 1;
for (i = 1; i <= 50; i++)
{
fenmu = fenmu * i;
e = e + 1 / fenmu;
}
printf("%lf", e);
return 0;
}
//38、编写程序读入一个整数数组,用于保存5个学生的课程成绩,
//然后用函数调用的形式实现课程的平均分、最高分和最低分的计算
/*请输入第1位同学的成绩:100
请输入第2位同学的成绩:100
请输入第3位同学的成绩:100
请输入第4位同学的成绩:100
请输入第5位同学的成绩:100
课程平均分是:100 最高分是:100 最低分是100 */
#include<stdio.h>
int main()
{
float ave(float score[], int n);
float max(float score[], int n);
float min(float score[], int n);
float score[5];
for (int i = 0; i < 5; i++)
{
printf("请输入第%d位同学的分数:", i + 1);
scanf_s("%f", &score[i]);
}
printf("课程平均分是:%7.2f 最高分是:%7.2f 最低分是:%7.2f", ave(score, 5), max(score, 5), min(score, 5));
return 0;
}
float ave(float score[], int n)
{
float p, num = 0;
for (int i = 0; i < n; i++)
num = num + score[i];
p = num / n;
return p;
}
float max(float score[], int n)
{
float max = score[0];
for (int i = 0; i < n; i++)
if (score[i] > max)max = score[i];
return max;
}
float min(float score[], int n)
{
float min = score[0];
for (int i = 0; i < n; i++)
if (score[i] < min)min = score[i];
return min;
}
/*41、定义一个结构体变量(包括年、月、日),编写一个函数能够计算一个日期在本年中是第几天(注意闰年的问题),
在主函数中将年、月、日传递给功能函数,计算结果返回主函数输出显示。*/
#include <stdio.h>
struct
{
int year;
int month;
int day;
}date;
int main()
{
int time(int year, int mouth, int day); //声明函数
int days;
printf("input year,month,day:");
scanf_s("%d,%d,%d", &date.year, &date.month, &date.day);
days = time(date.year, date.month, date.day);
printf("%d/%d is the %dth day in %d.\n", date.month, date.day, days, date.year);
return 0;
}
int time(int year, int mouth, int day)
{
int i, days;
int day_tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
days = 0;
for (i = 1; i < date.month; i++)
days = days + day_tab[i];
days = days + date.day;
if ((date.year % 4 == 0 && date.year % 100 != 0 || date.year % 400 == 0) && date.month >= 3)
days = days + 1;
return(days);
}
/*43、用指针实现以下程序,输入一个字符串,包括数字和非数字字符,例如:abddf90333?<>2308nfdiufoien8dsuf
将其中连续的数字作为一个整数,依次放入一个数组a中,
例如90333放在a[0]中,2308放在a[1]中……统计一共出现了多少个整数,并输出这些整数。 */
#include <stdio.h>
int main()
{
char str[50], * pstr;
int i, j, k, m, e10, digit, ndigit, a[10], * pa;
printf("input a string:\n");
gets_s(str);
pstr = &str[0]; /*字符指针pstr置于数组str 首地址*/
pa = &a[0]; /*指针pa置于a数组首地址*/
ndigit = 0; /*ndigit代表有多少个整数*/
i = 0; /*代表字符串中的第几个字符*/
j = 0;
while (*(pstr + i) != '\0')
{
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
j++;
else
{
if (j > 0)
{
digit = *(pstr + i - 1) - 48; /*将个数位赋予digit*/
k = 1;
while (k < j) /*将含有两位以上数的其它位的数值累计于digit*/
{
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10; /*e10代表该位数所应乘的因子*/
digit = digit + (*(pstr + i - 1 - k) - 48) * e10; /*将该位数的数值\累加于digit*/
k++; /*位数K自增*/
}
*pa = digit; /*将数值赋予数组a*/
ndigit++;
pa++; /*指针pa指向a数组下一元素*/
j = 0;
}
}
i++;
}
if (j > 0) /*以数字结尾字符串的最后一个数据*/
{
digit = *(pstr + i - 1) - 48; /*将个数位赋予digit*/
k = 1;
while (k < j) /* 将含有两位以上数的其它位的数值累加于digit*/
{
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10; /*e10代表位数所应乘的因子*/
digit = digit + (*(pstr + i - 1 - k) - 48) * e10; /*将该位数的数值累加于digit*/
k++; /*位数K自增*/
}
*pa = digit; /*将数值赋予数组a*/
ndigit++;
j = 0;
}
printf("There are %d numbers in this line, they are:\n", ndigit);
pa = &a[0];
for (j = 0; j < ndigit; j++) /*打印数据*/
printf("%d ", *(pa + j));
printf("\n");
return 0;
}
/*44、编写一个程序,输入月份号,输出该月的英文月名。例如,输入3,输出“March”,要求按照指针数组处理。*/
#include<stdio.h>
int main()
{
const char* months[] = { "January","February","March","April","May","June",
"July","August","September","October","December","November" };
int number;
printf("输入:");
scanf_s("%d", &number);
printf("输出:");
printf("%s", *(months + number));
return 0;
}
/*45、编写一个函数print,打印一个学生的成绩数组,该数组有5个学生的数据记录,
每个记录包括num,nam,score[3],用input函数输入这些记录,用print函数输出这些记录。*/
#include<stdio.h>
struct Student
{
int num;
char nam[20];
float score[3];
};
int main()
{
void input(struct Student student[], int n);
void print(struct Student student[], int n);
struct Student student[5];
input(student, 5);
print(student, 5);
return 0;
}
void input(struct Student student[], int n)
{
for (int i = 0; i < n; i++)
{
printf("第%d名学生\n", i + 1);
printf("请输入学号:");
scanf_s("%d", &student[i].num);
getchar();
printf("请输入姓名:");
scanf_s("%s", student[i].nam, sizeof(student[i].nam));
for (int j = 0; j < 3; j++)
{
printf("请输入成绩%d:", j + 1);
scanf_s("%f", &student[i].score[j]);
}
}
}
void print(struct Student student[], int n)
{
printf("学号 姓名 成绩1 成绩2 成绩3\n");
for (int i = 0; i < n; i++)
printf("%d %s %7.2f %7.2f %7.2f\n",
student[i].num, student[i].nam, student[i].score[0], student[i].score[1], student[i].score[2]);
}
/*46、编写一个程序,将数组a中n个整数按相反顺序存放,需使用指针变量作为实参。*/
#include <stdio.h>
int main()
{
void sort(char* p, int m);
int i, n;
char* p, num[20];
printf("input n:");
scanf_s("%d", &n);
printf("please input these numbers:\n");
for (i = 0; i < n; i++)
scanf_s("%d", &num[i]);
p = &num[0];
sort(p, n);
printf("Now,the sequence is:\n");
for (i = 0; i < n; i++)
printf("%d ", num[i]);
printf("\n");
return 0;
}
void sort(char* p, int m) // 将n个数逆序排列函数
{
int i;
char temp, * p1, * p2;
for (i = 0; i < m / 2; i++)
{
p1 = p + i;
p2 = p + (m - 1 - i);
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
/*47、编写一个程序,用指针方法对10个整数按由大到小顺序排序,要求使用选择排序法。*/
#include <stdio.h>
int main()
{
void sort(int x[], int n);
int i, * p, a[10];
p = a;
printf("Please enter 10 integer numbers:\n");
for (i = 0; i < 10; i++)
scanf_s("%d", p++);
p = a;
sort(p, 10);
for (p = a, i = 0; i < 10; i++)
printf("%d ", *p++);
printf("\n");
return 0;
}
void sort(int x[], int n)
{
int i, j, k, t;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (x[j] > x[k])
k = j;
if (k != i)
{
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
/*48、编写一个程序,将字符串a复制为字符串b,然后输出字符串b。要求使用指针变量处理。*/
#include <stdio.h>
int main()
{
char a[] = "I am a boy.", b[20], * p1, * p2;
p1 = a; p2 = b; // p1,p2分别指向a数组和b数组中的第一个元素
for (; *p1 != '\0'; p1++, p2++)
*p2 = *p1; // 将p1所指向的元素的值赋给p2所指向的元素
*p2 = '\0'; // 在复制完全部有效字符后加'\0'
printf("string a is:%s\n", a); // 输出a数组中的字符
printf("string b is:%s\n", b); // 输出b数组中的字符
return 0;
}
/*49、用函数调用实现字符串的复制
(1)用字符数组名作为函数参数
(2)用字符型指针变量作实参
(3)用字符指针变量作形参和实参 */
//(1)
#include <stdio.h>
int main()
{
void copy_string(char from[], char to[]);
char a[] = "I am a teacher.";
char b[] = "you are a student.";
printf("string a=%s\nstring b=%s\n", a, b);
printf("copy string a to string b:\n");
copy_string(a, b);
printf("\nstring a=%s\nstring b=%s\n", a, b);
return 0;
}
void copy_string(char from[], char to[])
{
int i = 0;
while (from[i] != '\0')
{
to[i] = from[i]; i++;
}
to[i] = '\0';
}
//(2)
#include <stdio.h>
int main()
{
void copy_string(char from[], char to[]);
char a[] = "I am a teacher.";
char b[] = "you are a student.";
char* from = a, * to = b;
printf("string a=%s\nstring b=%s\n", a, b);
printf("\ncopy string a to string b:\n");
copy_string(from, to);
printf("string a=%s\nstring b=%s\n", a, b);
return 0;
}
void copy_string(char from[], char to[])
{
int i = 0;
while (from[i] != '\0')
{
to[i] = from[i]; i++;
}
to[i] = '\0';
}
//(3)
#include <stdio.h>
int main()
{
void copy_string(char* from, char* to);
char* a = "I am a teacher.";
char b[] = "You are a student.";
char* p = b; // 使指针变量p指向b数组首元素
printf("string a=%s\nstring b=%s\n", a, b); // 输出a串和b串
printf("\ncopy string a to string b:\n");
copy_string(a, p); // 调用copy_string函数,实现复制
printf("string a=%s\nstring b=%s\n", a, b);
return 0;
}
void copy_string(char* from, char* to) // 定义函数,形参为字符指针变量
{
for (; *from != '\0'; from++, to++)
{
*to = *from;
}
*to = '\0';
}
/*50、建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
void check(int*);
int* p1, i;
p1 = (int*)malloc(5 * sizeof(int));//动态开辟一段空间,作为动态数组使用
for (i = 0; i < 5; i++)
scanf_s("%d", p1 + i);
check(p1);
return 0;
}
void check(int* p)
{
int i;
for (i = 0; i < 5; i++)
if (p[i] < 60)
printf("%d\t", p[i]);
printf("\n");
}
/*51、编写一个程序,实现:3个学生各学4门课,计算总平均分,然后在输入一个学生的编号后显示出他的其他成绩*/
#include <stdio.h>
#include <stdlib.h>
int aver(int* p, int n);//指向数组元素的指针。
int search(int(*p)[4], int n);//指向4个元素的数组指针。
int main()
{
int score[3][4] = { {65,67,79,60},{80,87,90,81},{90,99,100,98} }, n;
aver(*score, 12);
printf("输入一个学生的编号:");
scanf_s("%d", &n);
search(score, n);
return 0;
}
int aver(int* p, int n)
{
int aver, sum = 0;
int* p_end;
p_end = p + n - 1;
for (; p <= p_end; p++)
sum = sum + (*p);
aver = sum / n;
printf("average=%4d\n", aver);
return 0;
}
int search(int(*p)[4], int n)
{
int i;
printf("NO.%d :\n", n);
for (i = 0; i < 4; i++)
printf("%4d", *(*(p + n) + i));
printf("\n");
return 0;
}
/*52、生成一个指定长度的字符串,并用随机生成的字符填充。字符串的长度仅受限于可用内存的长度。*/
#include <stdio.h> /* printf, scanf, NULL */
#include <stdlib.h> /* malloc, free, rand, system */
int main()
{
int i, n;
char* buffer;
printf("输入字符串的长度:");
scanf_s("%d", &i);
buffer = (char*)malloc(i + 1); // 字符串最后包含 \0
if (buffer == NULL) exit(1); // 判断是否分配成功
// 随机生成字符串
for (n = 0; n < i; n++)
buffer[n] = rand() % 26 + 'a';
buffer[i] = '\0';
printf("随机生成的字符串为:%s\n", buffer);
free(buffer); // 释放内存空间
system("pause");
return 0;
}
/*53把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息*/
#include <stdio.h>
int main()
{
struct student
{
long int num;
char name[20];
char sex;
char addr[20];
}a = { 2020010111,"Li Lin",'M',"123 Beijing Road" };
printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n", a.num, a.name, a.sex, a.addr);
return 0;
}
/*54、利用结构体,输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。*/
#include <stdio.h>
int main()
{
struct student // 声明结构体类型struct student
{
int num;
char name[20];
float score;
}student1, student2; // 定义两个结构体变量seudent1,student2
scanf_s("%d%s%f", &student1.num, student1.name, sizeof(student1.name), &student1.score); //输入学生的数据
scanf_s("%d%s%f", &student2.num, student2.name, sizeof(student2.name), &student2.score); //输入学生的数据
printf("The higher score is:\n");
if (student1.score > student2.score)
printf("%d %s %6.2f\n", student1.num, student1.name, student1.score);
else if (student1.score < student2.score)
printf("%d %s %6.2f\n", student2.num, student2.name, student2.score);
else
{
printf("%d %s %6.2f\n", student1.num, student1.name, student1.score);
printf("%d %s %6.2f\n", student2.num, student2.name, student2.score);
}
return 0;
}
/*55、结构体数组:有3个候选人,每个选民只能投票选一人,
要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果*/
#include <string.h>
#include <stdio.h>
struct person // 声明结构体类型struct person
{
char name[20]; // 候选人姓名
int count; // 候选人得票数
}leader[3] = { "Li",0,"Zhang",0,"Sun",0 }; // 定义结构体数组并初始化
int main()
{
int i, j;
char leader_name[20]; // 定义字符数组
for (i = 1; i <= 3; i++)
{
scanf_s("%s", leader_name, sizeof(leader_name)); // 输入所选的候选人姓名
for (j = 0; j < 3; j++)
if (strcmp(leader_name, leader[j].name) == 0) leader[j].count++;
}
printf("\nResoult:\n");
for (i = 0; i < 3; i++)
printf("%5s:%d\n", leader[i].name, leader[i].count);
return 0;
}
/*56、有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
要求使用结构体数组有关知识。*/
#include <stdio.h>
struct student // 声明结构体类型struct student
{
int num;
char name[20];
float score;
};
int main()
{
struct student stu[5] = { {10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},
{10108,"Ling",73.5},{10110,"Fun",100} }; // 定义结倒构体数组并初始化
struct student temp; //定义结构体变量temp,用作交换时的临时变量
const int n = 5;
int i, j, k;
printf("The order is:\n");
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (stu[j].score > stu[k].score) // 进行成绩的比较
k = j;
temp = stu[k]; stu[k] = stu[i]; stu[i] = temp; // stu[k]和stu[i]元素互换
}
for (i = 0; i < n; i++)
printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);
printf("\n");
return 0;
}
/*57、有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。要求使用结构体指针有关知识。*/
#include <stdio.h>
struct student
{
int num;
char name[20];
char sex;
int age;
};
struct student stu[3] = { {10101,"Li Lin",'M',18},{10102,"Zhang Fun",'M',19},{10104,"Wang Min",'F',20} };
// 定义结构体数组并初始化
int main()
{
struct student* p; //定义指向struct student结构体的数组
printf(" No. Name sex age\n");
for (p = stu; p < stu + 3; p++)
printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);//p-num等价(*p).num
return 0;
}
/*58、有n个结构体变量,内含学生学号、姓名和3门课程的成绩。
要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。*/
#include <stdio.h>
#define N 2 // 学生数为3
struct student // 建立结构体类型struct student
{
int num; // 学号
char name[20]; // 姓名
float score[3]; // 3门课成绩
float aver; // 平均成绩
};
int main()
{
void input(struct student stu[]); // 函数声明
struct student max(struct student stu[]); // 函数声明
void print(struct student stu); // 函数声明
struct student stu[N], * p = stu; // 定义结构体数组和指针
input(p); // 调用input函数
print(max(p)); // 调用print函数,以max函数的返回值作为实参
return 0;
}
void input(struct student stu[]) // 定义input 函数
{
int i;
printf("请输入各学生的信息:学号、姓名、三门课成绩:\n");
for (i = 0; i < N; i++)
{
scanf_s("%d %s %f %f %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); // 输入数据
stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0; // 求各人平均成绩
}
}
struct student max(struct student stu[]) // 定义max 函数
{
int i, m = 0; // 用m存放成绩最高的学生在数组中的序号
for (i = 0; i < N; i++)
if (stu[i].aver > stu[m].aver) m = i; // 找出平均成绩最高的学生在数组中的序号
return stu[m]; // 返回包含该生信息的结构体元素
}
void print(struct student stud) // 定义print函数
{
printf("\n成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);
}
/*59、编写一个程序,录入每位同学的信息,包括学号,姓名,c语言成绩,数学成绩以及英语成绩。要求:
1)从键盘上输入N名同学的成绩;
2)求出每名同学的总成绩和平均分;
3)输出每名同学的信息,包括学号,姓名,总分,平均分;
4)按照c语言成绩排序输出 */
#include <stdio.h>
#define M 5
#define N 3
int i, j, m, cj[M][N];
float pj[M], Pj[N];
void main()
{
float sum(int i);
float mpj(int i);
void sort();
void bjg();
printf(" 学号 k1 k2 k3\n");
for (i = 0; i < M; i++)
{
printf(" input number %d cj:", i + 1);
for (j = 0; j < N; j++)
scanf_s("%d", &cj[i][j]);
}
printf("\n");
c: printf("\t\t\t1--每个学生的平均成绩\n\t\t\t2--每门课的平均分\n\t\t\t3--按平均分降序排列\n\t\t\t4--不及格学生及其科目\n\t\t\t0--退出\n\n");
printf("\t\t请选择<0--4>:");
scanf_s("%d", &m);
if (m == 1)
{
for (i = 1; i <= M; i++)
{
pj[i - 1] = sum(i - 1) / N;
printf("\t\t学号%d,平均成绩%.2f\n", i, pj[i - 1]);
} goto c;
}
if (m == 2)
for (i = 0; i < N; i++)
{
Pj[i] = mpj(i);
printf("\t\t科目%d的平均分%.2f\n", i + 1, Pj[i]);
} goto c;
if (m == 3) sort(); goto c;
if (m == 4) bjg(); goto c;
if (m == 0);
}
float sum(int i)
{
float s = 0.0;
for (j = 0; j < N; j++)
s += cj[i][j];
return(s);
}
float mpj(int i)
{
float s = 0.0;
for (j = 0; j < M; j++)
s += cj[j][i];
return(s / M);
}
void sort()
{
int k = 0, l;
float t;
for (j = 0; j < M; k = j, j++)
{
for (i = j + 1; i < M; i++)
if (pj[j] < pj[i])
t = pj[j], pj[j] = pj[i], pj[i] = t, k = i;
printf("\t\t学号%d,平均分%.2f,成绩", k + 1, pj[j]);
for (l = 0; l < N; l++)
printf("%-3d", cj[k][l]);
printf("\n");
}
}
void bjg()
{
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
if (cj[i][j] < 60)
printf("\t\t不及格学号%d,科目%d得分%d\n", i + 1, j + 1, cj[i][j]);
}
/*60、定义一个表示日期的结构体变量(包括年、月、日),并实现以下要求:
1)编写一个函数,用于让用户输入年、月、日,函数参数为结构体指针;
2)编写一个函数,实现用“日/月/年”格式输出日期(例如21/12/2020),函数参数为结构体变量;
3)编写一个函数,计算一个日期在本年中是第几天(注意闰年的问题),函数参数为要计算的日期(年、月、日),计算结果为函数返回值;
4)编写一个main函数,可以测试以上函数的功能,并给出2020年5月15日是这一年中的第几天。 */
#include<stdio.h>
struct Date
{
int year;
int month;
int day;
};
void input(Date* date)
{
printf("请输入年:");
scanf_s("%d", &date->year);
printf("请输入月:");
scanf_s("%d", &date->month);
printf("请输入日:");
scanf_s("%d", &date->day);
}
void print(Date date)
{
printf("%d/%d/%d\n", date.day, date.month, date.year);
}
int summ(int year, int month, int day)
{
int sum = 0;
int i;
sum = day;
int m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
for (i = 0; i < month - 1; i++)
sum = sum + m[i];
if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) && month > 2)
sum = sum + 1;
else
sum = sum;
return sum;
}
int main()
{
Date date;
int sum;
input(&date);
print(date);
sum = summ(date.year, date.month, date.day);
printf("%d年%d月%d日是%d年第%d天", date.year, date.month, date.day, date.year, sum);
return 0;
}
20级北京信息科技大学C语言考试大题题库(完整最简版)
于 2021-08-13 16:51:14 首次发布