教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 求职职场 >

C语言经典例题大全

来源:网络收集 时间:2026-09-02
导读: C语言竞赛题目大全 问题: 假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值

C语言竞赛题目大全

问题:

假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。 输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:

Sample Input 12345678,0,3 输出:

1234567c 解题思路:

很简单的位操作,但是需要注意的是Y那里是 110,不能直接或上110,而是先两次SET,在CLR。 答案:

#include <stdio.h>

#define CLR(r, x) r &= ~(1UL << x) //1UL 表示32位无符号数,将r的x位清零。 #define SET(r, y) r |= (1UL << y) //表示将r的y位置零 int main() {

int r, x, y;

scanf("%x,%d,%d", &r, &x, &y);

CLR(r,x); //清除x位 SET(r,y); //置位y位 SET(r,y-1); //置位y-1位 CLR(r,y-2); //置位y-2位

printf("%x", r); return 0; } 第1题

破译密码

问题:

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M 原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

(注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)

输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:

1. 起始行:START

2. 密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息. 3. 结束行:END

在最后一个数据集之后,是另一行:ENDOFINPUT。 输出:

每个数据集对应一行,是凯撒的原始消息。

Sample Input START

NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START

N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END START

IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END

ENDOFINPUT Sample Output

IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES

I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

解题思路

凯撒编码,判断字符是否是字母,并循环-5即可,记得要循环哦,非常简单的题目哦 答案:

#include <stdio.h> #include <string.h> #include <ctype.h> #define N 202

char str[N]={0};

int main() {

char *p;

gets(str);

while( strcmp(str, "ENDOFINPUT") != 0 ) //当没遇到消息集的结尾时 {

if ( (strcmp(str, "START") !=0) //当消息不是开始 &&(strcmp(str, "END") != 0) ) //消息不是结尾 {

for(p=str; *p !='\0'; p++) //对输入的串进行解密

{

if( isupper(*p) ) //判断是否为大写字符

*p += *p-5 <'A' ? 26-5: -5; //进行转换,考虑边界问题! }

puts(str); }

gets(str); }

return 0; }

//输出字符 //接受下一行

第2题 小孩报数问题

有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。或者是求最后出圈人的编号等等类似问题。

输入:第一行输入小孩的人数N(N<=64),接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用逗号","间隔

输出:按人名输出小孩按顺序出列的顺序,每行输出一个人名

Sample Input 5

Xiaoming Xiaohua Xiaowang Zhangsan Lisi 2,3

Sample Output Zhangsan

Xiaohua Xiaoming Xiaowang Lisi

解题思路:(暂空) 第3题

方阵填数

答案:

#include <iostream> using namespace std; int a[10][10]; void Fun(int n) {

int m = 1,j,i;

for(i = 0; i < n/2; i++) {

for(j = 0; j < n-i; j++) {

if(a[i][j] == 0) a[i][j] = m++; }

for(j = i+1; j < n-i; j++) {

if(a[j][n-1-i] == 0) a[j][n-1-i] = m++; }

for(j = n-i-1; j > i; j--) {

if(a[n-i-1][j] == 0) a[n-i-1][j] = m++; }

for(j = n-i-1; j > i; j--) {

if(a[j][i] == 0) 第4题 1. 2. 第五套

a[j][i] = m++; }

}

if(n%2==1)

a[n/2][n/2] = m; }

void main() {

int n, i, j; cin>>n;

for(int i = 0; i < n; i++) {

for(int j = 0; j < n; j++) a[i][j] = 0; }

Fun(n);

for(i = 0; i < n; i++) {

for(int j = 0; j < n; j++) {

cout << a[i][j] << " "; }

cout <<endl; } }

编写一个程序,让它有以下功能:从键盘上输入一个五位数,对此整数中的五个数值进行从大到小排序,形成一个新的五位数,输出这个整数。

输入年、月、日,输出该日期是该年的第几天。

3. 4. 5. 6.

将学生的学号和成绩存储在数组中,利用循环计算出数组中存储学生的平均成绩,找出高于平均分的学生信息并输出。 输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。 用指针实现:任意输入20个数,将它们按照从大到小的顺序输出。

编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。

进制转换问题

第5题

1. 问题描述

实现将N进制到M进制数的转换(1 < N,M <= 36)。对于11到36进制数,其基数使用从A到Z的英文字母(全部为大写)代替。例如对于11进制,其基数10(十进制)使用"A"表示;对于36进制,其基数35(十进制)使用"Z"表示。被转换的数全部为正数且小于2147483647(long型的最大值)。下表为十进制数100对应的各进制数:

2. 要求:

(1).实现10进制数到M进制数的转换。(2).程序具有较强的容错能力(例如对错误的输入数字串的处理)。(3). N进制到M

进制数(1 < N,M < 36)的转换(扩展要求,选做)。

3. 输入:

输入文件名为convert.in,文件内容 …… 此处隐藏:3187字,全部文档内容请下载后查看。喜欢就下载吧 ……

C语言经典例题大全.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/121147.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)