第一篇:西北農(nóng)林科技大學(xué)C語言上機(jī)實習(xí)4答案
實習(xí)四答案
1、字符串連接
/* exer 4-1 兩串字符連接 */由鍵盤任意輸入兩串字符,不用庫函數(shù)strcat,連接將兩串字符。
輸入: 兩串字符
輸出: 連接將兩串字符
輸入樣例: abc def
輸出樣例: abcdef
#include
unsigned int i,j;
char soustr[80],desstr[80];
//printf(“please enter soustr:”);
gets(soustr);
/* 輸入原串 */
//printf(“please enter desstr:”);
gets(desstr);
/* 輸入目的串 */
i = strlen(soustr);
/* 取目的串尾部位置 */
for(j=0;j<=strlen(soustr);j++,i++)
{
soustr[i] = desstr[j];
/* 將原串依次接入目的串尾部 */
}
puts(soustr);}
2、簡單加密程序
/* exer 4-2 字符加密 */ 由鍵盤任意輸入一串字符,對其進(jìn)行加密,加密原則為:如果為字母,將其循環(huán)右移2個字母,其他字符保持不變。
輸入: 一串字符
輸出: 加密后的字符串
輸入樣例: abl2CDxyz 輸出樣例: cdl2EFzab
提示: 1.可用gets()和puts()輸入輸出字符串。
2.利用ASCII碼運算進(jìn)行加密。
3.循環(huán)右移的含義是:將a-z,A-Z各看成一個環(huán)進(jìn)行移動,即y右移2個字母后為a,z右移2個字母后為b;Y右移2個字母后為A,Z右移2個字母后為B。
#include
unsigned int j;
char soustr[80],secstr[80];
//printf(“please enter soustr:”);
gets(soustr);
/* 輸入原串 */
for(j=0;j<=strlen(soustr);j++)
{
if(soustr[j]>='A' && soustr[j]<='Z')
secstr[j] =(soustr[j]-'A'+2)%26+'A';/*計算大寫字母密文*/
else if(soustr[j]>='a' && soustr[j]<='z')
secstr[j] =(soustr[j]-'a'+2)%26+'a';/*計算小寫字母密文*/
else
secstr[j] = soustr[j];
/* 其它字符不變 */
}
puts(secstr);}
3、矩陣對角線元素求和
/* exer 4-3 主和輔對角線上元素之和 */ 輸入一個5×5的數(shù)組,分別求其主對角線和輔對角線上元素之和。輸入: 5×5的數(shù)組
輸出: 主對角線和輔對角線上元素之和
輸入樣例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 輸出樣例: 65 65
主對角線為從矩陣的左上角至右下角的連線,在數(shù)組中即指行列下標(biāo)相同的元素,輔對角線為從矩陣的右上角至左下角的連線,這些元素的下標(biāo)之間也可用相應(yīng)的表達(dá)式表達(dá)。
#include
int i,j;
int a[5][5];
int sum1=0,sum2=0;
//printf(“please enter soustr:”);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf(“%d”,&a[i][j]);
/* 輸入數(shù)組 */
for(i=0;i<5;i++)
{
sum1 = sum1+a[i][i];
/* 主對角線 */
sum2 = sum2+a[i][4-i];
/* 輔對角線 */
}
printf(“%d %dn”,sum1,sum2);}
4、數(shù)據(jù)順序調(diào)整
/* exer 4-4 將最大數(shù)調(diào)到最前面,最小數(shù)調(diào)到最后面 */
由鍵盤任意輸入10個數(shù),將最大數(shù)調(diào)到最前面,最小數(shù)調(diào)到最后面。輸入: 任意10個數(shù) 輸出: 數(shù)據(jù)調(diào)整后的10個數(shù)。輸入樣例: 0 1 2 3 4 5 6 7 8 9
輸出樣例: 9 1 2 3 4 5 6 7 8 0 提示:① 定義四個變量d1、d2、x1、x2,分別存放最大數(shù)、最小數(shù)及它們的位置;
② 在循環(huán)開始前,將第一個元素作為參考,將其值分別存入d1、x1,將其下標(biāo)分別存入d2、x2;
③ 在循環(huán)中將其它元素逐一與d1比較,若比d1大,將其存入d1,并將其下標(biāo)存入d2;否則將其與x1比較,若比x1小,將其存入x1,并將其下標(biāo)存入x2;
④ 結(jié)束循環(huán)后,將d2所示位置的數(shù)與第一個數(shù)交換,將x2所示位置的數(shù)與最后一個數(shù)交換,然后輸出數(shù)組所有元素即可。
#include
int i,a[10],temp;
int kmax=0,kmin=0;
//printf(“please enter :”);
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
{
if(a[i]>a[kmax])
kmax = i;
else if(a[i] kmin = i; } if(kmax == 9 && kmin == 0) { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; } else { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; temp = a[9]; a[9] = a[kmin]; a[kmin] = temp; } for(i=0;i<9;i++) printf(“%d ”,a[i]); printf(“%dn”,a[i]); /* 輸入數(shù)組 */ /* 找最大數(shù)位置 */ /* 找最小數(shù)位置 */ /* 與最前面的數(shù)交換 */ /* 與最前面的數(shù)交換 */ /* 與最后面的數(shù)交換 */ /* 輸出數(shù)組 */ } 5、字符個數(shù)統(tǒng)計 /* exer 4-5 統(tǒng)計大寫字母、小寫字母、數(shù)字及其它字符的個數(shù) */ 由鍵盤輸入任意一串字符串,將其存入一個字符數(shù)組,統(tǒng)計其中的大寫字母、小寫字母、數(shù)字以及其他字符的個數(shù)。 輸入: 任意一串字符串 輸出: 大寫字母、小寫字母、數(shù)字以及其他字符的個數(shù)。 輸入樣例: abcdefg123456ABCDEFG 輸出樣例: 7 7 6 #include unsigned int i; int cap=0,low=0,dig=0,oth=0; /* 定義并初始化 */ char str[80]; //printf(“please enter str:”); gets(str); /* 輸入原串 */ for(i=0;i { if(str[i]>='A' && str[i]<='Z') cap++; /* 統(tǒng)計大寫字母 */ else if(str[i]>='a' && str[i]<='z') low++; /* 統(tǒng)計小寫字母 */ else if(str[i]>='0' && str[i]<='9') dig++; /* 統(tǒng)計數(shù)字 */ else oth++; /* 統(tǒng)計其它字符 */ } printf(“%d %d %d %dn”,cap,low,dig,oth);} 6、學(xué)生成績計算 /* exer 4-6 求每一個學(xué)生的總成績和平均成績 */ 已知10個學(xué)生的5門課程的成績,將其存入一個二維數(shù)組,求每一個學(xué)生的總成績和每一個學(xué)生的平均成績。 輸入: 10個學(xué)生的5門課程的成績 輸出: 每一個學(xué)生的總成績和每一個學(xué)生的平均成績 輸入樣例: 90.5 80 70 89 84.6 91.5 81 71 88 84.7 92.5 82 72 87 84.8 93.5 83 73 86 84.9 94.5 84 74 85 84.0 95.5 85 75 84 84.1 96.5 86 76 83 84.2 97.5 87 77 82 84.3 98.5 88 78 81 84.4 99.5 89 79 80 84.5 輸出樣例: 414.100006 82.820000 416.200012 83.240005 418.299988 83.659996 420.399994 84.080002 421.500000 84.300003 423.600006 84.720001 425.700012 85.139999 427.799988 85.559998 429.899994 85.979996 432.000000 86.400002 #include int i,j; float score[10][5]={0.0f}; float allsco[10],avesco[10]; for(i=0;i<10;i++) for(j=0;j<5;j++) scanf(“%f”,&score[i][j]); /* 輸入學(xué)生的成績 */ for(i=0;i<10;i++) { allsco[i] = 0; /* 總成績清零 */ for(j=0;j<5;j++) { allsco[i] = allsco[i]+score[i][j]; /* 累加總成績 */ } avesco[i] = allsco[i]/5; /* 計算平均成績 */ } for(i=0;i<10;i++) printf(“%f %fn”,allsco[i],avesco[i]);/* 輸出成績 */ } 7、姓名排序 /* exer 4-7 姓名排序 */ 由鍵盤任意輸入10個學(xué)生的姓名(以拼音形式),將它們按照ASCⅡ碼的順序從小到大排序。10個學(xué)生的姓名(以拼音形式) 輸出: 按照ASCⅡ碼的順序從小到大排序 輸入樣例: 輸入: zhang ziang zaang zbang zcang zdang zeang zfang zgang zhang 輸出樣例: zaang zbang zcang zdang zeang zfang zgang zhang zhang ziang #include int i,j,k; char name[10][80],temp[80]; //printf(“please enter :”); for(i=0;i<10;i++) gets(name[i]); /* 輸入姓名數(shù)組 */ for(i=0;i<9;i++) /* 排序 */ { k = i; for(j=i+1;j<10;j++) if(strcmp(name[k],name[j])>0) k = j; if(k!=i) { strcpy(temp,name[i]); strcpy(name[i],name[k]); strcpy(name[k],temp); /* 交換 */ } } for(i=0;i<10;i++) puts(name[i]); /* 輸出姓名數(shù)組 */ } 8、輸出楊輝三角形 /* exer 4-8 打印楊輝三角形 */ 編程實現(xiàn)n階(n<10)楊輝三角形的輸出,n=6時,楊輝三角形如下所示: 1 1 1 2 1 3 1 4 1 5 10 5 輸入: 楊輝三角形的階數(shù)n。 輸出: n階楊輝三角形。 輸入樣例: 6 輸出樣例: 1 1 1 1 2 1 3 1 4 1 5 10 5 提示: ① 楊輝三角形的特點:第一列和對角線上的元素值均為1,即a[i][0]=a[i][i]=1;其余位置元素的值=上一行本列元素值+上一行前一列元素值,如第三行第二列2就是第二行第一列+第二行第二列,計算公式為a[i][j]=a[i-1][j-1]+ a[i-1][j]。 ② 應(yīng)先對第一列和對角線元素賦值,然后再為其它元素賦值。 #include int i,j; int a[6][6]; for(i=0;i<6;i++) { a[i][i] = 1; /* 主對角線為1 */ a[i][0] = 1; /* 第1列為1 */ } for(i=2;i<6;i++) for(j=1;j a[i][j] = a[i-1][j-1]+a[i-1][j];/* 計算 */ for(i=0;i<6;i++) { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); /* 輸出 */ printf(“n”); /* 換行 */ } } 或者 #include int main(){ int n,i,j; int a[20][20]; printf(“please input one number:”); scanf(“%d”,&n); for(i=0;i { a[i][i]=1; a[i][0]=1; } for(i=2;i for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); printf(“n”); } return 0;} 實習(xí)五答案 1、用指針實現(xiàn)排序 /* exer 5-1 由鍵盤輸入 10個整數(shù),將它們按由小到大順序排列 */ #include int a[10],*p = NULL; /* 說明數(shù)組和指針 */ int i, j, temp; for(p = a;p < a + 10;p++) /* 指針從數(shù)組首到尾 */ { scanf(“%d”, p); /* 利用指針依次輸入 */ } p = a; for(i = 0;i < 9;i++) /* 利用指針依次比較 */ { for(j = i + 1;j < 10;j++) if(*(p + i)> *(p + j)) { temp = *(p + i); *(p + i)= *(p + j); *(p + j)= temp; } } for(p=a;p < a + 9;p++) printf(“%d ”, *p); printf(“%dn”, *p);} 2、用指針實現(xiàn)字符串排序 /*exer 5-2 將 10個長度小于20的字符串排序*/ #include char szStr[10][20],*psz[10],szTemp[20]; int i,j; for(i = 0;i < 10;i++) { psz[i] = szStr[i]; /*指針數(shù)組的每個元素指向各行串*/ } for(i = 0;i < 10;i++) { gets(psz[i]); /*輸入10個字符串*/ } for(i = 0;i < 9;i++) /*字符串排序*/ { for(j = i + 1;j < 10;j++) { if(strcmp(psz[i], psz[j])> 0) { strcpy(szTemp, psz[i]); strcpy(psz[i], psz[j]); strcpy(psz[j], szTemp); } } } for(i = 0;i < 10;i++) { puts(psz[i]); /*輸出字符串*/ } } 3、數(shù)據(jù)倒置 /*exer 5-3 將具有10個元素的一維數(shù)組中的數(shù)據(jù)倒置 */ #include int a[10], iTemp, *p, *q; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i); /*輸入數(shù)組*/ } p = a; q = a + 9; for(p = a, q = a + 9;p < q;p++, q--) /*首尾交換*/ { iTemp = *p; *p = *q; *q = iTemp; } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*輸出*/ } } 4、用指針實現(xiàn)數(shù)據(jù)位置調(diào)整 /*exer 5-4 輸入 10個整數(shù),將最大的調(diào)到最后,最小的調(diào)到最前*/ #include void swap(int *px, int *py); int main(void){ int a[10], iTemp, *pMax, *pMin; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i);/*輸入數(shù)組*/ } pMax = a; /*最大值指針指向數(shù)組首地址*/ pMin = a; /*最小值指針指向數(shù)組首地址*/ for(i = 1;i < 10;i++) { if(*(a+i)> *pMax) pMax = a + i; if(*(a+i)< *pMin) pMin = a + i; } /*最大值是第1個元素,最小值是最后一個元素*/ if(pMax == a && pMin == a + 9) { swap(pMax, pMin); } else { /*最小值與第一個元素交換*/ swap(a, pMin); /*最大值與最后一個元素交換*/ swap(a + 9, pMax); } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*輸出*/ } return 0;} void swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp;} 5、用指針實現(xiàn)查找二維數(shù)組中最大數(shù)及其位置 /*exer 5-5 找出二維數(shù)組(設(shè)3行4列)中的最大數(shù)及其位置 */ #include int a[3][4],(*p)[4], iCol, iRow; int i, j; p = a; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) scanf(“%d”, *(p + i)+ j); /*輸入數(shù)組*/ } iCol = 0; /*設(shè)最大數(shù)及其位置 */ iRow = 0; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) { if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol)) { iRow = i; iCol = j; /*修改位置*/ } } } printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);} 6、用指針實現(xiàn)子字符串提取 /*exer 5-6 由鍵盤輸入一串字符,從字符串下標(biāo)為m開始 取出n個字符(m和n由鍵盤輸入),形成一個新的字符串 */ #include char szStrSour[80], szStrDest[80], *pszSour, *pszDest; int i, m, n; gets(szStrSour); /* 輸入字符串 */ scanf(“%d%d”, &m, &n); /* 輸入位置和長度 */ pszSour = szStrSour + m; /* 確定起始位置 */ pszDest = szStrDest; for(i = 0;i < n;i++) /* 依次取n個字符 */ { *pszDest = *pszSour; pszDest++; pszSour++; } *pszDest = '
第二篇:西北農(nóng)林科技大學(xué) c語言上機(jī) 實習(xí)5答案