-
- 素材大。
- 1.9 MB
- 素材授權(quán):
- 免費下載
- 素材格式:
- .ppt
- 素材上傳:
- chenrong
- 上傳時間:
- 2018-07-11
- 素材編號:
- 201429
- 素材類別:
- 課件PPT
-
素材預(yù)覽
這是c程序設(shè)計語言數(shù)組ppt,包括了數(shù)組,投票情況統(tǒng)計,程序解析-排序,如何存儲和操作某班C語言課程的成績等內(nèi)容,歡迎點擊下載。
c程序設(shè)計語言數(shù)組ppt是由紅軟PPT免費下載網(wǎng)推薦的一款課件PPT類型的PowerPoint.
C語言程序設(shè)計
5.1 數(shù)組
了解數(shù)組含義及功能
理解數(shù)組變量在內(nèi)存中的分配和使用方式
掌握數(shù)組的定義、初始化及引用方法
掌握字符數(shù)組及字符串的用法及基本操作
投票情況統(tǒng)計
調(diào)查電視節(jié)目歡迎程度。某電視臺要進行一次對該臺8個欄目(設(shè)相應(yīng)欄目編號為1~8)的受歡迎情況,共調(diào)查了1000位觀眾,現(xiàn)要求編寫程序,輸入每一位觀眾的投票,每位觀眾只能選擇一個最喜歡的欄目投票,統(tǒng)計輸出各欄目的得票情況。
7.1.1 程序解析-排序
# include<stdio.h>
int main( void )
{
int count[9]; /* 設(shè)立數(shù)組,欄目編號對應(yīng)數(shù)組下標(biāo) */
int i,response;
for(i = 1;i <= 8;i++)
count[i] = 0; /* 各欄目計數(shù)器清0 */
for( i = 1;i <= 1000;i++) {/* 調(diào)試時可把1000改小,如10 */
printf("input your response: "); /* 輸入提示 */
scanf("%d",&response);
if(response < 1 || response > 8) /* 檢查投票是否有效*/
printf("this is a bad response: %d\n",response);
else
count[response]++; /* 對應(yīng)欄目得票加1 */
}
printf("result:\n"); /* 輸出各欄目得票情況 */
for(i = 1;i <= 8;i++)
printf("%4d%4d\n",i,count[i]);
return 0;
}
數(shù)組:相同類型數(shù)據(jù)的有序集合,在內(nèi)存中連續(xù)存放。
由數(shù)組名和下標(biāo)惟一地確定每個數(shù)組元素
每個元素都屬于同一類型
一批相同類型的變量使用同一個數(shù)組變量名,用下標(biāo)來相互區(qū)分。
優(yōu)點:表述簡潔,可讀性高;便于使用循環(huán)結(jié)構(gòu)
5.1 數(shù)組
5.1.1 導(dǎo)例:如何存儲和操作某班C語言課程的成績
問題描述
一個班(假設(shè)有10名同學(xué))C語言課程考試后,如何利用C程序來顯示這些同學(xué)的成績?如果有的同學(xué)的成績統(tǒng)計錯了,如何將它改正過來?如果有2個同學(xué)的成績統(tǒng)計混淆了,如何將他們的成績交換過來?
5.1 數(shù)組
5.1.1 導(dǎo)例:如何存儲和操作某班C語言課程的成績
問題分析
如何存儲學(xué)生成績?
變量
數(shù)組
5.1 數(shù)組
數(shù)組
一維數(shù)組的定義和引用
1、定義
類型名 數(shù)組名[數(shù)組長度]
類型名:數(shù)組元素的類型
數(shù)組名:數(shù)組(變量)的名稱,標(biāo)識符
數(shù)組長度:常量表達式,給定數(shù)組的大小
int a[10];
定義一個含有10個整型元素的數(shù)組 a
char c[200];
定義一個含有200個字符元素的數(shù)組 c
float f[5];
定義一個含有5個浮點型元素的數(shù)組 f
2、數(shù)組的內(nèi)存結(jié)構(gòu)
3、引用
先定義,后使用
只能引用單個的數(shù)組元素,不能一次引用整個數(shù)組
數(shù)組名[下標(biāo)]
下標(biāo):整型表達式
取值范圍:[0,數(shù)組長度-1]
int a[10];
10個元素:a[0]、a[1]、…… a[9]
數(shù)組元素的使用方法與同類型的變量相同
scanf("%d", &a[i]);
count[i]++;
temp = a[index]; a[index]= a[k]; a[k] = temp;
printf("%d ", a[i]);
區(qū)分?jǐn)?shù)組的定義和數(shù)組元素的引用
定義數(shù)組
類型名 數(shù)組名[數(shù)組長度]
引用數(shù)組元素
數(shù)組名[下標(biāo)]
int a[10];
a[0] = a[9] = 0;
a[k] = temp;
一維數(shù)組的初始化
定義數(shù)組時,對數(shù)組元素賦初值
類型名 數(shù)組名[數(shù)組長度] = {初值表};
int a[10] = {1,2,3,4,5,6,7,8,9,10};
a[0]=1, a[1]=2,...… a[9]=10
靜態(tài)數(shù)組、動態(tài)數(shù)組的初始化
static int b[5] = {1, 2, 3, 4, 5};
靜態(tài)存儲的數(shù)組如果沒有初始化,所有元素自動賦0
static int b[5];
動態(tài)存儲的數(shù)組如果沒有初始化,所有元素為隨機值
auto int c[5]; 等價與 int c[5];
針對部分元素的初始化
static int b[5] = {1, 2, 3};
b[0] = 1, b[1] = 2, b[2] = 3, b[3] = 0, b[4] = 0
auto int fib[20] = {0, 1};
fib[0] = 0, fib[1] = 1, 其余元素不確定
如果對全部元素都賦初值,可以省略數(shù)組長度
int a[ 10 ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
使用一維數(shù)組編程
數(shù)組和循環(huán)
for(i = 0; i < n; i++)
printf("%d ", a[i]);
數(shù)組下標(biāo)作為循環(huán)變量,通過循環(huán),逐個處理數(shù)組元素
一維數(shù)組示例
例5-1 用數(shù)組計算fibonacci數(shù)列的前10個數(shù),并按每行打印5個數(shù)的格式輸出。1, 1, 2, 3, 5, ……
例5-2 順序查找法。輸入5個整數(shù),將它們存入數(shù)組a中,再輸入1個數(shù)x,然后在數(shù)組中查找x,如果找到,輸出相應(yīng)的最小下標(biāo),否則,輸出“Not Found”。
例5-3 輸入n(n<10),再輸入n個數(shù)
(1) 輸出最小值和它所對應(yīng)的下標(biāo)
(2) 將最小值與第一個數(shù)交換,輸出交換后的n個數(shù)
例5-4 選擇排序法。
例5-5 二分查找法。
例 5-1 計算fibonacci數(shù)列
用數(shù)組計算fibonacci數(shù)列的前10個數(shù),并按每行打印5個數(shù)的格式輸出。
1, 1, 2, 3, 5, 8, 13, ……
用數(shù)組計算并存放fibonacci數(shù)列的前10個數(shù)
f[0] = f[1] = 1
f[n] = f[n-1] + f[n-2] 2≤n≤9
例 5-1 源程序
#include <stdio.h>
int main(void)
{
int i;
int fib[10] = {1, 1}; /* 數(shù)組初始化 */
for(i = 2; i < 10; i++)
fib[i] = fib[i - 1] + fib[i - 2];
for(i = 0; i < 10; i++) {
printf("%6d", fib[i]);
if((i + 1) % 5 == 0) /* 5個數(shù)換行 */
printf("\n");
}
return 0;
}
例5-2在數(shù)組中查找一個給定的數(shù)
輸入5個整數(shù),將它們存入數(shù)組a中,再輸入1個數(shù)x,然后在數(shù)組中查找x,如果找到,輸出相應(yīng)的下標(biāo),否則,輸出“Not Found”。
輸入:2 9 8 1 9
9
輸出:1
輸入:2 9 8 1 6
7
輸出:Not Found
例 5-2 源程序
#include <stdio.h>
int main(void)
{ int i, flag, x;
int a[5];
printf(“Enter 5 integers: ");
for(i = 0; i < 5; i++)
scanf("%d", &a[i]);
printf(“Enter x: ");
scanf("%d", &x);
flag = 0;
for(i = 0; i < 5; i++)
if(a[i] == x){
printf("Index is %d\n", i);
flag = 1;
break;
}
if(flag == 0) printf("Not Found\n");
return 0;
}
例 5-2思考(1)
#include <stdio.h>
int main(void)
{ int i, flag, x; int a[5];
printf(“Enter 5 integers: ");
for(i = 0; i < 5; i++)
scanf("%d", &a[i]);
printf(“Enter x: ");
scanf("%d", &x);
flag = 0;
for(i = 0; i < 5; i++)
if(a[i] == x){
printf("Index is %d\n", i);
flag = 1;
break;
}
if(flag == 0) printf("Not Found\n");
return 0;
}
例 5-2 思考(2)
#include <stdio.h>
int main(void)
{ int i, sub, x;
int a[5];
printf(“Enter 5 integers: ");
for(i = 0; i < 5; i++)
scanf("%d", &a[i]);
printf(“Enter x: ");
scanf("%d", &x);
sub = -1;
for(i = 0; i < 5; i++)
if(a[i] == x)
sub = i;
if(sub != -1) printf("Index is %d\n", sub);
else printf("Not Found\n");
return 0;
}
例 5-3 求最小值
#include <stdio.h>
int main(void)
{ int i, min, n;
int a[10];
printf(“Enter n: ");
scanf("%d", &n);
printf(“Enter %d integers: ", n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
min = a[0];
for(i = 1; i < n; i++)
if(a[i] < min) min = a[i];
printf("min is %d \n", min);
return 0;
}
例 5-3(1) 求最小值及其下標(biāo)
輸入n(n<10), 再輸入n個數(shù), 輸出最小值和它所對應(yīng)的下標(biāo)。
用index記錄最小值對應(yīng)的下標(biāo)
a[index]就是最小值
求最小值及下標(biāo)
#include <stdio.h>
int main(void)
{ int i, index, n;
int a[10];
printf(“Enter n: ");
scanf("%d", &n);
printf(“Enter %d integers: ", n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
index = 0;
for(i = 1; i < n; i++)
if(a[i] < a[index]) index = i;
printf("min is %d\tsub is %d\n", a[index], index);
return 0;
}
例 5-5(2) 交換最小值
輸入n(n<10), 再輸入n個數(shù),將最小值與第一個數(shù)交換,輸出交換后的n個數(shù)。
用index記錄最小值對應(yīng)的下標(biāo)
a[index]就是最小值
最小值與第一個數(shù)交換
a[index] <==> a[0]
導(dǎo)例5.1.2 選擇法排序
利用選擇排序方法將5.1.1導(dǎo)例中全班同學(xué)C語言課程成績按照從低到高的順序排列。
選擇法(1)
82 76 69 92 53 78 80 88 65 72(n=10)
10個數(shù)(a[0]~a[9])中找最小數(shù),與a[0]交換
(1) 53 76 69 92 82 78 80 88 65 72 a[4] <==> a[0]
9個數(shù)(a[1]~a[9])中找最小數(shù),與a[1]交換
(2) 53 65 69 92 82 78 80 88 76 72 a[8] <==> a[1]
8個數(shù)(a[2]~a[9])中找最小數(shù),與a[2]交換
(3) 53 65 69 92 82 78 80 88 76 72 a[2] <==> a[2]
7個數(shù)(a[3]~a[9])中找最小數(shù),與a[3]交換
(4) 53 65 69 72 82 78 80 88 76 92 a[9] <==> a[3]
6個數(shù)(a[4]~a[9])中找最小數(shù),與a[4]交換
(5) 53 65 69 72 76 78 80 88 82 92 a[8] <==> a[4]
5個數(shù)(a[5]~a[9])中找最小數(shù),與a[5]交換
(6) 53 65 69 72 76 78 80 88 82 92 a[5] <==> a[5]
選擇法(1)
76 69 92 53 78 80 88 65 72(n=10)
5個數(shù)(a[5]~a[9])中找最小數(shù),與a[5]交換
(6) 53 65 69 72 76 78 80 88 82 92 a[5] <==> a[5]
4個數(shù)(a[6]~a[9])中找最小數(shù),與a[6]交換
(7) 53 65 69 72 76 78 80 88 82 92 a[6] <==> a[6]
3個數(shù)(a[7]~a[9])中找最小數(shù),與a[7]交換
(8) 53 65 69 72 76 78 80 82 88 92 a[8] <==> a[7]
2個數(shù)(a[8]~a[9])中找最小數(shù),與a[8]交換
(9) 53 65 69 72 76 78 80 82 88 92 a[8] <==> a[8]
選擇法(2)
(1) n個數(shù) (a[0]~a[n-1]) 中找最小數(shù),與 a[0] 交換
(2) n-1個數(shù) (a[1]~a[n-1]) 中找最小數(shù),與 a[1] 交換
……
(n-1) 2個數(shù) (a[n-2]~a[n-1]) 中找最小數(shù),與 a[n-2] 交換
流程圖
選擇法排序 (程序段)
for( i =0; i < n -1; i ++)
{
k = i; /*查找最小元素的下標(biāo)*/
for( j = i +1; j < n; j ++)
if( a[j]< a[k])
k = j;
if( k != i) /*將a[k]和a[i]交換*/
{
t = a[k];
a[k] = a[i];
a[i] = t;
}
}
5.1.4導(dǎo)例:二分查找算法
已知某個成績,查找該成績在班級中的排名,即返回該成績下標(biāo)。
二分查找流程圖
二分法查找 (程序段)
int binarySearch(int a[], int n, int x)
{
int low = 0;
int high = n - 1;
while(low <= high)
{
int mid = (low + high)/2;
if(x==a[mid]) return mid; /*mid為x在數(shù)組中的下標(biāo)*/
else if(x<a[mid]) /*在左半邊*/
high = mid - 1;
else /*在右半邊*/
low = mid + 1;
}
return -1; /*沒找到*/
}
5.1.6 統(tǒng)計字符串中字符的信息
問題描述
從鍵盤輸入一個字符串,統(tǒng)計出該字符串中數(shù)字、大寫字母、小寫字母以及其他字符的數(shù)量。
問題分析
如何表示字符串?
#include <stdio.h>
#include <string.h>
void main ( )
{ char s[50];
int dig=0,up=0,lw=0,other=0;
int i,n;
gets(s); /*通過鍵盤給s賦值*/
n=strlen(s); /*求s的長度并賦值給n*/
for(i=0;i<n;i++){
if(s[i]>='0' && s[i]<='9') /*求 s中數(shù)字的個數(shù)*/
dig++;
else if(s[i]>='A' && s[i]<='Z') /*求 s中大寫字母的個數(shù)*/
up++;
else if(s[i]>='a' && s[i]<='z') /*求 s中小寫字母的個數(shù)*/
lw++;
else other++; /*求 s中其他字符的個數(shù)*/
}
printf("dig= %d up= %d lw= %d other= %d\n",dig,up,lw,other);
}
一維字符數(shù)組
字符串的存儲和運算可以用一維字符數(shù)組實現(xiàn)
一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。
char str[80];
定義一個含有80個字符型元素的數(shù)組str
char t[5]={'H', 'a', 'p', 'p', 'y'};
初始化數(shù)組 t
字符串的存儲
char c[11]=“I am happy”;
字符串遇 '\0' 結(jié)束
第一個 ‘\0’ 前面的所有字符和 ‘\0’ 一起構(gòu)成了字符串 “I am happy”
'\0' 之后的其他數(shù)組元素與該字符串無關(guān)
一維字符數(shù)組
char c[11]=”I am happy”;
當(dāng)用字符串初始化字符數(shù)組時,必須在定義字符數(shù)組的同時進行初始化,而不能定義完字符數(shù)組后再將字符串賦值給字符數(shù)組
字符串
字符串常量
用一對雙引號括起來的字符序列
一個字符串結(jié)束符 '\0'
"Happy"
6個字符 'H' 'a’ 'p’ 'p’ 'y' '\0'
字符串與一維字符數(shù)組
字符串:一個特殊的一維字符數(shù)組
把字符串放入一維字符數(shù)組(存儲)
對字符串的操作 ===> 對字符數(shù)組的操作
2. 對字符串的操作
把字符串放入一維字符數(shù)組(存儲)
對字符串的操作 ===> 對字符數(shù)組的操作
普通字符數(shù)組:數(shù)組元素的個數(shù)是確定的,一般用下標(biāo)控制循環(huán)
字符串:沒有顯式地給出有效字符的個數(shù),只規(guī)定在字符串結(jié)束符 '\0' 之前的字符都是字符串的有效字符,一般用結(jié)束符 '\0' 來控制循環(huán)
循環(huán)條件:s[i] != '\0'
輸出字符串
for(i = 0; s[i] != '\0'; i++)
putchar(s[i]);
for(i = 0; i < 80; i++)
putchar(s[i]);
for(i = 0; i < len; i++)
putchar(s[i]);
3. 字符串的存儲-賦值和輸入
把字符串放入一維字符數(shù)組(存儲)
對字符串的操作 ===> 對字符數(shù)組的操作
存儲
數(shù)組初始化
static char s[6]= "Hello";
賦值
s[0]='a'; s[1]='\0';
或者
static char s[6]= "a";
字符串的輸入
字符串的存儲
字符數(shù)組初始化:static char s[6] = "Happy";
賦值:s[0] = 'a'; s[1] = '\0';
輸入
'\0' 代表空操作,無法輸入
輸入時,設(shè)定一個輸入結(jié)束符
將輸入結(jié)束符轉(zhuǎn)換為字符串結(jié)束符 '\0'
判斷回文
程序解析-判斷回文
# include <stdio.h>
int main(void) {
int i, n, m;
char s[10];
printf("Enter a string: ");
i = 0;
while((s[i] = getchar( )) != '\n')
i++;
s[i] = '\0';
for(n = 0,m = i-1; n < m;n++,m--)
if(s[n] != s[m])
break;
if( n >= m)
printf(“ It is a plalindrome\n”);
else
printf(“ It is not a plalindrome\n”);
return 0;
}
統(tǒng)計數(shù)字字符個數(shù)
輸入一個以回車結(jié)束的字符串(少于80個字符),統(tǒng)計其中數(shù)字字符的個數(shù)。
分析:
數(shù)組長度取上限80
以 '\n' 做為輸入結(jié)束符
#include <stdio.h>
int main(void)
{ int count, i;
char str[80];
printf(“Enter a string: ");
i = 0;
while((str[i] = getchar( )) != '\n')
i++;
str[i] = '\0'; /* 輸入結(jié)束符=>字符串結(jié)束符 */
count = 0;
for(i = 0; str[i] != '\0'; i++)
if(str[i] <= '9' && str[i] >= '0')
count++;
printf("count = %d\n", count);
return 0;
}
例: 進制轉(zhuǎn)換
輸入一個以回車結(jié)束的字符串(少于80個字符),濾去所有的非十六進制字符后,組成一個新字符串(十六進制形式),輸出該字符串并將其轉(zhuǎn)換為十進制數(shù)后輸出。
分析
字符串小結(jié)
字符串:一個特殊的一維字符數(shù)組 '\0'
把字符串放入一維字符數(shù)組(存儲)
數(shù)組長度足夠
字符數(shù)組初始化: static char s[80] = "Happy";
賦值: s[0] = 'a'; s[1] = '\0';
輸入: 輸入結(jié)束符 ==> 字符串結(jié)束符'\0'
i = 0;
while((s[i]=getchar( )) != '\n')
i++;
s[i] = '\0';
把字符串放入一維字符數(shù)組(存儲)
對字符串的操作 ===> 對字符數(shù)組的操作
只針對字符串的有效字符和字符串結(jié)束符 '\0'
檢測
for(i = 0; s[i] != '\0'; i++)
putchar(s[i]);八下語文第五課大自然的語言ppt:這是八下語文第五課大自然的語言ppt,包括了學(xué)習(xí)目標(biāo),作者介紹,背景介紹,字詞積累,記一記,整體感悟,合作探究,研讀文章,品味語言等內(nèi)容,歡迎點擊下載。
八年級下冊語文大自然的語言ppt:這是八年級下冊語文大自然的語言ppt,包括了教學(xué)目標(biāo),作者,字詞學(xué)習(xí),快速閱讀課文,回答下列問題,決定大自然語言出現(xiàn)的因素,研究物候?qū)W的意義等內(nèi)容,歡迎點擊下載。
大自然的語言PPT1:這是大自然的語言PPT1,包括了生字我會認(rèn),自讀要求,課文探究,三葉蟲化石簡介,課文小結(jié),拓展運用等內(nèi)容,歡迎點擊下載。