三)switch语句
(1)switch的执行过程 (2)break的用法 例题:
1.#include
{ int x=1,y=1,a=0,b=0; switch(x)
{case 1:switch(y) { case0:a++; case 1:b++;
case2:b++;break; }
case 2:a++;b++;break; case 3:a++;b++;
}
printf(“a=%d,b=%d\\n”,a,b); }
输出结果:
2.#include
main() {charc;
while((c=getchar())!=’\\n’) {switch(c-‘1’) {case 0:
case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; }
printf(“\\n”); }
} 输出结果:
四)算法
1.交换:t=a;a=b;b=t 2.分段函数
输入出租车里程S,输出应付车费F。 S和F的关系如下:
8?F???8?(S?3)*2
四、循环结构
S??3 S?36/48
一)循环条件均以条件为真(非0)进行循环,以条件为假(0)结束循环) 例题:
1. 以下叙述正确的是( )
A) do-while语句构成的循环不能用其它语句构成的循环来代替 B) do-while语句构成的循环只能用break语句退出 C) do-while语句构成的循环,在while后的表达式为非零时结束循环 D) do-while语句构成的循环,在while后的表达式为零时结束循环 2. 设有程序段: int k=10;
while(k=0) k=k-1;
则循环体执行的次数为( )
A)10次 B)9次 C)0次 D)1次 3. 下列( ) 循环不是无限循环
A) for(y=0; x=1 ; ++y); B) for(; ; x=0);
C) while (x=1) {x=1; } D) for(y=0,x=1;x> ++ y; x++)
二)三种循环的执行流程 例题:
1. 设变量y值为3,执行下列循环语句后,变量y的值的是( )
do y++; while(y++<4); A)3 B)4 C)5 D)6
2. 执行语句for(I=1;I++<4;); 后变量I的值是( )
A)3 B)4 C)5 D)0
三)循环嵌套的执行次数 例题:
1.#include “stdio.h” void main() { int I,j;
for(I=0;I<=3;I++) { for(j=0;j
输出结果:
四)break 和continue的用法 例题:
1.有以下程序
void main() { int a=1,b;
for(b=1;b<=10;b++) { if(a>=8) break;
if(a%2==1) { a+=5; continue;} a-=3;
7/48
}
printf(\
}
输出结果:
2.#include
{ int I, m=0, n=0, k=0; for(I=5;I<=7;I++) switch(i/6)
{ case 0: m++; n++; case 6: n++; break; default: k++; n++; }
printf(“%d,%d,%d\\n”, m, n, k); }
输出结果:
五)算法 求和
1.求1+2+3+??+100之和;
2.编程输出100以内所有6的倍数及它们的和; 3.求输入的10个学生的成绩之和; 4.求1-1/2+1/3-1/4+??+(-1)n+1(1/n)
5.求1+1/2+2/3+3/5+5/8+8/13+??(加100项)
1. 利用下面公式求s的值(求20项之和)
s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-1/(4*5*6)+...+1/(19*20*21)-1/(20*21*22)
求最大、小值
1. 输入10个数据,求出其中的最大值; 2.输入10个数据,求出其中的最小值; 统计
1.输入10个学生的成绩,统计出及格的人数。
2.输入一行字符(以回车结束输入),统计其中数字、字母和其它字符的个数。 画图
1. 编写程序打印以下图案(必须使用循环结构,直接输出不给分)
1 23 456 7890
2. 打印出以下图案(必须使用循环结构,直接输出不给分) * ***
***** *******
8/48
求素数
1. 判断m是否是素数
2. 编程求100~300之间的全部素数的和
求最大公约数
1.求两个整数m 和n 最大公约数。
穷举法
1. \百马百担\问题。有100匹马驮100担货,每匹大马每次驮3担,每匹中马每次驮2担,
2匹小马每次分驮1担。编写程序求大、中、小马的匹数(大、中、小马的匹数均不得为0)。
2. 一个素数加上1000以后是43的倍数,求满足这个条件的最小素数。
3. 有2个小于40的正整数a和b,a的平方与b的和是1053,b的平方与a的和是873,
请编程求满足条件的a和b的值。(提示:满足条件的a,b的值唯一)
4. 一个自然数除以2余1,除以3余2,除以4余3,除以5余4,除以7余5,求满足这
个条件的最小的自然数?
5. 求所有的\水仙花数\之和。所谓\水仙花数\是指一个三位数,其各位数字的立方和等于
该数本身。例如153是一个\水仙花数\,因为:153=1*1*1+5*5*5+3*3*3。
五、数组 一)数组语法
(1)数组的定义[ ]中必须是常量
(2)C语言规定只能逐个引用数组元素而不能一次引用整个数组 (3)引用一维数组每个元素的的方法: for(i=0;i<长度;i++) a[i];
(4)引用二维数组每个元素的的方法: for(i=0;i<第一维长度;i++)
for(j=0;j<第一维长度;j++) a[i][j];
(5)引用时,下标的值从0开始,不要超过数组的范围
(6)数组初始化时所给的数据不能超过[ ]中给定的长度,若所给的数据不足长度,其它的为0 例题:
1. 数组定义为int a[10][10];,则数组a有( )个数组元素。
A)100 B)81 C)20 D)121 2. 以下一维数组 a的正确定义是( )
A)int a(10); B)int n=10,a[n]; C) int n; D)#define N 10 Scanf(“%d”,&n); int a[N]; Int a[n];
3. 设有语句”int a[]={3,4,5,9,8,7};”则表达式a[1]-a[4]的值是( )
A)-6 B)6 C)-4 D)2
4. 以下不能正确定义二维数组的是( )
A) int a[2][2]={ {4}, {5}};B) int a[][2]={4,5,6,7};
C) int a[2][2]={ {4},5,6}; D) int a[2][]={{4,5},.{6,7}};
9/48
二)字符串
1)字符串和字符数组的区别 2)字符串函数的应用 例题:
1. 以下程序的输出结果是( )
#include
{ char st[20]=”2000\\0\\t\\\\”;
printf(“%d,%d\\n”,strlen(st),sizeof(st)); }
A)7,7 B)4,20 C)10,20 D)20,20
2. 要将字符串a连接到字符串b后面,使用下面( )语句
A)strcpy(a,b); B)strcat(a,b); C)strcpy(b,a); D)strcat(b,a)
三)算法
一维数组常见题型: 1.数组插入 2.数组删除 3.数组逆置
4.数组查找(顺序查找、折半查找) 5.冒泡排序、选择排序 二维数组常见题型:
在矩阵上的进行操作:矩阵转置、矩阵求和、求最大值等。
字符数组常见题型:各字符串函数的实现
例题:
1. 已知字符串char s[50]=”Iamstudent.”,请编写程序将字符a插入到student之前,结果
为“Iamastudent”。
2. 有一个3×4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列
号。 程序如下:
#include
int i,j,row,col,max;
static int a[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}}; max=a[0][0];
for(i=0;i<___;i++) /*$BLANK1$*/ for(j=0;j<4;j++)
if(___) /*$BLANK2$*/ {
max=___; /*$BLANK3$*/ row=i;
10/48