1.请参照本章例题,编写一个C程序例题,输出以下信息:
*************
very good!
**************
#include<stdio.h>
int main()
{
printf("**************\n\n");
printf("very good!\n");
printf("**************\n\n");
return 0;
}
2.编写一个C程序,输入a,b,c三个值,输出最大值
#include<stdio.h>
int main()
{
int a,b,c,max;
printf("please put a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b)
max=b;
if(max<c);
max=c;
printf("The large number is:%d\n",max);
return 0;
}
第四章选择结构设计:
1.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)要求输入数据后对其进行检查是否为小于1000的正数,若不是,要求重新输入。
#include<stdio.h>
#include<math.h>
int main()
{
int num;
printf("请输入一个小于1000的正数:\n");
scanf("%d\n",&num);
while(num>=1000)
printf("%d不小于1000请重新输入\n",num);
scanf("%d\n",&num);
printf("%d输出num的平方根整数部分:%d\n",num,num=sqrt(num));//只输出整数部分
printf("%d的平方根整数部分:%0f\n",num,sqrt(num)); //四舍五入
return 0;
}
2.有一个函数
#include<stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x<1)
y=x;
else
if(x>=1&&x<10)
y=2*x-1;
else
y=3*x-11;
printf("y=%d\n",y);
return 0;
}
8。给出一百分制成绩,要求输出成绩等级'A‘,'B’,'C‘,'D’,'E‘,90分以上为'A’,80-89为‘B’,70-79为'C‘,60-69为'D',60分以下为'E’
#include<stdio.h>
#include<math.h>
int main()
{
float score;
char grade;
printf("请输入学生成绩:\n");
scanf("%f",&score);
if(score>=90)
printf("该学生成绩等级为A");
else if(score<=89&&score>=80)
printf("该学生成绩等级为B");
else if(score<=79&&score>=70)
printf("该学生成绩等级为C");
else if(score<=69&&score>=60)
printf("该学生成绩等级为D");
else("该学生成绩等级为E")
return 0;
}
11.输入四个整数,要求由小到大的顺序进行输出
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,d,t;
printf("请输入4个整数");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b)
{
t=a;a=b;b=c;
}
if(a>c)
{
t=a;a=c;c=t;
}
if(a>d)
{
t=a;a=d;d=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
if(b>d)
{
t=b;b=d;d=t;
}
if(c>d)
{
t=c;c=d;d=t;
}
printf("%d,%d,%d,%d",a,b,c,d);
return 0;
}
第五章循环结构程序设计
1.输入一行字符,分别统计其中英文字母,空格,数字,和其他字符个数。
#include<stdio.h>
#include<math.h>
int main()
{
char c;
int alphabet_num=0,blank_num=0,digit_num=0,other_num=0;
printf("请输入一行字符:\n");
c=getchar();
while(c!='\n')
{
if(c>='A'&&c<='Z'||c>='a'&&c<='z')
alphabet_num++;
else if(c==' ')
blank_num++;
else if(c>='0'&&c<='9')
digit_num++;
else
other_num++;
c=getchar() ;
}
printf("字母个数:%d\n,空格个数:%d\n,数字个数:%d\n,其它:%d\n",alphabet_num,blank_num,digit_num,other_num);
return 0;
}
2.输出所有水仙花数,所谓水仙花数是指一个三位数,其个位数字立方和等于该数本身,例如,153为水仙花数。
#include <stdio.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int n1, n2, n3, i;
for (i = 100; i < 999; ++i)
{
n1 = i / 100; // 百位数
n2 = (i - 100 * n1) / 10; //十位数
n3 = i % 10; //个位数
//printf("%d %d %d\n", n1, n2, n3);
if ((pow(n1, 3) + pow(n2, 3) + pow(n3, 3)) == i)
{
printf("%d 是一个水仙花数\n", i);
}
}
return 0;
}
3.吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,有多吃了一个,第2天早上又将剩下的桃子吃了一般,又多吃了1个。以后每天早上都吃了前一天剩下的一半零1个,到第十天早上想再吃时,就剩下一个桃子了。求第1天摘了多少个桃子。
#include <stdio.h>
int main(int argc, char *argv[]) {
int total = 1, i;
for (i = 0; i < 9; ++i)
{
total = 2 * (total + 1);
}
printf("总数为: %d\n", total);
return 0;
}
第六章利用数组处理批量数据
1.用选择法对10个整数进行排序
#include<stdio.h>
void print_array(int arr[], int n)
{
int i = 0;
for ( ; i < n; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void main()
{
int a[10];
int i, j, max_index, temp;
//输入10个数
for (i = 0; i < 10; ++i)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
printf("排序前:");
print_array(a, 10);
//选择排序
for (i = 0; i < 9; ++i)
{
max_index = i;
for (j = i + 1; j < 10; ++j)
{
if (a[j] < a[max_index])
{
max_index = j;
}
}
temp = a[i];
a[i] = a[max_index];
a[max_index] = temp;
}
printf("排序后:");
print_array(a, 10);
return;
}
2.有一个已排好序的数组,要求输入一个数后,按原来的规律将它插入数组中。
#include<stdio.h>
void print_array(int arr[], int n)
{
int i = 0;
for ( ; i < n; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void main()
{
int a[11];
int i, temp, data;
//输入10个数
for (i = 0; i < 10; ++i)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
printf("插入前:");
print_array(a, 10);
printf("要插入的数:");
scanf("%d", &a[10]);
for (i = 9; i >=0 ; --i)
{
if (a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
else
{
break;
}
}
printf("插入后:");
print_array(a, 11);
return;
}
3.有一篇文章,共三行文字,每行80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格以及其它字符个数。
#include<stdio.h>
#define NUM 80
void main()
{
char essay[3][NUM+1];
int i, j;
int upper = 0, lower = 0, space = 0, digit = 0, other = 0;
for(i = 0; i < 3; ++i)
{
printf("输入第%d行语句,不超过%d个字符:", i , NUM);
gets(essay[i]);
}
for (i = 0; i < 3; ++i)
{
for(j = 0; j < NUM; ++j)
{
if (essay[i][j] <= 'Z' && essay[i][j] >= 'A')
{
++upper;
}
else if (essay[i][j] <= 'z' && essay[i][j] >= 'a')
{
++lower;
}
else if (essay[i][j] <= '9' && essay[i][j] >= '0')
{
++digit;
}
else if (essay[i][j] == ' ')
{
++space;
}
else
{
++other;
}
}
}
printf("大写:%d 小写:%d 数字:%d 空格:%d 其它:%d \n", upper, lower, digit, space, other);
return;
}
4.找出一个二维数组中的鞍点,即在该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
#include<stdio.h>
void main()
{
int a[][4] = {{9, 80, 205, 40},
{90, -60, 96, 1},
{210, -3, 101, 89}};
int i, j, k;
int row, col;
for (i = 0; i < 3; ++i)
{
col = 0;
//找出第i行中,最大元素所在的列,存到col中
for (j = 0; j < 4; ++j)
{
if (a[i][j] > a[i][col])
{
col = j;
}
}
row = 0;
//找出第col列中最小的元素所在的行,存到row中。
for (k = 0; k < 3; ++k)
{
if (a[k][col] < a[row][col])
{
row = k;
}
}
if (row == i)
{
printf("a[%d][%d]是一个鞍点\n", i, col);
}
}
return;
}
第七章用函数实现模块化程序设计
1.写一个判素数的函数,在主函数输入一个整数,输出是否为素数消息
#include <stdio.h>
#include <stdlib.h>
//判断number是否为素数。
//为素数,则返回1,否则返回0
int prime(unsigned int number);
int main(int argc, char *argv[]) {
unsigned int num;
printf("请输入一个正整数: ");
scanf("%u", &num);
if (prime(num))
{
printf("%u是一个素数\n", num);
}
else
{
printf("%u不是一个素数\n", num);
}
return 0;
}
int prime(unsigned int number)
{
if (number == 0 || number == 1 || number == 2)
{
return 1;
}
else
{
int i = 2;
for ( ; i < number; ++i)
{
if (number % i == 0)
{
return 0;
}
}
return 1;
}
2.写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。
#include <stdio.h>
#include <stdlib.h>
void cpy(char s[], char c[])
{
int i,j;
for (i = 0, j = 0; s[i] != '\0'; ++i)
{
if (s[i] == 'a' ||
s[i] == 'e' ||
s[i] == 'i' ||
s[i] == 'o' ||
s[i] == 'u')
{
c[j++] = s[i];
}
}
c[j] = '\0';
return;
}
int main(int argc, char *argv[]) {
char src[100];
char dest[100];
printf("请输入字符串: ");
scanf("%s", src);
cpy(src, dest);
printf("%s中的元音字母有%s\n", src, dest);
return 0;
}
3.输入10个学生的5门课的成绩,分别用函数得到以下功能:
(1)计算每个学生的平均分(2)计算每门课的平均分(3)找出所有50个分数中的最高分数所对应的学生和课程(4)计算平均分方差。
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 //学生个数
void avarage_each_student(float score[][5], int num)
{
int i = 0;
for (; i < num; ++i)
{
printf("第%d个学生的五门课的平均成绩: %f\n", i + 1,
(score[i][0] + score[i][1] + score[i][2] + score[i][3] + score[i][4]) / 5);
}
}
void avarage_each_course(float score[][5], int num)
{
int i = 0, j = 0;
for (; i < 5; ++i)
{
float total = 0;
for (j = 0; j < num; ++j)
{
total += score[j][i];
}
printf("第%d门课的平均成绩: %f\n", i + 1, total / num);
}
}
void max(float score[][5], int num)
{
int i, j;
int max_i = 0, max_j = 0;
float max_value = 0;
for (i = 0; i < num; ++i)
{
for (j = 0; j < 5; ++j)
{
if (score[i][j] > max_value)
{
max_i = i;
max_j = j;
max_value = score[i][j];
}
}
}
printf("第%d的第%d门课的成绩最高\n", max_i + 1, max_j + 1);
}
int main(int argc, char *argv[]) {
float score[STU_NUM][5];
int i,j;
for (i = 0; i < STU_NUM; ++i)
{
printf("请输入第%d个学生的五门课的成绩: ", i+1);
scanf("%f %f %f %f %f", &score[i][0], &score[i][1], &score[i][2], &score[i][3], &score[i][4]);
}
avarage_each_student(score, STU_NUM);
avarage_each_course(score, STU_NUM);
max(score, STU_NUM);
return 0;
}
4.用一个函数来实现将一行字符串中最长的单词输出,此行字符串从主函数传递给该函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void max_word(char sentence[], int num)
{
char max_word[100] = {'\0'};
char temp_word[100] = {'\0'};
int word_found = 0;
int i = 0, j = 0;
for ( ; i < num; ++i)
{
if (sentence[i] != ' ' && sentence[i] != '\0') //找到单词开始处
{
if (!word_found)
{
word_found = 1;
j = 0;
}
temp_word[j++] = sentence[i];
}
else
{
if (word_found)//找到单词结束处
{
temp_word[j] = '\0';
if (strlen(max_word) < strlen(temp_word))
{
strcpy(max_word, temp_word);
}
word_found = 0;
}
if (sentence[i] == '\0' )
{
break;
}
}
}
printf("最长的单词为:%s", max_word);
return;
}
int main(int argc, char *argv[]) {
char sentence[100];
printf("请输入一句语句: ");
gets(sentence);
max_word(sentence, 100);
return 0;
}
第八章善于利用指针
1。输入三个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大的顺序输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
int a, b, c;
int *pa = &a, *pb = &b, *pc = &c;
printf("输入三个数: ");
scanf("%d %d %d", pa, pb, pc);
if ((*pa > *pb) && (*pa > *pc) && (*pb > *pc))
{
printf("由大到小为: %d %d %d\n", *pa, *pb, *pc);
}
if ((*pa > *pb) && (*pa > *pc) && (*pc > *pb))
{
printf("由大到小为: %d %d %d\n", *pa, *pc, *pb);
}
if ((*pb > *pa) && (*pb > *pc) && (*pa > *pc))
{
printf("由大到小为: %d %d %d\n", *pb, *pa, *pc);
}
if ((*pb > *pa) && (*pb > *pc) && (*pc > *pa))
{
printf("由大到小为: %d %d %d\n", *pb, *pc, *pa);
}
if ((*pc > *pa) && (*pc > *pb) && (*pa > *pb))
{
printf("由大到小为: %d %d %d\n", *pc, *pa, *pb);
}
if ((*pc > *pa) && (*pc > *pb) && (*pb > *pa))
{
printf("由大到小为: %d %d %d\n", *pc, *pb, *pa);
}
return 0;
}
2.将一个3✖3的整型二维数组转置,用一函数实现。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void transposition(int* pt, int row)
{
int i, j, temp;
for (i = 0; i < row; i++)
{
for(j = 0; j < row; ++j)
{
if (i < j)
{
temp = *(pt + i * row + j); //temp = pt[i][j]
*(pt + i * row + j) = *(pt + j * row + i); // pt[i][j] = pt[j][i]
*(pt + j * row + i) = temp; //pt[j][i] = temp;
}
}
}
}
int main(int argc, char *argv[]) {
int i, j;
int m[3][3] = {1,3,5,7,9,11,13,15,19};
transposition(&m[0][0], 3);
printf("转置后的数组为:\n");
for (i = 0; i < 3; i++)
{
for(j = 0; j < 3; ++j)
{
printf("%d\t", m[i][j]);
if (j == 2)
{
printf("\n");
}
}
}
return 0;
}
3.将n个数按输入时顺序的逆序排列,用函数实现。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void invert(int *p)
{
int i;
for (i = 0; i < 5; ++i)
{
swap(p + i, p + 9 - i);
}
}
int main(int argc, char *argv[]) {
int i;
int a[] = {1,2,3,4,5,6,7,8,9,10};
invert(a);
printf("颠倒后:");
for(i = 0; i < 10; ++i)
{
printf("%d\t", *(a+i));
}
return 0;
}
4写一函数,求以字符串的长度,在main函数中输入字符串,并输出其长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int str_len(char* str)
{
int count = 0;
while(*str++ != '\0')
{
++count;
}
return count;
}
int main(int argc, char *argv[]) {
char str[100];
printf("输入字符串:");
scanf("%s", str);
printf("长度为:%d\n", str_len(str));
return 0;
}