国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C例題講解

2019-11-17 05:40:38
字體:
來源:轉載
供稿:網友

  1.以下程序統計從終端輸入的字符中每個大寫字母的個數。用#號作為輸入結束標志,請填空。
#include <stdio.h>
#include <ctype.h>
main()
{ int num[26],I; char c;
for (I=0;I<26;I++) num[I]=0;
while (____!='#')
if (isupper(c)) num[c-65]+=1;
for (I=0;I<26;I++)
if (num[I]) }
對這類問題的解答,筆者的方法是分析加猜測,最后再驗證。
首先,應充分理解題意。
本題要求統計從終端輸入的字符中每個大寫字母的個數。我們可以從自己怎樣設計這個程序來分析,要達到題目的要求,應該要有基本的兩步:
1. 從鍵盤輸入字符(結束條件是"#")
2. 判定該字符是否大寫字母,若是,應將該字符的
計數器加1其次,再來分析已給出的程序。
從主程序的第一行定義的變量int num[26],I;char c;看,我們可以猜測num[] 這個變量是用于對大寫字母的計數(從A--Z共26個字母),變量C用于存放輸入的字符。
從程序的地二行for (I=0;I<26;I++) num[I]=0;對變量num[]賦初始值,我們基本上可以肯定num[]是用作字符計數。
程序第三行while ( !='#'),即使沒有后面的提示,從!='#'這一形式也能知道這是用于判定字符輸入是否結束的,因為題目中已明確指出‘#'號是作為輸入結束標志。所以所要填寫的應是從終端輸入字符的語句。C語言中帶回顯輸入字符的函數有getche()及getchar(),但getche()的函數原型說明在頭文件conio.h中,而此程序并未用到此頭文件,所以只有用getchar(),其原型所在的頭函數stdio.h已包括進來,可以使用。該函數輸入的字符應賦值給變量c,因c是該程序中唯一聲明的字符型變量,而且下一句中的isupper(c)中也只是對c操作。綜上述,我們應填寫的部分應是c=getchar(),放入語句中應是:
do while ((c-getchar())!='#') (注重加括號)
填好后再來看整個語句的意義是:
判定從終端輸入的字符是否結束符,若不是,則判定是否是大寫字母,是大寫字母的話,其對應的計數器加1。此句的num[c-65]是理解的要害和難點。我們知道大寫字母A到Z的ASCII碼是65--90,減去65后是0--25,正好是數組變量num[]的下標范圍。所以字母A對應的計數器是num[0],字母Z對應的計數器是num[25]。句中把字符變量c與整型常量一起運算,在其他語言中是不答應的,在c語言中是合法的。
程序中最后一句輸出語句for (I=0;I<26;I++) if (num[I]) printf("%c:%d/n",I num[I])中if (num[I])是必需的,它用于判定計數器是否為0,實際上是看其對應的字符是否輸入過,若沒輸入過而將其個數0打印出來,盡管不是錯誤,但不合符題意。此句中的填空I 后應填寫什么,想必大家已經明白:從輸出語句的語義及輸出格式看,應填寫大寫字符及其個數,而I的取值是0--25,對應的num[I]是大寫字母A--Z的字符個數,而I本身對應的ASCII碼不是大寫字母;從上一句的分析,大寫字母的ASCII碼65--90減去65(c-65)對應著0--25來看,很自然地I后面應填寫‘+65'。那么完整的語句如下:
for (I=0;I<26;I++) if (num[I]) printf("%c:%d/n",I+65,num[I]);
至此,整個程序填寫完畢。答題時,應再將整個完整的程序從頭至尾瀏覽一遍,看是否前后一致,有無矛盾或錯誤、疏漏。上面的程序也不復雜,對于復雜的程序有時一遍分析不能填完所有的空,還需前后反復分析或猜測。
2.下面的程序調用getone函數開辟一個動態存儲單元,調用assone函數把數據輸入此動態存儲單元,調用outone函數輸出此動態存儲單元中的數據。請填空。
#include <stdio.h>
getone(s)
int **s;
{ *s=(int*)malloc(sizeof(int));}
assone(a)
int *a;
{scanf("%d",__);}
outone(b)
int *b;
{printf("%d/n",__);}
main()
{int *p;
getone(&p);
assone(p);
outone(p);
}
此題比較簡單,主要是考查一些基本知識。
從scanf("%d",__);的形式上看,是要求輸入一個整數,而我們知道,用scanf輸入整數時,需給出其存放地址,a本身就是一個指針,可以指向變量的地址,因而應這樣填空:scanf("%d",a);注間不要填成scanf("%d",&a);。
printf("%d/n",__);的形式是輸出整數變量值,在此函數(outone)中,變量b是指針型變量,應收其值(*b)輸出,所以應填寫成:printf("%d/n",*b);,而不要填成printf("%d/n",b);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滦南县| 灵台县| 黎城县| 武威市| 渭南市| 尤溪县| 上思县| 庆阳市| 仁化县| 庆安县| 三江| 龙口市| 岑溪市| 南澳县| 桦南县| 常山县| 弋阳县| 萍乡市| 东乡县| 丽水市| 凤凰县| 大丰市| 海原县| 莱西市| 通道| 双城市| 醴陵市| 五大连池市| 江源县| 金堂县| 观塘区| 固安县| 鄂托克旗| 石城县| 牡丹江市| 山丹县| 乌海市| 富民县| 靖州| 康乐县| 嘉义县|