鹏哥c语言基础刷题130道笔记

(一)、简单知识总结

(1)对十进制整数进行八进制和十六进制的输

(加入前导的0或者0x   前面添加#来控制)

   Printf(“0%o 0x%X”,1234,1234);

   Printf(“%#o %#ox”,1234,1234);

(2)C语言标准规定:

  sizeof(long long)>=sizeof(long)>=sizeof(int)

  变量定义在当前代码块的最前面

(3)十六进制打印域宽15的十进制整数

   Printf(“15d”,0xABCDEF);

(4)printf的返回值:打印在屏幕上字符的个数         

int ret=printf(“hehe”);

 printf(“%d”,ret);  4

 或者printf(“\n%d\n”,printf(“hello world”));//先调用内部的printf,再调用外部的printf
 输出hello world然后输出11

   printf(“%d”,printf(“%d”,printf(“%d”,43)));     输出4321

(5)小数在内存中可能不能精确保存,需要四舍五入。

(6)打印ascii码值对应的字符

   Printf(“%c”,73);

      输出字符的ascii码值           

Char ch=0;
Ch=getchar();
Printf(“%d\n”,ch);

(7)通过scanf函数的%m格式控制输入的域宽,输入数据域宽,按照此域宽,截取所需的数据,通过printf的%0格式控制符,输出数值时指定左边不使用的空位置自动填零

题目: 输入20130225

输出 year=2013

Month=02

Day=25

int month=0, year=0, day=0;

    scanf_s("%4d%2d%2d", &year, &month, &day);

    printf("year=%4d\n", year);

    printf("month=%02d\n", month);

    printf("day=%02d", day);

(8)题目:在不使用累计乘法的基础上,通过移位运算<<实现2的n次方  输入2 10   输出4 1024

 Int a=1;  a<<1;//a移动的二进制的位

  (a的二进制位时00000000 00000000 00000000 00000001)

 向左移动1位(00000000 00000000 00000000 00000010)

 变成了2 )

 a<<2(变成了4)

int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)//读入多个数scanf会返回读取的数字的个数,当遇到错误会返回EOF
    {
        printf("%d\n", 1 << n);
    }
    return 0;}

(9)

 1.要\得到一个浮点数,必须\俩边至少有一个浮点数

 2.double的printf用f,scanf用lf

 3.给定一个浮点数,要求得到该浮点数的个位数

   double b=0;

   scanf(“lf’,b);

   printf(“%d”,(int)b%10);

  4.scanf在输入的时候%x %o是分别针对十六进制和八进制的

  5. scanf(“%d,%d”,&a,&b);

  scanf中只要一个““,输入的时候打逗号

      而scanf中没有逗号的时候直接空格或者回车或者tab都行)

(10)三个数字比大小


 {int max=n1>n2?n1:n2;
  max=max>n3?max:n3;}

{int i=0,max=a[0],a[i];
For(i=0;i<n;i++)
  if (a[i]>max)
    Max=a[i];}

(11)多组输入

 while(scanf("%d",&a)!=EOF)) 

while(~scanf("%d",&a)!=EOF)

while(scanf(“ %c”,&ch)!=EOF)//在%c前面加上空格会消化前面所有的空白字符,然后读取一个字符

while(scanf("%c\n",&a))//在%c后面加上一个\n,其实在输入的时候会消除这个\n

(12)判断俩个数组是否相等


if(a[i][j]!=b[i][j]) 
{
 printf(“N0”);
return 0;}

(二)具体题目的实现

    1.反向输出四位整数

#include<stdio.h>

int main()
{
	int n=0;
	scanf("%d", &n);
	while (n)
	{
		printf("%d", n%10);
		n = n / 10;
	}
	return 0;	
}

2. 多组输入大写字母转换为小写字母

#define _CRT_SECURE_NO_WARNINGS 1
  int main()
{
	char ch = 0;//getchar()读取字符  putchar()输出字符
	while (ch = getchar() != EOF) //EOF==end of file
	{
		putchar(ch + 32);
		printf("\n");//或者printf(“%c”,ch+32);
		getchar();//读入\n

	}
	return 0; }

3. 判断字母大小写:

int main()
{
	int ch = 0;//getchar返回的是整型
	while ((ch = getchar() )!= EOF)
	{
		if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
		{
			printf("yes\n");
		}
		else
			printf("no\n");
		getchar();//处理\n
		
	}
}

(多组输入时要注意敲了大写字母后,回车也是字母,所以getchar也会吸收该字母,输出*)

 #include<ctype.h>

 Isalpha-专门用来判断一个字符是不是字母的(是字母返回非0的值,不是字母的返回0)

While(isalphf(ch))

Isupper 判断大写字母

Islower 判断小写字母

Toupper 把小写字母转成大写

Tolower 把大写字母转成小写

4.变种水仙花(5位的):把任意的数字从中拆成俩部分 如655可以拆成(6,55)和(65,5) 655=6*55+65*5

int main()
{
    int n;
    scanf("%d", &n);

    int i = 0;
    for (i = 10000; i <= 99999; i++)
    {
        int j = 0;
        int sum = 0;
        for(j = 10; j <= 10000; j += 10)
        {
        sum += (i / j) * (i % j);
         }
    }
    return 0;
}

5.统计字符串中的A和B的个数 

 int main()
 {
  char buf[100]={0};
  gets(buf);//获取一行字符串,放到一个空间内
  int count_a=0;
  int count_b=0;
  int i=0;

 while(buf[i]!=’0’)
 {
  If(buf[i]==’A’); count_a++;
  If(buf[i]==’B’);count_b++;
   i++;
}

printf("%d %d",count_a,count_b);

6.看字符串中的A多还是B多 

int main(void)
{
	int ch = 0;
	int flag = 0;
	while ((ch = getchar()) !='0' && ch != EOF)
	{
		if (ch == 'A')
			flag++;
		if (ch == 'B')
			flag--;
	}
	if (flag > 0) 
           printf("A");
	else if (flag < 0)
           printf("B");

	return 0;
}

7. 判断输入的字母是元音还是辅音

{
	char ch = 0;
	char arr[20] = "abcdefABCDEF";
	int i = 0;
	while (ch = getchar() != "EOF")
		for (i = 0; i < 10; i++) {
			if (ch == arr[i])
			{
				printf("yes");
				break;
			}
		}
	getchar();//处理/n
}

库函数:#inlcude<string.h>

while (ch = getchar() != "EOF")

    if(strchr(arr,ch)

    printf(“yes’);

strchr判断ch是否在字符串中出现,出现返回arr字符串中的地址,没有则返回空指针

9.看看输入的用户名和密码一样吗

int main()
{

	char name[100];
	char passward[100];

	while (~scanf("%s %s", name, passward))
	{
		if (strcmp(name, "admin") && strcmp(passward, "admin") == 0)
			printf("yes");
	}
}

10.输出1--2019中间含9的数字的个数

int main()
{
	int i = 0;
	int count = 0;
	for (i = 0; i <= 2019; i++)
	{
		int m = i;
		while (m)
		{
			if (m % 10 == 9)
			{
				count++;
				break;
			}
			m /= 10;
		}
	}
	printf("%d", count);
}

11. 输出奇数和偶数的个数

int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 == 1)
	{
		printf("奇数%d 偶数%d", n / 2 + 1, n / 2);
	}
	else printf("%d %d", n / 2, n / 2);
}

12. 输入n*m的矩阵,计算其中大于0的元素之和

/int main()
//{
//	int n = 0;
//	int m = 0;
//	int num = 0;
//	int sum = 0;
//	scanf("%d %d", &n, &m);
//
// 
//	int i = 0, j = 0;
//	for(i=0;i<n;i++)
//		for (j = 0; j < m; j++)
//		{
//			scanf("%d", &num);
//			if (num > 0) sum += num;
//		}
//     printf("%d",sum);
//}//

13.倒序输出数组元素

//int main()
//{
//	int a[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%d ", a[i]);
//	}

14、有序序列的判断

int main()
//{
//	int n;
//	scanf("%d", &n);
//	int a[20] = { 0 }, i = 0;
//
//	int flag1 = 0;//表示升序
//	int flag2 = 0;//表示降序
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &a[i]);
//		if (i > 0)
//		{
//			if (a[i] > a[i + 1]) flag1 = 1;
//			else flag2 = 1;
//		}
//	}
//
//	if (flag1 + flag2 == 1) printf("sorted");
//
//	return 0;
//}

15、 序列中删除指定的数字

//
int main()
{
	int n;
	scanf("%d", &n);
	int i = 0, a[50],j=0;//i遍历数组,j存储数组的位置
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}//读取n个数字

	int m = 0;
	scanf("%d", &m);//读入要删除的数字

	for (i = 0; i < n; i++)
	{
		if (a[i] != m)
		{
			a[j++] = a[i];
		}
	}//此时的j就是删除元素后的数据个数

	for (i = 0; i <j; i++)
	{
		printf("%d ", a[i]);
	}





	return 0;
}

16、 有序序列的合并

//
int main()
{
	int n = 0;
	int m = 0;
	int k = 0;
	int arr1[10] = {0};
	int arr2[10] = {0};
	int arr3[20] = { 0 };
	int i = 0; int j = 0;
	scanf("%d %d", &n, &m);


	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}

	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}




	while (i < n && j < m)
	{
		
		if (arr1[i] < arr2[j])
		{
			arr3[k++] = arr1[i++];
		}
		else {
			arr3[k++] = arr2[j++];
		}
	}



	if (i == n)
	{
		for (; j < m; j++)
		{
			arr3[k++] = arr2[j];
		}
	}
	else
	{
		for (; j < n; j++)
		{
			arr3[k++] = arr1[i];
		}
	}



	for (i = 0; i < k; i++)
	{
		printf("%d", arr3[i]);
	}
	return 0;
}

16、数组之中找最大元素的上标和下标


//int main()
//{
//	int i = 0, j = 0;
//	int m = 0, n = 0;
//	int x = 0, y = 0;
//	scanf("%d,%d", &n, &m);
//	int num = 0, max = 0;
//
//	for (i = 0; i < m; i++)
//		for(j=0;j<n;j++)
//	{
//		scanf("%d", &num);
//		if (num > max)
//		{
//			max = num;
//			x = i;
//			y = j;
//
//		}
//	}
//	printf("%d %d", x, y);
//}

//if (i > j) {
//	if (a[i][j] != 0)
//	{
//		printf("no");
//	}

 17矩阵倒置

//for(i=0;i<n;i++)
//	for (j = 0; j < m; j++)
//	{
//		scanf("%d", &a[i][j]);
//	}
//for (i = 0; i < m; i++)
//{
//	for (j = 0; j < n; j++)
//	{
//		printf("%d", arr[j][i]);
//	}
//	printf("\n");
}

18、一元二次方程的根 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main(void)
{
	double a, b, c;
	while (~scanf("%lf %lf %lf", &a, &b, &c))
	{
		if (a == 0) printf("not quadratic question");
		else {
			double p= b * b - 4 * a * c;
			if (p == 0.0)
			{
				printf("x1=x2=%.2lf\n", (-b) / (2 * a));
			}
			else if (p > 0.0)
			{
				printf("x1=%.2lf;x2=%.2lf", (-b - sqrt(p)) / (2 * a), (-b + sqrt(p)) / (2 * a));
			}
			else if(p<0.0){
				printf("有俩个虚根");

		}
	}


	return 0;
}

19、求字符串长度 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int a[10], i;
	time_t t;//time_t从1970年存储到现在一共走了多少秒
	srand((unsigned)time(&t));//time指的是返回某一个特定时间的小数值
	for (i = 0; i < 10; i++)
		a[i] = rand() % 1000;
	for(i=0;i<10;i++)
		printf(" a[%d] =% d\n",i,a[i]);
}

上一篇:用c语言实现杨辉三角(等腰三角形形状)打印


下一篇:7-1 报数 (10 分)输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数.......