栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

期末到了,肝货来了:C语言一些常见小问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

期末到了,肝货来了:C语言一些常见小问题

1.标识符:由字母和下划线和数字组成(不包括空格)组成,只能由字母和下划线开头 。例如: (4zy),(4wj),(4zwj),(4zy 4wj) 都是错误的 。                                                                   

2.字符串常量所占的内存字节长度为字符中字节个数加1,因为字符串是以结尾,这是字符串结束的标志。                                                                                                                                

3.运算符的优先级:!> 算术运算符>关系运算符>&&>||>赋值运算符。同时记住:取余运算符只能用于两整数运算。                                                                                                                     

4.&&与||运算符易错警示:表达式1&&表达式2,只有表达式1的值不为0,才会进行表达式2的运算。    表达式1||表达式2,只有表达式1的值为0,才会进行表达式2的运算,也就是说表达式1的值为1时,不进行表达式2的运算。例如:int a=4,b=5,c=3,d=6,m=1,n=1;  (m=a>b)&&(n=c>d);    输出m和n,结果是m=0,n=1                                                                                                   

5.逗号运算符和表达式是我们特别要注意的。表达式1,表达式2  先求表达式1,再求表达式2,但整个逗号表达式的值是表达式2的值。例如:int a=2;  int c=(a*2,a+10),a*5;       输出a和c的值,a等于2,c等于10                                                                                                                       

6.强制类型转换格式:(类型)(表达式),只是创造一个中间类型转换,得到中间变量,强制转换后各自类型都不变。                                                                                                        

7.三种基本程序语句:顺序结构、选择结构、循环结构。还有一些学校喜欢考这个,给大家混个眼熟。                                                                                                                                           

8.选择语句,无非就是一些if 与else 的问题,比较简单,这里不进行赘述。还有一个switch语句,初学者容易把switch()括号里放入非整数,这是错误的,括号里面只能放整型变量,还有break一定记得加。给个例子,问题:输入年月,求该年月有多少天:                                                                                                                                                                    

#include

int main()
{
	int years,months,days,temp;
	printf("请输入年月日:");
	scanf("%d %d",&years,&months);
	
	if(years%400==0) 
	{
		temp=1;
	}
	if(years%4==0&&years%100!=0)   //能被400整除或者能被4整除而且不能被100整除的是闰年 29天 
	{
		temp=1;
	}
	
	else temp=0;
	
	switch(months)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:days=31;break;
		case 2:
			{
				if(temp=1) days=29;
				else days=28;
			}
			break;
		case 4:days=30;break;
		case 6:
		case 9:
		case 11:days=30;break;
		default:printf("month input error n");
	}
	printf("%d年%d月有%d天",years,months,days);
	return 0;
}

9.循环语句分为四个语句,while与do while与 for,知道do while 与while 区别是前面的必须要执行一次就行 。for循环则应用比较广泛,就讲一点吧,那个括号里的第三个表达式,可以放到for循环语句内部,可以自己定义条件。曾经博主就遇到这样一道题。                                                     

10.函数来讲讲递归调用吧,递归嘛就是“有递有归”,就是有去有回的意思,数学模型是数学归纳法,找出问题相同的解法,不断直接或间接调用自己函数体本身,最后找到结束条件,在该条件下能够直接返回值的表达式                                                                                                                                                             

11. 函数问题我们还需要注意的就是传参问题,理解实参和形参,传数组和指针怎么去传,讲讲传数组和指针吧,下面给两个比较简单的例子吧。问题一,输入五个数,并进行排序。问题二,输入两个数并交换。

#include
using namespace std;
#define N 5

void sort(int arry[],int n)  //这里用选择排序吧,接地气
{
	int temp;
	for(int i=0;iarry[j])
			{
				temp=j;
			}
		}
		if(temp!=i)
		{
			int t=arry[temp];
			arry[temp]=arry[i];
			arry[i]=t;
		}
	}
}

int main()
{
	int arry[N];
	for(int i=0;i 

12.对了,还有带参的宏定义。直接拿例子讲讲吧。针对此问题把式子列出来就行了,如下为sum=m+n+m+n*y,,搞定。

#include
using namespace std;
#define M(x) x+x

int main()
{
	int m=1,n=2,y=4;
	int sum=M(m+n)*y;
	cout< 

13.到数组了,记得数组名是数组首地址, 再注意输入数据就行了。                   

    int a[10];
	scanf("%d",a);
	scanf("%d",&a[0]);      //这两种方法等效 
	for(int i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
	 } 

14.字符串赋值,大家想想,为什么[]里的数字不同呢?大家可以在评论区讨论。          

    char ch[3]={'d','c','b'};
	char cj[4]={"dcb"};
	char ck[4]="dcb"; 

                                                                              

15.字符串输入,输出函数的使用,为什么要用这个呢?因为scanf遇到空格就会结束,所以可以使用他们来解决这个问题。   

    char ch[3];
	gets(ch);
	puts(ch);
    char cg[3]="ab";
    puts(cg);

                                                                                                                                       

16. 指针的话记得&与*的使用,来讲讲指针与数组   

    int arry[3]={2,3,4};
	int *p=arry;
	for(int i=0;i<3;i++)
    {
        printf("%dn",arry[i]);
		printf("%dn",*(p+i));  //等价
    }

                                                                                                                                    

17.讲下*p++与*(p++)是等价的,因为++与*的优先级相同,结合方向为自右向左。作用是:先得到p指向的变量的值,再使指针变量p的值加1。                                                                    

18.指针与二维数组:

    int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
	int (*p)[3]=a;
	int *q=a;
	//这两个应该怎么找a[1][[2]
	a[1][2]=*(*(p+1)+2);  //因为指针变量p是指向具有3个int型元素的一维数组
	a[1][2]=*(*(q+1*4)+2);  //对比一下就很好理解啦
	//公式: 
    a[i][j]=*(*(p+i)+j);
	a[i][j]=*(*(q+i*4)+j); 

19.讲下字符指针和字符数组区别:前者可改变指向不同的字符串,后者是用来保存数据的。

20.字符数组和整型数组的赋值不能这样做:

    char ch[5];
	ch="abcde";
	int a[5];
	a[5]={1,2,3,4,5};

暂且写到这里吧,后续会继续更新的。谢谢大家!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/690622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号