一、循环结构、分支结构
例题
1.输出20以内所有不是3或5的倍数的数(一行输出7个)
#include<stdio.h>
int main()
{
int num,n=0;
for(num=0;num<=20;num++)
{
if(!(num%3==0||num%5==0))
{
printf(" %d ",num);
n++;
if(n%7==0)
{
printf("\n");
}
}
}
}
2.计算10!
#include<stdio.h>
int main()
{
int num;
long result=1;
for(num=1;num<=10;num++)
result *=num;
printf("%ld",result);
}
3.计算1+1/2+1/3+…+1/10
#include<stdio.h>
int main()
{
int i;
float sum=0;
for(i=1;i<=10;i++){
sum+=1.0/i;
}
printf("%f",sum);
}
4.计算1-3+5-7…99
#include <stdio.h>
int main()
{
int fuhao=1,sum=0,num;
for(num=1;num<=99;num+=2)
{
sum+=fuhao*num;
fuhao*=-1;
}
printf("%d",sum);
}
5.计算1-1/3+1/5-1/7+…1/99
#include<stdio.h>
int main(){
float i=1,j,k=1,sum=0;
for(j=1;j<=99;j+=2){
sum+=k*(i/j);
k*=-1;
}
printf("%f",sum);
return 0;
}
二、一维数组的用途与使用
一维数组的定义
int a[10];
a,称数组名,中括号[]中的数字,成为下标,下标从0-9
a[0]:是数组第一个元素,是一个完整变量名
例:
输入10名学生成绩,计算出总分和平均分和最低分,最高分。
#include<stdio.h>
int main()
{
int i;
int score[10],sum=0;
float aver;
int max=-1,min=101;
for(i=1;i<=10;i++)
{
printf("请输入第%d名学生的成绩:",i);
scanf("%d",&score[i-1]);
}
for(i=0;i<10;i++)
{
sum+=score[i];
if(score[i]>max)
max=score[i];
if(score[i]<min)
min=score[i];
}
aver = sum/10.0;
printf("所有学生的成绩:");
for(i=1;i<=10;i++)
{
printf("%d ",score[i-1]);
}
printf("总分%d,平均分%f,最高分%d,最低分%d",sum,aver,max,min);
}
例:
将数字小到大排序
#include <stdio.h>
int main(){
int score[6]={5,23,6,2,9,7};
int i,t,j;
printf("排序前:");
for(i=0;i<6;i++){
printf(" %d ",score[i]);
}
for(j=0;j<4;j++) {
for(i=0;i<=6-2-j;i++){
if(score[i]>score[i+1]){
t=score[i];
score[i]=score[i+1];
score[i+1]=t;
}
}
}
printf("\n排序后:");
for(i=0;i<6;i++){
printf(" %d ",score[i]);
}
}
一维数组的下标控制
1.数组的输出:正序输出、逆序输出
int main()
{
int a[5]={12,3,25,7,19},i;
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(i=5-1;i>=0;i--)
printf("%d ",a[i]);
}
2.查找数组中的一个数
#include<stdio.h>
int main()
{
int a[5]={12,3,25,7,19},i;
int finder;
finder =12;
for(i=0;i<5;i++)
{
if(a[i]==finder)
break;
}
if(i<5)
printf("%d是第%d个元素值 ",a[i],i+1);
else
printf("没有这个元素");
}
3.找最大值和最小值
#include<stdio.h>
int main()
{
int a[5]={12,3,25,7,19},i;
int max,maxaddr;
int min,minaddr;
min=a[0];
minaddr=0;
max=a[0];
maxaddr=0;
for(i=1;i<5;i++)
{
if(a[i]>max)
{
max=a[i];
maxaddr=i;
}
else if(a[i]<min)
{
min=a[i];
minaddr=i;
}
}
printf("最大值:%d,是第%d个元素\n",max,maxaddr+1);
printf("最小值:%d,是第%d个元素\n",min,minaddr+1);
}
4.交换位置
#include<stdio.h>
int main()
{
int a[5]={12,3,25,7,19},i;
int t;
printf("原数组:");
for(i=0;i<5;i++)
printf("%d ",a[i]);
for(i=0;i<5/2;i++)
{
t=a[i];
a[i]=a[5-1-i];
a[5-1-i]=t;
}
printf("\n逆序存放后数组:");
for(i=0;i<5;i++)
printf("%d ",a[i]);
}
5.数组向后移动
#include<stdio.h>
int main()
{
int a[8]={3,25,7,19,20,11,6},i;
int t;
printf("原数组:");
for(i=0;i<8;i++)
printf(" %d ",a[i]);
for(i=8-1;i>=0;i--)
{
a[i+1]=a[i];
}
a[0]=0;
printf("\n元素组向后移动后的数组:");
for(i=0;i<8;i++)
printf(" %d ",a[i]);
}
6.向前移动
#include<stdio.h>
int main()
{
int a[8]={12,3,25,7,19,20,11,7},i;
int t;
printf("原数组:");
for(i=0;i<8;i++)
printf(" %d ",a[i]);
for(i=1;i<8;i++)
{
a[i-1]=a[i];
}
printf("\n元素组向前移动后的数组:");
for(i=0;i<8-1;i++)
printf(" %d ",a[i]);
}
7.对10个数进行排序
#include<stdio.h>
int main(){
int a[8]={12,3,25,7,19,20,11,6},i;
int t,max,maxaddr,j;
printf("原数组:");
for(i=0;i<8;i++)
printf(" %d ",a[i]);
for(j=1;j<=8;j++)
{
max=a[0];
maxaddr=0;
for(i=1;i<=8-j;i++)
{
if(a[i]>max)
{
max=a[i];
maxaddr=i;
}
}
if(maxaddr !=i-1)
{
t =a[maxaddr];
a[maxaddr]=a[i-1];
a[i-1] =t;
}
}
printf("\n排序后数组:");
for(i=0;i<8;i++)
printf(" %d ",a[i]);
}