c語言大學實用教程蘇小紅版答案
① c語言答案
C語言程序設計復習:
1、理解以下術語的含義:數組、函數、地址 指針 指針變數 直接訪問 間接訪問、結構體
2、用起泡法對10個數由小到大排序(P134例題)
5、輸入10個學生的成績,分別用函數實現下列功能:
1)計算所有學生的平均分;
2) 計算學生成績中最高分;
3) 計算學生成績中最低分;
4) 統計及格學生人數;
5) 查找成績為指定成績(如90)記錄,如果沒有,請給出提示,如果有,請統計滿足條件的記錄數。
6、有一個已經排好序的數組,今輸入一個數,要求按原來排序的規律將它插入數組中。(P153習題7.4)
7、編寫一個函數,輸入一個4位數字,要求輸出這4個數字字元,但每兩個數字字元間空一個空格。如輸入1990,應輸出「1 9 9 0」。(要求用函數)(P202習題8.8)
8、編寫一個函數,求一個字元串的長度。在main函數中輸入字元串,並輸出其長度。(要求用指針,不能使用strlen()函數) (P279習題10.6)
9、編寫一個程序,打入月份號,輸出該月的英文月名。例如,輸入「3」則輸出「March」(要求用指針數組)。(P279習題10.18)
10、將一個數組中的值按逆序重新存放。例如,輸入的數組順序為8,6,5,4,1,要求改為1,4,5,6,8。(P153習題7.5)
11、編寫一個函數用「起泡法」對輸入的10個字元按由小到大順序排序(要用函數)。(P202習題8.11)
12、將數組a中n個整數按相反順序存放(要用函數)。(P237例題10.7)
13、輸入一行文字,找出其中大寫字母、小寫字母、空格、數字及其他字元各有多少。(要求用指針實現)(P279習題10.8)
14、編寫一個函數,將兩個字元串連接(要用自定義函數,不能用strcat函數)。(P202習題8.6)
15、輸入3個字元串,按照由小到大的順序輸出。(要求用指針) (P278習題10.2)
16、輸入10整數,將其中最小的數與第一個數對換,把最大的數與最後一個數對換。寫三個函數:1、輸入10個數; 2、進行處理; 3、輸出10個數(數據對換要求用指針實現)(P278習題10.3)
參考答案:
2、用起泡法對10個數由小到大排序
#include <stdio.h>
void main()
{ int a[10]; int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++)
scanf("%d「,&a[i]);
printf(「\n");
for(j=0;j<9;j++)
for(i=0;i<10-j;i++)
if (a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=0;i<10;i++)
printf(「%d 「,a[i]);
}
3、用遞歸方法求n階勒讓德多項式的值,遞歸公式為(要求用函數):(P202習題8.13)
pn(x)= 1 n=0
x n=1
((2n-1)*x-pn-1(x)-(n-1)*pn-2(x)/n n>1
3、#include <stdio.h>
void main()
{
int x,n;
float p(int,int);
printf(「input n & x:」);
scanf(「%d,%d」,&n,&x);
printf(「n=%d,x=%d\n」,n,x);
printf(「P%d(%d)=%6.2f\n」,n,x,p(n,x));
}
float p(int n,int x)
{
if(n==0)
return 1;
else if(n==1)
return x;
else
return ((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n;
}
4、輸入3個整數,按由小到大的順序輸出(要求用指針類型)(P228例題)
4、輸入3個整數,按由小到大的順序輸出(要求用指針類型)
#include <stdio.h>
void main()
{
void sort (int*a, int*b,int*c);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void sort (int *a, int *b,int *c)
{
int tmp;
if (*a>*b)
{
tmp=*a;
*a=*b;
*b=tmp;
}
if (*a>*c)
{
tmp=*a;
*a=*c;
*c=tmp;
}
if (*b>*c)
{
tmp=*b;
*b=*c;
*c=tmp;
}
}
5、輸入10個學生的成績,分別用函數實現下列功能:
1)計算所有學生的平均分;
6) 計算學生成績中最高分;
7) 計算學生成績中最低分;
8) 統計及格學生人數;
9) 查找成績為指定成績(如90)記錄,如果沒有,請給出提示,如果有,請統計滿足條件的記錄數。
#include <stdio.h>
void main()
{
int average(int a[]);
int max(int a[]);
int min(int a[]);
int pass(int a[]);
int search(int a[],int g);
int i,j,g;
int score[10],aver,m1,m2,p,s;
printf("Please input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%d",&score[i]);
printf("\n");
aver=average(score);
m1=max(score);
m2=min(score);
p=pass(score);
printf("平均分為: %d\n",aver);
printf("最高分為: %d\n",m1);
printf("最低分為: %d\n",m2);
printf("及格人數為: %d\n",p);
printf("需要查找嗎?\n");
printf("輸入1繼續查找,輸入0退出(1/0):");
scanf("%d",&j);
if(j==1)
{
printf("請輸入要查找的分數: \n");
scanf("%d",&g);
s=search(score,g);
if(s==0)
printf("沒有滿足條件的記錄");
else
printf("成績為%d的學生共有%d名\n",g,s);
}
}
int average(int a[])
{
int i;
int aver,sum=a[0];
for(i=1;i<10;i++)
sum=sum+a[i];
aver=sum/10;
return aver;
}
int max(int a[])
{
int i;
int m=a[0];
for(i=1;i<10;i++)
if(m<a[i])
m=a[i];
return m;
}
int min(int a[])
{
int i;
int m=a[0];
for(i=1;i<10;i++)
if(m>a[i])
m=a[i];
return m;
}
int pass(int a[])
{
int i;
int s=0;
for(i=0;i<10;i++)
if(a[i]>=60)
s++;
return s;
}
int search(int a[],int g)
{
int i;
int s=0;
for(i=0;i<10;i++)
if(a[i]==g)
s++;
return s;
}
6、已有一個已排好次序的數組,要求輸入一個數後,按原先排序的規律將它插入數組中。
Void main()
{int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("初始數組如下:");
for (i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("輸入插入數據:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{for(i=0;i<10;i++)
{ if(a[i]>number)
{temp1=a[i];
a[i]=number;
for(j=i+1;j<1;j++)
{temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("a%6d",a[i]);
}
7、編寫一個函數,輸入一個4位數字,要求輸出這4個數字字元,但每兩個數字字元間空一個空格。如輸入1990,應輸出「1 9 9 0」。
#include <iostream>
void main()
{
void stradd(char str[]);
char str[80];
printf("輸入一串數字\n\n");
gets(str);
stradd(str);
printf("\n\n加空格後的字元串\n\n");
puts(str);
}
void stradd(char str[])
{
char a[80];
int i=0,j;
for(j=0;str[j]!='\0';j++)
{
a[i]=str[j];
a[i+1]=' ';
i+=2;
}
a[i]='\0';
for(i=0;a[i]!='\0';i++)
{
str[i]=a[i];
}
str[i]='\0';
}
8、編寫一個函數,求一個字元串的長度。在main函數中輸入字元串,並輸出其長度。(要求用指針實現)
#include "stdio.h"
int stringlength( char *str )
{int n;
n=0;
While(*str!=0)
{n++;
str++;
}
Return(n);
}
int main()
{
char str〔100〕,
int len,
printf("Please input a string: "),
scanf("%s".str),
len = stringlength( str ),
printf("The string』s length is %d.".len),
return 0;
}
9、編寫一個程序,打入月份號,輸出該月的英文月名 n。例如,輸入「3」則輸出「March」,要求用指針數組處理。
#include <stdio.h>
main()
{ char *month_name[13]={"illegal month","January","February","March","April",
"May","June","July","August","September","October","November","December"};
int n;
printf("Input month: ");
scanf("%d",&n);
if((n<=12)&&(n>=1))
printf("It is %s.\n",*(month_name+n));
else
printf("It is wrong.\n");
}
10、將一個數組中的值按逆序重新存放。例如,輸入的數組順序為8,6,5,4,1,要求改為1,4,5,6,8。
#include <stdio.h>
#define N 5;
void main()
{
int a[N],i,temp;
printf(「enter array a:\n」);
for(i=0;i<N;i++)
scanf(「%d」,&a[i]);
printf(「array a:\n」);
for(i=0;i<N;i++)
{temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}
printf(「\nNow, array a:\n」);
for(i=0;i<N;i++)
printf(「%4d」,a[i]);
printf(「\n」);
}
11、編寫一個函數用「起泡法」對輸入的10個字元按由小到大順序排序(要用函數)。
#include <stdio.h>
void main()
{ char str[80];
void sort(char str[]);
printf("輸入一個字元串\n\n");
gets(str);
sort(str);
printf("\n\n字元由小到大排序為:\n\n");
puts(str);
}
void sort(char str[])
{ int i,j;
char temp;
for(i=0;i<strlen(str);i++)
{
for(j=0;j<strlen(str)-i-1;j++)
{
if(str[j]>str[j+1])
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
}
12、將數組a中n個整數按相反順序存放(要用函數)。
#include <stdio.h>
void inv(int x[ ],int n)/*形參x是數組名*/
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;}
return;
}
void main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf(「轉換前的數組為:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
inv(a,10);
printf(「轉換後的數組為:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
13、輸入一行文字,找出期中大寫字母、小寫字母、空格、數字及其他字元各有多少?(要求用指針實現)
#include<stdio.h>
#include<string.h>
int main()
{
char str[40];//創建字元串數組
int count[5]={0,0,0,0};//創建計數器數組並初始化
printf("Please input a string .\n");
scanf("%s",str);
char *p=str;//指針p指向字元串數組str
int n=strlen(str);//確定輸入字元串的長度
for(int i=0;i<n;i++)
{
if(*(p+i)>='A'&&*(p+i)<='Z')
{
count[0]++;//統計大寫字母數目
}
else if(*(p+i)>='a'&&*(p+i)<='z')
{
count[1]++;//統計小寫字母數目
}
else if(*(p+i)>='0'&&*(p+i)<='9')
{
count[2]++;//統計數字數目
}
else if(*(p+i)=='')
{
count[3]++;//統計空格數目
}
else
{
count[4]++;//統計其他字元數目
}
}
printf("大寫字母 小寫字母 數字 空格 其他字元:\n");
for(i=0;i<5;i++)
{
printf("%d\t ",count[i]);//列印各統計數目
}
printf("\n\n");
return 0;
}
14、編寫一個函數,將兩個字元串連接。
#include < stdio.h >
#include<string.h>
void concatenate(char string1[],char string2[],char string[])
{
int i,j;
for(i=0;string1[i]!=』\0』;i++)
string[i]=string1[i];
for(j=0;string2[j]!=』\0』;j++)
string[i+j]=string2[j];
string[i+j]=』\0』;
}
void main()
{
char s1[100],s2[100],s[100];
printf(「input string1:」);
scanf(「%s」,s1);
printf(「input string2:」);
scanf(「%s」,s2);
concatenate(s1,s2,s)
printf(「the new string is %s」,s);
}
15、輸入3個字元串,按照由小到大的順序輸出。 (要求用指針實現)
#include <stdio.h>
void main()
{
void sort (int*a, int*b,int*c);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void sort (int *a, int *b,int *c)
{
int tmp;
if (*a>*b)
{
tmp=*a;
*a=*b;
*b=tmp;
}
if (*a>*c)
{
tmp=*a;
*a=*c;
*c=tmp;
}
if (*b>*c)
{
tmp=*b;
*b=*c;
*c=tmp;
}
}
16、輸入10整數,將其中最小的數與第一個數對換,把最大的數與最後一個數對換。寫三個函數:1、輸入10個數; 2、進行處理; 3、輸出10個數(數據對換要求用指針實現)
#include <stdio.h>
void input(int number[])
{
Int I;
Printf(「input 10 numbers:」);
For(i=0;i<10;i++)
Scanf(「%d」,&number[i]);
}
void max_min_value(int number[])
{
int *max,*min,*p,temp;
max=min=number;
For(p=number+1;p<number+10;p++)
if(*p>*max)
max=p;
else if(*p<*min)
min=p;
temp=number[0];number[0]=*min;*min=temp;
if(max=number) max=min;
temp=number[9];number[9]=*max;*max=temp;
}
void output(int number[])
{
int *p;
printf(「Now, they are: 「);
for(p=number;p<number+10;p++)
Printf(「%d」,*p);
printf(「\n」);
}
void main()
{
int number[10];
input(number);
max_min_value(number);
output(number);
}
② 誰有c語言程序設計蘇小紅版第8單元課後實驗題答案
#include <stdio.h>
#define N 30
int Average(int score[], int n); /* Average()函數原型 */
void ReadScore(int score[], long num[],int n); /* ReadScore()函數原型 */
void DataSort(int score[], long num[], int n);
void PrintScore(int score[], long num[], int n);
void DataNum(int score[], long num[], int n);
void PrintNum(int score[], long num[], int n);
void SearchNum(int score[],long num[],int n);
void Statistics(int score[], int n);
void List(int score[], long num[], int n);
int main()
{
int choice,n,score[N], aver=0,i,sum=0;
long num[N];
do
{
printf("1: Append record\n");
printf("2: Caculate total and average score of course\n");
printf("3: Sort in descending order by score\n");
printf("4: Sort in ascending order by number\n");
printf("5: Search by number\n");
printf("6: Statistic analysisc\n");
printf("7: List record\n");
printf("0: Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1:printf("Total students are:");
scanf("%d",&n);
ReadScore (score,num,n);
break;
case 2:aver = Average(score, n);
printf("Average score is %d\n",aver);
for (i=0; i<n; i++)
{
sum += score[i];
}
printf("Caculate total score is %d\n",sum);
break;
case 3:DataSort(score,num,n);
printf("Sorted scores :\n");
printf(" number: score: \n");
PrintScore(score,num,n);
break;
case 4:DataNum(score,num,n);
printf("Sorted number :\n");
printf(" number: score: \n");
PrintNum(score,num,n);
break;
case 5:SearchNum(score,num,n);
break;
case 6:Statistics(score, n);
break;
case 7:List(score,num,n);
break;
case 0:break;
}
}while(choice!=0);
return 0;
}
/* 1、函數功能:輸入n個學生的學號及某門課成績 */
void ReadScore(int score[], long num[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("Input student's ID and score:");
scanf("%ld%d",&num[i],&score[i]);
}
}
/* 2、函數功能:計算課程的總分和平均分 */
int Average(int score[], int n) /* Average()函數定義 */
{
int i, sum = 0;
for (i=0; i<n; i++)
{
sum += score[i];
}
return sum / n;
}
/* 3、函數功能:成績由高到低排序 */
void DataNum(int score[], long num[], int n)
{
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if (score[j]>score[k])
{
k=j;
}
}
if(k!=i)
{
temp1=score[k];score[k]=score[i];score[i]=temp1;
temp2=num[k];num[k]=num[i];num[i]=temp2;
}
}
}
/* 函數功能:顯示排序後學生學號和成績 */
void PrintNum(int score[], long num[], int n)
{
int i;
for(i=0;i<n;i++)
{
printf(" %10ld %4d\n",num[i],score[i]);
}
}
/* 4、函數功能:學號由小到大排序 */
void DataSort(int score[], long num[], int n)
{
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if (num[j]<num[k])
{
k=j;
}
}
if(k!=i)
{
temp1=num[k];num[k]=num[i];num[i]=temp1;
temp2=score[k];score[k]=score[i];score[i]=temp2;
}
}
}
/* 函數功能:顯示排序後學生學號和成績 */
void PrintScore(int score[], long num[], int n)
{
int i;
for(i=0;i<n;i++)
{
printf(" %10ld %4d\n",num[i],score[i]);
}
}
/* 5、函數功能:按學號查詢學生排名及其成績*/
void SearchNum(int score[],long num[],int n)
{
long number;
int i;
printf("Please input the number you want to search:");
scanf("%ld",&number);
for(i=0;i<n;i++)
{
if(num[i]==number)
{
printf(" %ld %d\n",num[i],score[i]);
return;
}
}
printf("\nNot found!\n");
}
/* 6、函數功能:統計個人類別的人數以及所佔的百分比*/
void Statistics(int score[], int n)
{
int i,a=0,b=0,c=0,d=0,e=0;
for(i=0;i<n;i++)
{
if(score[i]>=90)
{
a++;
}
else if(score[i]>=80)
{
b++;
}
else if(score[i]>=70)
{
c++;
}
else if(score[i]>=60)
{
d++;
}
else
{
e++;
}
}
printf("優秀人數:%d\t占:%.3f%%\n良好人數:%d\t占:%.3f%%\n中等人數:%d\t占:%.3f%%\n及格人數:%d\t占:%.3f%%\n不及格人數:%d\t占:%.3f%%\n",a,(float)100*a/n,b,(float)100*b/n,c,(float)100*c/n,d,(float)100*d/n,e,(float)100*e/n);
}
/* 7、函數功能:輸入學生學號、成績、總分、平均分*/
void List(int score[], long num[], int n)
{
int i, j=0;
for(i=0;i<n;i++)
{
printf("學號:%ld\t考試成績:%d\n",num[i],score[i]);
j+=score[i];
}
printf("課程總分:%d\n平均分:%.3f\n",j,(float)j/n);
}
③ 大學c語言,急求答案!!!
這個程序里的變數名不正確。C語言的變數名可以由數字、字母和下劃線組成,但是一般只能以下劃線和字母開頭,所以程序中的2cd和π是不符合要求的。另外變閉和蘆量名轎帶也不能使用C語言中棚困的關鍵字,所以使用for也是不符合要求的。
④ C語言程序設計語言(第3版)第4章課後習題答案蘇小紅版
網路文庫鏈接
⑤ 求c語言程序設計第二版(蘇小紅)課後第五章的本章實驗題答案
《03 00 C語言 全59講 主講-蘇小紅 哈爾濱工業大學》網路網盤資源免費下載
鏈接: https://pan..com/s/1YAxqTBta2f0LJoGW2eytGw
03 00 C語言 全59講 主講-蘇小紅 哈爾濱工業大學|各學科 學習視頻目錄|1-30講|課程目錄.txt|C語言哈工大教材 蘇小紅.jpg|9.flv|8.flv|7.flv|6.flv|5.flv|4.flv|30.flv|3.flv|29.flv|28.flv
⑥ c語言習題答案
第三題:b=25/3%3表示25整除3為8,8再除3求余,所以為2;
第八題:(float)(a+b)/2+(int)x%(int)y意為前一部分為浮點型為2.5,後一部分意為3除以2求余,因為是整型,所以小數點後面省略!!所以為3.5;
第十一題:short型溢出了,換個小點的數,無符號整型邊界應為65535;
如果輸出值還不對就是操作系統的問題!!!
記住:「/」表示整除,「%」是兩個整數整除求余!!!!!