南京邮电大学MOOC高级程序语言设计(C语言)

1. 计算并输出s的值

题目内容:计算并输出s的值。s的计算方法见下式,其中m为实数,其值由键盘读入。计算时,要求最后一项的绝对值小于1e-4,输出结果保留两位小数。
输入格式: 实数m,格式控制串为"%lf"
输出格式: 式子的值,输出格式控制串为"%.2f\n"
输入样例: 0.2
输出样例: 0.18

#include<stdio.h>
#include<math.h>
int main()
{
    double s, m, item;
    int n, sign;
    scanf("%lf", &m);
    s = 0;
    n = 1;
    sign = 1;
    item = 1;
    do 
    {
        item = item * m / n;
        s += sign * item;
        sign = -sign;
        n++;
    } while (fabs(item) >= 1E-4);
    printf("%.2f\n", s);
    return 0;
}

2. 以每行8个的形式输出100-999内的质数。

题目内容: 以每行8个的形式输出100-999内的质数。
输入格式: 无
输出格式:每行输出8个质数(最后一行可以不到8个),每个质数的输出格式控制符为"%4d",最后一行输完后,输出一个"\n"
输入样例:无
输出样例:
101 103 107 109 113 127 131 137
139 149 151 157 163 167 173 179
……

#include<stdio.h>
#include<math.h>
int main()
{
	int n, i, k, count = 0;
	for (n = 101; n <= 999; n += 2)
	{
		k = (int)sqrt(n);
		for (i = 2; i <= k; i++)
			if (n % i == 0)
				break;
		if (i > k)
		{
			count++;
			printf("%4d", n);
			if (count % 8 == 0)
				printf("\n");
		}
	}
	printf("\n");
	return 0;
}

3. 打印星号组成的倒置等腰三角形

题目内容:打印如下的倒置的等腰三角形。
输入格式:无
输出格式:文本组成的三角形
输入样例:无
输出样例:

*********
 *******
  *****
   ***
    *
#include<stdio.h>
int main()
{
	int i, j;
	for (i = 1; i <= 5; i++)
	{
		for (j = 1; j <= i - 1; j++)
		{
			printf(" "); 
		}
		for (j = 1; j <= 11 - 2 * i; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

4. 求圆锥体的体积和表面积

题目内容:编写两个函数,分别求圆锥体的体积和表面积。从main函数中输入圆锥体的高和半径,调用两个自定义函数分别求出对应的体积和表面积,并输出完整信息。
提示: 圆周率取3.14
输入格式: scanf("%lf%lf",&r,&h);//要求输入两个实数,表示圆锥体的高和半径
输出格式:输出圆锥体的半径、高、表面积和体积
printf语句中的格式串请复制 “radius=%lf, height=%lf, Area of surface=%lf, Volume=%lf\n”
输入样例:6 8
输出样例:
radius=6.000000, height=8.000000, Area of surface=301.440000, Volume=301.440000

#include<stdio.h>
#include<math.h>
#define pi 3.14
double Surface(double r, double h)
{
	return (pi * r * sqrt(h * h + r * r) + pi * r * r);
}
double Volume(double r, double h)
{
	return ((pi * r * r * h) / 3);
}
int main()
{
	double r, h;
	scanf("%lf%lf", &r, &h);
	printf("radius=%lf, height=%lf, Area of surface=%lf, Volume=%lf\n", r, h, Surface(r, h), Volume(r, h));
	return 0;
}

5. 验证哥德巴赫猜想之一

题目内容: 验证哥德巴赫猜想之一—— 2000以内的正偶数(大于等于4)都能够分解为两个质数之和。每个偶数表达成形如:4=2+2的形式,请每行输出4个偶数及其分解结果。
提示:每一个偶数可能存在多种分解表达形式,但是只要求出第一种分解就停止求其他分解,
输出结果中每一个偶数只给出一种分解的表达
输入格式: 无
输出格式:单个表达式用以下格式字符串输出:"%4d=%4d+%4d"
每行输出4个,每个表达式的后面要输出一个空格与后面的表达式进行分割,但本行的第4个表达式后不能有空格,要直接换行。
注意:最后一行输出有可能不足4个表达式,则该行最后一个表达式的后面仍然要输出一个空格。
输入样例:无
输出样例:
4= 2+ 2 6= 3+ 3 8= 3+ 5 10= 3+ 7
12= 5+ 7 14= 3+ 11 16= 3+ 13 18= 5+ 13
20= 3+ 17 22= 3+ 19 24= 5+ 19 26= 3+ 23
……
1980= 7+1973 1982= 3+1979 1984= 5+1979 1986= 7+1979
1988= 37+1951 1990= 3+1987 1992= 5+1987 1994= 7+1987
1996= 3+1993 1998= 5+1993 2000= 3+1997

#include<stdio.h>
#include<math.h>
int judgePrime(int n)
{
	int i, k;
	int judge = 1;
	if (n == 1)
		judge = 0;
	k = (int)sqrt(n * 1.0);
	for (i = 2; judge && i <= k; i++)
		if (n % i == 0)
			judge = 0;
	return judge;
}
int main()
{
	int m, j, k;
	int count = 1;
	printf("%4d=%4d+%4d ", 4, 2, 2);
	for (m = 6; m <= 2000; m = m + 2)
	{
		k = m / 2;
		for (j = 3; j <= k; j = j + 2)
			if (judgePrime(j) && judgePrime(m - j))
			{
				printf("%4d=%4d+%4d", m, j, m - j);
				count++;
				if (count % 4 == 0)
					printf("\n");
				else
					printf(" ");
				break;
			}
	}
	printf("\n");
	return 0;
}

6. 算算是第几天?

题目内容:给定一个日期,数据格式为YYYY-MM-DD,输出这个日期是该年的第几天。
提示:一年十二个月每个月的天数可以作为一维数组的元素
输入格式: 输入代表这个日期的年月日信息,scanf语句中的格式控制串为: “%d-%d-%d”
输出格式:输出是当年的第几天 printf中的格式控制串为 “%d\n”
输入样例:2018-9-11
输出样例:254

#include <stdio.h>
int main()
{
	int year, month, day;
	int i, daybefore = 0;
	int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	scanf("%d - %d - %d", &year, &month, &day);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		a[1] = 29;
	if (month < 1 || month>12 || day < 1 || day > a[month - 1])
		printf("data error");
	else {
		for (i = 0; i < month - 1; i++)
			daybefore += a[i];
		printf("%d\n", day + daybefore);
	}
	return 0;
}

7. 生成指定的数列

题目内容: 编写函数fun,求出a到b之内能被7或者11整除,但不能同时被7和11整除的所有正数,并将他们放在数组中,函数返回这些数的个数。编写main函数,定义一个整型数组,可容纳1000个元素,定义整型变量a,b,输入a,b的值(输入时a小于等于b)并调用函数fun进行求解,最后在main函数中输出所有符合条件的元素。
提示: fun的函数原型为: int fun(int a,int b,int r[ ] ); 其中的r用于存放a,b之间满足条件的所有元素
输入格式:输入表示范围的两个整数a和b(a<b)
scanf的格式控制串为 “%d%d”
输出格式:输出满足条件的所有元素
输出每个元素时用格式串"%d", 不同元素间以一个空格分隔,但是最后一个元素之后没有空格,输出后直接换行
输入样例:1 20
输出样例:7 11 14

#include <stdio.h>
int fun(int a, int b, int r[])
{
	int j=0;
	int i;
	for (i = a;i <= b;i++)
	{
		if ((i%7==0||i%11==0)&& (i%77!=0))
		{
			r[j] = i;
			j++;
		}
	}
	return j;
}
int main()
{
	int r[1000];
	int a,b,num;
	scanf("%d%d",&a,&b);
	if (a >= b) 
	{
		printf("scanf error!");
	}
	else {
		num = fun(a, b, r);
		for (int i = 0; i < num-1; i++)
		{
			printf("%d ", r[i]);
		}
		printf("%d", r[num - 1]);
	}
	return 0;
}

8. 求数组元素的平均值

题目内容:定义一个含10个整型元素的一维数组,从键盘上输入10个元素值,求去掉最大值和最小值之后的元素平均值.
输入格式: 用循环控制依次输入10个元素值,scanf语句中的格式控制串为: “%d”
输出格式:输出平均值, printf中的格式控制串为 “%lf\n”
输入样例:2 3 4 5 6 2 4 6 4 3
输出样例:3.833333

#include<stdio.h>
int main()
{
	int a[10];
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	int n=0;
	int max = a[0], min = a[0];
	double sum = 0, average;
	for (int i = 0; i < 10; i++)
	{
		if (max <= a[i]) max = a[i];
		if (min >= a[i]) min = a[i];
	}
	for (int i = 0; i < 10; i++)
	{
		if(a[i]!=max&&a[i]!=min)
		{
			sum += a[i];
			n++;
		}
	}
	average = sum / n;
	printf("%lf\n", average);
	return 0;
}

9. 数列移位

题目内容:有数组其10个元素值依次是:{1 2 3 4 5 6 7 8 9 10},现在将前面各数顺序向后移动m个位置,最后m个数变成最前面m个数,并输出。(编程提示:定义函数,实现每次数组往后移动一个元素,最后一个放到数组前面,这样调用m次即可实现数组后移m个数)
输入格式: 输入移动的次数m,scanf的格式串为"%d"
假设输入的m的值在闭区间[1,10]之间,程序中不再用选择或循环结构来处理输入部分。
输出格式:依次输出移动后所有的元素
循环控制输出每个元素,printf中的格式串为"%3d"
输出最后一个元素后用printf("\n");进行换行处理。
输入样例:3
输出样例:8 9 10 1 2 3 4 5 6 7

#include<stdio.h>
int main()

{
	int string[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = string;
	int m, k;
	scanf("%d", &m);
	if (m < 1 || m>10)  printf("input error!");
	else {
		for (int i = 1; i <= m; i++)
		{
			k = string[9];
			for (p = string + 9; p > string; p--)
				*p = *(p - 1);
			*p = k;
		}
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%3d", string[i]);
	}
	printf("\n");
	return 0;
}

10. 交换法排序

题目内容:从键盘输入n个(n≤10)整数,用交换法进行排序(非递减有序),结果输出排序后的序列。说明:交换法排序用函数实现,函数原型为:void sort(int *a,int n); 交换法排序的基本思想是:n个元素共需要n-1趟,其中第i(从0变化至n-2)趟的任务是找出本趟中最小的元素放在下标为i的位置上,每趟通过从i+1到n-1下标的元素逐个与i下标元素比较及时交换进行排序。
输入格式: 先输入n的值,再用循环输入n个数组元素,输入每个整数用的格式控制串都是"%d"
说明:输入n时假定输入的值一定在闭区间[1,10]之内,不需要用分支或循环结构对输入n的值再进行判断。
输出格式:输出交换后的序列,单个元素输出时printf中使用的格式串为"%d " (请在程序中直接复制这个格式串)
所有元素输出结束后用printf("\n"); 进行换行处理。
输入样例:
9
5 6 3 8 23 90 12 34 25
输出样例:
3 5 6 8 12 23 25 34 90

#include <stdio.h>
void sort(int* a, int n);
int main()
{
	int a[10], n, i, * p = a;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", p + i);
	sort(a, n);
	for (i = 0; i < n; i++)
		printf("%d  ", p[i]);
	printf("\n");
	return 0;
}
void sort(int* a, int n)
{
	int i, j, * p = a;
	for (i = 0; i < n - 1; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (*(p + j) < *(p + i))
			{
				int t = *(p + j);
				*(p + j) = *(p + i);
				*(p + i) = t;
			}
		}
	}
}

11. 编写函数同时求两个整数的和与差

题目内容:主函数已经给定,请补齐程序,使函数SumDiff完成求两个整数的和与差(函数返回和值,差值通过设定指针形式参数通过间接引用进行计算),提交完整的程序代码

//主函数代码如下:
int main( )
{ 
    int a,b,sum,dif;
    scanf("%d%d",&a,&b);
    sum=SumDiff(a,b,&dif);
    printf("sum=%d, difference=%d\n",sum,dif);
    return 0;
}

输入格式:主函数已经给定输入语句
输出格式:主函数已经给定输出语句
输入样例:2 3
输出样例:sum=5, difference=-1

#include<stdio.h>
int SumDiff(int a, int b, int* dif)
{
    *dif =a - b;
    return a+b;
}
int main()
{
    int a, b, sum, dif;
    scanf("%d%d", &a, &b);
    sum = SumDiff(a, b, &dif);
    printf("sum=%d, difference=%d\n", sum, dif);
    return 0;
}

12. 十进制转换十六进制

题目内容:编写程序,输入一个长整型数,将其转换为十六进制,以字符串形式输出。(提示:可以定义char s[]="0123456789ABCDEF"以帮助输出十六进制字符)。
输入格式:一个长整型数
输出格式:一个十六进制数
输入样例:10
输出样例:A

#include <stdio.h>
int main()
{
	int num = 0;
	int a[100];
	int i = 0;
	int m = 0;
	int yu;
	char s[] = "0123456789ABCDEF";
	scanf("%d", &num);
	while (num > 0)
	{
		yu = num % 16;
		a[i++] = yu;
		num = num / 16;
	}
	for (i = i - 1; i >= 0; i--)
	{
		m = a[i];
		printf("%c", s[m]);
	}
	printf("\n");
}

13. 字符串过滤

题目内容:输入一个字符串,过滤掉所有的非数字字符,得到由数字字符组成的字符串,并输出。
输入格式: 一个字符串
输出格式:去掉非数字字符的字符串
输入样例:1ar56
输出样例:156

#include <stdio.h>
#include<string.h>
void delete(char* str) 
{
	int i = 0;
	while (str[i] != '\0') 
	{
		if (str[i] <'0' || str[i] > '9') 
		{
			for (int j = i; j < strlen(str); j++) 
			{
				str[j] = str[j + 1];
			}
		}
		else {
			i++;
		}
	}
}
int main()
{
	int n, i = 0, j = 0;
	char str[20];
	gets(str);
	delete(str);
	puts(str);
	return 0;
}

14. 带参宏替换计算给定年份的二月天数

题目内容:定义一个带参数的宏DAYS_FEB(year),以计算给定年份year的二月共有几天。
输入格式: 输入一个有效的年份
输出格式:请用以下格式字符串输出:“days of the FEB.: %d\n”
输入样例:2016
输出样例:days of the FEB.: 29

#define DAYS_FEB(year) (year % 4 == 0 && year % 100 != 0) || year % 400 == 0
#include <stdio.h>
int main()
{
	int year,days;
	scanf("%d", &year);
	if (year > 999 && year < 10000) {
		if (DAYS_FEB(year))
		{
			days = 29;
		}
		else { days = 28; }
	}
	else {
		printf("Input error!");
	}
	
	printf("days of the FEB.: %d\n",days);
	return 0;
}

15. 学生平均成绩计算和输出

题目内容:利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和三门课(高数、物理和英语 )的成绩和平均分(整型)。
编写程序,从键盘输入学生的人数。然后,依次输入每个学生的学号、姓名和3门课的成绩。 然后,计算每个学生的平均分。 最后,按指定格式输出每个学生的平均分
输入格式:先输入一个整数,表示学生个数
然后每行输入一个学生的信息:学号、姓名和高数、物理及英语成绩
输出格式:输出每个学生的平均分.printf中请用格式控制串"The average score of the %dth student is %d.\n"
输入样例:
5
1001 Zhang 100 90 80
1002 Wu 93 90 98
1003 Zhu 89 88 87
1004 Hu 90 98 98
1005 Wang 90 98 97
输出样例:
The average score of the 1th student is 90.
The average score of the 2th student is 93.
The average score of the 3th student is 88.
The average score of the 4th student is 95.
The average score of the 5th student is 95.

#include<stdio.h>
#include<string.h>
struct student
{
	int id;
	char name[10];
	int score[3];
};
typedef struct student stu;
int input(stu a[]);
void average(stu[],int n);
int main()
{
	int num;
	stu a[10];
	num=input(a);
	average(a,num);
	return 0;
}
int input(stu a[])
{
	int i,j,n=0;
	while(n<=0||n>=11)
		scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d %s",&a[i].id,a[i].name);
		for(j=0;j<3;j++)
			scanf("%d",&a[i].score[j]);
	}
	return n;
}
void average(stu a[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		int sum=0,ave=0;
		for(j=0;j<3;j++)
			sum+=a[i].score[j];
		ave=sum/3;
	    printf("The average score of the %dth student is %d.\n",i+1,ave);
	}
}
  • 155
    点赞
  • 644
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
南京邮电大学mooc高级程序语言设计c语言)是一门涵盖C语言高级编程技术的课程,旨在帮助学生深入了解C语言高级特性和编程技巧,提高其编程能力和实践能力。该课程内容涵盖C语言的指针、结构体、文件操作、动态内存分配等高级特性,同时还包括C语言程序设计的实践案例和项目实战,帮助学生掌握C语言的实际应用能力。通过学习该课程,学生可以更好地理解C语言高级编程技术,提高自己的编程水平和实践能力,为今后的编程工作打下坚实的基础。 ### 回答2: 南京邮电大学MOOC高级程序语言设计C语言)是一门针对程序员进阶的课程。该课程涵盖了广泛的主题,包括指针,组,函,结构体,位运算,文件操作,据结构和算法等。通过学习这门课程,学生将能够深入了解C语言的各个方面,并且掌握在实际项目中设计高效和可维护代码的技能。 该课程教学构成清晰,系统性强。课程内容一共划为十周,每周都有不同的主题和课程内容。每周的课程内包含了学习视频,动画辅助,需要编程的作业题目以及参考答案。通过这些作业,学生能够得回反馈和指导,从而更快地理解和运用所学内容。 评估方式合理。这门课程的成绩评估以学生提交的作业为主。具体来说,每周都有一个作业,每个作业的满分均为100分。课程作业的类型有选择题,填空题,代码编写题和综合性的考察,能够全方位地考察学生对所学知识的掌握程度。 课程内容充实,涉及的主题深入。这门课程不只涵盖了C语言的基础知识,还对指针、组、结构体、位运算、文件操作、据结构和算法等内容进行了深入讲授。通过学习课程,学生可以更好地掌握和应用这些知识,为以后的编程工作打好基础。 总之,南京邮电大学MOOC高级程序语言设计C语言)是一门高质量的在线编程课程,这门课程内容广泛,涵盖了很多重要的C语言编程技术,将帮助学生全面掌握C语言的基本概念,让他们能够在编写高效、可维护代码方面更加熟练。如果你是一个正在寻找进阶在线编程课程的程序员,我强烈推荐你学习这门课程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值