错题集合
第六套 编程题
第七套 填空题
第八套 填空题(数组传参) 编程题(素数)
知识点
-
结构体定义
typedef struct S{ int g; }T;//T可用于定义结构体变量
-
注意static 定义的变量,只在第一次生效
static int i = 0;
-
比较两个字符串是否相等,相等>0,不相等<0
strcmp(s1,s2);
strcat() 连接 strcpy() 复制 strcmp() 比较是否相等 -
scanf与printf区别
scanf("%d\n",&p);//scanf函数,输入的是地址,如果是指针,则scanf("%d\n",p);
printf("%d\n",p);//输出变量名
-
数据库设计:
概念模式 全体用户公共数据视图 外模式 用户模式 内模式 物理模式 -
switch();//要注意 是否case中有break;
-
continue作用:跳出这次循环剩余语句,进行下一次循环
-
++pt->x;
->的运算优先级,高于++,所以相当于++(pt->x)
-
最高优先级运算符:
[] 数组名[] () (表达式) . 对象.成员名 -> 对象指针->成员名 -
改变形参影响实参
-
return
#include<stdio.h> int fun(int m) { m=5; return m; } int main() { int n=10; n=fun(n); printf("%d",n);//输出5 return 0; }
return的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入数组,然后将数组首地址返回给主调函数,较为麻烦。
-
全局变量
#include<stdio.h> int n=10; void fun1() { n=5; } void fun2() { int n=7; printf("%d",n);//输出7 } int main() { printf("%d",n);//输出10 fun1(); printf("%d",n);//输出5 fun2(); printf("%d",n);//输出5 return 0; }
虽然说全局变量没有了个数的限制,而且遇到函数中同名局部变量时,全局变量还不起作用(县官不如现管)。
但是毕竟大型工程并不是由一人编写的,一个地方全局变量的改动将会影响整个工程,所以尽量还是少用。
-
指针
指针是直接指向内存单元的:
#include<iostream> using namespace std; int main() { int m,n=10; m=n; cout<<&m<<" "<<&n;//输出0018FF44 0018FF40 int *p,*q; p=q=&n; cout<<q<<" "<<p;//输出0018FF40 0018FF40 return 0; }
变量m与变量n的地址不同,因此一方改变后互不影响;p,q均指向变量n,在内存在指向同一单元,一方改变互有影响。
变量m与变量n的地址不同,因此一方改变后互不影响;p,q均指向变量n,在内存在指向同一单元,一方改变互有影响。
#include<stdio.h> void fun(int *p) { *p=5; } int main() { int n=10; fun(&n); printf("%d",n);//输出5 return 0; }
-
引用
#include<stdio.h> void fun(int& m) { m=5; } int main() { int n=10; fun(n); printf("%d",n);//<span style="font-family: Arial, Helvetica, sans-serif;">输出5</span> return 0; }
引用是C++中的概念,其相当于为变量起了个别名。其在初始化时 必须赋值,且赋值后在程序中 不可更改,这两点和指针有明显的区别。
综上,推荐使用指针和引用将被调函数的数据返回给主调函数。
-
数组形参传入,实参改变 测试
#include "stdio.h" #define N 10 void TestArr(int *array[]) { array[0] = 100; } void main() { int Arr[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; TestArr(&Arr[0]); printf("%d\n",Arr[0]); }
测试表明:
传入:
TestArr(&Arr[0]);
TestArr(&Arr);
TestArr(Arr);
都可以改变实参传出:
TestArr(int *array[N])
TestArr(int *array[])
TestArr(int array[])
TestArr(int array[N])
都可以改变实参 -
数据库语言
数据库语言 具体功能例子 数据定义语言 创建数据库表、创建一个触发器 数据控制语言 授予用户访问权限 数据操作语言 增删改查 -
continue剩余语句不执行,结束当此循环,break跳出当前循环
void main() { int i = 0; for(; i < 3; i++) { if (i == 2) continue; printf("%d\n",i); } printf("finally:%d\n", i); }
执行结果为:0,1,finally :3,即continue本次循环结束时,i++仍然执行。
-
int (a)[N]为数组指针,可以传入二维数组;(*a)N中, N为列数。
否则,传入为a[][][] [N],*a[] [N]等也可;行数可为N,可为空;二维数组列数必须填入,一维数组列数默认为1。
fun(int (*a)[N], int *b){}; int x[2][N],y[N]; fun(x,y);