1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。 解:
#include<stdio.h>
int main()
{
double score[10], sum=0.0, avg;
printf("请输入10名学生的成绩\n");
for (int i = 0; i < 10; ++i) {
scanf("%lf", &score[i]);
sum += score[i];
}
avg = sum / 10.0;
printf("该10名学生的平均成绩为: %f\n", avg);
return 0;
}
2. 已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。 解:
#include<stdio.h>
int main()
{
double score[10];
int max=0;
printf("请输入10名学生的成绩\n");
for (int i = 0; i < 10; ++i) {
scanf("%lf", &score[i]);
if(score[max] < score[i]){
max = i;
}
}
printf("该10名学生的最高成绩为: %f,序号为: %d\n", score[max], max);
return 0;
}
3. 有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。 解:
#include<stdio.h>
int main()
{
double score[3][4], sum[4], avg[4];
for (int i = 0; i < 3; i++) {
printf("请输入第%d名学生的成绩\n",i+1);
for (int j = 0; j < 4; j++) {
scanf("%lf", &score[i][j]);
sum[j] += score[i][j];
}
}
printf("平均成绩分别为:");
for(int i=0; i<4; i++){
avg[i] = sum[i] / 3.0;
printf("%f ", avg[i]);
}
return 0;
}
4. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序。 解:
#include<stdio.h>
int main()
{
double score[5][4];
double avg[5] = {0};
double temp;
for (int i = 0; i < 5; i++) {
printf("请输入第%d名学生的成绩\n",i+1);
for (int j = 0; j < 4; j++) {
scanf("%lf", &score[i][j]);
avg[i] += score[i][j];
}
avg[i] /= 4.0;
}
for(int i=1; i<=4; i++){
for(int j=0; j<=4-i;j++){
if(avg[j] > avg[j+1]){
temp = avg[j];
avg[j] = avg[j+1];
avg[j+1] = temp;
for (int k = 0; k < 4; ++k) {
temp = score[j][k];
score[j][k] = score[j+1][k];
score[j+1][k] = temp;
}
}
}
}
for (int i = 0; i < 5; i++) {
printf("第%d名学生的成绩:",i+1);
for (int j = 0; j < 4; j++) {
printf("%.2f ",score[i][j]);
}
printf("平均成绩为:%.2f \n",avg[i]);
}
return 0;
}
5. 将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 解:
#include<stdio.h>
#define n 5
int main()
{
int a[n] = {8, 6, 5, 4,1};
int temp;
printf("逆序前:");
for (int i = 0; i < n; i++) {
printf("%d ",a[i]);
}
for(int i=0; i< n/2; i++){
temp = a[i];
a[i] = a[n-1-i];
a[n-1-i] = temp;
}
printf("\n逆序后:");
for (int i = 0; i < n; i++) {
printf("%d ",a[i]);
}
return 0;
}
6. 有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。 解:
#include<stdio.h>
#define n 15
int main()
{
int a[n] = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int temp;
printf("请输入你要查找的数:");
scanf("%d", &temp);
int low=0, high= n-1;
if(temp>a[low] || temp<a[high]) printf("无此数");
else{
int mid = (low + high) / 2;
while(low <= high) {
if(temp < a[mid]) low = mid + 1;
else if(temp > a[mid]) high = mid - 1;
else break;
mid = (low + high) / 2;
}
if(low <= high) printf("该数是该数组中第%d个元素的值", mid+1);
else printf("无此数");
}
return 0;
}
7. 输出以下图案:
*****
*****
*****
*****
*****
解:
#include<stdio.h>
void main()
{
int i,j,k;char a[5][5];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]='*';
printf("%c",a[i][j]);
}
printf("\n");
for(k=1;k<=i+1;k++)
printf(" ");
}
printf("\n");
}
8. 有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。 解:
#include<stdio.h>
#include<string.h>
#define n 5
int main()
{
char text[3][80];
int num=0, upLetter=0, lowLetter=0, space=0, others=0;
for(int i=0; i<3; i++){
printf("请输入一行字符串:");
gets(text[i]);
for(int j=0; j<80 && text[i][j]!='\0'; j++){
if(text[i][j]>='A'&&text[i][j]<='Z') upLetter++;
else if(text[i][j]>='a'&&text[i][j]<='z') lowLetter++;
else if(text[i][j]>='0'&&text[i][j]<='9') num++;
else if(text[i][j]==' ') space++;
else others++;
}
}
for(int i=0; i<3; i++)
puts(text[i]);
printf("英文大写字母有%d个、小写字母有%d个、空格有%d个、数字有%d个、以及其它字符有%d个", upLetter, lowLetter, space,num,others);
return 0;
}
9. 有一行电文,已按下面规律译成密码: A->Z a->z B->Y b->y C->X c->x … 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。假如已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码和原文。 解:
#include<stdio.h>
void main()
{
int i;char str1[100],str2[100];
gets(str1);
for(i=0;str1[i]!='\0';i++)
if(str1[i]>=65&&str1[i]<=90) str2[i]=155-str1[i];
else if(str1[i]>=97&&str1[i]<=122) str2[i]=219-str1[i];
else str2[i]=str1[i];
printf("%s\n%s\n",str1,str2);
}
10. 编一程序,将两个字符串连接起来,(1)用strcat函数;(2)不用strcat函数。 解:
(1)
#include<stdio.h>
void main()
{
int i,j;char str1[100],str2[100],str3[201];
gets(str1);
gets(str2);
str3=strcat(str1,str2);
printf("%s\n%s\n%s\n",str1,str2,str3);
}
(2)
#include<stdio.h>
void main()
{
int i,j;char str1[100],str2[100],str3[201];
gets(str1);
gets(str2);
for(i=0;str1[i]!='\0';i++)
str3[i]=str1[i];
for(j=0;str2[j]!='\0';j++)
str3[j+i]=str2[j];
printf("%s\n%s\n%s\n",str1,str2,str3);
}
|