第一周:程序设计与C语言
1.1 计算机和编程语言随堂测验
1、计算机本身最擅长的能力是?
A、推理
B、想像
C、重复
D、分析
2、编程语言是和计算机交谈的语言
3、计算机(CPU)可以直接运行人类编写的程序
1.2 C语言随堂测验
1、关于C语言,以下说法错误的有:
A、C语言是和Unix操作系统一同发展起来的
B、C语言不能写图形界面的软件
C、C语言一般是编译执行的
D、C语言诞生于1970年代
2、轻量级的编程软件,如Geany+MinGW或Sublime Text+MinGW,与专门的IDE如Dev C++相比,什么功能没有了?(提示:上课没有直接讲,但是间接提到了)
A、单步调试
B、源代码编辑时的语法高亮
C、编译程序
D、运行程序
3、IDE的中文翻译是什么?
实训1:熟悉C语言
1、输入程序,编辑后执行,写出运行结果。 下面给出完整的源程序:#include “stdio.h” void main() { printf("****\n"); /*打印输出信息并回车换行*/ printf("\n"); /*回车换行*/ printf(" Hello World!\n"); /*打印输出信息并回车换行*/ printf("\n"); /*回车换行*/ printf("****\n"); /*打印输出信息并回车换行*/ }
2、编写一个简单的C语言程序完成如下功能: 用printf()函数输出:This is my first C program!
第二周:计算
2.1 变量随堂测验
1、以下哪些是有效的变量名?
A、main
B、4ever
C、monkey-king
D、__int
2、给定: int a,b; scanf("%d %d", &a, &b); 则以下哪些输入方式是正确的?
A、1 2
B、1,2
C、1(回车)2
D、1、2
3、给定: int a,b; 以下哪些scanf的使用是正确的?
A、scanf("%d", &a); scanf("%d", &b);
B、scanf("%d %d", &a, &b);
C、scanf("%d, %d", &a, &b);
D、scanf("%d %d", a, b);
4、给定以下代码段: int a,b=0; 则a的初始值是0
5、写出下式的运算结果: 10/3.0*3
6、写出下式的运算结果: 10/3*3.0
2.2 数据类型随堂测验
1、以下哪个字母不能在数字后面表示类型?
A、F
B、U
C、L
D、X
2、以下哪个数字的值最大?
A、10
B、010
C、0x10
D、10.0
3、以下哪个数字占据的空间最大?
A、32768
B、‘3’
C、32768.0
D、32768.0F
4、以下表达式的结果是: '1'+3
2.3 表达式随堂测验
1、写出以下代码执行后,t1和t2的值,以空格隔开: int a=14; int t1 = a++; int t2 = ++a;
2、写出以下表达式的结果,一个结果一行: 6 + 5 / 4 - 2 2 + 2 * (2 * 2 - 2) % 2 / 3 10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3 1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10
实训2:变量及数据类型
1、运行下面程序,写出运行结果,并分析过程原因。#include"stdio.h" main() { char x,y,z; x='a'; y=3+x; printf("%c\t%d\n",x,x); printf("%c\t%d\n",y,y); x=-28; z=98+x; printf("%c\t%d\n",x,x); printf("%c\t%d\n",z,z); }
2、运行下面程序,写出运行结果,并分析过程原因。#include"stdio.h" main() { char x,y; x='a'; y='B'; printf("%c \n",x-32); printf("%c \n",y+32); }
3、运行下面程序,写出运行结果,并分析过程原因。#include "stdio.h" main( ) { char c1='a',c2='b',c3='c',c4='\101',c5='\116'; printf("%c,%c\t%c\n",c1,c2,c3); printf("\t\b%c%c\n",c4,c5); }
4、运行下面程序,写出运行结果,并分析过程原因。 #include "stdio.h" main() { char x,y; /*第4行*/ x='a'; /*第5行*/ y='b'; /*第6行*/ printf("x=%c,y=%c\n",x,y); printf("x=%d,y=%d\n",x,y); } 并分析在下面三种情况下的运行结果: (1)直接运行上面的程序,写出运行结果。 (2)将程序第4行改成int x,y; 再运行程序,分析运行结果。 (3)将第5、6行分别改为: x=300;y=400; 再运行程序,分析运行结果产生的原因。 (4)将第5、6行分别改为:x=a;y=b; 再运行程序,分析程序产生错误的原因。
5、编程题:仿照上面的第2题,将字母S、d实现大小写转换。如:将‘S’转换成‘s’,’d’转换成’D’。基本要求:给出表达式的运算步骤,要求输出大小写转换后的字母及其ASCII码值。
第三周:判断
3.0 其他运算:逻辑、条件、逗号随堂测验
1、以下哪个表达式,当a和b都是true或者都是false的时候,表达式的结果为true。
A、a && b
B、a || b
C、a == b
D、a ^ b
2、以下哪个表达式与!(a&&b)是等价的
A、!a && !b
B、!a || !b
C、a && b
D、a || b
3、以下哪个表达式的结果是true?
A、!(4<5)
B、2>2||4==4&&1<0
C、34==33&&!false
D、!false
4、以下哪个表达式,当a和b中只有一个是true的时候结果为true,而如果两个都是false或都是true的时候,结果为false
A、a && b
B、a || b
C、a != b
D、!a && !b
5、以下代码执行后,i的值是: i = 3/2,3*2;
3.1 判断随堂测验
1、以下语句是否可以通过编译: if ( 1<=n<=10 );
2、以下语句是否表示n属于[1,10]: if ( 1<=n<=10 );
3、写出程序的输出结果: int i,j,k; i=5; j=10; k=1; printf("%d", k>i
4、写出程序的输出结果: int i,j,k; i=2;j=3; k = i*j==6; printf("%d\n", k);
5、写出程序的输出结果: int i,j,k; i=3;j=2;k=1; printf("%d", i
3.2 分支随堂测验
1、写出程序的输出: int i=1; switch ( i%3 ) { case 0: printf("zero"); case 1: printf("one"); case 2: printf("two"); }
2、写出程序的输出: int a = 58; if ( a>50 ) printf("A"); if ( a>40 ) printf("B"); if ( a>30 ) printf("C");
实训3:运算符和表达式的使用
1、编程上机,求出下列表达式的值 (1)#include ”stdio.h” #include ”math.h” main( ) { int e=1,f=4,g=2; float m=10.5,n=4.0,k; k=(e+f)/g+sqrt(n)*1.2/g+m; printf(“%f\n”,k); } (2) 仿照(1),写出程序,上机运行,求出下面表达式的结果。int a=7; float x=2.5,y=4.7; x+a%3*(int)(x+y)%2/4; [注意]:在求表达式值的时候,注意C语言运算符的优先级和结合性。
2、上机运行以下程序,并认真分析输出结果。#include "stdio.h" main( ) {int x; x=-1+2*3-4; printf("%d\n",x); x=1+2%3-4; printf("%d\n",x); x=-1*2%-4/3; printf("%d\n",x); x=(5+4)%3/2; printf("%d\n",x); }
3、调试下面程序,并认真分析输出结果及运算过程#include "stdio.h" main() { int x,y,z; x=y=z=0; ++x&&++y||++z; printf("x=%d\t y=%d\t z=%d\n",x,y,z); x=y=z=0; ++x&&++y&&++z; printf("x=%d\t y=%d\t z=%d\n",x,y,z); x=y=z=-1; ++x&&++y&&++z; printf("x=%d\t y=%d\t z=%d\n",x,y,z); x=y=z=-1; ++x&&++y||++z; printf("x=%d\t y=%d\t z=%d\n",x,y,z); }
4、输入并运行下列程序。 #include “stdio.h” main( ) {int i,j,m,n; i=8; j=10; m=++i; n=j++; /* 第4行 */ printf("%d,%d,%d,%d\n",i,j,m,n); } (1)写出上面程序的运行结果。 (2) 若将上面程序的第4行改为:m=i++; n=++j;写出运行结果。 (3) 若将程序改为下面的程序,写出输出结果。 #include “stdio.h” main( ) {int i,j; i=8; j=10; printf("%d,%d\n",i++,j++); (4) 在(3)的程序基础上,将printf语句改为:printf("%d,%d\n",++i,++j); 写出运行结果 (5) 在(3)的程序基础上,再将printf语句改为: printf("%d,%d,%d,%d\n',i,j,i++,j++); 写出运行结果。 (6) 如果将程序改为下面程序,重新写出运行结果。main( ) {int i,j,m=0,n=0; i=8; j=10; m+=i++; n-=--j; printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n); }
5、编写程序,实现两个数a=3,b=4的数值交换,并输出结果(输出结果中能体现a= ,b=)。
实训4:printf()与scanf()函数的应用
1、从键盘输入三个数(要求在输入数据之前有输入数据的提示信息),使用条件表达式求出他们的最小值并输出结果。
2、要求从键盘按规定的格式输入时间(时:分:秒),并将输入的时间按照标准格式(例如:02:08:12)在屏幕上显示出来。
3、编制一个程序,要求:分别用getchar()函数与scanf( )函数输入两个字符给ch1和ch2变量,然后分别用putchar()函数与printf( )函数输出这两个字符。
4、从键盘输入某学生的四门课的成绩,求出总分、平均分和最高分并输出(要求保留一位小数)。
5、编写程序,初始化变量,使a1=83,x1=31.2026,u1=869,ch1=‘a’,然后输出变量的值。如果想控制输出格式如下: a1=83_ _,x1=31.20_ _,u1=_ _ _869 ch1=a_ or_97 应该怎样输出?这里的_表示空格,请写出程序并上机运行验证。
6、从键盘输入公里数,输出其对应的英里数。已知1英里=1.60934公里。(要求用符号常量)。
实训5:选择结构的使用
1、运行下面的程序,分析if和else是怎样配对的,该程序的功能是什么?假设输入数据56 89 38,那么写出输出结果。#include"stdio.h" main( ) { int a,b,c; printf(“Please input a,b,c:”); scanf(“%d%d%d”,&a,&b,&c); if(a
2、从键盘输入一个整数,判断该数的奇偶性。(单词:even-偶数,odd-奇数)
3、输入四个整数求其最小数。(用选择结构来实现)
4、编程计算函数f(x)的值。(x的值是通过键盘输入的)
5、任意从键盘输入一字符,使用switch语句,输入A输出A,输入B输出B,输入C输出C,输入其他字符输出error。
6、某市出租车3公里以内的起租价为6元,3公里以外,按1.5元/公里计费。现编写程序,要求:输入行车里程数,输出应付车费。
7、已知某商场营业员的保底薪水为450,其工资按当月完成销售额的利润profit(整数)提成+保底工资计算。其销售额的利润与利润提成的关系如下(计量单位:元): profit≤1000 没有提成; 1000<profit≤2000 提成10%; 2000<profit≤5000 提成15%; 5000<profit≤10000 提成20%; 10000<profit 提成25%。 基本要求:
第四周:循环
4.1 循环随堂测验
1、while循环的条件满足的时候循环继续,而do-while的条件满足的时候循环就结束了
2、以下代码片段执行结束后,变量i的值是多少? int i =10; while ( i>0 ) { i /=2; }
3、以下代码片段执行结束后,变量i的值是多少? int i = 1; do { i += 5; } while (i<17);
4.2 循环应用随堂测验
1、以下哪种运算能从变量x中取得十进制最低位的数字
A、x / 10
B、x % 10
C、x * 10
D、10 / x
2、当需要累加一些值的时候,用来记录累加结果的变量应该被初始为:
第五周:循环控制
5.1 第三种循环随堂测验
1、以下哪个循环和其他三条循环不等价(假设循环体都是一样的)?
A、for ( i=0; i<10; i++ ) {...}
B、for ( i=0; i<10; ++i ) {...}
C、for ( i=0; i++<10; ) {...}
D、for ( i=0; i<=9; i++ ) {...}
2、以下代码段的输出是什么? for ( int i=10; i> 1; i /=2 ) { printf("%d ", i++); }
5.2 循环控制随堂测验
1、以下代码段的输出是: int sum = 0; for ( int i=0; i<10; i++ ) { if ( i%2 ) continue; sum += i; } printf("%d\n", sum);
2、以下代码段的输出是: int sum = 0; for ( int i=0; i<10; i++ ) { if ( i%2 ) break; sum += i; } printf("%d\n", sum);
实训6:循环结构的应用
1、读懂下面的程序,说明本程序的功能。并上机验证结果。#include “stdio.h” void main() { int n; long sum=1; for(n=1;n<=10;n++) sum=sum*n; printf(“sum=%ld\n”,sum); }
2、循环结构嵌套与continue语句。读懂程序,分析运行过程,并写出结果。 #include void main() { int i,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<=3;j++) { if(j%2) continue; x++; } x++; } printf(“x=%d\n”,x); }
3、求100~1000之间个位数为6且能被3整除的所有整数。
4、求1!+2!+3!+4!+…+20!
5、百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,编程计算共有多少种驮法。
6、打印所有“水仙花数”。所谓水仙花数是指一个三位数,其各位数字的立方之和正好等于该数本身。例如:153是一个水仙花数,因为
第六周:数组
6.2 数组运算随堂测验
1、若有定义: int a[2][3]; 则以下选项中不越界的正确的访问有:
A、a[2][0]
B、a[2][3]
C、a[1>2][0]
D、a[0][3]
2、以下程序片段的输出结果是:int m[][3] = {1,4,7,2,5,8,3,6,9,}; int i,j,k=2; for ( i=0; i<3; i++ ) { printf("%d", m[k][i]); }
A、369
B、不能通过编译
C、789
D、能编译,但是运行时数组下标越界了
3、假设int类型变量占用4个字节,定义数组 int x[10] = {0,2,4}; 则x在内存中占据几个字节?
4、若有: int a[][3] = {{0},{1},{2}}; 则 a[1][2] 的值是?
实训7:数组的应用
1、以下程序执行时如果输入Language Programming,则程序输出结果是? #include main() { char str[30]; scanf("%s",str); printf("%s\n",str); }
2、运行程序,写出结果,并说明该程序的功能。 #include “stdio.h” main( ) { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); }
3、当执行下面的程序时,如果输入ABC,写出程序输出结果 #include "stdio.h" #include "string.h" main( ) { char ss[10]; gets(ss); strcat(ss,"6789"); printf("%s\n",ss); }
4、阅读程序写出运行结果#include “stdio.h” main() { int a[5][5],i,j,n=1; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=n++; for(i=0;i<5;i++) { for(j=0;j<=i;j++) printf(“%4d”,a[i][j]); printf(“\n”); } }
5、有一个数组,内放10个数,编程找出其中最小的数及其下标。
6、从键盘输入一个字符串放在数组里,然后计算该字符串的长度。
7、用冒泡法对6个数进行从小到大排序,并输出。
8、由键盘输入N×N矩阵的各元素值,分别计算两条对角线的元素之和
第七周:函数
7.2 函数的参数和变量随堂测验
1、以下哪句不是正确的原型?
A、int f();
B、int f(int i);
C、int f(int);
D、int f(int i) {}
2、以下哪个函数的定义是错误的?
A、void f() {}
B、void f(int i) { return i+1; }
C、void f(int i) {}
D、int f() { return 0; }
3、对于不返回值而且只有一个int类型的参数的函数,以下哪些函数原型是正确的?
A、void f(int x);
B、void f();
C、void f(int);
D、void f(x);
4、以下程序的输出是什么? #include void swap(int a, int b); int main() { int a = 5; int b = 6; swap(a,b); printf("%d-%d\n", a, b); return 0; } void swap(int a, int b) { int t = a; a = b; b = t; }
实训8:函数及应用
1、以下程序的输出结果是 #include “stdio.h” func(int a,int b) { int c; c=a+b; return c; } main() { int x=6,y=7,z=8,r; r=func((x--,y++,x+y),z--); printf("%d\n",r); }
2、以下程序的输出结果是 #include “stdio.h” int f(int a,int b) { int c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; return c; } main() { int i=2,p; p=f(i,i+1); printf("%d\n",p); }
3、以下程序的输出结果是 fun2(int a,int b) { int c; c=a*b%3; return c; } fun1(int a,int b) { int c; a+=a; b+=b; c=fun2(a,b); return c*c; } #include “stdio.h” main() { int x=11,y=19; printf("%d\n",fun1(x,y)); }
4、设计一个函数,求三个数中的最大值。该函数由主函数调用,三个数在主 函数中通过键盘输入。
5、设计函数,判断整数n是不是素数,是则返回该素数,否则返回0。在主函数里调用该函数,该整数是在主函数中通过键盘输入的。
第八周:指针
8.1 指针随堂测验
1、对于:int a[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p = &a[5]; 则: p[-2]的值是?
A、编译出错,因为数组下标越界了
B、运行出错,因为数组下标越界了
C、54
D、2
2、如果:int a[] = {0}; int *p = a; 则以下哪些表达式的结果为真?
A、p == a[0]
B、p == &a[0]
C、*p == a[0]
D、p[0] == a[0]
3、以下变量定义: int* p,q; 中,p和q都是指针。
4、对于:int a[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p = &a[1]; 则: p[2]的值是?
8.2 指针运算随堂测验
1、对于以下代码段,正确的说法是:char *p; while (1) { p = malloc(1); *p = 0; }
A、最终程序会因为没有没有空间了而退出
B、最终程序会因为向0地址写入而退出
C、程序会一直运行下去
D、程序不能被编译
2、对于以下代码段:int a[] = {1,2,3,4,5,}; int *p = a; int *q = &a[5]; printf("%d", q-p); 当sizeof(int)为4时,以下说法正确的是:
A、因为第三行的错误不能编译
B、因为第三行的错误运行时崩溃
C、输出5
D、输出20
3、使用malloc就可以做出运行时可以随时改变大小的数组