for(i=2; i<=k; i++) if(m%i==0) break;
if(i>=k+1) printf(“%d is a prime number\\n”,m ); else printf(“%d is not a prime number\\n”,m );} (2)输出3~100之间的所有素数 #include
for(m=3;m<=100;m=m+2) { k=sqrt(m);
for(i=2;i<=k;i++) if(m%i==0) break;
if(i>k) { printf(“%d”,m); n++;} if(n==0) printf(“\\n”); } }
5.3.9 求解爱因斯坦数学题。有一条长度不多于1000步的阶梯,若每步跨2阶,则最后
剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶,若每步跨7阶,最后一阶都不剩,问总共有多少级阶梯? #include
int n;
for(n=1;n<=1000;n++)
if(n%7==0&&n%6==5&&n%5==4&& n%3==2&&n%2==1) printf(\}
5.3.10 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担,求大、
中、小马的数目,要求列出所有的可能。
#include
int x,y,z;
for (x=0;x<=19;x++) for (y=0;y<=33;y++) { z=100-x-y;
if (5*x+3*y+z/3.0==100 )
printf(“cocks=%d,hens=%d,chickens=%d\\n\} }
5.3.11 假设我国国民经济总值按每年8%的比率增长,问几年后翻番。
#include
float old=1,n; int i;
for(i=1,n=old;n<2*old;i++) n=n*(1+0.08);
printf(\}
5.3.12 编写程序,求1~99之间的全部同构数。同构数是这样一组数;它出现在平方数的
右边。例如:5是25的右边的数,25是625右边的数,5和25都是同构数。
#include
for(n=1;n<10;n++) { k=n*n;
if (k==n) printf(“d”,n); } for(n=10;n<100;n++) { k=n*n0;
if (k==n) printf(“d”,n); } }
5.3.13 编写程序,对数据进行加密。从键盘输入一个数,对每一位数字均加2,若加2后
大于9,则取其除10的余数。如,2863加密后得到4085。 void main() {
int i,s,m,n; printf(\ scanf(\ for(i=0,s=0;n<1;i++) { m=n;
m=(m+2); s=s+m*pow(10,i); n=n/10; } printf(\}
5.3.14 从键盘输入n,打印n行倒等腰三角形,如n=4,则打印:
*******
*****
***
*
void main() {
int i,j,N;
printf (\请输入N=\
scanf(\ for ( i=1 ; i<=N ; i++) { for (j=1; j<=i - 1; j++)
printf(“ ”); //空格 for (j=1; j<=2*N-(2* i -1); j++) printf(“*”); //星号 printf(“\\n”); } //换行 }
5.3.15 打印如下的九九乘法表
1 2 3 4 5 6 7 8 9 ---------------------------------------- 1 2 4 3 6 9
4 8 12 16 5 10 15 20 25
???????????..
9 18 27 36 45 54 63 72 81
#include
for (i=1;i<=9;i++) printf(“%-5d”,i); printf(“\\n”);
for (i=1;i<=9;i++) {for (j=1;j<=i;j++)
printf(“%-5d”,i); printf(“\\n”); }
习题六
6.1 填空题
6.1.1 C语言中,数组名代表 数组首地址 。
6.1.2 在c语言中,引用数组元素时,其数组下标的数据类型允许是 整型常量 6.1.3 在c语言中,一维数组的定义形式为:存储类型 类型说明符 数组名 [常
量表达式] 。 6.1.4 若有说明:int a[][3]={1,2,3,4,5,6,7}; 则a数组第一维的大小是
3 。
6.1.5 下面程序段的运行结果是 f 。
char a[7]=\char b[4]=\strcpy(a,b);
printf(\
6.1.6 下面程序段的运行结果是 3 。
char c[]=\printf(\
6.1.7 假设字符串s1和s2均定义过并初始化,判断字符串s1是否大于字符串
s2,应当使用语句为:
if( strcmp(s1,s2)>0) 6.1.8 定义int arr[5]={1,2,3};则引用数组元素a[4]的值是: 0 。 6.1.9 数组的长度若为N,则可以访问的数组下标范围为: 0~(N-1) 。 6.1.10 数组元素引用时,下标为整型的表达式,可以使用 变量 。 6.2 选择题
6.2.1 合法的数组定义是(D)。
A.int a[ ]=”string”; B.int a[5]={0,1,2,3,4,5}; C.char a=”string”; D.char a[ ]={0,1,2,3,4,5}; 6.2.2 若有定义和语句:char s[10]; s=”abcd”; printf(“%s\\n”,s); 则
结果是(以下u代表空格)(A)。
A.输出abcd B.输出a
C.输出abcd u u u u u D.编译不通过 6.2.3 数组a[2][2]的元素排列次序是(A)。
A.a[0][0],a[0][1],a[1][0],a[1][1] B.a[0][0],a[1][0],a[0][1],a[1][1]
C.a[1][1],a[1][2],a[2][1],a[2][2] D.a[1][1],a[2][1],a[1][2],a[2][2] 6.2.4 有以下语句,则下面正确的描述是(B)。
static char x [ ]=“12345”; static char y[ ]={?1?,?2?,?3?,?4?,?5?};
A.x数组和y数组的长度相同。 B.x数组长度大于y数组长度。 C.x数组长度小于y数组长度 D.x数组等价于y数组。
6.2.5 列不能正确进行字符串赋值操作的语句是(C)。
A.char str[10];gets(str); B.char*str;str=“a”; C.char*str;str=?a?;
D.charstr[10];strcpy(str,“hello”);
6.2.6 若数组的长度为n,则该数组中的元素最多有n个。若[3][5]是一个二维
数组,则最多可使用的元素个数为(C)
A.8 B.10 C.15 D.5
6.2.7 若有说明:int a[3][4]; 则对a数组元素的非法引用是(D)。
A.a['B'-'A'][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 6.2.8 设有语句static char str[10]