C语言例题

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;
}

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值