-
C基礎(chǔ)第二天
昨天一天將循環(huán)講完了,今天將數(shù)組,上午做了倆節(jié)課的循環(huán)練習(xí),發(fā)現(xiàn)還是基礎(chǔ)不牢固,今天的練習(xí)就已經(jīng)做不出了,自己寫的運(yùn)行的結(jié)果也不對(duì)。需要背代碼,最起碼要能夠自己寫出代碼。
#if 0
//今年已過(guò)的天數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{
int year,month,day,i,sum = 0,count = 0;
printf("請(qǐng)輸入年份:");
scanf("%d",&year);
printf("請(qǐng)輸入月份:");
scanf("%d",&month);
printf("請(qǐng)輸入日期:");
scanf("%d",&day);
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
a[2] = 29;
}
for(i = 1;i < month;i++)
{
sum += a[i];
}
sum += day;
printf("今年過(guò)了%d天\n",sum);//今年過(guò)了多少天
return 0;
}
##else
//距離指定的日期已經(jīng)過(guò)去的天數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{
int year,month,day,i,sum = 0,count = 0;
printf("請(qǐng)輸入年份:");
scanf("%d",&year);
printf("請(qǐng)輸入月份:");
scanf("%d",&month);
printf("請(qǐng)輸入日期:");
scanf("%d",&day);
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
a[2] = 29;
}
for(i = 1;i < month;i++)
{
sum += a[i];
}
sum += day;
for(i = 1990;i < year;i++)
{
if(i%4 == 0 && i % 100 != 0 || i % 400 == 0)
count++;
}
sum += 365*(year - 1990) + count;
printf("%d\n",sum);//一共過(guò)了多少天
return 0;
}
##else
//打印指定月份的日歷
#include <stdio.h>
int main(int argc,char *argv[])
{
int year,month,day,i,sum = 0,count = 0;
printf("請(qǐng)輸入年份:");
scanf("%d",&year);
printf("請(qǐng)輸入月份:");
scanf("%d",&month);
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
a[2] = 29;
}
for(i = 1;i < month;i++)
{
sum += a[i];
}
sum += day;
for(i = 1990;i < year;i++)
{
if(i%4 == 0 && i % 100 != 0 || i % 400 == 0)
count++;
}
sum += 365*(year - 1990) + count;
int week = sum%7;
printf("Mon Thu Wed Tus Fri Sat Sun\n");
for(i = 0;i < week;i++)
{
printf(" ");
}
for(i = 1;i <= a[month];i++)
{
printf("%2d ",i);
if((i + week)%7 == 0)
putchar('\n');
}
return 0;
}
//向數(shù)組中輸入10個(gè)數(shù)求出最大值
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,max;
int a[10];
for(i = 0;i < 10;i++)
{
scanf("%d",&a[i]);
if(max < a[i])
{
max = a[i];
}
}
printf("%d\n",max);
return 0;
}
//二維數(shù)組賦值
#include <stdio.h>
int main(int argc,char *argv[])
{
int a[3][4];
int i,j;
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
printf("%-2d ",a[i][j]);
}
putchar('\n');
}
return 0;
}
//求平均值
#include <stdio.h>
int main(int argc,char *argv[])
{
int a[3][5] = {{70,75,80,85,90},{90,85,80,75,70},{90,91,92,93,94}};
int i,j,x = 0;
for(i = 0;i < 3;i++)
{
x = 0;
for(j = 0;j < 5;j++)
{
x += a[i][j];
}
printf("%d\n",x/5);
}
return 0;
}
//取100個(gè)質(zhì)數(shù)放到數(shù)組中
#include <stdio.h>
int main(int argc,char *argv[])
{
int a,c,i = 0;
int arr[20];
for(a = 3;;a++)
{
for(c = 2;c <= a;c++)
{
if(a%c == 0)
break;//跳出所有循環(huán)
}
if(c >= a)
{
if(i == 20)
break;
arr[i] = a;
i++;
}
}
for(i = 0;i < 20;i++)
{
printf("arr[%d] = %d\n",i,arr[i]);
}
putchar('\n');
return 0;
}
//數(shù)組賦值
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
int a[5];
for(i = 0;i < 5;i++)
{
scanf("%d",&a[i]);
//a[i] = i;
}
for(i = 0;i < 5;i++)
{
printf("%d ",a[i]);
}
putchar('\n');
return 0;
}
//根據(jù)兩個(gè)具體日期算出過(guò)了多少天
#include <stdio.h>
int main(int argc,char *argv[])
{
int year,month,day,year1,month1,day1,i;
int sum = 0;
int sum1 = 0;
int count = 0;
int yearstd = 365;
printf("請(qǐng)輸入出生年份:");
scanf("%d",&year1);getchar();
printf("請(qǐng)輸入出生月份:");
scanf("%d",&month1);getchar();
printf("請(qǐng)輸入出生日期:");
scanf("%d",&day1);getchar();
printf("請(qǐng)輸入當(dāng)前年份:");
scanf("%d",&year);getchar();
printf("請(qǐng)輸入當(dāng)前月份:");
scanf("%d",&month);getchar();
printf("請(qǐng)輸入當(dāng)前日期:");
scanf("%d",&day);getchar();
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
a[2] = 29;
}
for(i = 1;i < month;i++)
{
sum += a[i];
}
sum += day;
printf("%d\n",sum);//今年天數(shù)
if(year1 % 4 == 0 && year1 % 100 != 0 || year1 % 400 == 0)
{
a[2] = 29;
yearstd = 366;
}
sum1= 0;
for(i = 1;i < month1;i++)
{
sum1 += a[i];
}
sum1 += day1-1;
printf("sum1 = %d\n",sum1);
sum1 = yearstd - sum1;
printf("%d\n",sum1);
count = 0;
int year2;
for(year2 = year1;year2 < year;year2++)
{
if(year2%4==0 && year2%100!=0 || year2%400==0)
count++;
}
printf("count = %d\n",count);
int add;
add = 365*(year - year1)-yearstd+sum+sum1+count;
printf("已經(jīng)出生%d天\n",add);
return 0;
}
//打印菱形
#include <stdio.h>
int main(int argc,char *argv[])
{
int n,m1,m2,i,j;
printf("please input a number of rows:");
// fflush(stdin);//提示只能輸入數(shù)字,可以不加
scanf("%d",&n);
if(n%2 == 0)
{
printf("Error:the number cannot be %d\n",n);
return 0;
}
for(m1 = n/2,m2 = 1;m1;m1--,m2 += 2)
{
for(i = 0;i < m1;i++)
printf(" ");
for(j = 0;j < m2;j++)
printf("*");
printf("\n");
}
while(m2>0)
{
for(i = 0;i < m1;i++)
printf(" ");
for(j = 0;j < m2;j++)
printf("*");
printf("\n");
m1++;
m2 -= 2;
}
return 0;
}
//自冪數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{//自冪數(shù)從三位數(shù)開始
int num,i = 100,j,k,m,n,sum;
printf("請(qǐng)輸入一個(gè)數(shù):");
scanf("%d",&num);
while(i < num)
{
j = i;
k = 0;//求出位數(shù)
while(j > 0)
{
j /= 10;
k++;
}
j = i;
sum = 0;
while(j > 0)
{
int s = 1;
m = j%10;
n = k;
for(;n > 0;n--)
{
s *= m;
}
j = j/10;
sum += s;
}
if(sum == i)
{
printf("%d\n",i);
}
i++;
}
return 0;
}
在程序設(shè)計(jì)中,為了方便,把具有相同類型的若干變量按有序的形式組織起來(lái)。這些按序排列的同類元素的集合稱為數(shù)組。數(shù)組屬于構(gòu)造類型,數(shù)組也可分解為多個(gè)數(shù)組,這些數(shù)組是由基本構(gòu)造類型構(gòu)成的。
數(shù)組可以分為:數(shù)值數(shù)組,字符數(shù)組,指針數(shù)組,結(jié)構(gòu)體數(shù)組等。
1:一維數(shù)組的定義和引用。
怎樣定義一維數(shù)組
定義一維數(shù)組的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式];
int a[10]; //它表示定義了一個(gè)整型數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)整型元素;
float b[10],c[20];
char ch[5];
(1)數(shù)組的類型實(shí)際上指的是數(shù)組元素的類型,數(shù)組中的每一個(gè)元素都屬于同一數(shù)據(jù)類型,不能把不同類型的數(shù)據(jù)放在同一數(shù)組中;
(2)數(shù)組名不能與其他變量名相同;
int main(int argc, char const *argv[])
{
int a;
float a[10];
……
return 0;
}
(3):數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符書寫規(guī)則。
(4):方括號(hào)的常量表示數(shù)組元素個(gè)數(shù)
(5):不能在方括號(hào)中使用變量來(lái)表示元素個(gè)數(shù),但是可以使用符號(hào)常量和常量表達(dá)式;(宏定義)
3.一維數(shù)組的引用
數(shù)組元素的一般形式為:數(shù)組名[下標(biāo)]
其中下標(biāo)只能是整型常量或整型表達(dá)式。
a[5]
a[i+j]
a[i++]
這些都是合法數(shù)組元素
例1
int main(int argc, char const *argv[])
{
int i,a[10];
for ( i = 0; i < 10; ++i)
{
a[i]=i;
}
for ( i = 9; i >= 0; i--)
{
printf("%d\n",a[i]);
}
return 0;
}
例2
int main(int argc, char const *argv[])
{
int i,a[10];
for (int i = 0; i < 10; ++i)
{
a[i]=2*i+1;
}
for (int i = 0; i <=9; ++i)
{
printf("%d\n",a[i] );
}
printf("%d,%d\n",a[5],a[5.8]);
return 0;
}
4.一維數(shù)組的初始化
數(shù)組的賦值方法除了可以用賦值語(yǔ)句,還可以初始化。
初始化賦值的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式] = {值,值,……,值};
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};//相當(dāng)于a[0]=0,a[1]=1……a[9]=9;
(1)可以只給部分元素賦值
int a[10]={0,1,2,3,4};
表示只給a[0]~a[5]賦值,其他值默認(rèn)為0;
(2)只能逐個(gè)賦值,不能給數(shù)組整體賦值
例:需要給數(shù)組中10個(gè)元素全部賦1
int a[10]={1,1,1,1,1,1,1,1,1,1};
不能寫成 int a[10]=1;
(3)也可以不給出元素的個(gè)數(shù),直接給所有元素賦值
例:int a[5]={1,2,3,4,5};
可寫成 int a[]={1,2,3,4,5};
注:a[5]={1,2,3,4,5,6};//這是錯(cuò)誤的寫法,元素個(gè)數(shù)不能大于下標(biāo)最大值;
一維數(shù)組程序舉例:求輸入的十個(gè)數(shù)中的最大值
int main(int argc, char const *argv[])
{
int i,max,a[10];
printf("請(qǐng)輸入10個(gè)數(shù)\n");
for (i = 0; i < 10; ++i)
{
scanf("%d",&a[i]);
}
max=a[0];
for (i = 0; i < 10; ++i)
{
if (a[i]>max)
{
max=a[i];
}
}
printf("max number is %d\n",max);
return 0;
}
5.二維數(shù)組的定義
前面介紹的數(shù)組只有一個(gè)下標(biāo),稱為一維數(shù)組,其數(shù)組元素也稱為單下標(biāo)變量。
在實(shí)際問(wèn)題中很多量是二維或多維的,C語(yǔ)言允許構(gòu)造多維數(shù)組。
二維數(shù)組定義的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]
其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2表示第二維下標(biāo)的度;
例:int a[3][4];//該數(shù)組的小標(biāo)變量一共3*4個(gè)
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
6.二維數(shù)組元素的引用
二維數(shù)組元素的表達(dá)形式為:
數(shù)組名[下標(biāo)][下標(biāo)]
例:a[3][4]
7.二維數(shù)組的初始化
二維數(shù)組的可按分段賦值,也可以連續(xù)賦值
例如對(duì)數(shù)組a[5][3]
(1)分段賦值
a[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
(2)連續(xù)賦值
a[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
兩種賦值結(jié)果完全相同
二維數(shù)組賦值特別說(shuō)明:
(1)可以只對(duì)部分元素賦值,未賦值元素自動(dòng)取0值。
例:int a[3][3]={{1},{2},{3}};
是對(duì)每行的第一列元素進(jìn)行賦值,未賦值取零,結(jié)果如下
1 0 0
2 0 0
3 0 0
int a[3][3]={{0,1},{0,0,2},{3}};
0 1 0
0 0 2
3 0 0
(2)如果對(duì)全部元素進(jìn)行賦值,則第一維的長(zhǎng)度可以不給出
例:int a[3][3]={1,2,3,4,5,6,7,8,9};
可以寫為: int a[][3]={1,2,3,4,5,6,7,8,9};
二維數(shù)組的初始化:
王 張 李 趙 周
Math 80 61 59 85 76
C 75 65 63 87 77
Chinese 92 71 70 90 85
一個(gè)二維數(shù)組a[5][3]存放五個(gè)人三科成績(jī),再設(shè)一個(gè)一維數(shù)組v[3]存放所求得各學(xué)科平均成績(jī)。
int main(int argc, char const *argv[])
{
int i,j,s=0,average;
int v[3],a[5][3];
printf("請(qǐng)輸入成績(jī)\n");
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 5; ++j)
{
scanf("%d",&a[j][i]);
s = s+a[j][i];
}
v[i]=s/5;
s = 0;
}
average = (v[0]+v[1]+v[2])/3;
printf("各科平均成績(jī) Math:%d,C:%d,Chinese:%d.\n",v[0],v[1],v[2]);
printf("總分的平均成績(jī)?yōu)?d\n",average);
return 0;
}