7.main()
{ char s[][6]={”1234”,”56789”},*p[2];
int i,sum=0;
p[0]=s[0],p[1]=s[1];
for(i=0;p[0][i」!=’\0’;i++,i++)
sum=10*sum+p[0][i]-’0’;
for(i=1;p[1]「i」!=’\0’;i++,i++)
sum=10*sum+p[1][i]-’0’;
printf("%d",sum);
。
【解析】本程序的第1條語句是定義2行5列的二維字符型數(shù)組s,并且賦了初值如下:
s[0][0]='1's[0][1]='2's[0][2]='3's[0][3]='4's[0][4]='\0'
s[1][0]='5's[1][1]='6's[1][2]='7's[1][3]='8's[1][4]='9'S[1][5]='\0'
此外還定義了字符型指針數(shù)組p,利用第3條語句賦了值,結(jié)果如下:
p[0]指向以“s[0][i]”為數(shù)組名的一維數(shù)組首地址,即p[0][i]就相當于s[0][i]
p[1]指向以“s[1][i]”為數(shù)組名的一維數(shù)組首地址,即p[1][i]就相當于s[1][i]
第2條語句定義了整型變量i(用于單重循環(huán)的控制變量)和sum,并對sum清0。
第4條語句是for循環(huán),控制變量i初值為0,每次加2,控制循環(huán)的條件是“p[0」[i]!='\
0',注意其中的“p[0][i]”就是“s[0][i]”,這個控制循環(huán)的條件可以理解為“二維字符型數(shù)組元素s[0][i]不是字符串的結(jié)束標記則繼續(xù)循環(huán)”。從控制變量i的取位來看,二維字符型數(shù)組元素只能取s[0][0]、s[0][2],因為下一個數(shù)組元素是s[0][4],該元素值是'\0'。再分析循環(huán)體中的語句,其中“ p[0][i]-'0'”是將數(shù)組元素s[0][i]中存放的數(shù)組字符減去'0',結(jié)果將是該數(shù)字字符對應(yīng)的一位整數(shù),整個語句是將sum變量中的原值乘以10以后再加上當前的數(shù)字。循環(huán)結(jié)束后的sum值就是s[0」[0」和s[0][2]中的兩個數(shù)字組成的2位十進制數(shù),結(jié)果為13。
按照同樣的道理,可以分析出第2個for循環(huán)作用是完全相同的,它是把s[1」[1」、s[1][3]中的兩個數(shù)字(前者為6,后者為8)拼接到sum的原值中,結(jié)果sum中值為十進制整數(shù)1368。程序的最后一個語句就是輸出變量sum中的整數(shù)值。
【參考答案】 1368
8.int p(m,n)
int m,n;
{ int i,pp;
for(i=pp=1;i PP*= m; return(pp); } main() { printf("%d"、 p(3,4)); 。 【解析】主函數(shù)中只有一條輸出語句,輸出結(jié)果是函數(shù)調(diào)用“p(3,4)”的返回值。所以本題的關(guān)鍵是函數(shù)p的功能。 分析函數(shù)p(),有兩個參數(shù)m、n。函數(shù)體中關(guān)鍵的是for循環(huán)語句。分析這個循環(huán)語句可以看出,控制變量是i,初值為1;,終值為n,每次循環(huán)i加1。所以是標準的次數(shù)型循環(huán),共計循環(huán)n次。循環(huán)體中是將參數(shù)m的值乘到變量pp中,變量pp在開始循環(huán)時已經(jīng)設(shè)置初值為1,所以整個循環(huán)是將n個m乘到pp中。顯然循環(huán)語句的功能是計算m”。而函數(shù)的返回值正是這個變量pp中的值。 由此分析可知,函數(shù)調(diào)用“p(3,4)”的返回值就是34。結(jié)果為 81,也就是本程序的輸 出結(jié)果。 【參考答案】81
2010年軟考程序員如何區(qū)分printf與fprintf函數(shù)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |