1、输出9*9口诀。共9行9列,i控制行,j控制列。

//99乘法表
int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			printf("%d x %d = %-4d",i,j,i*j);
		}
		printf("\n");
	}
}

运行结果:

2、古典问题:有一对兔子,从出生后第3个月起每个闯都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(斐波那契数列)

//兔子繁殖问题
#define month 20
int main()
{
	long x1 = 1, x2 = 1;
	for (int i = 1; i <= month; i++)
	{
		printf("%-12ld%-12ld", x1, x2);
		if (i % 2 == 0)
		{
			printf("\n");
		}
		x1 = x1 + x2;
		x2 = x1 + x2;
	}
	return 0;
}

3、判断101-200之间有多少个素数,并输出所有素数及素数的个数。

解析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

//素数判断
int main()
{
	int count = 0;
	for (int i = 101; i <= 200; i++)
	{
		int flag = 0;
		for (int j = 2; j < sqrt(i) + 1; j++)
		{
			if (i % j == 0)
			{
				flag = 1;
				break;
			}
		}
		if (!flag)
		{
			++count;
			printf("%d ", i);
			if (count % 8 == 0)
			{
				printf("\n");
			}
		}
	}
	printf("\n%d", count);
	return 0;
}


4、—个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

//完数
int main()
{
	int count = 0;
	for (int i = 2; i < 1000; i++)
	{
		int sum = 1;
		for (int j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				sum += j;
			}
		}
		if (sum == i)
		{
			++count;
			printf("%d = 1", sum);
			for (int j = 2; j < i; j++)
			{
				if (i % j == 0)
				{
					printf("+%d", j);
				}
			}
			printf("\n");
		}
	}
	printf("%d", count);
}

运行结果:

5、下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。

//矩阵转置
#define ROW 4
#define COL 4
int main()
{
	int arr[ROW][COL] = { 0 };
	for (int i = 0; i < COL; i++)
	{
		for (int j = 0; j < ROW; j++)
		{
			scanf("%d", &arr[j][i]);
		}
	}
	printf("\n");
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

运行结果:

6、杨辉三角

//杨辉三角
#define ROW 20
#define COL 20
int main()
{
	int arr[ROW][COL] = { 0 };
	arr[0][0] = 1;
	for (int i = 1; i < ROW; i++)
	{
		arr[i][0] = arr[i][i] = 1;
		for (int j = 1; j < COL-1; j++)
		{
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
		}
	}
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			printf("%-5d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 运行结果:

 

 

7、通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。

//学生成绩
int main()
{
	double arr[4][5] = { 0 };
	int i, j,sum;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			scanf("%lf", &arr[i][j]);
		}
	}

	for (i = 0; i < 3; i++)
	{
		sum = 0;
		for (j = 0; j < 4; j++)
		{
			sum+=arr[i][j];
		}
		arr[i][4] = sum/4;
	}
	
	for (i = 0; i < 5; i++)
	{
		sum = 0;
		for (j = 0; j < 3; j++)
		{
			sum += arr[j][i];
		}
		arr[3][i] = sum/3;
	}
	
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%2.2lf ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 运行结果:

8、完善程序,实现将输入的字符串反序输出,如输入windows输出swodniw。

//字符串逆序-常规
int main()
{
	char c[100] = { 0 };
	gets(c);
	int len = strlen(c);
	int left = 0, right = len - 1;
	while (left < right)
	{
		char temp = c[left];
		c[left] = c[right];
		c[right] = temp;
		left++;
		right--;
	}
	printf("%s", c);
	return 0;
}


//字符串逆序-指针
int main()
{
	char c[100] = { 0 };
	gets(c);
	int len = strlen(c);
	int left = 0, right = len - 1;
	while (left < right)
	{
		char temp = *(c+left);
		*(c + left) = *(c + right);
		*(c + right) = temp;
		left++;
		right--;
	}
	printf("%s", c);
	return 0;
}

9、从字符串中删除字符

//从字符串中删除字符
int main()
{
	char str[100] = { 0 };
	gets(str);
	char c = { 0 };
	scanf("%c", &c);
	int i, j;
	for (i = 0, j = 0; str[i] != '\0'; i++)
	{
		if (str[i] != c)
		{
			str[j] = str[i];
			j++;
		}
	}
	str[j] = '\0';
	printf("%s", str);
	return 0;
}

运行结果:

//从字符串中删除字符
int main()
{
	char str[100] = { 0 };
	gets(str);
	char c = { 0 };
	scanf("%c", &c);
	int i, j;
	for (i = 0, j = 0; str[i] != '\0'; i++)
	{
		if (str[i] != c)
		{
			str[j] = str[i];
			j++;
		}
	}
	str[j] = '\0';
	printf("%s", str);
	return 0;
}

 

10、编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9_1.out中。

//排序
void sort(int* x, int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 1+i; j < n; j++)
		{
			if (x[i] < x[j])
			{
				int temp = x[i];
				x[i] = x[j];
				x[j] = temp;

			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d ", x[i]);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int *arr = (int*)malloc(n*sizeof(int));
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}

	sort(arr, n);
	return 0;
}

运行结果:

11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列

整了点花活,但是程序没问题,一样用。。。

//插入排序
void sort(int* x, int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 1+i; j < n; j++)
		{
			if (x[i] < x[j])
			{
				int temp = x[i];
				x[i] = x[j];
				x[j] = temp;

			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d ", x[i]);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int *x = (int*)malloc(n*sizeof(int));
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &x[i]);
	}
	int num = 0;
	scanf("%d", &num);
	x = (int*)realloc(x, (n+1)*sizeof(int));
	x[i] = num;
	sort(x, n+1);
	return 0;
}

 运行结果:

 

12、编写函数replace(char*s,char c1,charc2)度实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out中

//替换字符串中字符
replace(char* s, char c1, char c2)
{
	while (*s != '\0')
	{
		if (*s == c1)
		{
			*s = c2;
		}
		s++;
	}
}

main()

{
	FILE* fp;
	char str[100], a, b;
	if ((fp = fopen("p10_2.out", "w")) == NULL)
	{
		printf("cannot open thefile\n");
		exit(0);
	}

	printf("Enter a string:\n");
	gets(str);
	printf("Enter a&&b:\n");
	scanf("%c,%c", &a, &b);
	printf("%s\n", str);
	fprintf(fp, "%s\n", str);
	replace(str, a, b);
	printf("Thenew string is----%s\n", str);
	fprintf(fp, "Thenew string is----%s\n", str);
	fclose(fp);
}

13、产在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。
 

//寻找子串位置
int search(char* str1, char* str2)
{
	int len2 = strlen(str2);
	int i = 0, j = 0;
	while (str1[i])
	{
		for (j = 0; j < len2; j++)
		{
			if (str1[i + j] != str2[j])
			{
				break;
			}

		}
		if (j >= len2)
		{
			return i;
		}
		else
		{
			++i;
		}
	}
	return -1;
}


int main()
{
	char str1[10] = "this is";
	char str2[9] = "is";
	printf("%d", search(str1, str2));
	return 0;
}

14、用指针变量输出结构体数组元素。

//产用指针变量输出结构体数组元素。
struct student
{
	int num;
	char* name;
	char sex;
	int age;
}stu[5] = {{1001,"lihua",'F',18},{1002,"liuxing",'M',19},{1003,"huangke",'F',19},{1004,"fengshou",'F',19},{1005,"Wangming",'M',18}};

main()
{
	int i;
	struct student* ps;
	printf("Num \tName\t\tSex\tAge\t\n");
	/*用指针变量输出结构体数组元素。*/
	for (ps = stu; ps < stu + 5; ps++)
	{
		printf("%d\t%-10s\t%c\t%d\t\n", ps->num, ps->name, ps->sex, ps->age);

	}
	printf("\n");
	/*用数组下标法输出结构体数组元素学号和年龄。*/
	for (i = 0; i < 5; i++)
	{
		printf("%d\t%d\t\n", stu[i].num, stu[i].age);
	}
}

运行结果:

15、建立一个有三个结点的简单链表
 

struct student

{
	int num;
	char* name;
	int age;
	struct student* next;
};

void main()

{
	struct student a, b, c, * head, * p;
	a.num = 1001; a.name = "lihua"; a.age = 18; /* 对结点成员进行赋值 */
	b.num = 1002; b.name = "liuxing"; b.age = 19;
	c.num = 1003; c.name = "huangke"; c.age = 18;
	head = &a;
	a.next = &b;
	b.next = &c;
	c.next = NULL;
	p = head;
	do {
		printf("%5d,%s,%3d\n", p->num, p->name, p->age);
		p = p->next;
	} while (p != NULL);
}

 

16、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。

//回文数
#define MANX 20
typedef  enum { false, true } bool;
bool palindrome(char* str)
{
	int len = strlen(str);
	int left = 0, right = len - 1;
	while (left < right)
	{
		if (*(str + left) != *(str + right))
		{
			return false;
		}
		left++;
		right--;
	}
	return true;
}

int main()
{
	char str[MANX] = { 0 };
	gets(str);
	if (palindrome(str) == 1)
	{
		printf("YES!");
	}
	else
	{
		printf("NO!");
	}
	return 0;
}

运行结果:

17、冒泡排序,选择排序从小到大,排序后结果输出到屏幕及文件myf2.out

(1)冒泡排序

//冒泡加文件
void bubble(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 1 + i; j < n; j++)
		{
			if (arr[i] > arr[j])
			{
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}

}
int main()
{
	FILE* fp;
	if ((fp = fopen("myf2.out", "w")) == NULL)
	{
		printf("cannot open the file\n");
		exit(0);
	}
	int arr[20] = { 0 };
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	bubble(arr, n);
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
		fprintf(fp, "%d ", arr[i]);
	}
	fclose(fp);
	return 0;
}

(2) 选择排序

//选择加文件
void choose(int* arr, int n)
{
	for (int i = 0; i < n; ++i)
	{
		int min = arr[i],index = i;
		for (int j = 1 + i; j < n; ++j)
		{
			if (min > arr[j])
			{
				min = arr[j];
				index = j;
			}
		}
		if (min < arr[i])
		{
			int temp = arr[i];
			arr[i] = arr[index];
			arr[index] = temp;
		}
	}

}
int main()
{
	FILE* fp;
	if ((fp = fopen("myf2.out", "w")) == NULL)
	{
		printf("cannot open the file\n");
		exit(0);
	}
	int arr[20] = { 0 };
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	choose(arr, n);
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
		fprintf(fp, "%d ", arr[i]);
	}
	fclose(fp);
	return 0;
}


 

18、编写函数countpi,利用公式计算T的近似值,当某一项的值小于10-5时,认为达到精度要求,请完善函数。将结果显示在屏幕上并输出到文件p7_3.out中。

//计算pi近似值加文件
double count_pi(double eps)
{
	double num1 = 1, num2 = 1, quotient = 1, sum = 1;
	int i = 0;
	while (quotient >= 1e-5)
	{
		i++;
		num1 *= i;
		num2 *= (2 * i + 1);
		quotient = num1 / num2;
		sum += quotient;
	}
	return sum * 2;
}
int main()
{
	FILE* fp;
	double eps = 1e-5,pi;
	if ((fp = fopen("p7_3.out", "w+")) == NULL)
	{
		printf("cannot open the file\n");
		exit(0);
	}
	pi = count_pi(eps);
	printf("pi = %lf\n", pi);
	fprintf(fp,"pi = %lf\n", pi);
	fclose(fp);
	return 0;
}

更多推荐

大学生C语言期末必背题目,考研必背题目,找工作基础题目