c语言刷题难点总结

关键字详解

关键字详解链接: link

用户自定义标识符

c语言的用户自定义标识符只能由字母、数字、下划线3种字符组成,开头不能是数字。

整型常量

0开头为8进制不能出现超过8的数字
0x或0X为16进制只能出现1-9以及a-f
其余则为10进制

浮点型常量

浮点型中小数点前面或后面的0可以省略,但是不能只有小数点。
e为阶码
字母e或E之前必须要有数字,且e或E后面的指数必须为整数

%e输出
例如123456.0输出为1.23e+005
1.23输出为1.23e+00

转义字符

转义字符字符值
\‘一个单引号
\“一个双引号
\?一个问号
\\一个\ 转义后不能继续转义
\a警告(alert)
\b退格
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\f换页
\o或\oo或\ooo o代表数字与8进制对应的ASCII字符
\xh h代表数字可以是多个与16进制对应的ASCII字符

‘\012’,‘\64’是正确的8进制转义
’\x12’、’\x1B’也是正确的16进制转义
未出现在以上的转义均为错误的转义

逗号运算符

main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
231

(a=3*5,a*4)的值是60
逗号运算符的优先级别在所有运算符中最低。
从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值
只有赋值运算符(a=3*5)、自增自减运算符(x++)会改变大小。

算数运算符

两个同号整数相除时结果为正整数,如5/3-5/-3的结果值为1。
两个异号整数相除时结果为负整数,即-5/-3=-15/-3=-1,
但如果参加运算的两个数中有一个数为实数时结果为实数。
对于求余(%)运算,运算结果与第一个数的符号相同。

scanf总结

1、scanf只能限定宽度不允许限定精度
2、scanf不允许添加\n换行符
3、scanf不允许能忘记添加取地址符&
4、scanf的普通字符一定要原样输入

scanf输入时空格算一个字符
在scanf()函数中,添加了*的部分对应的输入会被忽略,不会赋给参数。

printf总结

数据格式小于变量长度
如printf直接用 %3d 打印 n ,输出为 12345 。
如printf直接用 %3s 打印数组arr,输出为 Hello 。
就是说,在printf中,当变量长度比数据格式大时,printf与用"%d"数据格式输入完全相同,即原样输出。
%5d表示输出5位整型数,不够5位右对齐,左补空格。
而在"%-3d"中,-号表示对齐方式,即左对齐,右补空格。如果是+号或者不写,表示右对齐。
printf既能限定宽度又能限定小数位数(宽度要包括小数点)
printf(“%#o”,a);中的#代表按原进制输出
%08ld中0的意思,如果不足8位,左面用0补充。靠左不补靠右补。
%i 则可以匹配八进制、十进制、十六进制表示的 整数
%u无符号整数
%l可以加载d十进制o八进制x十六进制u无符号整数前面
%4.3打印时3.1415结果为3.142结果四舍五入

#include <stdio.h> 
void main() 
{ 
       int a=5,b=2;
       printf("%d %d\n",b=a+1,a=a+1);
}

输出结果是:7 6
而不是:6 6

这是因为printf函数的计算是从右向左进行的。

条件表达式

main()
{
int k=4,a=3,b=2,c=1;
printf(“%d”,k<a?k:c<b?c:a);
}
答案:1
详解:条件表达式是从右向左运算,所以在本例中先计算表达式c<b?c:a的值,把各数值代入此表达式的值为1。再计算表达式k<a?k:1的值,因为k<a为假,所以整个表达式的值为1。

指针

*p++
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(p++),又因为后置++是先使用再自加,所以先取值 *p,然后再让p加1.
*++p
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(++p),也就是先让指针p加1,再取此时指针p的值。
++*p
++和 (指针访问运算符)优先级相同,根据从右往左的结合性,因此先取p的值p,然后再将值 *p加1。

字符数组初始化正确方法

char s[20]={“C Language”};
char s[20] = “C Language”;
下列语句正确的是(D)
A.char s[20];s={“C Language”}; B.char s[20];s=“C Language”;
C.char *s;s={“C Language” }; D. char *s;s=“C Language”;

数学函数

cos() 函数

double cos(double x)

返回弧度角 x 的余弦。
头文件:math.h
 double result = cos(x);  

sqrt() 函数

double sqrt(double x)

 返回 x 的平方根。。
头文件:math.h
 double result = sqrt(x);  

pow() 函数

double pow(double x,double y);

用来求 x 的 y 次方的值。
头文件:math.h
 double result = pow(x, y); 

exp() 函数

double exp(double x);


exp() 是一个指数函数,用来求 e(底数)的 x 次幂(次方)的值。
头文件:math.h
 double result = exp(x);  //求双精度数x的指数函数值

fabs() 函数

double fabs(double x);

参数 x 是求绝对值的数。
头文件:math.h
 double result = fabs(x);  //求x的绝对值

log() 函数

double log(double x)

返回 x 的自然对数(基数为 e 的对数)
头文件:math.h
 double result = log(x);  //求x的自然对数

log10()函数

double log10(double x)


该函数返回 x 的常用对数,x 的值大于 0。
头文件:math.h
 double result = log10(x);  //求x的自然对数
 

sin() 函数

double sin(double x)

该函数返回 x 的正弦。
头文件:math.h
 double result = sin(x*3.14159265/180.0);  //求角度的正弦值

字符函数

isalnum

void isalnum(int c)

检查所传的字符是否是字母和数字。
头文件:ctype.h
 int var1 = 'd';
 int var2 = '2';
   if( isalnum(var1) )
   {
      printf("var1 = |%c| 是字母数字\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是字母数字\n", var1 );
   }
   if( isalnum(var2) )
   {
      printf("var2 = |%c| 是字母数字\n", var2 );
   }
   else
   {
      printf("var2 = |%c| 不是字母数字\n", var2 );
   }

isalpha

void isalpha(int c)

检查所传的字符是否是字母。
头文件:ctype.h
 int var1 = 'd';
   if( isalpha(var1) )
   {
      printf("var1 = |%c| 是字母\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是字母\n", var1 );
   }

isdigit

int isdigit(int c)

检查所传的字符是否是十进制数字字符。
头文件:ctype.h
 int var1 = '1';
   if( isdigit(var1) )
   {
      printf("var1 = |%c| 是数字\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是数字\n", var1 );
   }

islower

int islower(int c)

检查所传的字符是否是小写字母。
头文件:ctype.h
 int var1 = 'a';
   if( islower(var1) )
   {
      printf("var1 = |%c| 是小写字母\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是小写字母\n", var1 );
   }

isupper

int isupper(int c)

检查所传的字符是否是大写字母。
头文件:ctype.h
 int var1 = 'A';
   if( isupper(var1) )
   {
      printf("var1 = |%c| 是大写字母\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是大写字母\n", var1 );
   }

tolower

int tolower(int c)

把给定的字母转换为小写字母。
头文件:ctype.h
#include <stdio.h>
#include <ctype.h>
 
int main()
{
   int i = 0;
   char c;
   char str[] = "RUNOOB";
 
   while( str[i] ) 
   {
      putchar(tolower(str[i]));
      i++;
   }
 
   return(0);
}

toupper

int toupper(int c)

把小写字母转换为大写字母。
头文件:ctype.h
#include <stdio.h>
#include <ctype.h>

int main()
{
   int i = 0;
   char c;
   char str[] = "runoob";
   
   while(str[i])
   {
      putchar (toupper(str[i]));
      i++;
   }
   
  return(0);
}

字符串函数

strcpy

char *strcpy(char *dest, const char *src)

复制会覆盖原字符串的所有内容
头文件:string.h
 把 src 所指向的字符串复制到 dest。
#include <stdio.h>
#include <string.h>
 
int main ()
{
  char str1[]="Sample string";
  char str2[40];
  char str3[40];
  strcpy (str2,str1);
  strcpy (str3,"copy successful");
  printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
  return 0;
}

strcmp

int strncmp(const char *str1, const char *str2, size_t n)

头文件:string.h
 把 str1 和 str2 进行比较,最多比较前 n 个字节。
 如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);

strcat

char *strcat(char *dest, const char *src)

追加不会覆盖考点与strcpy的区别
头文件:string.h
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
#include <stdio.h>
#include <string.h>
 
int main ()
{
   char src[50], dest[50];
 
   strcpy(src,  "This is source");
   strcpy(dest, "This is destination");
 
   strcat(dest, src);
 
   printf("最终的目标字符串: |%s|", dest);
   
   return(0);
}

文件操作

#include <stdio.h>
int main ()
{
  FILE * pFile;
  //打开文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    fputs ("fopen example",pFile);
    //关闭文件
    fclose (pFile);
 }
  return 0;
}

在这里插入图片描述
在这里插入图片描述
fread(地址,读写的字节数,读写多少个数据项,fp指针类型);
fwrite(地址,读写的字节数,读写多少个数据项,fp指针类型);
rewind(fp指针类型);使文件位置指向开头
fseek(fp指针类型,离文件开头多少字节,文件开始位置);(0文件开始位置1文件当前位置2文件末尾位置)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值