::: tip 程序进入主函数,i从0到5,循环5次,输出5个sum(a)的值。sum(a)调用上面的函数,传过去的a的值为2,c=0,b=3,c+=1=1,b+=2=5,即2+5+1=8。第二次循环,a=2,c+=1=1,b+=2=7,即2+7+1=10.以此类推。 :::
::: warning 定义变量b时,在前面添加了static,b称作静态全局变量,只在定义它的源文件内有效,其他源文件无法访问它。 :::
::: tip
- if语句后面加大括号可以跟多条语句
- 0表示假,非0表示真
- else语句和最近未匹配的if匹配 :::
::: tip int b定义时候没有赋值,题干调用函数时候func(1)传入了1,即func(int a)中a的值为1,进入switch语句中,执行case1后b赋值30,因没有break跳出,b被后面的语句重新赋值,直到b=0,return b将b的值返回,即func(1)=0。 :::
::: tip switch后必须是整型常量表达式。int为整型,long为长整型,char是字符类型,即字符对应的ASCII码值,为整型,float为单精度浮点数,是浮点型。 :::
::: tip x%2的值为1,进入外层循环的case1,内层循环switch(y)中没有case3与之对应,执行default输出hello,default后没有break中止循环,继续执行外层循环case2,输出third,即屏幕打印hellothird。
:::
#include <stdio.h>
int main ()
{
int a = 0;
for(a = 1;a<100;a++)
{
if(a%3 ==0)
{
printf("%d ",a);
}
}
return 0;
}
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
--------------------------------
Process exited after 0.02896 seconds with return value 0
::: tip 求最大公约数,可以使用辗转相除法。 两个正整数a和b,他们的最大公约数等于a除以b的余数和b之间的最大公约数。 比如10和25,25除以10余5,那么10和25的最大公约数等同于5和10之间的最大公约数。 余数为0时,最大公约数是被除数。 :::
#include <stdio.h>
int main ()
{
int a = 0;
int b = 0;
scanf("%d%d",&a,&b);
int c;
while(a%b)
{
c = a%b;
a = b;
b = c;
}
printf("%d",b);
return 0;
}
24 18
6
--------------------------------
Process exited after 2.41 seconds with return value 0
#include<stdio.h>
int main()
{
int a = 0;
int count = 0;
for (a = 1;a <= 100;a++)
{
if (a/10 == 9)
count ++;
if (a%10 == 9)
count ++;
}
printf("%d",count);
}
20
--------------------------------
Process exited after 0.1128 seconds with return value 2
::: tip 先写出一个for循环产生1-100的数字a,1/a就是每一项。需要小数时候需要把将1/a改为1.0/a,同时将和的变量类型设为double,打印结果时候将%d改为%lf。正负交替可以设置一个变量在循环内赋值负数的语句。 :::
#include <stdio.h>
int main()
{
int a = 0;
double sum = 0.0;
int flag = 1;
for(a = 1;a <= 100;a++)
{
sum += flag*1.0/a;
flag = -flag;
}
printf("%lf",sum);
return 0;
}
0.688172
--------------------------------
Process exited after 0.01676 seconds with return value 0
还可以使用如下方法计算:
#include <stdio.h>
int main()
{
int a = 0;
double sum1 = 0.0; //分母为正相加
double sum2 = 0.0; //分母为负相加
double sum3 = 0.0;
for(a = 1;a <= 100;a++)
{
if(a%2 == 0)
sum1 += 1.0/a;
else
sum2 += 1.0/a;
}
sum3 = sum1 -sum2;
printf("%lf",sum3);
return 0;
}
-0.688172
--------------------------------
Process exited after 0.01548 seconds with return value 0
::: tip 需要在一组数字中打印需要值时,需要创建一个数组,和一个数组下标变量,并通过sizeof(arr) / sizeof(arr[0])计算数组中元素个数。 :::
#include <stdio.h>
int main()
{
int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
int max = arr[0];
int a = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for(a=1 ; a<sz ; a++)
{
if(arr[a] > max)
max = arr[a];
}
printf("%d",max);
return 0;
}
-1
--------------------------------
Process exited after 0.01311 seconds with return value 0
#include <stdio.h>
int main()
{
int a = 0;
for(a=1 ; a<=9 ; a++) //行数
{
int b = 0;
for(b=1 ; b<=a ; b++) //列数,列数最大等于行数
{
printf("%d*%d=%-2d ",a,b,a*b); //%-2d表示输出结果后左对齐空两格
}
printf("\n");
}
return 0;
}
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
--------------------------------
Process exited after 0.01892 seconds with return value 0