《C语言程序设计_现代方法 第2版》课后编程部分习题 第八章

挑选几个喜欢的程序以备日后回顾

  • 编写程序,显示哪些数字有重复
#include <stdio.h>
#include <stdbool.h>
#define N 10
int main(void){
	bool digit_in[N]={false};
	int digit_out[N]={0};
	int digit=0,i=0;
	long n=0;
	printf("enter a number : ");
	scanf("%ld",&n);
	while(n>0){
		digit=n%10;
		if(digit_in[digit]){
			digit_out[digit]=digit;
		}
		digit_in[digit]=true;
		n=n/10;
	}
	printf("repeated digits ");
	for(i=0;i<10;i++){
		if(digit_out[i]){
			printf("%d ",digit_out[i]);
			continue;
		}
	}
	return 0;
} 
  • 编写程序,打印出一份列表,显示出每个数字在数中出现的次数
#include <stdio.h>
#define N 10
int main(void){
	long n=0;
	int i=0,j=0,digit=0;
	int digit_out[N]={0};
	printf("enter a number");
	scanf("%d",&n);
	while(n>0){
		digit=n%10;
		digit_out[digit]++;
		n=n/10;
	}
	printf("digit : \t");
	for(i=0;i<10;i++){
		printf("\t%d",i);
	}
	printf("\noccurrences : \t");
	for(j=0;j<10;j++){
		printf("\t%d",digit_out[j]);
	}
	return 0;
}
  • 编写程序,使用户可以录入多个数进行重复数字的判断,当小于0时停止
#include <stdio.h>
#define N 10
int main(void){
	long number[N]={0};
	int digit_out[N]={0};
	int i=0,digit=0,m=0,j=0;
	long n=0;
	do{
		printf("enter a number : ");
		scanf("%d",&n);
		if(n<=0){
			break;
		}
		number[i]=n;
		i++;
	}while(1);
	for(m=0;m<10;m++){
		while(number[m]>0){
			digit=number[m]%10;
			digit_out[digit]++;
			number[m]/=10;
		}
	}
	printf("digit : \t");
	for(i=0;i<10;i++){
		printf("\t%d",i);
	}
	printf("\noccurrences : \t");
	for(j=0;j<10;j++){
		printf("\t%d",digit_out[j]);
	}
	return 0;
}
  • 编写程序,利用表达式sizeof(a)/sizeof(a[0])来计算数组长度
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define SIZE (int)(sizeof(a)/sizeof(a[0]))
int main (void){
	int a[N]={0},i=0;
	printf("Enter %d numbers: ",N);
	for(i=0;i<SIZE;i++){
		scanf("%d",&a[i]);
	}
	printf("In reverse order: ");
	for(i=SIZE-1;i>=0;i--){
		printf(" %d",a[i]);
	}
	printf("\n");
	return 0;
}
  • 编写程序,可以读取用户录入的信息并翻译成B1FF的表达格式
#include <stdio.h>
#include <ctype.h>
#define N 100
int main(void){
	int i=0,j=0;
	char ch;
	char ch_in[N],ch_out[N];
	printf("enter message : ");
	
	while(1){
		ch=getchar();
		if(ch!='\n'){
			ch_in[i]=ch;
			i++;
		}
		if(ch=='\n'){
			break;
		}
	}
		for(j=0;j<=i;j++){
			ch_out[j]=toupper(ch_in[j]);
			switch(ch_out[j]){
				case 'A' : ch_out[j]='4'; break;
				case 'B' : ch_out[j]='8'; break;
				case 'E' : ch_out[j]='3'; break;
				case 'I' : ch_out[j]='1'; break;
				case 'O' : ch_out[j]='0'; break;
				case 'S' : ch_out[j]='5'; break;
			}
			printf("%c",ch_out[j]);
		}
	printf("!!!!!!!!!!");
	return 0;		
}
  • 编写程序,读取5×5的整数数组,然后显示每行与每列的和
#include <stdio.h>
#define N 5
int main(void){
	int i=0,j=0,row=0,m=0,n=0,sum=0;
	int number[N][N];
	for(i=0;i<5;i++){
		row=i+1;
		printf("enter row %d : ",row);
		for(j=0;j<5;j++){
			scanf("%d",&number[i][j]);
		}
	}
	printf("row totals : \t");
	for(m=0;m<5;m++){
		sum=0;
		for(n=0;n<5;n++){
			sum=sum+number[m][n];
		}
		printf("%d\t",sum);
	}
	printf("\n");
	printf("column totals : \t");
	for(n=0;n<5;n++){
		sum=0;
		for(m=0;m<5;m++){
			sum=sum+number[m][n];
		}
		printf("%d\t",sum);
	}
	
	return 0;
}
  • 编写程序,生成10×10的“随机步法”
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
//0 up 1 left 2 down 3 right
int main(void){
	char letter=65;
	int ti=0,m=0,n=0,i=0,row=0,column=0,a=0,b=0;
	srand((unsigned) time(NULL));
	char ch[N][N];
	for (a = 0; a < N; a++) {
		for (b = 0; b < N; b++) {
			ch[a][b] = '.';
		}
	}
//	ch[0][0]=letter;
	while(i!=26){
		ti=rand()%4;
		switch(ti){
			case 0 : {
				if(ch[m-1][n]=='.'&&m-1>=0){
					m--;
					ch[m][n]=letter+i;
					i++;
				}
				continue;
			 } 
			case 1 :{
				if(ch[m][n-1]='.'&&n-1>=0){
					n--;
					ch[m][n]=letter+i;
					i++;
				}
				continue;
			} 
			case 2 : {
				if(ch[m+1][n]=='.'&&m+1>=0){
					m++;
					ch[m][n]=letter+i;
					i++;
				}
				continue;
			}
			case 3 : {
			if(ch[m][n+1]=='.'&&n+1>=0){
				n++;
				ch[m][n]=letter+i;
				i++;
				}
			continue; 
			}	
		}
	}
	i=0;
	for(row=0;row<10;row++){
		for(column=0;column<10;column++,i++){
			if(i%10==0){
				printf("\n");
			}
			printf("%c",ch[row][column]);
		}
	}
	return 0;
}

  • 编写程序,将电话号码中的字母翻译成数字
#include <stdio.h>
int main(void){
	int ch,i=0,j=0;
	char c[15];
	printf ("enter phone number: "); 
	while ((ch = getchar ()) != '\n') { 
		if (ch <= 'Z'&&ch >= 'A') {
			switch (ch) {
				case 65: case 66: case 67:
					c[i] = '2';
					break;
				case 68: case 69: case 70:
					c[i] = '3';
					break;
				case 71: case 72: case 73:
					c[i] = '4';
					break;
				case 74: case 75: case 76:
					c[i] = '5';
					break;
				case 77: case 78: case 79: 
					c[i] = '6';
					break;
				case 81: case 82: case 83: case 80:
					c[i] = '7';
					break;
				case 84: case 85: case 86: case 87:
				 	c[i] = '8';
					break;
				case 88: case 89: case 90:
					c[i] = '9';
					break; 
			}
			i++;
			continue;
		}
		
		c[i] = ch;
		i++;
	}
	
	printf("in numeric form : "); 
	for (j = 0; j < i; j++) {
		printf("%c", c[j]);
	}
	
	return 0;
}
  • 编写程序,录入姓名后按照固定格式输出
#include <stdio.h>
int main(void){
	char a[20];
	char ch1, ch2;
	int i=0,j=0;
	printf ("enter a first and last name: ");
	scanf ("%c", &ch1); 
	while ((ch2 = getchar()) != '\n') {
		a[i] = ch2;
		i++;
	}
	printf("you enered the name: ");
	for (j = 1;j < i;j++) {
		printf("%c", a[j]);
	} 
	printf(", %c.", ch1);
	return 0;
 } 
  • 编写程序,能进行凯撒加密和解密
#include <stdio.h>
#define N 80
int main(void){
	char sen[N], sen1[N];
	int n=0,i=0,j=0;
	printf("enter message to be encrypted : ");
	for (i=0; ;i++) {               
		sen[i] = getchar();
		if (sen[i] == '\n') break;
	} 
	printf("enter shift amout (1~25) : ");
	scanf("%d",&n);
	printf("encrypted message : ");
	for (j=0;j<i+1;j++){
		if (sen[j] <= 'z' && sen[j] >= 'a') {
			printf("%c", ((sen[j] - 'a') + n) % 26 + 'a');
		} else if (sen[j] <= 'Z' && sen[j] >= 'A') {
			printf("%c", ((sen[j] - 'A') + n) % 26 + 'A');
		} else {
			printf("%c", sen[j]);
		}
	}
	return 0;
 } 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值