一、判断题
1.在所有的关系运算符(>=、>、= =、!=、<=、<)中,优先级最低的运算符是“= =、!=”。
【思想】:
运算符优先级:
其中 一元运算符中+ -为正或负;
^(异或)
1.可以交换两个数的值。
2. 两个值不相同,则异或结果为真。反之,为假。
(0异或0=0,1异或0=1,0异或1=1,1异或1=0)
||(或)
(0或0=0,1或0=1,0或1=1,1或1=0)
|与|| &与&&的区别:结果无区别 但双的话计算步骤少;
2.八进制和十六进制如何表示
【思想】8进制前面有0 十六进制前面有0X
在转义字符中 8进制\ 十六进制\x
3.switch语句中default时必须的吗
【思想】否
二、选择题
1.以下正确的字符常量是______。
A.’\412’
B.255
C.’\08’
D.’'
自己疑问:什么是正确的字符常量
【思想】
字符常量是括在单引号中,例如,‘x’ 可以存储在 char 类型的简单变量中。
注意:
1.字符常量只能用单引号,双引号则代表是字符串
2.单引号内只能包含一个字符,多个字符时,出最后一个外前面会自动失效
3.字符常量的值,就是它在ASCII编码表中的值。是个从0-255之间的整数。因此字符常量可以作为整型数据来进行运算。
4.单引号括起来的字符包括英文字母大、小写字符各26个、数字字符10个,以及空白符(空格符、制表符、换行符),标点和特殊符号(键盘上的共30个)
如 ‘Y’+32的值为121,‘7’+‘6’的值为109。
【补充】在 C 程序中,9ab是非法的用户标识符
自己:F
有效用户标识符:不能以数字开头!
2.对下列代码的描述:
#include "stdio.h"
int main(){
long num=1;
while(num++ > 0) for(long i=num; i >=0; i--)printf("i :=\n \t %ld \n" , i);
return 0;
}
正确的是:
A.程序有编译错误,不能执行
B.循环条件永为真,循环无限次,程序根本停不下来,打印输出无限行
C.循环有限次,程序正常结束,打印输出有限行
D.程序运行过程必定会出错(崩溃),结果打印输出有限行
自己:B
正确:D
【思想】
1.你在死循环中包含了break语句或return,比如if满足某个条件就执行break或者return。
2.你在循环中或调用的函数中,执行了exit函数,直接结束了整个程序。
3.你的代码有错,比如使用野指针,越界访问数组等不可控行为。
4.内存不足,程序终止,比如循环malloc申请内存,但没有释放,又或者调用递归函数造成内存溢出。**==
3.下列语句中, 可输出“☼”字符(ASCII 码为 15)。
A) putchar(‘☼’);
B) putchar(15);
C) putchar(’\17’);
D) printf("%c", ‘\Xf’);
自己:BCD
正确:BC
【错因】:‘\x’才为16进制转义符 '\X’不是
4.下列程序运行后的输出结果是
int a=10, b=20,c;
c=(a%b<1)‖(a/b>1);
printf("%d %d %d\n", a, b, c);
【思想】:小的数余大的数,结果为小的数!
三、填空题
1.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为
#include <stdio.h>
int main(void)
{
int c1=0,c2=0;
char ch;
while((ch=getchar()) !='#')
switch(ch)
{ case 'a':
case 'h':c1++;
default:c2++;
}
printf("c1=%d,c2=%d\n",c1,c2);
return 0;
}
正确:c1=2 c2=5
【思想】
1.switch并不是按顺序来的 哪个符合就执行哪个
2.getchar()函数只能接收一个字符,其函数值就是从输入设备获取到的字符。
【难点】
1.这题为什么可以输入一大串还读出一大串,输入又不一定全读了,这题输入多个 由于是个循环所以一个一个判断
2.getchar可以读取哪些字符:除\n其余全部可以
2.在计算机系统中,符号整数采用 ___
来表示和存储。
正确:补码
补充:char用什么储存:ASCII码 所以字符型与数值型存储不一样
**【难点】**什么是某某码
计算机系统存储有符号整数
下列语句中,可输出“☼”字符(ASCII 码为 15)
A) putchar('☼');
B) putchar(15);
C) putchar('\17');
D) printf("%c", '\Xf');
自己难点:
1.char定义后 值为 什么?
ASCII码 且定义时要用数字来定义,若不用数字那就是变量
2.为什么int 和char 分别定义同一个值后putchar()
输出一样
因为定义的都是相同的数字,故输出一样;
3.putchar与printf
**如printf("%c",‘A’) 相当于 putchar(‘A’) **
注意,无论哪个要输出一个字符的时候 用的是对应的ASCII码
putchar(c )中c可以是字符常量 整形常量 字符变量或整形变量(其值在字符的ASCII代码范围内)
putchar(c )的扩展:
{1.putchar输出换行(‘\n’)
2.putchar输出转义字符(‘\101’)=A(八进制)八进制只用斜杠就可以了!
3.输出一个单撇号 (‘\'')}
4.分析实际问题
#include <stdio.h>
int main ()
{
int a;
scanf("%c",&a);
putchar(a);
printf("\n");
printf("%c\n",a);
printf("%d",a);
}
此题自己【难点】:
int a后 scanf的是%c 那么在内存中储存的是什么?
经过试验后 得出结论:
储存为%c 即ASCII码。(int与char相同的结果)
自己思考:char与int是整型 但char只能储存ASCII中的数字 int的范围大得多。
佐证:整型和字符型是互通的,他们是在内存中存储的本质是相同的,只是存储的范围不同而已,整型可以是2字节,4字节,8字节,而字符型只占1字节(8位)。
换做是float 则只有最后一步出结果 输字母出0
- 补充
字符'0':char c = '0'; 它的ASCII码实际上是48。内存中存放表示:00110000
字符'\0' : ASCII码为0,表示一个字符串结束的标志。这是转义字符。
整数0 :ASCII码为0,字符表示为空字符,NULL;数值表示为0;内存中表示为:00000000
四、程序填空题
5-1
语句填空:下列 for循环语句将输出:
0 1 2 0 1 2 0 1 2
for( i=1; i<=9; i++ ) printf("%2d",_ )
自己 :无思路
正确:(i-1)%3
【思想】:
1%3表示将1除以3,结果为0,余数为1,所以1%3等于1.
5-2
用数组来求fibonacci数列问题,打印前20项数列,每行打印4个数。
#include<stdio.h>
int main()
{
int i;
int f[20]={1,1};
for (i=2;i<20;i++)
f[i]=___;
for ( ___ ;i<20;i++)
{if( ___)printf("\n");
printf("%d ",f[i]);
}
return 0;
}
前提:fibonacci数列特点:从第三项起
每一项都是前两项的和
正确
1.f[i-1]+f[i-2]
2.i=0
3.i%4==0