C语言基础编程题目练习

1.输出1-100之间的奇数

int main() {
	for (int i = 1; i <= 100; i+=2)
	{
		printf("%d ", i);
	}
	return 0;
}

2判断两个数组是否有相同的元素

int main() {
	int arr1[] = { 1,25,53,65,55 };
	int arr2[] = { 12,5,36,4,2 };
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		for (int j = 0; j < sz; j++)
		{
			if (arr1[i] == arr2[j])
			{
				printf("找到了");
				return 0;
			}
		}
	}
	if (i == sz)
	{
		printf("没找到");
	}
	return 0;
}

3求一元二次方程的解

int main() {
	//一元二次方程 ax^2+bx + c = 0
	int a, b, c = 0;
	printf("请输入一元二次方程的 a b c");
	scanf("%d%d%d", &a, &b, &c);
	if (b*b-4*a*c==0)
	{
		printf("有两个相等的实根:x1=x2=%d\n", -b / (2*a));
	}
	else if(b*b-4*a*c<0)
	{
		printf("无解\n");
	}
	else
	{
		printf("x1=%d,x2=%d\n", (-b + sqrt(b*b - 4 * a*c)) / (2 * a), (-b - sqrt(b*b - 4 * a*c)) / (2 * a));
	}
	system("pause");
	return 0;
}

4编写代码演示多个字符从两端移动,向中间汇聚

int main() {
	char arr1[] = "##########s";
	char arr2[] = "Xu Zi Xin!s";
	
	int left = 0;
	int right = strlen(arr1)-1;

	while (left<=right)
	{
		arr1[left] = arr2[left];
		arr1[right] = arr2[right];
		system("cls");
		printf("%s\n", arr1);
		left++;
		right--;
		Sleep(1000);
	}
	system("pause");
	return 0;
}

5.编写代码实现,模拟用户登陆场景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功如果三次均输入错误则退出程序)

int main() {
	int i = 0;
	char password[10] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);
		if (strcmp(password,"123456")==0)
		{
			break;
		}
		else
		{
			printf("密码错误");
		}
	}
	if (i==3)
	{
		printf("三次输入密码错误,退出程序");
	}
	else
	{
		printf("登陆成功");
	}
	system("pause");
	return 0;
}

6.将数组A中的内容和数组B中的内容进行交换(数组一样大)

int main() {
	int arr1[] = { 1,2,3,4,5,6 };
	int arr2[] = { 5,5,5,5,5,5 };
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < sz; i++)
	{
		int temp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = temp;
	}
	system("pause");
	return 0;
}

7.计算1/1 - 1/2 + 1/3 -1/4 + 1/5...+1/99-1/100的值

int main() {
	double sum = 0;
	int flag = 1;
	for (int i = 1; i <= 100; i++)
	{
		sum += ((1.0 / i) * flag);
		flag = -flag;
	}
	printf("%f", sum);
	system("pause");
	return 0;
}
int main() {
	double sum =0,temp = 0;
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		temp = pow(-1, i + 1);
		sum += (1.0 / i)*temp;
	}
	printf("%f", sum);
	system("pause");
	return 0;
}

8.编写程序数一下1到100的所有整数中出现多少次数字9.

int main() {
	int i = 0;
	int count = 0;
	for (i = 0; i <= 100; i++) {
		// 个位为9    十位为9;     
		if (i%10==9||i/10==9)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d", count);
	system("pause");
	return 0;
}

9.交换两个数字的位置不使用中间变量

int main() {
	int a = 10;
	int b = 20;
	printf("交换前: a=%d; b=%d", a, b);
	a = a^b;
	b = a^b;
	a = a^b;
	printf("交换后: a=%d; b=%d", a, b);
	system("pause");
	return 0;
}

10.求最大公因数 最小公倍数 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
int main() {
	printf("输入两个数:");
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	if (a < b)
	{
		int temp = a;
		a = b;
		b = temp;
	}
	int temp = 1;
	while (temp != 0)
	{
		temp = a % b;
		a = b;
		b = temp;
	}
	printf("%d", a);
	system("pause");
	return 0;
}

11.在屏幕上输出以下图案:

    *    

   ***   

  *****

   ***

    *

int main() {
	int i = 0;
	int n = 0;
	scanf("%d", &n);//n为高的一半
	//  *
	// ***
	//*****
	// ***
	//  * 
	for (i = 0; i < n; i++)
	{
		int j;
		for (j = 0; j < n - i; j++)
		{
			printf(" ");
		}
		for (j = 0; j < i*2+1; j++) {
			printf("*");
		}
		printf("\n");
	}
	for (i = 0; i < n-1; i++)
	{
		for (int j = 0; j <= i+1; j++) {
			printf(" ");
		}
		for (int j = 0; j <(n-i-1)*2-1; j++) {
			printf("*");
		}
		printf("\n");
	}
	system("pause");
	return 0;
}

12.求出0~999之间的所有水仙花数并输出 水仙花数是指一个三位数其各位上数字的立方和等于该数本身

如153 = 1+5+3则153是水仙花数

int main() {
	int i;
	for (i = 0; i < 999; i++)
	{
		int count = 1;
	    //1.判断几位数
		int temp = i;
		while (temp>9)
		{
			count++;
			temp /= 10;
		}
		int sum = 0;
		//2.计算是不是水仙花数
		temp = i;
		while (temp)
		{
			sum += pow(temp % 10, count);
			temp = temp / 10;
		}
		if (i == sum)
		{
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

13.求Sn = a+aa+aaa+aaaa+aaaaa的前五项之和,其中a是一个数字例如 2+22+222+2222+22222

int main() {
	int a = 0;
	int n = 0;
	scanf("%d %d", &a, &n);
	int sum = 0;
	int temp = 0;
	for (int i = 0; i < n; i++)
	{
		
		temp = temp * 10 + a;
		sum += temp;
	}
	printf("%d", sum);
	system("pause");
	return 0;
}

14.编写一个程序,他从标准输入读取C源代码,并验证所有花括号是否成对出现

int main() {
	
	char ch = 0;
	int count = 0;
	while ((ch = getchar())!= EOF)//EOF  end of file
	{
		if (ch=='{')
		{
			count++;
		}
		else if(ch == '}'&&count==0)
		{
			count--;
			break;
		}
		else if(ch=='}')
		{
			count--;
		}
	}
	if (count==0)
	{
		printf("匹配\n");
	}
	else
	{
		printf("不匹配\n");
	}
	system("pause");
	return 0;
}

15.计算n的阶乘

int main() {
	int n = 0;
	scanf("%d", &n);
	int i;
	int temp = 1;
	for (i = 1; i <= n; i++)
	{
		temp *= i;
	}
	printf("%d", temp);
	system("pause");
	return 0;
}

16.计算1! + 2! + 3!...+10!

int main() {
	int n = 0;
	//scanf("%d", &n);
	int sum = 0;
	int temp = 1;
	for (int i = 1; i <= 3; i++)
	{
		temp *= i;
		sum += temp;
	}
	printf("%d", sum);
	system("pause");
	return 0;
}

17.在一个有序数组中查找具体的某个数字n

编写 int binsearch(int x,int v[],int n);

功能:在v[0]<=v[1]<=[v2]<=...<=v[n-1]的数组中查找x

int binSearch(int arr[], int x, int sz) {
	int left = 0;
	int right = sz-1;
	int mid = 0;
	while (left<=right)
	{
		mid = left + (right-left) / 2;
		if (arr[mid]>x)
		{
			right = mid - 1;
		}
		else if(arr[mid]<x)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int x = 0;
	scanf("%d", &x);
	int temp = binSearch(arr, x, sz);
	if (-1 == temp)
	{
		printf("找不到");
	}
	else
	{
		printf("找到了:%d", temp);
	}
	system("pause");
	return 0;
	/*int x = 5;
	int left = 0;
	int right = sz - 1;
	int mid = 0;
	while (left <= right)
	{
		mid = left + (right - left) / 2;
		if (arr[mid]>x)
		{
			right = mid - 1;
		}
		else if (arr[mid]<x)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了:下标是:%d", mid);
			break;
		}
	}
	if (left>right)
	{
		printf("找不到");
	}*/

}

18.完成猜数字游戏。

#include<stdlib.h>
void menu() {
	printf("********************\n");
	printf("*******猜数字*******\n");
	printf("***1.play  0.exit***\n");
	printf("********************\n");
}
void game() {
	int input = 0;
	int num = rand() % 100 + 1;
	printf("%d\n", num);
	while (1)
	{
		printf("请猜数字:");
		scanf("%d", &input);
		if (input>num)
		{
			printf("猜大了\n");
		}
		else if(input<num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("true\n");
			break;
		}
	}
}
int main() {
	srand(time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:》");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
	return 0;
}

19.编写一个程序,可以一直接收键盘字符,如果是小写字母就输出对应的大写字母 如果是大写字母就输出对应的小写字母

int main() {
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch >= 'A'&&ch <= 'Z')
		{
			putchar(ch + ('a' - 'A'));
		}
		if (ch >= 'a'&&ch <= 'z')
		{
			putchar(ch - ('a' - 'A'));
		}
	}
	system("pause");
	return 0;
}

20.编写代码实现:求一个整数存储在内存中的二进制中1的个数。

int main() {
	int num = -1;
	int i = 0;
	int count = 0;
	//for (i = 0; i < 32; i++)
	//{
	//	if (((num >> i) & 1) == 1) {
	//		count++;
	//	}
	//}
	// 13    12
	//1101 & 1100 1100
	//            1011   1000 
	//
	while (num)
	{
		num = num&(num - 1);
		count++;
	}
	printf("%d ", count);
	system("pause");
	return 0;
}

21.编写代码实现:将00000000 00000000 00000000 00001011中第一个1变为0;

int main() {
	int n = 11;//1011
	printf("%d", n&(n - 1));
	system("pause");
	return 0;
}

22.获取一个数二进制序列中的所有偶数位和奇数位,分别输出二进制序列

int main() {
	int n = 11;
	// 00000000 00000000 00000000 00001011
	//奇数位
	for (int i = 30; i >= 0; i-=2)
	{
		printf("%d", (n >> i) & 1);
	}
	//偶数位
	printf("\n");
	for (int i = 31; i >= 0; i-=2)
	{
		printf("%d", (n >> i) & 1);
	}
	system("pause");
	return 0;
}

23.输出一个整数的每一位

int print(int n) {
	if (n>9)
	{
		print(n/10);
	}
	printf("%d", n % 10);
}
int main() {
	int n = 1234;
	print(1234);
	system("pause");
	return 0;
}

24.编程实现:两个int(32)位 整数m和n的二进制表达式中有多少个位不同::如1997 2299 输出7

int count_one_bit(int n) {
	int count = 0;
	while (n)
	{
		count++;
		n = n&(n - 1);
	}
	return count;
}
int main() {
	int n = 2299;
	int m = 1999;
	int temp = n^m;
	printf("%d", count_one_bit(temp));
	system("pause");
	return 0;
}

25.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9输出9*9口诀表,输出12,输出12*12的乘法口诀表

void print(int n) {
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			printf("%d*%d=%2d ", j, i, i*j);
		}
		printf("\n");
	}
}
int main() {
	int n = 0;
	scanf("%d", &n);
	print(n);
	system("pause");
	return 0;
}

26.使用函数实现两个数的交换

void swap(int *a, int *b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main() {
	int a = 10;
	int b = 20;
	swap(&a, &b);
	printf("a = %d; b = %d;", a, b);
	system("pasue");
	return 0;
}

27.实现一个函数判断year是不是润年

int isLeapyear(int year) {
	if (((year%4==0)&&(year%100!=0))||(year%400==0))
	{
		return 1;
	}
	return 2;
}
int main() {
	int year = 0;
	printf("请输入一个年份:");
	scanf("%d", &year);
	if (1 == isLeapyear(year))
	{
		printf("true");
	}
	else
	{
		printf("false");
	}
	system("pause");
	return 0;
}

28创建一个数组   实现函数init() 初始化数组       实现empty()清空数组    实现reverse()函数完成数组的逆置。 

    要求:自己设计函数的参数,返回值

    

void init(int arr[], int sz, int temp) {
	for (int i = 0; i < sz; i++)
	{
		arr[i] = temp;
	}
}
void empty(int arr[],int sz) {
	for (int i = 0; i < sz; i++)
	{
		arr[i] = 0;
	}
}
int print(int arr[],int sz) {
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return sz;
}
void reserve(int arr[], int sz) {
	int left = 0;
	int right = sz - 1;
	while (left<right)
	{
		int temp = arr[left];
		arr[left] = arr[right];
		arr[right] = temp;
		left++;
		right--;
	}
}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//init(arr,sz,1);
	reserve(arr, sz);
	print(arr, sz);
	system("pause");
	return 0;
}

29.实现一个函数,判断一个数是不是素数

int isPrime(int num) {
	for (int i = 2; i < sqrt(num); i++)
	{
		if (num%i==0)
		{
			return 0;
		}
		return 1;
	}
}
int main() {
	int num = 0;
	scanf("%d", &num);
	int ret = isPrime(num);
	if (1==ret)
	{
		printf("true");
	}
	else
	{
		printf("false");
	}
	system("pause");
	return 0;
}

30.编程实现strcpy

char* mystrcpy(char *dest,const char *scr) {
	char *temp = dest;
	assert(dest != NULL);
	assert(scr != NULL);
	while (*dest++=*scr++)
	{
		;
	}
	return temp;
}
int main() {
	char arr[] = { 0 };
	
	mystrcpy(arr, "abcdef");
	system("pause");
	return 0;
}

31.求100~200之间的素数

int main() {
	//求100~200之间的素数
	for (int i = 101; i <= 200; i+=2)
	{
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i%j==0)
			{
				break;
			}
		}
		if (j > sqrt(i))
		{
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

32.打印9*9乘法表

int main() {
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= i; j++) {
			printf("%d * %d = %2d ", i, j, i*j);
		}
		printf("\n");
	}
	system("pause");
	return 0;
}

33.输出1000~2000之间的闰年

int main() {
	for (int i = 1000; i <= 2000; i++)
	{
		if ((i%4==0&&i%100!=0)||(i%400==0))
		{
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_33552377/article/details/83026079