C语言编程题(基础)

一、请按照要求编程:由键盘输入全班30名学生成绩,按成绩从高到低排序,并输出排序后的成绩。

要求:

  1. 主函数中输入30名学生成绩,输出排序后的成绩。
  2. 子函数中对30个成绩排序。
#include "stdio.h"
void result(int arr[]) {
	int m,i,j;
	for (i = 0; i < 30 - 1; i++) {
		for (j = 0; j < 30 - i - 1; j++)
			if (arr[j] < arr[j + 1])
			{
				m = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = m;
			}
	}
}
int main() {
	int  i, j, arr[30];
	for (i = 0; i < 30; i++)
	{
		scanf("%d", &arr[i]);
	}
	result(arr);
	for (i = 0; i < 30; i++)
	{
		printf("%d\n", arr[i]);
	}
	return 0;

二 、输入一个正整数n,生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double。

#include "stdio.h"
double fact(int n) {
	double product =1;
	for (int i = 1; i <=n; i++)
	{
		product *= i;
	}
	return product;
}
int main() {
	int n,i;
	double result;
	scanf("%d", &n);
	for (i = 0; i <=n; i++)
	{
		result = fact(i);
		printf("%d!=%.0f\n",i,result);
	}

	return 0;
}

三、用循环结构输出下列数字金字塔(共9行)。

C语言编程题(基础)_第1张图片
#include "stdio.h"
int main() {
	int i, j, k;
	for (i = 1; i <= 10; i++) {
		for (j = 10; j > i; j--) {
			printf(" ");
		}
		for (k = 1; k <= (2 * i - 1) / 2; k++) {
			printf("%c", 48 + k);
		}
		for (k = (2 * i - 1) / 2; k > 1; k--) {
			printf("%c", 48 + k - 1);
		}
		printf("\n");
	}
	return 0;
}

四、输入正整数m和n,如果m+n是素数,输出“Yes”,否则输出“No”。

要求:

  1. 在主函数中输入输出。
  2. 在子函数myfun(x)来判断x是否为素数。
#include "stdio.h"
int myfun(int x) {
	int i;
	for ( i = 2; i < x; i++)
	{
		if (x % i == 0) {
			return 0;
		}
		return 1;
	}
}
int main() {
	int m, n;
	scanf("%d%d", &m, &n);
	if (myfun(m + n))
	{
		printf("Yes");
	}
	else
	{
		printf("No");
	}
	return 0;
}

五、调查电视节目受欢迎程度。某电视台调查观众对该台8个栏目(设相应栏目编号为1-8)的受欢迎情况,共调查了1000位观众。现要求编写程序,输入每一位观众的投票情况(每位观众只能选择一个最喜欢的栏目投票),统计输出各栏目的投票情况。

#include "stdio.h"
#define M 1000
int main() {
	int i, response;
	int count[9];
	for ( i = 0; i < M; i++)
	{
		scanf("%d", &response);
		if (response >= 1 && response <= 9) {
			count[response]++;
		}
		else {
			printf("投票无效");
		}
	}
	for ( i = 0; i < 9; i++)
	{
		printf("%4d%4d", i, count[i]);
	}
	
	return 0;
}

六、编写递归函数reverse(int n)实现将整数n逆序输出,主函数调用它。

#include "stdio.h"
void reverse(int n) {
	if (n < 10) {
		printf("%d",n);
	}
	else
	{
		printf("%d", n % 10);
		reverse(n / 10);
	}
};
int main(void) {
	int n;
	scanf("%d", &n);
	reverse(n);
	return  0;
}

七、编写函数fun功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2) 例如:当t=1000时,函数值为:1597。

#include "stdio.h"
int fun(int t) {
	int i, f0 = 0, f1 = 1, f2 = f0 + f1;
	while (f2<=t)
	{
		f0 = f1;
		f1 = f2;
		f2 = f0 + f1;
	}
	return f2;
};
int main(void) {
	int n;
	scanf_s("%d", &n);
	printf("%d", fun(n));
	return  0;
}

八、求s=a+aa+aaa+······+aa······a(n个a)的值,其中a是一数字,n表示a的位数。例如3+33+333+3333,此时a为3,n为4。

#include "stdio.h"
int main(void) {
	int n,a,i,sum=0;
    printf("a,n=:"); 
	scanf_s("%d,%d", &a,&n);
	int num = a;
	for ( i = 0; i < n; i++)
	{
		if (i >= 1) {
			a = a*10 + num;
		}
		sum += a;
	}
	printf("a+aa+aaa+...=%d\n",sum);
	return  0;
}

九、有一篇文章,共有3行文字,每行有80个字符,分别统计其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

#include "stdio.h"
int main(void) {
	char text[3][80];
	int i, j, cap, min, num, spa, other;
	cap = min = num= spa = other = 0;
	for ( i = 0; i < 3; i++)
	{
		for ( j = 0; j < 80; j++)
		{
			if (text[i][j] >= 'A' && text[i][j] <= 'Z') {
				cap++;
			}
			else if(text[i][j] >= 'a' && text[i][j] <= 'z')
			{
				min++;
			}
			else if(text[i][j] >= '0' && text[i][j] <= '9')
			{
				num++;
			}
			else if (text[i][j]==' ')
			{
				spa++;
			}
			else 
			{
				other++;
			}
		}
	}
	printf("大写字母:%d,小写字母:%d,数字:%d,空格:%d,其他:%d", cap, min, num, spa, other);
	return  0;
}

十、已知学生的记录由学号和学习成绩构成,将N名学生的数据存入结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数。

函数的首部fun(STU a[],STU *s),请编写改函数。结构体的定义如下:

typedef struct ss
{char num[10;int s;]} STU;
#include "stdio.h"
#define N 5
typedef struct ss {
	char num[10];
	int s;
}STU;
void fun(STU a[], STU* s) {
	int i, j;
	for (i = 0; i < N; i++)
	{
		int i, j = 0; 
		for (i = 0; i < N; i++) {
			if (a[i].s < a[j].s) j = i;
		}	
		*s = a[j];
	}
}
int main(void) {
	STU stu[N], min;
	int i;
	for ( i = 0; i < N; i++)
	{
		scanf("%s%d", stu[i].num, &stu[i].s);
	}
	fun(stu, &min);
	printf("%s,%d\n", min.num, min.s);
	return  0;
}

十一、编程:程序计数功能为对从键盘输入的两个字符串进行比较,输出两字符串中第一个不相同字符的ASCII之差。例如:输入两个字符串分别为abcdef和abceef,则输出为-1。

#include "stdio.h"
int main(void) {
	char s1[10];
	char s2[10];
	int i;
	gets(s1);
	gets(s2);
	for ( i = 0; i < sizeof(s1) / sizeof(s1[0]); i++)
	{
		if (s1[i] != s2[i]) {
			printf("%d", s1[i] - s2[i]);
			break;
		}
	}
	return  0;
}

十二、有10个学生,每个学生的数据包括学号(stu_num,6个字符,如s0001)、姓名(name,8个字符)、三门课的成绩(score[3],实型)及其平均分(avr,实型,初始时不赋值)。首先输入这10个学生数据,然后再计算每个学生3门课程的平均分,存回avr中,并输出第6号学生的所有信息。

#include "stdio.h"
int main(void) {
	int i, j, p;
	float sum = 0;
	struct student stu[10];
	for ( i = 0; i < 10; i++)
	{
		printf("name:");
		scanf("%s", stu[i].name);
		printf("stu_num:");
		scanf("%s", stu[i].stu_num);
		for ( j = 0; j < 3; j++)
		{
			printf("score:");
			scanf("%f", &stu[i].score[j]);
			sum += stu[i].score[j];
		}
		stu[i].avr = sum /3;
		if (i == 0) {
		printf("stu_num=%s,name=%s,avr=%f\n", stu[i].stu_num,stu[i].name,stu[i].avr);
			for ( p = 0; p < 3; p++)
			{
				printf("%f\n", stu[i].score[p]);
			}
		}
	}
	return  0;
}

十三、打印菱形

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

十四、输入8个整数放入一维数组num中,输出交换前的数组;找出其中最小和最大数,并将他们分别与数组中的第一个元素和最后一个元素交换位置;输出交换后的数组。

#include "stdio.h"
int main(void) {
	int num[8], i, k,min=0,max=0;
	printf("请输入 8 个整型数据:");
	for (i = 0; i < 8; i++)
	{
		scanf("%d", &num[i]);
	}
	printf("交换前的数组:");
	for (i = 0; i < 8; i++) 
	{
		printf("%d\t", num[i]);
	} 
	printf("\n");
	for (i = 0; i < 8; i++)
	{
		if (num[i] < num[min]) {
			min = i;
		}
	}
	k = num[0];
	num[0] = num[min];
	num[min] = k;
	printf("交换最小值后的数组:");
	for (i = 0; i < 8; i++)
	{
		printf("%d\t", num[i]);
	}
	for (i = 0; i < 8; i++)
	{
		if (num[i] > num[max]) {
			max = i;
		}
	}
	k = num[7];
	num[7] = num[max];
	num[max] = k;
	printf("交换最大值后的数组:");
	for (i = 0; i < 8; i++)
	{
		printf("%d\t", num[i]);
	}
}

十五、编写程序,求两个数的最大公约数及最小公倍数,用函数完成(即求最大公约数为一个函数,求最小公倍数为一个函数完成)。

#include
int gongyue(int m, int n) {
	int i;
	for (i = n; i >= 1; i--)
		if (m % i == 0 && n % i == 0)
			break;
	return i;
}
int gongbei(int m, int n) {
	int i, j;
	for (i = n; i >= 1; i--)
		if (m % i == 0 && n % i == 0)
			break;
	j = m * n / i;
	return j;
}
int main()
{
	int m, n, d, e, t;
	printf("请输入两个数:");
	scanf("%d%d", &m, &n);
	if (m < n) { 
		t = m; 
		m = n;
		n = t; 
	}
	d = gongyue(m, n);
	e = gongbei(m, n);
	printf("%d 和%d 的最大公约数是:%d,最小公倍数是:%d\n", m, n, d, e);
	return 0;
}

十六、判断101~200之间有多少个素数,并输出所有素数。

#include "stdio.h"
#include "math.h"
int main(void) {
	int count=0, i, j,k,leap=1;
	for ( i = 101; i <=200; i++)
	{
		k = sqrt(i);
		for ( j = 2; j <= k; j++)
		{
			if (i % j == 0) {
				leap = 0;
				break;
			}
		}
		if (leap)
		{
			printf("%-4d", i);
			count++;
			if (count % 10 == 0) {
				printf("\n");
			}

		}
		leap = 1;
	}
	printf("素数个数:%d", count);
}

十七、输入一字符串,检查是否回文(回文是指正反序相同,如LeveL),若是则输出“Yes”,否则输出"No"。

#include 
#include 
int main(void) {
	char str[20]="\0";
	int i,j;
	gets(str);
	int n=strlen(str);
	for (i = 0; i < n/2; i++)
	{
		if (str[i] != str[n - i - 1]) {
			printf("No");
			break;
		}
		if (i = n / 2) {
			printf("Yes");
		}
	}
		return 0;
}

十八、编写判断素数的函数,在主函数中输入一个整数,输出是否为素数的信息。

#include "stdio.h"
int prime(int x) {
	int i,j=0;
	for ( i = 2; i < x; i++)
	{
		if ((x % i) == 0) {
			j++;
			break;
		}
	}
	if (j) {
		return 0;
	}
	else {
		return 1;
	}
}
int main(void) {
	int num;
	scanf("%d",&num); 
	if (prime(num)) {
		printf("是素数");
	}
	else {
		printf("不是素数");
	}
		return 0;
}

十九、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。编程找出某个整数以内的所有完数。

#include "stdio.h"
int main(void) {
	int k[100]; int m, i, j, n, s;
	scanf("%d", &m);
	for (j = 2; j <= m; j++) {
		n = -1; s = j;
		for (i = 1; i <= j / 2; i++)
		{
			if ((j % i) == 0)
			{
				n++;
				s = s - i;
				k[n] = i;
			}
		}
		if (s == 0) {
			printf("%d 是完数", j);
			for (i = 0; i < n; i++) {
				printf("%d\t", k[i]);
			}
			printf("\n");
		}
	}
	return 0;
}

二十、 编写函数,求一个字符串长度。在主函数中输出字符串并输出其长度。

#include "stdio.h"
int length(char *p);
int count = 0;
int main(void) {
	char str[100];
	printf("请输入字符串:");
	scanf("%s", str);
	printf("%d",length(str));
	return 0;
}
int length(char* p) {
	while (*p)
	{
		p++;
		count++;
	}
	return count;
}

二十一、输入10个整数,将其中最小数与第一个数对换,把最大数与最后一个数对换。写三个函数:①输入10个数②进行相关处理③输出10个数。

#include "stdio.h"
void input(int *p);
void handel(int *p);
void output(int *p);
int main(void) {
	int num[10];
	input(num);
	handel(num);
	output(num);
}
void input(int* p) {
	int i;
	for (i = 0; i < 10; i++)
	{
		scanf_s("%d",&p[i]);
	}

}
void handel(int* p) {
	int t, j, k;
	int max = *p;
	int min = *p;
	int maxIndex;
	int minIndex;
	for (j = 0; j < 10; j++)
	{
		if (*(p + j) > max)
		{
			max = *(p + j);
			maxIndex = j;
		}
		if (min > * (p + j))
		{
			min = *(p + j);
			minIndex = j;
		}
	}
	t = *(p + maxIndex);
	*(p + maxIndex) = *(p+9);
	*(p + 9) = t;
	t = *(p + minIndex);
	*(p + minIndex) = *p;
	*p = t;
}
void output(int* p) {
	int i;
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", p[i]);
	}
}

二十二、编写程序:输入一个整数n,输出n的逆序数。例如n=1234,则n的逆序数为4321。

#include "stdio.h"
int main(void) {
	int n,temp=0;
	scanf("%d",&n);
	while (n!=0)
	{
		temp = temp * 10 + n % 10;
		n /= 10;
	}
	printf("逆序数:%d", temp);
}

二十三、从键盘输入100个整数,计算并输出大于等于零的平均值(保留小数点后两位)。

#include "stdio.h"
int main(void) {
	int i,j=0,num[10];
	float sum = 0;
	for ( i = 0; i < 10; i++)
	{
		scanf("%d",&num[i]);
		if (num[i] >= 0) {
			j++;
			sum = sum + num[i];
		}
	}
	printf("%.2f", sum / j);
	return 0;
}

二十四、编写函数,讲一个字符串中元音字母复制到另一字符串中,然后输出。

#include "string.h"
#include "stdio.h"
int main(void) {
	char str1[100],str2[100];
	int i, j=0;
	gets(str1);
	for ( i = 0;str1[i]!='\0'; i++)
	{
		if (str1[i]=='a'|| str1[i] == 'A'|| str1[i] == 'e'|| str1[i] == 'E'||
			str1[i] == 'i' || str1[i] == 'I' || str1[i] == 'o' || str1[i] == 'O' || str1[i] == 'u' || str1[i] == 'U') 
		{
			str2[j] = str1[i];
			j++;
		}
	}
	str2[j] = '\0';
	printf("%s",str2);
	return 0;
}

二十五、用递归法将一个整数n转换成字符串。例如,输入345,应输出字符串“345”。n的位数不确定,可以是任意位数的整数、

#include "string.h"
#include "stdio.h"
void convert(int num) {
	int i;
	if ((i=num/10)!= 0) {
		convert(i);
	}
	putchar(num % 10 + '0');
}
int main(void) {
	int num;
	scanf("%d",&num);
	if (num < 0) 
	{
		putchar('-');
		num = -num;
	}
	convert(num);
	return 0;
}

二十六、编写程序:输入一个十六进制数,输出相应的十进制数。

#include "string.h"
#include "stdio.h"
int main(void) {
	char c;
	int value = 0;
	while ((c = getchar()) != '\n')
	{
		if (c >= 'A' && c <= 'F')
			value = (c - 'A' + 10) + 16 * value;
		else if (c >= 'a' && c <= 'f')
			value = (c - 'a' + 10) + 16 * value;
		else if (c >= '0' && c <= '9')
			value = (c - '0') + 16 * value;
	}
	printf("%d", value);
	return 0;
}

二十七、有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?编写程序统计。

#include 
#include 
int main(void) {
	int i, j, k,count=0;
	for (i = 0; i < 5; i++)
	{
		for ( j = 0; j < 5; j++)
		{
			for ( k = 0; k < 5; k++)
			{
				if (i != j && i != k && j != k) {
					printf("%d,%d,%d\n", i, j, k);
					count++;
				}
			}
		}
	}
	printf("%d", count);
	return 0;
}

二十八、用结构体来描述一个学生的成绩情况,内容包括:姓名,学号,C成绩和微机原理成绩。要求对一个班的30个学生的成绩进行统计处理:

(1)计算学生的平均分,并按平均分高低排出名次,打印出姓名。

(2)打印出平均分90分以上和不及格者的名字。

#include 
struct student {
	char name[20];
	char num[20];
	int c_score;
	int w_score;
	int avg;
};
int main(void) {
	int i,j,p;
	struct student stu[30];
	for ( i = 0; i <30; i++)
	{
		scanf("%s%s%d%d",&stu[i].name,&stu[i].num,&stu[i].c_score,&stu[i].w_score);
		stu[i].avg = (stu[i].c_score + stu[i].w_score) / 2;
	}
	for ( i = 0; i < 30-1; i++)
	{
		for ( j = 0; j < 30-i-1; j++)
		{
			if (stu[j].avg < stu[j + 1].avg) {
				struct student	k = stu[j];
				stu[j] = stu[j+1];
				stu[j + 1] = k;
			}
		}
	}
	printf("排名:\n");
	for ( p = 0; p < 30; p++)
	{
		printf("%s\n", stu[p].name);
	}
	printf("90以上:\n");
	for (p = 0; p < 30; p++)
	{
		if (stu[p].avg > 90) {
			printf("%s\t", stu[p].name);
		}
	}
	printf("不及格:\n");
	for (p = 0; p < 30; p++)
	{
		if (stu[p].avg < 90) {
			printf("%s\t", stu[p].name);
		}
	}
	return 0;
}

二十九、编程序:在主函数中输入10个等长的字符串,子函数对他们排序,最后在主函数中输出排好序的字符串。

#include 
#include 
void sort(char str[10][10]) {
	int i,j;
	char k[10];
	for (i = 0; i < 10-1; i++)
	{
		for ( j = 0; j <10-i-1; j++)
		{
			if (strcmp(str[j], str[j + 1])>0) {
				strcpy(k,str[j]);
				strcpy(str[j], str[j + 1]);
				strcpy(str[j + 1], k);
			}
		}
		
	}
}
int main(void) {
	int i;
	char str[10][10];
	for ( i = 0; i <10; i++)
	{
		scanf("%s", &str[i]);
	}
	sort(str);
	for (i = 0; i < 10; i++)
	{
		printf("%s\n", str[i]);
	}
	return 0;
}

三十、编写函数int strcmp(char *p1,char *p2);实现两个字符串的比较。

#include 
int strcmp(char *p1,char *p2) {
	int i = 0;
	while (*(p1+i)==*(p2+i))
	{
		if (*(p1 + i++) == '\0') {
			return 0;
		}
	}
	return (*(p1 + i) - *(p2 + i));
}
int main(void) {
	char str1[20], str2[20];
	scanf("%s", &str1);
	scanf("%s", &str2);
	printf("%d",strcmp(str1,str2));
	printf("%s", str1);
	return 0;
}

三十一、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?试编程求之。

#include
#include 
int main(void) {
	long int i = 1, x, y;
	while (1)
	{
		x = sqrt(i + 100);
		y = sqrt(i + 168);
		if ((x * x == i + 100) && (y * y == i + 168)) {
			printf("%ld\n", i);
			break;
		}
		else {
			i++;
		}
	}
	return 0;
}

三十二、编写程序:输入一系列的值,统计数据个数,确定其中的最大数和最小数,并计算出所有数据的平均值。

#include 
int main(void) {
	double sum = 0.0,big,small,x;
	int count = 0;
	while (scanf("%lf",&x)==1)
	{
		sum += x;
		count++;
		if (count == 1)big=small = x;
		if (x > big)big= x;
		if (x < small)small = x;
	}
	printf("数值个数:%d,最大值:%lf,最小值:%lf,平均值:%lf", count, big, small, sum / count);
	return 0;
}

三十三、利用公式sinx= ∑ n = 0 ∞ ( − 1 ) n x 2 n + 1 ( 2 n + 1 ) ! \sum_{n=0}^{∞}(-1)^{n}\frac {x^{2n+1}}{(2n+1)!} n=0(1)n(2n+1)!x2n+1,求sinx的近似值。

#include 
int main(void) {
	double x, sum = 0.0, t;
	int n = 0;
	scanf("%lf", &x);
	t = x;
	while (t >= 1e-6 || t <= -1e-6)
	{
		sum = sum + t;
		n = n + 1;
		t = -t * x * x / (2 * n) / (2 * n + 1);
	}
	printf("%lf", sum);
	return 0;
}

三十四、编写函数 mystrcat(char *s1,char *s2),该函数功能是将两个字符串连接起来(不允许使用strcat函数)。

#include 
void mystrcat(char* s1, char* s2) {
	int i = 0, j = 0;
	while (s1[i]!='\0')
	{
		i++;
	}
	while (s2[j]!='\0')
	{
		s1[i++] = s2[j++];
	}
	s1[i] = '\0';
}
int main(void) {
	char str1[20],str2[10];
	scanf("%s",str1);
	scanf("%s",str2);
	mystrcat(str1, str2);
	puts(str1);

	return 0;
}

三十五、现有10个城市名及其春夏秋冬四个季节的平均温度值,编写程序,定义合适的结构体,输入10个城市名和四季温度,计算各个城市的全年平均温度,并按照平均温度从低到高的顺序输出城市名、四季温度及全年平均温度。

#include 
struct temperature
{
	char name[20];
	double spring;
	double summer;
	double autumn;
	double winter;
	double avg;
}city[10];
int main(void) {
	int i,j;
	struct temperature t;
	for (i = 0; i <10; i++)
	{
		scanf("%s%lf%lf%lf%lf", &city[i].name, &city[i].spring, &city[i].summer, &city[i].autumn, &city[i].winter);
		city[i].avg = (city[i].spring + city[i].summer + city[i].autumn + city[i].winter) / 4;
	}
	for (i = 0; i < 10-1; i++)
	{
		for ( j = 0; j < 10-i-1; j++)
		{
			if (city[j].avg>city[j+1].avg)
			{
				t = city[j];
				city[j] = city[j + 1];
				city[j + 1] = t;
			}
		}
	}
	for (i = 0; i <10; i++)
	{
		printf("city:%s,spring:%.1lf,summer:%.1lf,autumn:%.1lf,winter:%.1lf,avg:%.1lf\n", city[i].name, city[i].spring, city[i].summer, city[i].autumn, city[i].winter, city[i].avg);
	}
	return 0;
}

三十六、编写函数day_of_year(year,month,day),计算并返回年、月、日对应的是该年的第几天。在主函数输入年、月、日,输出该日期是该年的第几天。

#include 
int day_of_year(int year, int month, int day) {
	int k, leap;
	int tab[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} };
	leap = (year % 4 == 0 && year % 100 == 0 || year % 400 == 0);
	for ( k = 0; k < month-1; k++)
	{
		day += tab[leap][k];
	}
	return day;
}
int main(void) {
	int year, month, day; 
	scanf("%d%d%d", &year, &month, &day); 
	printf("%d", day_of_year(year, month, day));
	return 0;
}

三十七、编写函数void points(char c,int first,int second),该函数功能为输出如下图形,其中first,second为在这两处各输出一个星号,主函数调用该函数。

C语言编程题(基础)_第2张图片

#include 
void points(char c, int first, int second)
{
	int i;
	for (i = 0; i < first; i++)
	{
		printf(" ");
	}
	putchar(c);
	for (++i; i < second; i++)
	{
		printf(" ");
	}
		
	if (first < second)
	{
		putchar(c);
	}
	putchar('\n');
}
void main()
{
	int i, j;
	for (i = 10, j = 10; i > 5; --i, ++j)
		points('*', i, j);
	for (i = 5, j = 15; i <= 10; i++, j--)
		points('*', i, j);
}

三十八、编写程序,求一元二次方程 a x 2 + b x + c = 0 ax^{2} +bx+c=0 ax2+bx+c=0的根。

#include
#include 
int main(void)
{
	double a, b,c,result1, result2, realpart, imagpart;
	scanf("%lf%lf%lf",&a,&b,&c);
	double k = b * b - 4 * a * c;
	if ( k>= 0) {
		result1 = (-b + sqrt(k)) / 2 * a;
		result2 = (-b - sqrt(k)) / 2 * a;
		printf("x1=%.4lf,x2=%.4lf", result1, result2);
	}
	else
	{
		realpart = -b / 2 * a;
		imagpart = sqrt(-k) / 2 * a;
		printf("x1=%.4lf+%.4lfi\n", realpart, imagpart); 
		printf("x2=%.4lf-%.4lfi\n", realpart, imagpart);
	}
	return 0;
}

三十九、编写加密函数int code(int *c)和解密函数int decode(int *c),主函数输入一些字符,调用加密函数对这些字符加密,加密方式为将每个字符+13,调用解密函数将加密的字符解密。

#include 
int code(int*);
int decode(int*);
int main(void)
{    
	int c[60],i=0;
	while ((c[i] = getchar())!='\n')
	{
		putchar(code(&c[i]));
		i++;
	}
	printf("\n");
	i = 0;
	while (c[i]!='\n')
	{
		putchar(decode(&c[i]));
		i++;
	}
	return 0;
}
int code(int* c) {
	*c += 13;
	return *c;
}
int decode(int* c) {
	*c -= 13;
	return *c;
}

四十、编写程序:输入一个以回车为结束标志的字符串(少于10个字符),提取其中的所有数字字符,将其转换为一个十进制整数输出。

#include 
int main(void)
{    
	int c[60],i=0,num=0;
	while ((c[i] = getchar())!='\n')
	{
		i++;
	}
	c[i] = '\0';
	for (i = 0;c[i]!='\0'; i++)
	{
		if (c[i] >= '0' && c[i] <= '9') {
			num = num * 10 + c[i] - '0';
		}
	}
	printf("%d", num);
	return 0;
}

四十一、已知公鸡5元一只,母鸡3元一只,小鸡一元三只,用100元买100只鸡,编写程序输出公鸡,母鸡,小鸡各多少只?

#include 
int main(void)
{
	int x, y, z; 
	int count = 0; 
	for (x = 0; x <= 20; x++) {
		for (y = 0; y <= 33; y++) {
			z = 100 - x - y;
			if ((z % 3 == 0) && (5 * x + 3 * y + z / 3 == 100)) 
			{
				count++; 
				printf("公鸡有%d 只,母鸡有%d 只,小鸡有%d 只\n",x,y,z);
			}
		}
	}
	if (count == 0) printf("输入数据有误。\n");
	return 0;
}

四十二、编写函数计算三角形面积。编写主函数输入三角形的三条边,输出该三角形面积。

#include
#include
float area(float a, float b, float c); 
float s(float a, float b, float c);
int main(void)
{
	float a,b,c;
	scanf("%f%f%f",&a,&b,&c);
	if ((a + b > c) && (b + c > a) && (a + c > b)) {
		printf("area = % f\n", area(a, b, c));
	}
	return 0;
}
float area(float a, float b, float c) 
{
	
	float p = s(a, b, c);
	float ss = sqrt(p*(p-a)*(p-b)*(p-c));
	return ss;
}
float s(float a, float b, float c) 
{
	float p = (a + b + c) / 2;
	return p;
}

四十三、利用数组计算斐波那契数列的前10个数,即1,1,2,3,5…55,并按每行打印5个数的格式输出。

#include
int main(void)
{
	int i;
	int fib[10] = { 1,1 };
	for (i = 2; i < 10; i++)
	{
		fib[i] = fib[i - 1] + fib[i - 2];
	}
	for (i = 0; i < 10; i++)
	{
		printf("%6d", fib[i]);
		if ((i + 1) % 5 == 0)
	    printf("\n");
	}
	return 0;
}

四十四、有一分数序列 2 1 , 3 2 , 5 3 , 8 5 , 13 8 , 21 13 . . . . . . \frac {2}{1},\frac {3}{2},\frac {5}{3},\frac {8}{5},\frac {13}{8},\frac {21}{13}...... 12,23,35,58,813,1321......,求出这个数列的前20项之和。

#include
int main(void)
{
	int i;
	float a = 1, b = 2,s=0,t;
	for ( i = 0; i < 20; i++)
	{
		s = s + b / a;
		t = b;
		b = a + b;
		a = t;
	}
	printf("sum=%f", s);
	return 0;
}

四十五、已知:正整数<=n<=1000,求其中的“完数”,即一个数的所有因子之和等于该数本身的数。

#include
int main(void)
{
	int i,j,s;
	for ( i = 2; i <= 1000; i++)
	{
		s = 0;
		for (j = 1; j <i ; j++)
		{
			if (i % j == 0) {
				s += j;
			}
		}
		if (s == i) {
			printf("%d\t",i);
		}
	}
	return 0;
}

四十六、编程,将字符串中的数字转换为整数输出。比如:“ab12bc3”,输出结果为123。

#include
int main(void)
{
	int i, number;
	char str[10];
	i = 0;
	while ((str[i]=getchar())!='\n')
	{
		i++;
	}
	str[i] = '\0';
	number = 0;
	for ( i = 0; i < str[i]!='\0'; i++)
	{
		if (str[i] >= '0' && str[i] <= '9') {
			number = number * 10 + (str[i] -'0');
		}
	}
	printf("%d", number);
	return 0;
}

四十七、编写函数void del(char *s,char c),其功能是在c所指字符串中删除与变量c相同的字符,并设计主函数实现:

  1. 从键盘输入字符串和指定被删除的字符。
  2. 调用del()函数实现删除操作。
  3. 输出删除后的字符串。
  4. 说明:不允许使用gets和puts之外任何字符串处理库函数。
#include 
#include
void del(char *s,char ch)
{
	char* p = s;
	while (*s)
	{
		if (*s != ch) {
			*p++ = *s++;
		}
		else {
			s++;
		}
	}
	*p = '\0';
}
int main(void)
{
	char str[100], ch;
	printf("请输入字符串");
	gets(str);
	printf("请输入要删除的字符");
	scanf("%c", &ch);
	del(str, ch);
	puts(str);
	return 0;
}

四十八、有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出个人投票结果。

#include 
#include
struct  person
{
	char name[20];
	int count;
}leader[3] = {"li",0,"zhang",0,"liu",0};
int main(void)
{
	int i, j;
	char leader_name[20];
	for ( i = 0; i < 10; i++)
	{
		scanf("%s", &leader_name);
		for ( j= 0; j <3 ; j++)
		{
			if (strcmp(leader_name, leader[j].name) == 0) {
				leader[j].count++;
			}
		}
	}
	for ( i = 0; i < 3; i++)
	{
		printf("%5s:%d\n", leader[i].name, leader[i].count);
	}
	return 0;
}

四十九、打印出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。

#include
int main(void)
{
	int i, j, k, n;
	for ( n = 100; n <= 999; n++)
	{
		i = n / 100;
		j = n / 10 - i * 10;
		k = n % 10;
		if (n == i * i * i + j * j * j + k * k * k)
			printf("%4d", n);
	}

	return 0;
}

五十、编程序求2~10000以内的完全数。完全数:一个数的因子(除了这个数本身)之和等于该数本身。例如:6的因子是1,2,3,因此6是完全数。

#include
int main()
{
	int sum, n, i;
	for (n = 2; n <= 10000; n++)
	{
		sum = 0;
		for (i = 1; i <= n / 2; i++)
			if (n % i == 0) sum += i;
		if (sum == n) 
		{
			printf("\n%d:", n);
			for (i = 1; i <= n / 2; i++)
				if (n % i == 0)
				{
					printf("%d ", i);
				}		
		}
	}
	return 0;
}

五十一、读入一串字符,分别统计数字‘0’~‘9’出现的次数。

#include
int main()
{
	int i, n[10] = {0};
	char c;
	while ((c=getchar())!='\n')
	{
		if (c >= '0' && c <= '9') {
			n[c - 48]++;
		}
	}
	for ( i = 0; i < 10; i++)
	{
		printf("%d:%d\n", i, n[i]);
	}
	return 0;
}

五十二、用选择法对N个整数升序排序并输出。要求指针方法。

  1. 要求用函数void sort(int *array,int n)排序。
  2. N个整数和N在主程序中输入,在主函数中输出排序后的结果。
#include
void sort(int* array, int n);
int main()
{
	int n, a[10],i;
	scanf("%d", &n);
	for ( i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	sort(a, n);
	for ( i = 0; i < n; i++)
	{
		printf("%d\t", a[i]);
	}
	return 0;
}
void sort(int* array, int n) {
	int i, j,temp;
	for ( i = 0; i < n-1; i++)
	{
		for ( j= 0; j < n-i; j++)
		{
			if (array[j] > array[j + 1]) {
				temp = array[j];
				array[j] = array[j + 1];
				array[j + 1] = temp;
			}
		}
	}
}

五十三、输入精度e。使用格雷戈里公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数fun(e)求π的近似值。 π 4 = 1 − 1 3 + 1 5 − 1 7 + . . . . . . \frac {π}{4}=1-\frac {1}{3}+\frac {1}{5}-\frac {1}{7}+...... 4π=131+5171+......

#include
#include
double fun(double e);
int main()
{
	double e, pi;
	printf("entere:");
	scanf("%lf", &e);
	pi = fun(e);
	printf("pi=%f\n", pi);
	return 0;
}
double fun(double e) {
	int denominator = 1, flag = 1;
	double item = 1.0, sum = 0;;
	while (fabs(item) >= e) {
		item = flag * 1.0 / denominator;
		sum = sum + item;
		flag = -flag;
		denominator = denominator + 2;
	}
	return sum * 4;
}

五十四、请用for循环编写函数fun,它的功能是:判断m是否为素数。主函数的功能是:求出100到200之间的素数个数。

#include
#include
int prime(int m);
int main(void)
{
	int count=0,m;
	for (m = 100; m <= 200; m++)
	{
		if (prime(m) != 0)
		{
			count++;
		}
		printf("%d", count);
	return 0;
}
int prime(int m) {
	int i, n;
	if (m == 1)
		return 0;
	n = sqrt(m);
	for (i = 2; i <= n; i++)
		if (m % i == 0)
			return 0;
	return 1;
}

五十五、求Fibonacci数列的前40个数。这个数列有如下特点:第1,2个数为1,1,从第三个数开始,该数是前两个数之和(不允许使用数组)。

#include
int main(void)
{
	int i, x1 = 1, x2 = 1, x;
	int count;
	printf("%10d%10d", x1, x2);
	count = 2; 
	for (i = 1; i <= 38; i++)
	{
		x = x1 + x2;
		printf("%10d", x);
		count++;
		x1 = x2;
		x2 = x;
		if (count % 10 == 0)
			printf("\n");
	}
	return 0;
}

五十六、根据某城市出租车收费标准编写程序对车费进行计算。具体标准如下:起步里程为3km,起步费10元;10km以内起步历程部分,每千米2元,超过10km以上的部分加收50%的回空补贴费,即每千米3元。运营过程中,因堵车及乘客要求临时停车的,按每五分钟2元计收(不足五分钟则不收费)。要求:输入行驶里程(精确到0.1km)与等待时间(精确到分钟),计算并输出乘客应支付的车费(元),结果四舍五入,保留到元。

#include  
int main()
{
	int time;
	float distance, fee;
	printf("输入里程和等待时间\n");
	scanf("%f%d", &distance, &time);
	if (distance < 3) fee = 10;
	else if (distance <= 10) fee = 10 + (distance - 3) * 2;
	else fee = 10 + 7 * 2 + (distance - 10) * 2 * 1.5;
	fee = fee + time / 5 * 2;
	printf("fee=%.0f\n", fee); 
	return 0;
}

五十七、编写程序,求 ∑ n = 1 20 n ! \sum_{n=1}^{20}n! n=120n!(即求1!+2!+…20!),要求用子函数完成。

法一

#include
static int sum=0;
void fun(int num) {
	int i,t=1;
	for ( i = 1; i <=num; i++)
	{
		t = t* i;
	}
	sum += t;
}
int main(void)
{
	int i;
	for ( i = 1; i <= 20; i++)
	{
		fun(i);
	}
	printf("%d", sum);
	return 0;
}

法二

#include
long fac(int n)
{
	long f; 
	if(n<1) f=1; 
	else f=n*fac(n-1);
	return f;
}
int main() 
{ 
	long n,i,sum=0; 
	scanf("%d",&n); 
	for(i=1;i<=n;i++) sum+=fac(i);
	printf("%ld",sum); 
}

五十八、编写程序输出杨辉三角形(要求输出10行)

#include  
int main()
{
	int i, j, a[10][10];
	printf("\n");
	for (i = 0; i < 10; i++) {
		a[i][0] = 1;
		a[i][i] = 1;
	}
	for (i = 2; i < 10; i++)
	{
		for (j = 1; j < i; j++) {
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
		}
	}
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++) {
			printf("%5d", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

五十九、编写程序:输出多个字符串,输出其中最短的字符串。

#include  
#include 
int main()
{
	char str[80], min[80];
	int k, len;
	printf("输入一个字符串:\n");
	gets_s(str);
	strcpy(min, str);
	len = strlen(min);
	while (str[0] != '\0') //以空串作为输入结束标记 
	{
		k = strlen(str);
		if (k < len)
		{
			len = k;
			strcpy(min, str);
		}
		gets_s(str);
	}
	printf("len=%d,min=%s\n", len, min);
	return 0;
}

六十、在全校系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。

#include  
#define SUM 100000 
int main()
{
	float amount, aver, total;
	int i;
	for (i = 1, total = 0; i <= 1000; i++)
	{
		printf("please enter amount:");
		scanf("%f", &amount);
		total = total + amount;
		if (total >= SUM) break;
	}
	if (i < 1000)
	{
		aver = total / i;
	}
	else 
	{
		aver = total / (i - 1);
	}
	printf("num=%d\naver=%10.2f\n", i, aver);
	return 0;
}

六十一、用递归方法将一个整数n转换成字符串。例如,输入256,应输出"256"。

#include 
#define SUM 100000 
void tranvers(int n) {
	if (n/10!=0) {
		tranvers(n / 10);
	}
	printf("%c", n % 10 + '0');
}
int main()
{
	int n;
	printf("请输入一个整数:\n");
	scanf("%d", &n);
	printf("字符串是:");
	if (n < 0) {
		printf("-");
		n = -n;
	}
	tranvers(n);
	return 0;
}

六十二、根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间,编写程序计算整个旅途所用的时间。输入一行中给出2个4位正整数,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。输出格式:“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

#include  
int main()
{
	int ks, js, xs, fz; 
	scanf("%d%d", &ks, &js); 
	xs = js / 100 - ks / 100; 
	fz = js % 100 - ks % 100;
	if (fz < 0) 
	{ 
		xs = xs - 1; 
		fz = 60 + fz; 
	}
	printf("%02d:%02d", xs, fz); 
	return 0;
}

六十三、编写函数char *str(char *s,char x),函数功能:在给定的字符串s中寻找一个特定的字符x,若找到x,则返回x在s中第一次出现的地址。在主函数中把s中该字符和该字符之前的字符按逆序输出。

#include  
#include 
char* str(char* s, char x) {
	int c = 0; 
	while (x != s[c] && s[c] != '\0') 
		c++;
	return &s[c];
}
int main()
{
	char s[40], * p, x; 
	gets(s);
	x = getchar();
	p = str(s, x);
	if (*p) {
		printf("%c", *p);
		while (p-s)
		{
			p--;
			printf("%c", *p);
		}
	}
	else {
		printf("not found");
	}
	return 0;
}

六十四、编写程序:给定某个正整数n,求其素因子分解结果。所谓素因子分解就是找这个数的所有约数并且约数是素数。

#include  
#include 
int IsPrime(int n);
void FactorizePrime(int n);
int main()
{
	int n;
	scanf("%d", &n);
	if (IsPrime(n) == 0)
	{
		printf("%d 可分解为:", n);
		FactorizePrime(n);
	}
	else
		printf("%d 是素数,不能分解\n", n);
	return 0;
}
int IsPrime(int n)
{
	int i;
	for (i = 2; i <= (int)sqrt(n); i++)
		if (n % i == 0)
			return 0;
	return 1;
}
void FactorizePrime(int n) {
	int i; while (1) {
		for (i = 2; i <= n; i++)
			if (n % i == 0)
			{
				printf("%d ", i);
				n = n / i;
				break;
			}
		if (n == 1) break;
	}
}

六十五、编写函数void swap(int *a,int *b)(该函数功能是实现变量变换),主函数实现对输入的n个整数进行升序排序。

#include  
void swap(int* a, int* b) {
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
	int num[10],i,j;
	for ( i = 0; i <10; i++)
	{
		scanf("%d", &num[i]);
	}
	for (i = 0; i < 10-1; i++)
	{
		for ( j = 0; j < 10-i-1; j++)
		{
			if (num[j] > num[j + 1]) {
				swap(&num[j], &num[j + 1]);
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", num[i]);
	}
	return 0;
}

六十六、按照规定,在高速公路上行驶的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。编写程序根据车速和限速自动判别对该机动车的处理。输入两个正整数,分别对应车速和限速。输出处理意见:若属于正常行驶,则输出”OK“;若应处罚款,则输出“Exceed x%.Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速百分比,精确到整数。

#include  
int main()
{
	int x, r,n,m;
	scanf("%d%d",& x, &r);
	n = x * (1 + 0.1);
	m = x * (1 + 0.5);	
	if (r >= n&& r < m) {
		printf("Exceed%.0f%%,Ticket 200",1.0*(r-x)/x*100);
	}
	else if (r >= m) {
		printf("Exceed%.0f%%,License Revoked",1.0* (r-x) / x * 100);
	}
	else
	{
		printf("OK");
	}
	return 0;
}

六十七、一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

#include  
int main()
{
	int time, u, d,n,curh;
	scanf("%d%d%d",&n,&u,&d); //输入井的深度,蠕虫上爬和下滑的距离
	time = 0;   //当前高度及所花时间
	curh = 0;
	while (1)
	{
		curh += u;
		time++;
		if (curh > n)break;
		curh -= d;
		time++;
	}
	printf("%d", time);
	return 0;
}

六十八、编写函数void sort(char *words[],int n);对一组英文单词进行按字典排序。在主函数中输出原无序的单词和排序后的单词。

#include  
#include 
void sort(char* words[], int n);
int main()
{
	char* wString[] = { "implementation","language","design", "fortran","computer " };
	int i, n = 5; printf("The words are :\n");
	for (i = 0; i < n; i++) {
		printf("\twString[%d]=%s\n", i, wString[i]);
	}
	printf("After sort,The words are:\n");
	sort(wString, n); 
	for (i = 0; i < n; i++) {
		printf("\twString[%d]=%s\n", i, wString[i]);
	}
	return 0;
}
void sort(char* s[], int n)
{
	char* temp;
	int i, j, k;
	for (i = 0; i < n - 1; i++)
	{
		k = i;
		for (j = i + 1; j < n; j++)
			if (strcmp(s[k], s[j]) > 0)
			{
				k = j;
			} 
		if (k != i)
		{
			temp = s[i]; s[i] = s[k];
			s[k] = temp;
		}
	}
}

六十九、数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。编写程序验证。

#include  
#include 
int prime(int p) {
	int e, i;
	e = sqrt(p);
	for ( i = 2; i <=e; i++)
	{
		if (p % i == 0) {
			break;
		}
	}
	if (i > e) {
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int num,i,p2;
	scanf("%d", &num);
	for ( i = 3; i <=num/2; i++)
	{
		p2 = num - i;
		if (prime(i) && prime(p2)) {
			printf("%ld=%ld+%ld\n", num, i, p2);
			break;
		}
		if (i > num / 2) {
			printf("偶数%d 不符合哥德巴赫猜想\n",num);
		}
	}
	return 0;
}

七十、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(在10万以内判断)

#include  
#include 
int main()
{

	long int x, y, i;
	for ( i = 1; i <100000; i++)
	{
		x = sqrt(i + 100);
		y = sqrt(i + 168);
		if (x * x == i + 100 && y * y == i+ 168) {
			printf("%ld\t", i);
		}
	}
	return 0;
}

七十一、编写程序读入N个学生的百分制成绩,统计等级制成绩的分布(即各等级的人数)。百分制成绩到等级制成绩的转换规则:

大于等于90分为A;

小于90且大于等于80为B;

小于80且大于等于70位C;

小于70且大于等于60为D;

小于60为E;

#include  
int main() 
{ 
    int N,score,A,B,C,D,E,i;
    A=B=C=D=E=0; 
    scanf("%d",&N); 
    for(i=1;i<=N;i++) 
    { 
        scanf("%d",&score); 
        switch(score/10) 
        { 
            case 10:
            case 9:A++; break;
            case 8: B++;break; 
            case 7: C++;break; 
            case 6: D++;break; 
            default: E++;break; 
        }
    }
    printf("%d %d %d %d %d\n",A,B,C,D,E);
	return 0; 
}

七十二、编写程序,输出空心菱形。

#include  
int main() 
{ 
    int i,j; 
    for(i=0;i<4;i++)
    { 
        for(j=0;j<4-i;j++) 
        { 
            printf(" "); 
        }
        for(j=0;j<2*i+1;j++)
        { //判断在需要打印的地方的第一位和最后一位打印*号,中间位置空格 
            if((j==0)||(j+1==2*i+1)) 
            { 
                printf("*"); 
            }else 
            { 
                printf(" "); 
            } 
        }
        printf("\n"); 
    }
    for(i=0;i<3;i++) 
    { 
        for(j=0;j<i+2;j++) 
        { 
            printf(" "); 
        }
        for(j=6;j>2*i+1;j--) 
        {//判断在需要打印的地方的第一位和最后一位打印*号,中间位置空格 
            if((j==6)||(j-1==2*i+1)) 
            { 
                printf("*"); 
            }
            else
            {
                printf(" "); 
            } 
        }
        printf("\n"); 
    } 
    printf("\n");
    return 0;
}

七十三、红星广场新进商品若干,请帮助他们进行统计。下面给出了main()函数,请将其他函数补充完整,即写出void readprice(float price[8]);float averPrice(float price[8]); float highPrice(float price[8]); float lowePrice(float price[8]); void prtprice(float price[8], float ave); 函数的定义。

#include  
void readprice(float price[8]); /*输入商品的价格*/ 
float averPrice(float price[8]); /*计算商品的平均价格*/
float highPrice(float price[8]); /*找出最高价的商品*/
float lowePrice(float price[8]); /*找出最低价的商品*/
void prtprice(float price[8], float ave); /*输出高于平均价格的商品*/
int main()
{
	float price[8];
	float average, highestP, lowestP; 
	readprice(price); /*输入商品的价格*/
	average = averPrice(price); /*计算商品的平均价格*/ 
	highestP = highPrice(price); /*找出最高价的商品*/
	lowestP = lowePrice(price); /*找出最低价的商品*/
	printf("The highest Price=%6.2f\n", highestP); 
	printf("the lowest Price=%6.2f\n", lowestP); 
	printf("The average Price=%6.2f\n", average); 
	prtprice(price, average); /*输出高于平均价格的商品*/ 
	return 0;
}
void readprice(float price[8]) {
	int i;
	for (i = 0; i < 8; i++)
	{
		scanf("%f", &price[i]);
	}
}
float averPrice(float price[8])
{
	int i;
	float sum = 0;
	for ( i = 0; i < 8; i++)
	{
		sum += price[i];
	}
	sum /= 8.0;
	return sum;
}
float highPrice(float price[8])
{
	int i;
	float max = price[0];
	for (i = 0; i <8; i++)
	{
		if (max < price[i]) {
			max = price[i];
		}
	}
	return max;
}
float lowePrice(float price[8])
{
	int i;
	float min = price[0];
	for (i = 0; i < 8; i++)
	{
		if (min > price[i]) {
			min = price[i];
		}
	}
	return min;
}
void prtprice(float price[8], float ave)
{
	int i;
	for ( i = 0; i < 8; i++)
	{
		if (price[i] > ave) {
			printf("%6.2f", price[i]);
		}
	}
}

七十四、编写程序计算某年某月某日是该年中的第几天

#include  
int main()
{
	int year, month, day, s = 0, flag;
	scanf("%4d/%2d/%2d", &year, &month, &day);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		flag = 1;
	}
	else {
		flag = 0;
	}
	switch (month - 1)
	{
	case 12:s = 31;
	case 11:s = s + 30;
	case 10:s = s + 31;
	case  9:s = s + 30;
	case  8:s = s + 30;
	case  7:s = s + 31;
	case  6:s = s + 30;
	case  5:s = s + 31;
	case  4:s = s + 3;
	case  3:s = s + 31;
	case 2:
		if (flag)s = s + 29;
		else s = s + 28;
	case 1:s = s + 31; break;
	}
	s = s + day;
	printf("%d", s);
	return 0;
}

七十五、一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到n对。

#include  
int main()
{
	int month=1, num1=1, num2=0, num3=0,n,sum=0;
	scanf("%d", &n);
	while (num1+num2+num3<n)
	{
		month++;
		num3 = num1 + num2;
		num1 = num2;
		num2 = num3;
	}
	printf("至少到第%d 个月时,才有%d 对兔子,已有%d 对兔子\n", month, n, num1 + num2 + num3);
	return 0;
}

七十六、求平方根:编写函数double getsqrt(double a),计算x=√a(只计算a=1,2,3,4,5的值)。已知计算x=√a的迭代公式如下所示,要求累加到某项的绝对值小于1e-6时为止。

在这里插å¥å›¾ç‰‡æè¿°

#include  
#include 
double getsqrt(double a) {
	double x1=a, x2;
	while (1)
	{
		x2 = (x1 + a / x1) / 2;
		if (fabs(x2 - x1) < 1e-6) {
			break;
		}
		x1 = x2;
	}
	return x1;

}
int main()
{
	double x[5] = {1, 2, 3, 4, 5},xsqrt[5];
	int i;
	for ( i = 0; i < 5; i++)
	{
		xsqrt[i] = getsqrt(x[i]);
		printf("%12.9f\n", xsqrt[i]);
	}
	return 0;
}

七十七、功能:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

#include  
int main()
{
 int a[80] = { 0 }, i, j = 0, k = 0, n,count=0;
 scanf("%d", &n);
 for ( i = 0; i < n; i++) a[i] = 1;
 for ( i = 1; i < 4; i=i%3+1)
 {
  if (i== 3 && a[k] == 1) {
   a[k] = 0;
   count++;
   if (n - 1 == count) break;
   k = ++k % n;
   continue;
  }
  if (a[k] == 0) {
   k = ++k % n;
   i--;
   continue;
  }
  k = ++k % n;
 }
 for (i = 0; i < n; i++)
 {
  if (a[i] == 1)printf("%d", i+1);
 }
 return 0;
}

你可能感兴趣的:(C语言)