-
C基础第一天
今天转到新班1703班,前面的课程没有听,今天第一天讲的是循环,最后还给我们讲了自幂数和斐波那契数列,最后讲的这俩到现在都迷糊呢。循环虽然听了好多遍,但是做起题目来就不行了,今天记的代码都是在课堂上没有写出来的,而且好多都是之前做过的。这些要重点看一下了。
//回文数
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("请输入一个数:");
int a,i,x,num;
scanf("%d",&x);
for(i = 100;i <= x;i++)
{
num = i;
a = 0;
while(num > 0)
{
a=a*10+num%10;
num /= 10;
}
if(a == i)
{
printf("%d\n",a);
}
}
return 0;
//鸡兔同笼:35头,94足
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j;
for(i = 0;i <= 35;i++)
{
for(j = 0;j <= 35;j++)
{
if(i + j == 35 && 2*i + 4*j == 94)
printf("鸡 = %d,兔 = %d\n",i,j);
}
}
putchar('\n');
return 0;
}
//逆序输出
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,a = 0;
printf("请输入一个4位数:");
scanf("%d",&i);//1234
while(i > 0)//123,12,1
{
a = a*10+i%10;//a = 10*0+4;a = 4*10+3 = 43;a = 43*10+2 = 432;s = 432*10+1 = 4321;
i/=10;//123,12,1,0
}
printf("%d\n",a);
return 0;
}
//斐波那契数列
#if 0
#include <stdio.h>
int main(int argc,char *argv[])
{
int ax = 1,ay = 1,an,n,num;//ax,ay代表前两项,an代表通项
printf("请输入最大范围:");
scanf("%d",&num);
printf("a1 = %d\na2 = %d\n",ax,ay);
for(n = 3;n <= num;n++)
{
an = ax + ay;//a3 = a1+a1 = 2;
printf("a%d = %d\n",n,an);
ax = ay;//a1 = a2
ay = an;//a2 = a3
}
putchar('\n');
return 0;
}
#else
#include <stdio.h>
int main(int argc,char *argv[])
{
int ax = 1,ay = 1,an,n,num,sum = 0;//ax,ay代表前两项,an代表通项
printf("请输入最大范围:");
scanf("%d",&num);
printf("a1 = %d\na2 = %d\n",ax,ay);
sum = ax+ay;
for(n = 3;n <= num;n++)
{
an = ax + ay;//a3 = a1+a1 = 2;
printf("a%d = %d\n",n,an);
sum += an;
ax = ay;//a1 = a2
ay = an;//a2 = a3
}
printf("%d\n",sum);
return 0;
}
#endif
//只能被1和自身整除的数叫做质数(素数)
# if 0
#include <stdio.h>
int main(int argc,char *argv[])
{
int a,num,j;
printf("请输入最大范围:");
scanf("%d",&num);
for(a = 0;a < num;a++)
{
for(j = 3;j <= a;j++)
{
if(a%j == 0)
break;//跳出所有循环
}
if(j == a)
printf("%d ",a);
}
putchar('\n');
return 0;
}
#else
#include <stdio.h>
#include <math.h>
int main(int argc,char *argv[])
{
int a,num,j;
printf("请输入最大范围:");
scanf("%d",&num);
for(a = 1000;a < num;a++)
{
for(j = 2;j < sqrt(a);j++)
{
if(a%j == 0)
break;//跳出所有循环
}
if(j >= sqrt(a))
printf("%d ",a);
}
putchar('\n');
return 0;
}
#endif
//打印三角形
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j;
for(i = 0;i < 10;i++)
{
for(j = 1;j <= i;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
if语句:构成分支结构,他会根据给定的条件进行判断,以决定执行哪个分支结构
if语句有三种形式:
1.基本形式if
if(表达式)语句
如果表达式为真则执行其后的语句,否则不执行
if-else()形式
if(表达式)
语句1
else
语句2
如果表达式的值为真,则执行语句1,否则执行语句2
if-else-if形式
前两种一般用于两个分支情况,当有多个分支时使用这种方式
if(表达式1)
语句1
else if(表达式2)
语句2
else if(表达式3)
语句3
............
else if(表达式n)
语句n
else
语句m
依次判断表达式的值,当出现某个值为真时,则执行对应语句,然后跳到整个if语句之外,继续执行其他程序,如果所有的语句都为假则执行m语句,然后继续执行后面的语句
作业:输入几就打印周几,输入数字打印月份
注意:
1.if语句中if之后都为表达式,通常为逻辑表达式或关系表达式,但是也可以为其他表达式,如赋值表达式或变量
2.if语句中条件判断表达式必须用括号"()"括起来
3.if语句中,当执行语句为单语句时可以不加括号,当含有多条语句时必须加"{}",并且括号后没有分号
if语句的嵌套
当if语句中的执行语句又是if语句时,构成if语句的嵌套
if(表达式)
if 语句
或者
if(表达式)
if(语句)
else
if(语句)
为避免二义性C语言规定,else总是与它前面最近的if配对
条件运算符和条件表达式"?:"
一般形式:表达式1?表达式2:表达式3
如果表达式1的值为真,则表达式2的值为整个表达式的值,否则表达式3的值为整个表达式的值
max = a > b ? a : b
switch语句,用于多分支选择
一般形式:
switch(表达式)
{
case 常量表达式1:语句1;
break;
case 常量表达式2:语句2;
break;
case 常量表达式3:语句3;
break;
.............
case 常量表达式n:语句n;
break;
default:语句n+1;
break;
}
计算表达式的值,逐个与其后的常量表达式进行比较,当表达式与某个常量表达式的值相等时,几执行其后的语句,然后不再进行判断,执行后面的所有case语句,如果表达式的值都不相同,则执行default中的语句
C语言提供了break语句,用来跳出switch语句
注意:
1.case语句之后的常量表达式的值都不能相同,否则会报错
2.case中允许有多个语句,可以不用花括号
3.default可以省略
*********************循环结构***********************
循环结构的特点:在给定条件成立时,反复执行某段程序,知道条件不成立为止,给定的条件称为循环条件,反复执行的程序段称为循环体
循环分类:while循环,do-while循环,for循环
while语句的一般形式:
while(表达式)语句:表达式为循环条件,语句为循环体
while语句的含义是计算表达式的值,如果表达式的值为真则执行循环体
(1)while语句的表达式一般是关系表达式或逻辑表达式,只要表达式为真就可继续循环
(2)循环体含有一个以上的语句必须加花括号
作业:打印等腰三角形
do-while语句
一般形式:
do
语句
while(表达式);
与while循环不同的是该循环先执行循环体,后判断表达式是否为真,该循环至少执行一次
for循环
for语句可以完全替代while语句
一般形式:
for(表达式1;表达式2;表达式3)
执行过程:
1,先求表达式1,
2,求解表达式2,如果为真,则执行for 语句中指定的 内嵌语句,然后执行下一步,若其为假,则循环结束。
3,求解表达式3
4,转回第二步继续执行
5,循环结束,执行下一段代码。
交换两个数:
不用第三个数的时候:
a = 3;b = 5;
a = a + b;
b = a - b;
用到第三个数的时候:
t = a;a = b;b = t;
a = a - b;
自幂数:一个数有几位就用每一位上的数字乘上几次方,最后等于这个数
如:123 = 13+23+3^3,12345 = 15+25+35+45+5^5